2 * Copyright (C) 2008 Apple Inc. All Rights Reserved.
3 * Copyright (C) 2009 Jan Michael Alonzo
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
14 * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
15 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
18 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
20 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
21 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
22 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
24 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 #include "AccessibilityUIElement.h"
30 #include <JavaScriptCore/JSStringRef.h>
31 #include <wtf/Assertions.h>
37 AccessibilityUIElement::AccessibilityUIElement(PlatformUIElement element)
42 AccessibilityUIElement::AccessibilityUIElement(const AccessibilityUIElement& other)
43 : m_element(other.m_element)
47 AccessibilityUIElement::~AccessibilityUIElement()
51 void AccessibilityUIElement::getLinkedUIElements(Vector<AccessibilityUIElement>& elements)
56 void AccessibilityUIElement::getDocumentLinks(Vector<AccessibilityUIElement>&)
61 void AccessibilityUIElement::getChildren(Vector<AccessibilityUIElement>& children)
63 int count = childrenCount();
64 for (int i = 0; i < count; i++) {
65 AtkObject* child = atk_object_ref_accessible_child(ATK_OBJECT(m_element), i);
66 children.append(AccessibilityUIElement(child));
70 void AccessibilityUIElement::getChildrenWithRange(Vector<AccessibilityUIElement>& elementVector, unsigned start, unsigned end)
72 for (unsigned i = start; i < end; i++) {
73 AtkObject* child = atk_object_ref_accessible_child(ATK_OBJECT(m_element), i);
74 elementVector.append(AccessibilityUIElement(child));
78 int AccessibilityUIElement::childrenCount()
83 ASSERT(ATK_IS_OBJECT(m_element));
85 return atk_object_get_n_accessible_children(ATK_OBJECT(m_element));
88 AccessibilityUIElement AccessibilityUIElement::elementAtPoint(int x, int y)
94 AccessibilityUIElement AccessibilityUIElement::getChildAtIndex(unsigned index)
96 Vector<AccessibilityUIElement> children;
97 getChildrenWithRange(children, index, index + 1);
99 if (children.size() == 1)
100 return children.at(0);
105 JSStringRef AccessibilityUIElement::allAttributes()
108 return JSStringCreateWithCharacters(0, 0);
111 JSStringRef AccessibilityUIElement::attributesOfLinkedUIElements()
114 return JSStringCreateWithCharacters(0, 0);
117 JSStringRef AccessibilityUIElement::attributesOfDocumentLinks()
120 return JSStringCreateWithCharacters(0, 0);
123 AccessibilityUIElement AccessibilityUIElement::titleUIElement()
129 AccessibilityUIElement AccessibilityUIElement::parentElement()
132 AtkObject* parent = atk_object_get_parent(ATK_OBJECT(m_element));
134 return parent ? AccessibilityUIElement(parent) : 0;
137 JSStringRef AccessibilityUIElement::attributesOfChildren()
140 return JSStringCreateWithCharacters(0, 0);
143 JSStringRef AccessibilityUIElement::parameterizedAttributeNames()
146 return JSStringCreateWithCharacters(0, 0);
149 JSStringRef AccessibilityUIElement::role()
151 AtkRole role = atk_object_get_role(ATK_OBJECT(m_element));
154 return JSStringCreateWithCharacters(0, 0);
156 return JSStringCreateWithUTF8CString(atk_role_get_name(role));
159 JSStringRef AccessibilityUIElement::subrole()
164 JSStringRef AccessibilityUIElement::title()
166 const gchar* name = atk_object_get_name(ATK_OBJECT(m_element));
169 return JSStringCreateWithCharacters(0, 0);
171 return JSStringCreateWithUTF8CString(name);
174 JSStringRef AccessibilityUIElement::description()
176 const gchar* description = atk_object_get_description(ATK_OBJECT(m_element));
179 return JSStringCreateWithCharacters(0, 0);
181 return JSStringCreateWithUTF8CString(description);
184 JSStringRef AccessibilityUIElement::stringValue()
187 return JSStringCreateWithCharacters(0, 0);
190 JSStringRef AccessibilityUIElement::language()
193 return JSStringCreateWithCharacters(0, 0);
196 double AccessibilityUIElement::x()
200 atk_component_get_position(ATK_COMPONENT(m_element), &x, &y, ATK_XY_SCREEN);
205 double AccessibilityUIElement::y()
209 atk_component_get_position(ATK_COMPONENT(m_element), &x, &y, ATK_XY_SCREEN);
214 double AccessibilityUIElement::width()
218 atk_component_get_size(ATK_COMPONENT(m_element), &width, &height);
223 double AccessibilityUIElement::height()
227 atk_component_get_size(ATK_COMPONENT(m_element), &width, &height);
232 double AccessibilityUIElement::clickPointX()
237 double AccessibilityUIElement::clickPointY()
243 double AccessibilityUIElement::intValue()
245 GValue value = { 0, { { 0 } } };
247 if (!ATK_IS_VALUE(m_element))
250 atk_value_get_current_value(ATK_VALUE(m_element), &value);
252 if (G_VALUE_HOLDS_DOUBLE(&value))
253 return g_value_get_double(&value);
254 else if (G_VALUE_HOLDS_INT(&value))
255 return static_cast<double>(g_value_get_int(&value));
260 double AccessibilityUIElement::minValue()
262 GValue value = { 0, { { 0 } } };
264 if (!ATK_IS_VALUE(m_element))
267 atk_value_get_minimum_value(ATK_VALUE(m_element), &value);
269 if (G_VALUE_HOLDS_DOUBLE(&value))
270 return g_value_get_double(&value);
271 else if (G_VALUE_HOLDS_INT(&value))
272 return static_cast<double>(g_value_get_int(&value));
277 double AccessibilityUIElement::maxValue()
279 GValue value = { 0, { { 0 } } };
281 if (!ATK_IS_VALUE(m_element))
284 atk_value_get_maximum_value(ATK_VALUE(m_element), &value);
286 if (G_VALUE_HOLDS_DOUBLE(&value))
287 return g_value_get_double(&value);
288 else if (G_VALUE_HOLDS_INT(&value))
289 return static_cast<double>(g_value_get_int(&value));
294 JSStringRef AccessibilityUIElement::valueDescription()
297 return JSStringCreateWithCharacters(0, 0);
300 bool AccessibilityUIElement::isEnabled()
307 int AccessibilityUIElement::insertionPointLineNumber()
313 bool AccessibilityUIElement::isActionSupported(JSStringRef action)
319 bool AccessibilityUIElement::isRequired() const
325 bool AccessibilityUIElement::isSelected() const
331 int AccessibilityUIElement::hierarchicalLevel() const
337 bool AccessibilityUIElement::isExpanded() const
343 JSStringRef AccessibilityUIElement::attributesOfColumnHeaders()
346 return JSStringCreateWithCharacters(0, 0);
349 JSStringRef AccessibilityUIElement::attributesOfRowHeaders()
352 return JSStringCreateWithCharacters(0, 0);
355 JSStringRef AccessibilityUIElement::attributesOfColumns()
358 return JSStringCreateWithCharacters(0, 0);
361 JSStringRef AccessibilityUIElement::attributesOfRows()
364 return JSStringCreateWithCharacters(0, 0);
367 JSStringRef AccessibilityUIElement::attributesOfVisibleCells()
370 return JSStringCreateWithCharacters(0, 0);
373 JSStringRef AccessibilityUIElement::attributesOfHeader()
376 return JSStringCreateWithCharacters(0, 0);
379 int AccessibilityUIElement::indexInTable()
385 JSStringRef AccessibilityUIElement::rowIndexRange()
388 return JSStringCreateWithCharacters(0, 0);
391 JSStringRef AccessibilityUIElement::columnIndexRange()
394 return JSStringCreateWithCharacters(0, 0);
397 int AccessibilityUIElement::lineForIndex(int)
403 JSStringRef AccessibilityUIElement::boundsForRange(unsigned location, unsigned length)
406 return JSStringCreateWithCharacters(0, 0);
409 JSStringRef AccessibilityUIElement::stringForRange(unsigned, unsigned)
412 return JSStringCreateWithCharacters(0, 0);
415 AccessibilityUIElement AccessibilityUIElement::cellForColumnAndRow(unsigned column, unsigned row)
421 JSStringRef AccessibilityUIElement::selectedTextRange()
424 return JSStringCreateWithCharacters(0, 0);
427 void AccessibilityUIElement::setSelectedTextRange(unsigned location, unsigned length)
432 JSStringRef AccessibilityUIElement::attributeValue(JSStringRef attribute)
435 return JSStringCreateWithCharacters(0, 0);
438 bool AccessibilityUIElement::isAttributeSettable(JSStringRef attribute)
444 void AccessibilityUIElement::increment()
449 void AccessibilityUIElement::decrement()
454 void AccessibilityUIElement::showMenu()
459 AccessibilityUIElement AccessibilityUIElement::disclosedRowAtIndex(unsigned index)
464 AccessibilityUIElement AccessibilityUIElement::selectedRowAtIndex(unsigned index)
469 AccessibilityUIElement AccessibilityUIElement::disclosedByRow()
474 JSStringRef AccessibilityUIElement::accessibilityValue() const
477 return JSStringCreateWithCharacters(0, 0);