/* * Copyright (C) 2008 Apple Inc. All Rights Reserved. * Copyright (C) 2009 Jan Michael Alonzo * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "config.h" #include "AccessibilityUIElement.h" #include #include #include #include AccessibilityUIElement::AccessibilityUIElement(PlatformUIElement element) : m_element(element) { } AccessibilityUIElement::AccessibilityUIElement(const AccessibilityUIElement& other) : m_element(other.m_element) { } AccessibilityUIElement::~AccessibilityUIElement() { } void AccessibilityUIElement::getLinkedUIElements(Vector& elements) { // FIXME: implement } void AccessibilityUIElement::getDocumentLinks(Vector&) { // FIXME: implement } void AccessibilityUIElement::getChildren(Vector& children) { int count = childrenCount(); for (int i = 0; i < count; i++) { AtkObject* child = atk_object_ref_accessible_child(ATK_OBJECT(m_element), i); children.append(AccessibilityUIElement(child)); } } void AccessibilityUIElement::getChildrenWithRange(Vector& elementVector, unsigned start, unsigned end) { for (unsigned i = start; i < end; i++) { AtkObject* child = atk_object_ref_accessible_child(ATK_OBJECT(m_element), i); elementVector.append(AccessibilityUIElement(child)); } } int AccessibilityUIElement::childrenCount() { if (!m_element) return 0; ASSERT(ATK_IS_OBJECT(m_element)); return atk_object_get_n_accessible_children(ATK_OBJECT(m_element)); } AccessibilityUIElement AccessibilityUIElement::elementAtPoint(int x, int y) { // FIXME: implement return 0; } AccessibilityUIElement AccessibilityUIElement::getChildAtIndex(unsigned index) { Vector children; getChildrenWithRange(children, index, index + 1); if (children.size() == 1) return children.at(0); return 0; } JSStringRef AccessibilityUIElement::allAttributes() { // FIXME: implement return JSStringCreateWithCharacters(0, 0); } JSStringRef AccessibilityUIElement::attributesOfLinkedUIElements() { // FIXME: implement return JSStringCreateWithCharacters(0, 0); } JSStringRef AccessibilityUIElement::attributesOfDocumentLinks() { // FIXME: implement return JSStringCreateWithCharacters(0, 0); } AccessibilityUIElement AccessibilityUIElement::titleUIElement() { // FIXME: implement return 0; } AccessibilityUIElement AccessibilityUIElement::parentElement() { ASSERT(m_element); AtkObject* parent = atk_object_get_parent(ATK_OBJECT(m_element)); return parent ? AccessibilityUIElement(parent) : 0; } JSStringRef AccessibilityUIElement::attributesOfChildren() { // FIXME: implement return JSStringCreateWithCharacters(0, 0); } JSStringRef AccessibilityUIElement::parameterizedAttributeNames() { // FIXME: implement return JSStringCreateWithCharacters(0, 0); } JSStringRef AccessibilityUIElement::role() { AtkRole role = atk_object_get_role(ATK_OBJECT(m_element)); if (!role) return JSStringCreateWithCharacters(0, 0); return JSStringCreateWithUTF8CString(atk_role_get_name(role)); } JSStringRef AccessibilityUIElement::subrole() { return 0; } JSStringRef AccessibilityUIElement::title() { const gchar* name = atk_object_get_name(ATK_OBJECT(m_element)); if (!name) return JSStringCreateWithCharacters(0, 0); return JSStringCreateWithUTF8CString(name); } JSStringRef AccessibilityUIElement::description() { const gchar* description = atk_object_get_description(ATK_OBJECT(m_element)); if (!description) return JSStringCreateWithCharacters(0, 0); return JSStringCreateWithUTF8CString(description); } JSStringRef AccessibilityUIElement::language() { // FIXME: implement return JSStringCreateWithCharacters(0, 0); } double AccessibilityUIElement::x() { int x, y; atk_component_get_position(ATK_COMPONENT(m_element), &x, &y, ATK_XY_SCREEN); return x; } double AccessibilityUIElement::y() { int x, y; atk_component_get_position(ATK_COMPONENT(m_element), &x, &y, ATK_XY_SCREEN); return y; } double AccessibilityUIElement::width() { int width, height; atk_component_get_size(ATK_COMPONENT(m_element), &width, &height); return width; } double AccessibilityUIElement::height() { int width, height; atk_component_get_size(ATK_COMPONENT(m_element), &width, &height); return height; } double AccessibilityUIElement::clickPointX() { return 0.f; } double AccessibilityUIElement::clickPointY() { return 0.f; } double AccessibilityUIElement::intValue() { GValue value = { 0, { { 0 } } }; if (!ATK_IS_VALUE(m_element)) return 0.0f; atk_value_get_current_value(ATK_VALUE(m_element), &value); if (G_VALUE_HOLDS_DOUBLE(&value)) return g_value_get_double(&value); else if (G_VALUE_HOLDS_INT(&value)) return static_cast(g_value_get_int(&value)); else return 0.0f; } double AccessibilityUIElement::minValue() { GValue value = { 0, { { 0 } } }; if (!ATK_IS_VALUE(m_element)) return 0.0f; atk_value_get_minimum_value(ATK_VALUE(m_element), &value); if (G_VALUE_HOLDS_DOUBLE(&value)) return g_value_get_double(&value); else if (G_VALUE_HOLDS_INT(&value)) return static_cast(g_value_get_int(&value)); else return 0.0f; } double AccessibilityUIElement::maxValue() { GValue value = { 0, { { 0 } } }; if (!ATK_IS_VALUE(m_element)) return 0.0f; atk_value_get_maximum_value(ATK_VALUE(m_element), &value); if (G_VALUE_HOLDS_DOUBLE(&value)) return g_value_get_double(&value); else if (G_VALUE_HOLDS_INT(&value)) return static_cast(g_value_get_int(&value)); else return 0.0f; } JSStringRef AccessibilityUIElement::valueDescription() { // FIXME: implement return JSStringCreateWithCharacters(0, 0); } bool AccessibilityUIElement::isEnabled() { // FIXME: implement return false; } int AccessibilityUIElement::insertionPointLineNumber() { // FIXME: implement return 0; } bool AccessibilityUIElement::isActionSupported(JSStringRef action) { // FIXME: implement return false; } bool AccessibilityUIElement::isRequired() const { // FIXME: implement return false; } JSStringRef AccessibilityUIElement::attributesOfColumnHeaders() { // FIXME: implement return JSStringCreateWithCharacters(0, 0); } JSStringRef AccessibilityUIElement::attributesOfRowHeaders() { // FIXME: implement return JSStringCreateWithCharacters(0, 0); } JSStringRef AccessibilityUIElement::attributesOfColumns() { // FIXME: implement return JSStringCreateWithCharacters(0, 0); } JSStringRef AccessibilityUIElement::attributesOfRows() { // FIXME: implement return JSStringCreateWithCharacters(0, 0); } JSStringRef AccessibilityUIElement::attributesOfVisibleCells() { // FIXME: implement return JSStringCreateWithCharacters(0, 0); } JSStringRef AccessibilityUIElement::attributesOfHeader() { // FIXME: implement return JSStringCreateWithCharacters(0, 0); } int AccessibilityUIElement::indexInTable() { // FIXME: implement return 0; } JSStringRef AccessibilityUIElement::rowIndexRange() { // FIXME: implement return JSStringCreateWithCharacters(0, 0); } JSStringRef AccessibilityUIElement::columnIndexRange() { // FIXME: implement return JSStringCreateWithCharacters(0, 0); } int AccessibilityUIElement::lineForIndex(int) { // FIXME: implement return 0; } JSStringRef AccessibilityUIElement::boundsForRange(unsigned location, unsigned length) { // FIXME: implement return JSStringCreateWithCharacters(0, 0); } JSStringRef AccessibilityUIElement::stringForRange(unsigned, unsigned) { // FIXME: implement return JSStringCreateWithCharacters(0, 0); } AccessibilityUIElement AccessibilityUIElement::cellForColumnAndRow(unsigned column, unsigned row) { // FIXME: implement return 0; } JSStringRef AccessibilityUIElement::selectedTextRange() { // FIXME: implement return JSStringCreateWithCharacters(0, 0); } void AccessibilityUIElement::setSelectedTextRange(unsigned location, unsigned length) { // FIXME: implement } JSStringRef AccessibilityUIElement::attributeValue(JSStringRef attribute) { // FIXME: implement return JSStringCreateWithCharacters(0, 0); } bool AccessibilityUIElement::isAttributeSettable(JSStringRef attribute) { // FIXME: implement return false; } void AccessibilityUIElement::increment() { // FIXME: implement } void AccessibilityUIElement::decrement() { // FIXME: implement }