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 isProgressIndicator() const { return false; };
217
virtual bool isSlider() const { return false; };
218
virtual bool isControl() const { return false; };
219
virtual bool isList() const { return false; };
220
virtual bool isDataTable() const { return false; };
221
virtual bool isTableRow() const { return false; };
222
virtual bool isTableColumn() const { return false; };
223
virtual bool isTableCell() const { return false; };
224
virtual bool isFieldset() const { return false; };
225
virtual bool isGroup() const { return false; };
227
virtual bool isChecked() const { return false; };
228
virtual bool isEnabled() const { return false; };
229
virtual bool isSelected() const { return false; };
230
virtual bool isFocused() const { return false; };
231
virtual bool isHovered() const { return false; };
232
virtual bool isIndeterminate() const { return false; };
233
virtual bool isLoaded() const { return false; };
234
virtual bool isMultiSelect() const { return false; };
235
virtual bool isOffScreen() const { return false; };
236
virtual bool isPressed() const { return false; };
237
virtual bool isReadOnly() const { return false; };
238
virtual bool isVisited() const { return false; };
240
virtual bool canSetFocusAttribute() const { return false; };
241
virtual bool canSetTextRangeAttributes() const { return false; };
242
virtual bool canSetValueAttribute() const { return false; };
243
virtual bool canSetSelectedAttribute() const { return false; }
244
virtual bool canSetSelectedChildrenAttribute() const { return false; }
246
virtual bool hasIntValue() const { return false; };
248
bool accessibilityShouldUseUniqueId() const { return true; };
249
virtual bool accessibilityIsIgnored() const { return true; };
251
virtual int intValue() const;
252
virtual float valueForRange() const { return 0.0f; }
253
virtual float maxValueForRange() const { return 0.0f; }
254
virtual float minValueForRange() const {return 0.0f; }
255
virtual int layoutCount() const;
256
static bool isARIAControl(AccessibilityRole);
257
static bool isARIAInput(AccessibilityRole);
258
unsigned axObjectID() const;
260
virtual AccessibilityObject* doAccessibilityHitTest(const IntPoint&) const;
261
virtual AccessibilityObject* focusedUIElement() const;
262
virtual AccessibilityObject* firstChild() const;
263
virtual AccessibilityObject* lastChild() const;
264
virtual AccessibilityObject* previousSibling() const;
265
virtual AccessibilityObject* nextSibling() const;
266
virtual AccessibilityObject* parentObject() const;
267
virtual AccessibilityObject* parentObjectUnignored() const;
268
virtual AccessibilityObject* observableObject() const;
269
virtual void linkedUIElements(AccessibilityChildrenVector&) const;
270
virtual AccessibilityObject* titleUIElement() const;
271
virtual AccessibilityRole ariaRoleAttribute() const;
272
virtual bool isPresentationalChildOfAriaRole() const;
273
virtual bool ariaRoleHasPresentationalChildren() const;
275
virtual AccessibilityRole roleValue() const;
276
virtual AXObjectCache* axObjectCache() const;
278
virtual Element* anchorElement() const;
279
virtual Element* actionElement() const;
280
virtual IntRect boundingBoxRect() const;
281
virtual IntRect elementRect() const;
282
virtual IntSize size() const;
283
IntPoint clickPoint() const;
285
virtual KURL url() const;
286
virtual PlainTextRange selectedTextRange() const;
287
virtual Selection selection() const;
288
unsigned selectionStart() const;
289
unsigned selectionEnd() const;
290
virtual String stringValue() const;
291
virtual String ariaAccessiblityName(const String&) const;
292
virtual String ariaLabeledByAttribute() const;
293
virtual String title() const;
294
virtual String ariaDescribedByAttribute() const;
295
virtual String accessibilityDescription() const;
296
virtual String helpText() const;
297
virtual String textUnderElement() const;
298
virtual String text() const;
299
virtual int textLength() const;
300
virtual PassRefPtr<Range> ariaSelectedTextDOMRange() const;
301
virtual String selectedText() const;
302
virtual const AtomicString& accessKey() const;
303
const String& actionVerb() const;
304
virtual Widget* widget() const;
305
virtual Widget* widgetForAttachmentView() const;
306
virtual Document* document() const { return 0; }
307
virtual FrameView* topDocumentFrameView() const { return 0; }
308
virtual FrameView* documentFrameView() const;
310
void setAXObjectID(unsigned);
311
virtual void setFocused(bool);
312
virtual void setSelectedText(const String&);
313
virtual void setSelectedTextRange(const PlainTextRange&);
314
virtual void setValue(const String&);
315
virtual void setSelected(bool);
317
virtual void detach();
318
virtual void makeRangeVisible(const PlainTextRange&);
319
virtual bool press() const;
320
bool performDefaultAction() const { return press(); }
322
virtual void childrenChanged();
323
virtual const AccessibilityChildrenVector& children() { return m_children; }
324
virtual void addChildren();
325
virtual bool canHaveChildren() const { return true; }
326
virtual bool hasChildren() const { return m_haveChildren; };
327
virtual void selectedChildren(AccessibilityChildrenVector&);
328
virtual void visibleChildren(AccessibilityChildrenVector&);
329
virtual bool shouldFocusActiveDescendant() const { return false; }
330
virtual AccessibilityObject* activeDescendant() const { return 0; }
331
virtual void handleActiveDescendantChanged() { }
333
virtual VisiblePositionRange visiblePositionRange() const;
334
virtual VisiblePositionRange visiblePositionRangeForLine(unsigned) const;
336
VisiblePositionRange visiblePositionRangeForUnorderedPositions(const VisiblePosition&, const VisiblePosition&) const;
337
VisiblePositionRange positionOfLeftWord(const VisiblePosition&) const;
338
VisiblePositionRange positionOfRightWord(const VisiblePosition&) const;
339
VisiblePositionRange leftLineVisiblePositionRange(const VisiblePosition&) const;
340
VisiblePositionRange rightLineVisiblePositionRange(const VisiblePosition&) const;
341
VisiblePositionRange sentenceForPosition(const VisiblePosition&) const;
342
VisiblePositionRange paragraphForPosition(const VisiblePosition&) const;
343
VisiblePositionRange styleRangeForPosition(const VisiblePosition&) const;
344
VisiblePositionRange visiblePositionRangeForRange(const PlainTextRange&) const;
346
String stringForVisiblePositionRange(const VisiblePositionRange&) const;
347
virtual IntRect boundsForVisiblePositionRange(const VisiblePositionRange&) const;
348
int lengthForVisiblePositionRange(const VisiblePositionRange&) const;
349
virtual void setSelectedVisiblePositionRange(const VisiblePositionRange&) const;
351
virtual VisiblePosition visiblePositionForPoint(const IntPoint&) const;
352
VisiblePosition nextVisiblePosition(const VisiblePosition&) const;
353
VisiblePosition previousVisiblePosition(const VisiblePosition&) const;
354
VisiblePosition nextWordEnd(const VisiblePosition&) const;
355
VisiblePosition previousWordStart(const VisiblePosition&) const;
356
VisiblePosition nextLineEndPosition(const VisiblePosition&) const;
357
VisiblePosition previousLineStartPosition(const VisiblePosition&) const;
358
VisiblePosition nextSentenceEndPosition(const VisiblePosition&) const;
359
VisiblePosition previousSentenceStartPosition(const VisiblePosition&) const;
360
VisiblePosition nextParagraphEndPosition(const VisiblePosition&) const;
361
VisiblePosition previousParagraphStartPosition(const VisiblePosition&) const;
362
virtual VisiblePosition visiblePositionForIndex(unsigned indexValue, bool lastIndexOK) const;
364
virtual VisiblePosition visiblePositionForIndex(int) const;
365
virtual int indexForVisiblePosition(const VisiblePosition&) const;
367
AccessibilityObject* accessibilityObjectForPosition(const VisiblePosition&) const;
368
int lineForPosition(const VisiblePosition&) const;
369
PlainTextRange plainTextRangeForVisiblePositionRange(const VisiblePositionRange&) const;
370
virtual int index(const VisiblePosition&) const;
372
virtual PlainTextRange doAXRangeForLine(unsigned) const;
373
PlainTextRange doAXRangeForPosition(const IntPoint&) const;
374
virtual PlainTextRange doAXRangeForIndex(unsigned) const;
375
PlainTextRange doAXStyleRangeForIndex(unsigned) const;
377
virtual String doAXStringForRange(const PlainTextRange&) const;
378
virtual IntRect doAXBoundsForRange(const PlainTextRange&) const;
380
unsigned doAXLineForIndex(unsigned);
382
#if HAVE(ACCESSIBILITY)
384
AccessibilityObjectWrapper* wrapper() const;
385
void setWrapper(AccessibilityObjectWrapper*);
387
AccessibilityObjectWrapper* wrapper() const { return m_wrapper.get(); }
388
void setWrapper(AccessibilityObjectWrapper* wrapper)
395
// a platform-specific method for determining if an attachment is ignored
396
#if HAVE(ACCESSIBILITY)
397
bool accessibilityIgnoreAttachment() const;
399
bool accessibilityIgnoreAttachment() const { return true; }
404
AccessibilityChildrenVector m_children;
405
mutable bool m_haveChildren;
407
virtual void clearChildren();
408
virtual void removeAXObjectID();
409
virtual bool isDetached() const { return true; }
412
RetainPtr<AccessibilityObjectWrapper> m_wrapper;
414
COMPtr<AccessibilityObjectWrapper> m_wrapper;
416
AtkObject* m_wrapper;
417
#elif PLATFORM(CHROMIUM)
418
RefPtr<AccessibilityObjectWrapper> m_wrapper;
422
} // namespace WebCore
424
#endif // AccessibilityObject_h