2 * Copyright (C) 2008 Apple Inc. All rights reserved.
4 * Redistribution and use in source and binary forms, with or without
5 * 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.
13 * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
14 * its contributors may be used to endorse or promote products derived
15 * from this software without specific prior written permission.
17 * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
18 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
21 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
22 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
24 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 #ifndef AccessibilityObject_h
30 #define AccessibilityObject_h
32 #include "VisiblePosition.h"
33 #include <wtf/Platform.h>
34 #include <wtf/RefPtr.h>
35 #include <wtf/Vector.h>
38 #include <wtf/RetainPtr.h>
40 #include "AccessibilityObjectWrapperWin.h"
44 typedef struct _NSRange NSRange;
47 @class AccessibilityObjectWrapper;
49 @class NSAttributedString;
51 @class NSMutableAttributedString;
55 @class WebCoreTextMarker;
56 @class WebCoreTextMarkerRange;
58 class AccessibilityObjectWrapper;
60 class NSAttributedString;
62 class NSMutableAttributedString;
66 class WebCoreTextMarker;
67 class WebCoreTextMarkerRange;
76 class HTMLAnchorElement;
77 class HTMLAreaElement;
86 enum AccessibilityRole {
114 ProgressIndicatorRole,
132 DisclosureTriangleRole,
135 // AppKit includes SortButtonRole but it is misnamed and really a subrole of ButtonRole so we do not include it here.
137 // WebCore-specific roles
147 struct VisiblePositionRange {
149 VisiblePosition start;
152 VisiblePositionRange() {}
154 VisiblePositionRange(const VisiblePosition& s, const VisiblePosition& e)
159 bool isNull() const { return start.isNull() || end.isNull(); }
162 struct PlainTextRange {
172 PlainTextRange(unsigned s, unsigned l)
177 bool isNull() const { return start == 0 && length == 0; }
180 class AccessibilityObject : public RefCounted<AccessibilityObject> {
182 AccessibilityObject();
184 static PassRefPtr<AccessibilityObject> create();
185 virtual ~AccessibilityObject();
187 virtual bool isAccessibilityRenderObject() const { return false; };
188 virtual bool isAnchor() const { return false; };
189 virtual bool isAttachment() const { return false; };
190 virtual bool isHeading() const { return false; };
191 virtual bool isLink() const { return false; };
192 virtual bool isImage() const { return false; };
193 virtual bool isNativeImage() const { return false; };
194 virtual bool isImageButton() const { return false; };
195 virtual bool isPasswordField() const { return false; };
196 virtual bool isTextControl() const { return false; };
197 virtual bool isNativeTextControl() const { return false; };
198 virtual bool isWebArea() const { return false; };
199 virtual bool isCheckboxOrRadio() const { return false; };
200 virtual bool isListBox() const { return false; };
202 virtual bool isChecked() const { return false; };
203 virtual bool isEnabled() const { return false; };
204 virtual bool isSelected() const { return false; };
205 virtual bool isFocused() const { return false; };
206 virtual bool isHovered() const { return false; };
207 virtual bool isIndeterminate() const { return false; };
208 virtual bool isLoaded() const { return false; };
209 virtual bool isMultiSelect() const { return false; };
210 virtual bool isOffScreen() const { return false; };
211 virtual bool isPressed() const { return false; };
212 virtual bool isReadOnly() const { return false; };
213 virtual bool isVisited() const { return false; };
215 virtual bool canSetFocusAttribute() const { return false; };
216 virtual bool canSetTextRangeAttributes() const { return false; };
217 virtual bool canSetValueAttribute() const { return false; };
219 virtual bool hasIntValue() const { return false; };
221 virtual bool accessibilityShouldUseUniqueId() const { return false; };
222 virtual bool accessibilityIsIgnored() const { return true; };
224 virtual int intValue() const;
225 virtual int layoutCount() const;
226 static bool isARIAControl(AccessibilityRole);
227 static bool isARIAInput(AccessibilityRole);
228 unsigned axObjectID() const;
230 virtual AccessibilityObject* doAccessibilityHitTest(const IntPoint&) const;
231 virtual AccessibilityObject* focusedUIElement() const;
232 virtual AccessibilityObject* firstChild() const;
233 virtual AccessibilityObject* lastChild() const;
234 virtual AccessibilityObject* previousSibling() const;
235 virtual AccessibilityObject* nextSibling() const;
236 virtual AccessibilityObject* parentObject() const;
237 virtual AccessibilityObject* parentObjectUnignored() const;
238 virtual AccessibilityObject* observableObject() const;
239 virtual AccessibilityObject* linkedUIElement() const;
240 virtual AccessibilityRole ariaRoleAttribute() const;
241 virtual AccessibilityRole roleValue() const;
242 virtual AXObjectCache* axObjectCache() const;
244 virtual HTMLAnchorElement* anchorElement() const;
245 virtual Element* actionElement() const;
247 virtual IntRect boundingBoxRect() const;
248 virtual IntRect elementRect() const;
249 virtual IntSize size() const;
251 virtual KURL url() const;
252 virtual PlainTextRange selectedTextRange() const;
253 virtual Selection selection() const;
254 unsigned selectionStart() const;
255 unsigned selectionEnd() const;
256 virtual String stringValue() const;
257 virtual String ariaAccessiblityName(const String&) const;
258 virtual String ariaLabeledByAttribute() const;
259 virtual String title() const;
260 virtual String ariaDescribedByAttribute() const;
261 virtual String accessibilityDescription() const;
262 virtual String helpText() const;
263 virtual String textUnderElement() const;
264 virtual String text() const;
265 virtual int textLength() const;
266 virtual PassRefPtr<Range> ariaSelectedTextDOMRange() const;
267 virtual String selectedText() const;
268 virtual const AtomicString& accessKey() const;
269 const String& actionVerb() const;
270 virtual Widget* widget() const;
271 virtual Widget* widgetForAttachmentView() const;
272 void getDocumentLinks(Vector< RefPtr<AccessibilityObject> >&) const;
273 virtual Document* document() const { return 0; }
274 virtual FrameView* topDocumentFrameView() const { return 0; }
275 virtual FrameView* documentFrameView() const { return 0; }
277 void setAXObjectID(unsigned);
278 virtual void setFocused(bool);
279 virtual void setSelectedText(const String&);
280 virtual void setSelectedTextRange(const PlainTextRange&);
281 virtual void setValue(const String&);
283 virtual void detach();
284 virtual void makeRangeVisible(const PlainTextRange&);
285 virtual bool press() const;
286 bool performDefaultAction() const { return press(); }
288 virtual void childrenChanged();
289 virtual const Vector<RefPtr<AccessibilityObject> >& children() { return m_children; }
290 virtual void addChildren();
291 virtual bool hasChildren() const { return m_haveChildren; };
293 virtual VisiblePositionRange visiblePositionRange() const;
294 virtual VisiblePositionRange doAXTextMarkerRangeForLine(unsigned) const;
296 VisiblePositionRange doAXTextMarkerRangeForUnorderedTextMarkers(const VisiblePosition&, const VisiblePosition&) const;
297 VisiblePositionRange doAXLeftWordTextMarkerRangeForTextMarker(const VisiblePosition&) const;
298 VisiblePositionRange doAXRightWordTextMarkerRangeForTextMarker(const VisiblePosition&) const;
299 VisiblePositionRange doAXLeftLineTextMarkerRangeForTextMarker(const VisiblePosition&) const;
300 VisiblePositionRange doAXRightLineTextMarkerRangeForTextMarker(const VisiblePosition&) const;
301 VisiblePositionRange doAXSentenceTextMarkerRangeForTextMarker(const VisiblePosition&) const;
302 VisiblePositionRange doAXParagraphTextMarkerRangeForTextMarker(const VisiblePosition&) const;
303 VisiblePositionRange doAXStyleTextMarkerRangeForTextMarker(const VisiblePosition&) const;
304 VisiblePositionRange textMarkerRangeForRange(const PlainTextRange&) const;
306 String doAXStringForTextMarkerRange(const VisiblePositionRange&) const;
307 virtual IntRect doAXBoundsForTextMarkerRange(const VisiblePositionRange&) const;
308 int doAXLengthForTextMarkerRange(const VisiblePositionRange&) const;
309 virtual void doSetAXSelectedTextMarkerRange(const VisiblePositionRange&) const;
310 PlainTextRange rangeForTextMarkerRange(const VisiblePositionRange&) const;
312 virtual VisiblePosition doAXTextMarkerForPosition(const IntPoint&) const;
313 VisiblePosition doAXNextTextMarkerForTextMarker(const VisiblePosition&) const;
314 VisiblePosition doAXPreviousTextMarkerForTextMarker(const VisiblePosition&) const;
315 VisiblePosition doAXNextWordEndTextMarkerForTextMarker(const VisiblePosition&) const;
316 VisiblePosition doAXPreviousWordStartTextMarkerForTextMarker(const VisiblePosition&) const;
317 VisiblePosition doAXNextLineEndTextMarkerForTextMarker(const VisiblePosition&) const;
318 VisiblePosition doAXPreviousLineStartTextMarkerForTextMarker(const VisiblePosition&) const;
319 VisiblePosition doAXNextSentenceEndTextMarkerForTextMarker(const VisiblePosition&) const;
320 VisiblePosition doAXPreviousSentenceStartTextMarkerForTextMarker(const VisiblePosition&) const;
321 VisiblePosition doAXNextParagraphEndTextMarkerForTextMarker(const VisiblePosition&) const;
322 VisiblePosition doAXPreviousParagraphStartTextMarkerForTextMarker(const VisiblePosition&) const;
323 virtual VisiblePosition textMarkerForIndex(unsigned indexValue, bool lastIndexOK) const;
325 virtual VisiblePosition visiblePositionForIndex(int) const;
326 virtual int indexForVisiblePosition(const VisiblePosition&) const;
328 AccessibilityObject* doAXUIElementForTextMarker(const VisiblePosition&) const;
329 unsigned doAXLineForTextMarker(const VisiblePosition&) const;
330 virtual int indexForTextMarker(const VisiblePosition&) const;
332 virtual PlainTextRange doAXRangeForLine(unsigned) const;
333 PlainTextRange doAXRangeForPosition(const IntPoint&) const;
334 virtual PlainTextRange doAXRangeForIndex(unsigned) const;
335 PlainTextRange doAXStyleRangeForIndex(unsigned) const;
337 virtual String doAXStringForRange(const PlainTextRange&) const;
338 virtual IntRect doAXBoundsForRange(const PlainTextRange&) const;
340 unsigned doAXLineForIndex(unsigned);
342 #if HAVE(ACCESSIBILITY)
343 AccessibilityObjectWrapper* wrapper() const { return m_wrapper.get(); }
344 void setWrapper(AccessibilityObjectWrapper* wrapper)
352 Vector<RefPtr<AccessibilityObject> > m_children;
353 mutable bool m_haveChildren;
355 virtual void clearChildren();
356 virtual void removeAXObjectID();
357 virtual bool isDetached() const { return true; }
360 RetainPtr<AccessibilityObjectWrapper> m_wrapper;
362 COMPtr<AccessibilityObjectWrapper> m_wrapper;
366 } // namespace WebCore
368 #endif // AccessibilityObject_h