/* * Copyright (C) 2011 Apple Inc. All Rights Reserved. * * 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. */ #ifndef AccessibilityUIElement_h #define AccessibilityUIElement_h #include "AccessibilityTextMarker.h" #include "AccessibilityTextMarkerRange.h" #include "JSWrappable.h" #include #include #include #include #if PLATFORM(COCOA) #ifdef __OBJC__ typedef id PlatformUIElement; #else typedef struct objc_object* PlatformUIElement; #endif #elif HAVE(ACCESSIBILITY) && (PLATFORM(GTK) || PLATFORM(EFL)) #include "AccessibilityNotificationHandlerAtk.h" #include #include typedef GRefPtr PlatformUIElement; #else typedef void* PlatformUIElement; #endif #if PLATFORM(COCOA) #ifdef __OBJC__ typedef id NotificationHandler; #else typedef struct objc_object* NotificationHandler; #endif #endif namespace WTR { class AccessibilityUIElement : public JSWrappable { public: static PassRefPtr create(PlatformUIElement); static PassRefPtr create(const AccessibilityUIElement&); ~AccessibilityUIElement(); PlatformUIElement platformUIElement() { return m_element; } virtual JSClassRef wrapperClass(); static JSObjectRef makeJSAccessibilityUIElement(JSContextRef, const AccessibilityUIElement&); bool isEqual(AccessibilityUIElement* otherElement); PassRefPtr elementAtPoint(int x, int y); PassRefPtr childAtIndex(unsigned); unsigned indexOfChild(AccessibilityUIElement*); int childrenCount(); PassRefPtr titleUIElement(); PassRefPtr parentElement(); void takeFocus(); void takeSelection(); void addSelection(); void removeSelection(); // Methods - platform-independent implementations JSRetainPtr allAttributes(); JSRetainPtr attributesOfLinkedUIElements(); PassRefPtr linkedUIElementAtIndex(unsigned); JSRetainPtr attributesOfDocumentLinks(); JSRetainPtr attributesOfChildren(); JSRetainPtr parameterizedAttributeNames(); void increment(); void decrement(); void showMenu(); void press(); // Attributes - platform-independent implementations JSRetainPtr stringAttributeValue(JSStringRef attribute); double numberAttributeValue(JSStringRef attribute); JSValueRef uiElementArrayAttributeValue(JSStringRef attribute) const; PassRefPtr uiElementAttributeValue(JSStringRef attribute) const; bool boolAttributeValue(JSStringRef attribute); void setBoolAttributeValue(JSStringRef attribute, bool value); bool isAttributeSupported(JSStringRef attribute); bool isAttributeSettable(JSStringRef attribute); bool isPressActionSupported(); bool isIncrementActionSupported(); bool isDecrementActionSupported(); JSRetainPtr role(); JSRetainPtr subrole(); JSRetainPtr roleDescription(); JSRetainPtr computedRoleString(); JSRetainPtr title(); JSRetainPtr description(); JSRetainPtr language(); JSRetainPtr stringValue(); JSRetainPtr accessibilityValue() const; JSRetainPtr helpText() const; JSRetainPtr orientation() const; double x(); double y(); double width(); double height(); double intValue() const; double minValue(); double maxValue(); JSRetainPtr valueDescription(); int insertionPointLineNumber(); JSRetainPtr selectedTextRange(); bool isEnabled(); bool isRequired() const; bool isFocused() const; bool isFocusable() const; bool isSelected() const; bool isSelectedOptionActive() const; bool isSelectable() const; bool isMultiSelectable() const; void setSelectedChild(AccessibilityUIElement*) const; void setSelectedChildAtIndex(unsigned) const; void removeSelectionAtIndex(unsigned) const; unsigned selectedChildrenCount() const; PassRefPtr selectedChildAtIndex(unsigned) const; bool isValid() const; bool isExpanded() const; bool isChecked() const; bool isIndeterminate() const; bool isVisible() const; bool isOffScreen() const; bool isCollapsed() const; bool isIgnored() const; bool hasPopup() const; int hierarchicalLevel() const; double clickPointX(); double clickPointY(); JSRetainPtr documentEncoding(); JSRetainPtr documentURI(); JSRetainPtr url(); JSRetainPtr classList() const; // CSS3-speech properties. JSRetainPtr speak(); // Table-specific attributes JSRetainPtr attributesOfColumnHeaders(); JSRetainPtr attributesOfRowHeaders(); JSRetainPtr attributesOfColumns(); JSRetainPtr attributesOfRows(); JSRetainPtr attributesOfVisibleCells(); JSRetainPtr attributesOfHeader(); int indexInTable(); JSRetainPtr rowIndexRange(); JSRetainPtr columnIndexRange(); int rowCount(); int columnCount(); JSValueRef rowHeaders() const; JSValueRef columnHeaders() const; // Tree/Outline specific attributes PassRefPtr selectedRowAtIndex(unsigned); PassRefPtr disclosedByRow(); PassRefPtr disclosedRowAtIndex(unsigned); PassRefPtr rowAtIndex(unsigned); // ARIA specific PassRefPtr ariaOwnsElementAtIndex(unsigned); PassRefPtr ariaFlowToElementAtIndex(unsigned); PassRefPtr ariaControlsElementAtIndex(unsigned); // ARIA Drag and Drop bool ariaIsGrabbed() const; // A space concatentated string of all the drop effects. JSRetainPtr ariaDropEffects() const; // Parameterized attributes int lineForIndex(int); JSRetainPtr rangeForLine(int); JSRetainPtr rangeForPosition(int x, int y); JSRetainPtr boundsForRange(unsigned location, unsigned length); bool setSelectedTextRange(unsigned location, unsigned length); JSRetainPtr stringForRange(unsigned location, unsigned length); JSRetainPtr attributedStringForRange(unsigned location, unsigned length); bool attributedStringRangeIsMisspelled(unsigned location, unsigned length); unsigned uiElementCountForSearchPredicate(JSContextRef, AccessibilityUIElement* startElement, bool isDirectionNext, JSValueRef searchKey, JSStringRef searchText, bool visibleOnly, bool immediateDescendantsOnly); PassRefPtr uiElementForSearchPredicate(JSContextRef, AccessibilityUIElement* startElement, bool isDirectionNext, JSValueRef searchKey, JSStringRef searchText, bool visibleOnly, bool immediateDescendantsOnly); JSRetainPtr selectTextWithCriteria(JSContextRef, JSStringRef ambiguityResolution, JSValueRef searchStrings, JSStringRef replacementString, JSStringRef activity); // Text-specific JSRetainPtr characterAtOffset(int offset); JSRetainPtr wordAtOffset(int offset); JSRetainPtr lineAtOffset(int offset); JSRetainPtr sentenceAtOffset(int offset); // Table-specific PassRefPtr cellForColumnAndRow(unsigned column, unsigned row); // Scrollarea-specific PassRefPtr horizontalScrollbar() const; PassRefPtr verticalScrollbar() const; void scrollToMakeVisible(); // Text markers. PassRefPtr lineTextMarkerRangeForTextMarker(AccessibilityTextMarker*); PassRefPtr textMarkerRangeForElement(AccessibilityUIElement*); PassRefPtr textMarkerRangeForMarkers(AccessibilityTextMarker* startMarker, AccessibilityTextMarker* endMarker); PassRefPtr selectedTextMarkerRange(); void resetSelectedTextMarkerRange(); PassRefPtr startTextMarkerForTextMarkerRange(AccessibilityTextMarkerRange*); PassRefPtr endTextMarkerForTextMarkerRange(AccessibilityTextMarkerRange*); PassRefPtr endTextMarkerForBounds(int x, int y, int width, int height); PassRefPtr startTextMarkerForBounds(int x, int y, int width, int height); PassRefPtr textMarkerForPoint(int x, int y); PassRefPtr previousTextMarker(AccessibilityTextMarker*); PassRefPtr nextTextMarker(AccessibilityTextMarker*); PassRefPtr accessibilityElementForTextMarker(AccessibilityTextMarker*); JSRetainPtr stringForTextMarkerRange(AccessibilityTextMarkerRange*); int textMarkerRangeLength(AccessibilityTextMarkerRange*); bool attributedStringForTextMarkerRangeContainsAttribute(JSStringRef, AccessibilityTextMarkerRange*); int indexForTextMarker(AccessibilityTextMarker*); bool isTextMarkerValid(AccessibilityTextMarker*); PassRefPtr textMarkerForIndex(int); PassRefPtr startTextMarker(); PassRefPtr endTextMarker(); bool setSelectedVisibleTextRange(AccessibilityTextMarkerRange*); // Returns an ordered list of supported actions for an element. JSRetainPtr supportedActions() const; JSRetainPtr mathPostscriptsDescription() const; JSRetainPtr mathPrescriptsDescription() const; JSRetainPtr pathDescription() const; // Notifications // Function callback should take one argument, the name of the notification. bool addNotificationListener(JSValueRef functionCallback); // Make sure you call remove, because you can't rely on objects being deallocated in a timely fashion. bool removeNotificationListener(); JSRetainPtr identifier(); JSRetainPtr traits(); int elementTextPosition(); int elementTextLength(); JSRetainPtr stringForSelection(); JSValueRef elementsForRange(unsigned location, unsigned length); void increaseTextSelection(); void decreaseTextSelection(); PassRefPtr linkedElement(); PassRefPtr headerElementAtIndex(unsigned index); void assistiveTechnologySimulatedFocus(); bool scrollPageUp(); bool scrollPageDown(); bool scrollPageLeft(); bool scrollPageRight(); private: AccessibilityUIElement(PlatformUIElement); AccessibilityUIElement(const AccessibilityUIElement&); PlatformUIElement m_element; // A retained, platform specific object used to help manage notifications for this object. #if HAVE(ACCESSIBILITY) #if PLATFORM(COCOA) NotificationHandler m_notificationHandler; void getLinkedUIElements(Vector >&); void getDocumentLinks(Vector >&); void getUIElementsWithAttribute(JSStringRef, Vector >&) const; #endif #if PLATFORM(COCOA) || PLATFORM(GTK) || PLATFORM(EFL) void getChildren(Vector >&); void getChildrenWithRange(Vector >&, unsigned location, unsigned length); #endif #if PLATFORM(GTK) || PLATFORM(EFL) RefPtr m_notificationHandler; #endif #endif }; } // namespace WTR #endif // AccessibilityUIElement_h