2 * Copyright (C) 2008 Apple Inc. All rights reserved.
3 * Copyright (C) 2008 Nuanti Ltd.
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
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.
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.
30 #ifndef AccessibilityObject_h
31 #define AccessibilityObject_h
33 #include "VisiblePosition.h"
34 #include <wtf/Platform.h>
35 #include <wtf/RefPtr.h>
36 #include <wtf/Vector.h>
39 #include <wtf/RetainPtr.h>
41 #include "AccessibilityObjectWrapperWin.h"
43 #elif PLATFORM(CHROMIUM)
44 #include "AccessibilityObjectWrapper.h"
47 typedef struct _NSRange NSRange
;
50 @
class AccessibilityObjectWrapper
;
52 @
class NSAttributedString
;
54 @
class NSMutableAttributedString
;
60 class NSAttributedString
;
62 class NSMutableAttributedString
;
67 typedef struct _AtkObject AtkObject
;
68 typedef struct _AtkObject AccessibilityObjectWrapper
;
70 class AccessibilityObjectWrapper
;
80 class HTMLAnchorElement
;
81 class HTMLAreaElement
;
90 enum AccessibilityRole
{
118 ProgressIndicatorRole
,
136 DisclosureTriangleRole
,
139 // AppKit includes SortButtonRole but it is misnamed and really a subrole of ButtonRole so we do not include it here.
141 // WebCore-specific roles
150 TableHeaderContainerRole
,
151 DefinitionListTermRole
,
152 DefinitionListDefinitionRole
155 struct VisiblePositionRange
{
157 VisiblePosition start
;
160 VisiblePositionRange() {}
162 VisiblePositionRange(const VisiblePosition
& s
, const VisiblePosition
& e
)
167 bool isNull() const { return start
.isNull() || end
.isNull(); }
170 struct PlainTextRange
{
180 PlainTextRange(unsigned s
, unsigned l
)
185 bool isNull() const { return start
== 0 && length
== 0; }
188 class AccessibilityObject
: public RefCounted
<AccessibilityObject
> {
190 AccessibilityObject();
192 virtual ~AccessibilityObject();
194 typedef Vector
<RefPtr
<AccessibilityObject
> > AccessibilityChildrenVector
;
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; };
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; };
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; }
247 virtual bool hasIntValue() const { return false; };
249 bool accessibilityShouldUseUniqueId() const { return true; };
250 virtual bool accessibilityIsIgnored() const { return true; };
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;
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;
276 virtual AccessibilityRole
roleValue() const;
277 virtual AXObjectCache
* axObjectCache() const;
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;
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;
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);
318 virtual void detach();
319 virtual void makeRangeVisible(const PlainTextRange
&);
320 virtual bool press() const;
321 bool performDefaultAction() const { return press(); }
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() { }
334 virtual VisiblePositionRange
visiblePositionRange() const;
335 virtual VisiblePositionRange
visiblePositionRangeForLine(unsigned) const;
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;
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;
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;
365 virtual VisiblePosition
visiblePositionForIndex(int) const;
366 virtual int indexForVisiblePosition(const VisiblePosition
&) const;
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;
373 virtual PlainTextRange
doAXRangeForLine(unsigned) const;
374 PlainTextRange
doAXRangeForPosition(const IntPoint
&) const;
375 virtual PlainTextRange
doAXRangeForIndex(unsigned) const;
376 PlainTextRange
doAXStyleRangeForIndex(unsigned) const;
378 virtual String
doAXStringForRange(const PlainTextRange
&) const;
379 virtual IntRect
doAXBoundsForRange(const PlainTextRange
&) const;
381 unsigned doAXLineForIndex(unsigned);
383 #if HAVE(ACCESSIBILITY)
385 AccessibilityObjectWrapper
* wrapper() const;
386 void setWrapper(AccessibilityObjectWrapper
*);
388 AccessibilityObjectWrapper
* wrapper() const { return m_wrapper
.get(); }
389 void setWrapper(AccessibilityObjectWrapper
* wrapper
)
396 // a platform-specific method for determining if an attachment is ignored
397 #if HAVE(ACCESSIBILITY)
398 bool accessibilityIgnoreAttachment() const;
400 bool accessibilityIgnoreAttachment() const { return true; }
403 // allows for an AccessibilityObject to update its render tree or perform
404 // other operations update type operations
405 virtual void updateBackingStore();
409 AccessibilityChildrenVector m_children
;
410 mutable bool m_haveChildren
;
412 virtual void clearChildren();
413 virtual void removeAXObjectID();
414 virtual bool isDetached() const { return true; }
417 RetainPtr
<AccessibilityObjectWrapper
> m_wrapper
;
419 COMPtr
<AccessibilityObjectWrapper
> m_wrapper
;
421 AtkObject
* m_wrapper
;
422 #elif PLATFORM(CHROMIUM)
423 RefPtr
<AccessibilityObjectWrapper
> m_wrapper
;
427 } // namespace WebCore
429 #endif // AccessibilityObject_h