]> git.saurik.com Git - iphone-api.git/blob - WebCore/AccessibilityObject.h
Add support for new WinterBoard Settings features.
[iphone-api.git] / WebCore / AccessibilityObject.h
1 /*
2 * Copyright (C) 2008 Apple Inc. All rights reserved.
3 * Copyright (C) 2008 Nuanti Ltd.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *
9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
15 * its contributors may be used to endorse or promote products derived
16 * from this software without specific prior written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
19 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
22 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
24 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
25 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 */
29
30 #ifndef AccessibilityObject_h
31 #define AccessibilityObject_h
32
33 #include "VisiblePosition.h"
34 #include <wtf/Platform.h>
35 #include <wtf/RefPtr.h>
36 #include <wtf/Vector.h>
37
38 #if PLATFORM(MAC)
39 #include <wtf/RetainPtr.h>
40 #elif PLATFORM(WIN)
41 #include "AccessibilityObjectWrapperWin.h"
42 #include "COMPtr.h"
43 #elif PLATFORM(CHROMIUM)
44 #include "AccessibilityObjectWrapper.h"
45 #endif
46
47 typedef struct _NSRange NSRange;
48
49 #ifdef __OBJC__
50 @class AccessibilityObjectWrapper;
51 @class NSArray;
52 @class NSAttributedString;
53 @class NSData;
54 @class NSMutableAttributedString;
55 @class NSString;
56 @class NSValue;
57 @class NSView;
58 #else
59 class NSArray;
60 class NSAttributedString;
61 class NSData;
62 class NSMutableAttributedString;
63 class NSString;
64 class NSValue;
65 class NSView;
66 #if PLATFORM(GTK)
67 typedef struct _AtkObject AtkObject;
68 typedef struct _AtkObject AccessibilityObjectWrapper;
69 #else
70 class AccessibilityObjectWrapper;
71 #endif
72 #endif
73
74 namespace WebCore {
75
76 class AXObjectCache;
77 class Element;
78 class Frame;
79 class FrameView;
80 class HTMLAnchorElement;
81 class HTMLAreaElement;
82 class IntPoint;
83 class IntSize;
84 class Node;
85 class RenderObject;
86 class Selection;
87 class String;
88 class Widget;
89
90 enum AccessibilityRole {
91 UnknownRole = 1,
92 ButtonRole,
93 RadioButtonRole,
94 CheckBoxRole,
95 SliderRole,
96 TabGroupRole,
97 TextFieldRole,
98 StaticTextRole,
99 TextAreaRole,
100 ScrollAreaRole,
101 PopUpButtonRole,
102 MenuButtonRole,
103 TableRole,
104 ApplicationRole,
105 GroupRole,
106 RadioGroupRole,
107 ListRole,
108 ScrollBarRole,
109 ValueIndicatorRole,
110 ImageRole,
111 MenuBarRole,
112 MenuRole,
113 MenuItemRole,
114 ColumnRole,
115 RowRole,
116 ToolbarRole,
117 BusyIndicatorRole,
118 ProgressIndicatorRole,
119 WindowRole,
120 DrawerRole,
121 SystemWideRole,
122 OutlineRole,
123 IncrementorRole,
124 BrowserRole,
125 ComboBoxRole,
126 SplitGroupRole,
127 SplitterRole,
128 ColorWellRole,
129 GrowAreaRole,
130 SheetRole,
131 HelpTagRole,
132 MatteRole,
133 RulerRole,
134 RulerMarkerRole,
135 LinkRole,
136 DisclosureTriangleRole,
137 GridRole,
138 CellRole,
139 // AppKit includes SortButtonRole but it is misnamed and really a subrole of ButtonRole so we do not include it here.
140
141 // WebCore-specific roles
142 WebCoreLinkRole,
143 ImageMapLinkRole,
144 ImageMapRole,
145 ListMarkerRole,
146 WebAreaRole,
147 HeadingRole,
148 ListBoxRole,
149 ListBoxOptionRole,
150 TableHeaderContainerRole,
151 DefinitionListTermRole,
152 DefinitionListDefinitionRole
153 };
154
155 struct VisiblePositionRange {
156
157 VisiblePosition start;
158 VisiblePosition end;
159
160 VisiblePositionRange() {}
161
162 VisiblePositionRange(const VisiblePosition& s, const VisiblePosition& e)
163 : start(s)
164 , end(e)
165 { }
166
167 bool isNull() const { return start.isNull() || end.isNull(); }
168 };
169
170 struct PlainTextRange {
171
172 unsigned start;
173 unsigned length;
174
175 PlainTextRange()
176 : start(0)
177 , length(0)
178 { }
179
180 PlainTextRange(unsigned s, unsigned l)
181 : start(s)
182 , length(l)
183 { }
184
185 bool isNull() const { return start == 0 && length == 0; }
186 };
187
188 class AccessibilityObject : public RefCounted<AccessibilityObject> {
189 protected:
190 AccessibilityObject();
191 public:
192 virtual ~AccessibilityObject();
193
194 typedef Vector<RefPtr<AccessibilityObject> > AccessibilityChildrenVector;
195
196 virtual bool isAccessibilityRenderObject() const { return false; };
197 virtual bool isAnchor() const { return false; };
198 virtual bool isAttachment() const { return false; };
199 virtual bool isHeading() const { return false; };
200 virtual bool isLink() const { return false; };
201 virtual bool isImage() const { return false; };
202 virtual bool isNativeImage() const { return false; };
203 virtual bool isImageButton() const { return false; };
204 virtual bool isPasswordField() const { return false; };
205 virtual bool isTextControl() const { return false; };
206 virtual bool isNativeTextControl() const { return false; };
207 virtual bool isWebArea() const { return false; };
208 virtual bool isCheckboxOrRadio() const { return false; };
209 virtual bool isListBox() const { return roleValue() == ListBoxRole; };
210 virtual bool isMenuRelated() const { return false; }
211 virtual bool isMenu() const { return false; }
212 virtual bool isMenuBar() const { return false; }
213 virtual bool isMenuButton() const { return false; }
214 virtual bool isMenuItem() const { return false; }
215 virtual bool isFileUploadButton() const { return false; };
216 virtual bool isInputImage() const { return false; }
217 virtual bool isProgressIndicator() const { return false; };
218 virtual bool isSlider() const { return false; };
219 virtual bool isControl() const { return false; };
220 virtual bool isList() const { return false; };
221 virtual bool isDataTable() const { return false; };
222 virtual bool isTableRow() const { return false; };
223 virtual bool isTableColumn() const { return false; };
224 virtual bool isTableCell() const { return false; };
225 virtual bool isFieldset() const { return false; };
226 virtual bool isGroup() const { return false; };
227
228 virtual bool isChecked() const { return false; };
229 virtual bool isEnabled() const { return false; };
230 virtual bool isSelected() const { return false; };
231 virtual bool isFocused() const { return false; };
232 virtual bool isHovered() const { return false; };
233 virtual bool isIndeterminate() const { return false; };
234 virtual bool isLoaded() const { return false; };
235 virtual bool isMultiSelect() const { return false; };
236 virtual bool isOffScreen() const { return false; };
237 virtual bool isPressed() const { return false; };
238 virtual bool isReadOnly() const { return false; };
239 virtual bool isVisited() const { return false; };
240
241 virtual bool canSetFocusAttribute() const { return false; };
242 virtual bool canSetTextRangeAttributes() const { return false; };
243 virtual bool canSetValueAttribute() const { return false; };
244 virtual bool canSetSelectedAttribute() const { return false; }
245 virtual bool canSetSelectedChildrenAttribute() const { return false; }
246
247 virtual bool hasIntValue() const { return false; };
248
249 bool accessibilityShouldUseUniqueId() const { return true; };
250 virtual bool accessibilityIsIgnored() const { return true; };
251
252 virtual int intValue() const;
253 virtual float valueForRange() const { return 0.0f; }
254 virtual float maxValueForRange() const { return 0.0f; }
255 virtual float minValueForRange() const {return 0.0f; }
256 virtual int layoutCount() const;
257 static bool isARIAControl(AccessibilityRole);
258 static bool isARIAInput(AccessibilityRole);
259 unsigned axObjectID() const;
260
261 virtual AccessibilityObject* doAccessibilityHitTest(const IntPoint&) const;
262 virtual AccessibilityObject* focusedUIElement() const;
263 virtual AccessibilityObject* firstChild() const;
264 virtual AccessibilityObject* lastChild() const;
265 virtual AccessibilityObject* previousSibling() const;
266 virtual AccessibilityObject* nextSibling() const;
267 virtual AccessibilityObject* parentObject() const;
268 virtual AccessibilityObject* parentObjectUnignored() const;
269 virtual AccessibilityObject* observableObject() const;
270 virtual void linkedUIElements(AccessibilityChildrenVector&) const;
271 virtual AccessibilityObject* titleUIElement() const;
272 virtual AccessibilityRole ariaRoleAttribute() const;
273 virtual bool isPresentationalChildOfAriaRole() const;
274 virtual bool ariaRoleHasPresentationalChildren() const;
275
276 virtual AccessibilityRole roleValue() const;
277 virtual AXObjectCache* axObjectCache() const;
278
279 virtual Element* anchorElement() const;
280 virtual Element* actionElement() const;
281 virtual IntRect boundingBoxRect() const;
282 virtual IntRect elementRect() const;
283 virtual IntSize size() const;
284 IntPoint clickPoint() const;
285
286 virtual KURL url() const;
287 virtual PlainTextRange selectedTextRange() const;
288 virtual Selection selection() const;
289 unsigned selectionStart() const;
290 unsigned selectionEnd() const;
291 virtual String stringValue() const;
292 virtual String ariaAccessiblityName(const String&) const;
293 virtual String ariaLabeledByAttribute() const;
294 virtual String title() const;
295 virtual String ariaDescribedByAttribute() const;
296 virtual String accessibilityDescription() const;
297 virtual String helpText() const;
298 virtual String textUnderElement() const;
299 virtual String text() const;
300 virtual int textLength() const;
301 virtual PassRefPtr<Range> ariaSelectedTextDOMRange() const;
302 virtual String selectedText() const;
303 virtual const AtomicString& accessKey() const;
304 const String& actionVerb() const;
305 virtual Widget* widget() const;
306 virtual Widget* widgetForAttachmentView() const;
307 virtual Document* document() const { return 0; }
308 virtual FrameView* topDocumentFrameView() const { return 0; }
309 virtual FrameView* documentFrameView() const;
310
311 void setAXObjectID(unsigned);
312 virtual void setFocused(bool);
313 virtual void setSelectedText(const String&);
314 virtual void setSelectedTextRange(const PlainTextRange&);
315 virtual void setValue(const String&);
316 virtual void setSelected(bool);
317
318 virtual void detach();
319 virtual void makeRangeVisible(const PlainTextRange&);
320 virtual bool press() const;
321 bool performDefaultAction() const { return press(); }
322
323 virtual void childrenChanged();
324 virtual const AccessibilityChildrenVector& children() { return m_children; }
325 virtual void addChildren();
326 virtual bool canHaveChildren() const { return true; }
327 virtual bool hasChildren() const { return m_haveChildren; };
328 virtual void selectedChildren(AccessibilityChildrenVector&);
329 virtual void visibleChildren(AccessibilityChildrenVector&);
330 virtual bool shouldFocusActiveDescendant() const { return false; }
331 virtual AccessibilityObject* activeDescendant() const { return 0; }
332 virtual void handleActiveDescendantChanged() { }
333
334 virtual VisiblePositionRange visiblePositionRange() const;
335 virtual VisiblePositionRange visiblePositionRangeForLine(unsigned) const;
336
337 VisiblePositionRange visiblePositionRangeForUnorderedPositions(const VisiblePosition&, const VisiblePosition&) const;
338 VisiblePositionRange positionOfLeftWord(const VisiblePosition&) const;
339 VisiblePositionRange positionOfRightWord(const VisiblePosition&) const;
340 VisiblePositionRange leftLineVisiblePositionRange(const VisiblePosition&) const;
341 VisiblePositionRange rightLineVisiblePositionRange(const VisiblePosition&) const;
342 VisiblePositionRange sentenceForPosition(const VisiblePosition&) const;
343 VisiblePositionRange paragraphForPosition(const VisiblePosition&) const;
344 VisiblePositionRange styleRangeForPosition(const VisiblePosition&) const;
345 VisiblePositionRange visiblePositionRangeForRange(const PlainTextRange&) const;
346
347 String stringForVisiblePositionRange(const VisiblePositionRange&) const;
348 virtual IntRect boundsForVisiblePositionRange(const VisiblePositionRange&) const;
349 int lengthForVisiblePositionRange(const VisiblePositionRange&) const;
350 virtual void setSelectedVisiblePositionRange(const VisiblePositionRange&) const;
351
352 virtual VisiblePosition visiblePositionForPoint(const IntPoint&) const;
353 VisiblePosition nextVisiblePosition(const VisiblePosition&) const;
354 VisiblePosition previousVisiblePosition(const VisiblePosition&) const;
355 VisiblePosition nextWordEnd(const VisiblePosition&) const;
356 VisiblePosition previousWordStart(const VisiblePosition&) const;
357 VisiblePosition nextLineEndPosition(const VisiblePosition&) const;
358 VisiblePosition previousLineStartPosition(const VisiblePosition&) const;
359 VisiblePosition nextSentenceEndPosition(const VisiblePosition&) const;
360 VisiblePosition previousSentenceStartPosition(const VisiblePosition&) const;
361 VisiblePosition nextParagraphEndPosition(const VisiblePosition&) const;
362 VisiblePosition previousParagraphStartPosition(const VisiblePosition&) const;
363 virtual VisiblePosition visiblePositionForIndex(unsigned indexValue, bool lastIndexOK) const;
364
365 virtual VisiblePosition visiblePositionForIndex(int) const;
366 virtual int indexForVisiblePosition(const VisiblePosition&) const;
367
368 AccessibilityObject* accessibilityObjectForPosition(const VisiblePosition&) const;
369 int lineForPosition(const VisiblePosition&) const;
370 PlainTextRange plainTextRangeForVisiblePositionRange(const VisiblePositionRange&) const;
371 virtual int index(const VisiblePosition&) const;
372
373 virtual PlainTextRange doAXRangeForLine(unsigned) const;
374 PlainTextRange doAXRangeForPosition(const IntPoint&) const;
375 virtual PlainTextRange doAXRangeForIndex(unsigned) const;
376 PlainTextRange doAXStyleRangeForIndex(unsigned) const;
377
378 virtual String doAXStringForRange(const PlainTextRange&) const;
379 virtual IntRect doAXBoundsForRange(const PlainTextRange&) const;
380
381 unsigned doAXLineForIndex(unsigned);
382
383 #if HAVE(ACCESSIBILITY)
384 #if PLATFORM(GTK)
385 AccessibilityObjectWrapper* wrapper() const;
386 void setWrapper(AccessibilityObjectWrapper*);
387 #else
388 AccessibilityObjectWrapper* wrapper() const { return m_wrapper.get(); }
389 void setWrapper(AccessibilityObjectWrapper* wrapper)
390 {
391 m_wrapper = wrapper;
392 }
393 #endif
394 #endif
395
396 // a platform-specific method for determining if an attachment is ignored
397 #if HAVE(ACCESSIBILITY)
398 bool accessibilityIgnoreAttachment() const;
399 #else
400 bool accessibilityIgnoreAttachment() const { return true; }
401 #endif
402
403 // allows for an AccessibilityObject to update its render tree or perform
404 // other operations update type operations
405 virtual void updateBackingStore();
406
407 protected:
408 unsigned m_id;
409 AccessibilityChildrenVector m_children;
410 mutable bool m_haveChildren;
411
412 virtual void clearChildren();
413 virtual void removeAXObjectID();
414 virtual bool isDetached() const { return true; }
415
416 #if PLATFORM(MAC)
417 RetainPtr<AccessibilityObjectWrapper> m_wrapper;
418 #elif PLATFORM(WIN)
419 COMPtr<AccessibilityObjectWrapper> m_wrapper;
420 #elif PLATFORM(GTK)
421 AtkObject* m_wrapper;
422 #elif PLATFORM(CHROMIUM)
423 RefPtr<AccessibilityObjectWrapper> m_wrapper;
424 #endif
425 };
426
427 } // namespace WebCore
428
429 #endif // AccessibilityObject_h