|
1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ |
|
2 /* This Source Code Form is subject to the terms of the Mozilla Public |
|
3 * License, v. 2.0. If a copy of the MPL was not distributed with this |
|
4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
|
5 |
|
6 #ifndef mozilla_a11y_XULElementAccessibles_h__ |
|
7 #define mozilla_a11y_XULElementAccessibles_h__ |
|
8 |
|
9 #include "HyperTextAccessibleWrap.h" |
|
10 #include "TextLeafAccessibleWrap.h" |
|
11 |
|
12 namespace mozilla { |
|
13 namespace a11y { |
|
14 |
|
15 class XULLabelTextLeafAccessible; |
|
16 |
|
17 /** |
|
18 * Used for XUL description and label elements. |
|
19 */ |
|
20 class XULLabelAccessible : public HyperTextAccessibleWrap |
|
21 { |
|
22 public: |
|
23 XULLabelAccessible(nsIContent* aContent, DocAccessible* aDoc); |
|
24 |
|
25 // Accessible |
|
26 virtual void Shutdown(); |
|
27 virtual a11y::role NativeRole(); |
|
28 virtual uint64_t NativeState(); |
|
29 virtual Relation RelationByType(RelationType aType) MOZ_OVERRIDE; |
|
30 |
|
31 void UpdateLabelValue(const nsString& aValue); |
|
32 |
|
33 protected: |
|
34 // Accessible |
|
35 virtual ENameValueFlag NativeName(nsString& aName) MOZ_OVERRIDE; |
|
36 virtual void CacheChildren() MOZ_OVERRIDE; |
|
37 |
|
38 private: |
|
39 nsRefPtr<XULLabelTextLeafAccessible> mValueTextLeaf; |
|
40 }; |
|
41 |
|
42 inline XULLabelAccessible* |
|
43 Accessible::AsXULLabel() |
|
44 { |
|
45 return IsXULLabel() ? static_cast<XULLabelAccessible*>(this) : nullptr; |
|
46 } |
|
47 |
|
48 |
|
49 /** |
|
50 * Used to implement text interface on XUL label accessible in case when text |
|
51 * is provided by @value attribute (no underlying text frame). |
|
52 */ |
|
53 class XULLabelTextLeafAccessible MOZ_FINAL : public TextLeafAccessibleWrap |
|
54 { |
|
55 public: |
|
56 XULLabelTextLeafAccessible(nsIContent* aContent, DocAccessible* aDoc) : |
|
57 TextLeafAccessibleWrap(aContent, aDoc) |
|
58 { mStateFlags |= eSharedNode; } |
|
59 |
|
60 virtual ~XULLabelTextLeafAccessible() { } |
|
61 |
|
62 // Accessible |
|
63 virtual a11y::role NativeRole() MOZ_OVERRIDE; |
|
64 virtual uint64_t NativeState() MOZ_OVERRIDE; |
|
65 }; |
|
66 |
|
67 |
|
68 /** |
|
69 * Used for XUL tooltip element. |
|
70 */ |
|
71 class XULTooltipAccessible : public LeafAccessible |
|
72 { |
|
73 |
|
74 public: |
|
75 XULTooltipAccessible(nsIContent* aContent, DocAccessible* aDoc); |
|
76 |
|
77 // Accessible |
|
78 virtual a11y::role NativeRole(); |
|
79 virtual uint64_t NativeState(); |
|
80 }; |
|
81 |
|
82 class XULLinkAccessible : public XULLabelAccessible |
|
83 { |
|
84 |
|
85 public: |
|
86 XULLinkAccessible(nsIContent* aContent, DocAccessible* aDoc); |
|
87 |
|
88 NS_DECL_ISUPPORTS_INHERITED |
|
89 |
|
90 // nsIAccessible |
|
91 NS_IMETHOD GetActionName(uint8_t aIndex, nsAString& aName); |
|
92 NS_IMETHOD DoAction(uint8_t aIndex); |
|
93 |
|
94 // Accessible |
|
95 virtual void Value(nsString& aValue); |
|
96 virtual a11y::role NativeRole(); |
|
97 virtual uint64_t NativeLinkState() const; |
|
98 |
|
99 // ActionAccessible |
|
100 virtual uint8_t ActionCount(); |
|
101 |
|
102 // HyperLinkAccessible |
|
103 virtual bool IsLink(); |
|
104 virtual uint32_t StartOffset(); |
|
105 virtual uint32_t EndOffset(); |
|
106 virtual already_AddRefed<nsIURI> AnchorURIAt(uint32_t aAnchorIndex); |
|
107 |
|
108 protected: |
|
109 // Accessible |
|
110 virtual ENameValueFlag NativeName(nsString& aName) MOZ_OVERRIDE; |
|
111 |
|
112 enum { eAction_Jump = 0 }; |
|
113 |
|
114 }; |
|
115 |
|
116 } // namespace a11y |
|
117 } // namespace mozilla |
|
118 |
|
119 #endif |