Line data Source code
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 0 : class XULLabelAccessible : public HyperTextAccessibleWrap
21 : {
22 : public:
23 : XULLabelAccessible(nsIContent* aContent, DocAccessible* aDoc);
24 :
25 : // Accessible
26 : virtual void Shutdown() override;
27 : virtual a11y::role NativeRole() override;
28 : virtual uint64_t NativeState() override;
29 : virtual Relation RelationByType(RelationType aType) override;
30 :
31 : void UpdateLabelValue(const nsString& aValue);
32 :
33 : protected:
34 : // Accessible
35 : virtual ENameValueFlag NativeName(nsString& aName) override;
36 :
37 : private:
38 : RefPtr<XULLabelTextLeafAccessible> mValueTextLeaf;
39 : };
40 :
41 : inline XULLabelAccessible*
42 0 : Accessible::AsXULLabel()
43 : {
44 0 : return IsXULLabel() ? static_cast<XULLabelAccessible*>(this) : nullptr;
45 : }
46 :
47 :
48 : /**
49 : * Used to implement text interface on XUL label accessible in case when text
50 : * is provided by @value attribute (no underlying text frame).
51 : */
52 : class XULLabelTextLeafAccessible final : public TextLeafAccessibleWrap
53 : {
54 : public:
55 0 : XULLabelTextLeafAccessible(nsIContent* aContent, DocAccessible* aDoc) :
56 0 : TextLeafAccessibleWrap(aContent, aDoc)
57 0 : { mStateFlags |= eSharedNode; }
58 :
59 0 : virtual ~XULLabelTextLeafAccessible() { }
60 :
61 : // Accessible
62 : virtual a11y::role NativeRole() override;
63 : virtual uint64_t NativeState() override;
64 : };
65 :
66 :
67 : /**
68 : * Used for XUL tooltip element.
69 : */
70 0 : class XULTooltipAccessible : public LeafAccessible
71 : {
72 :
73 : public:
74 : XULTooltipAccessible(nsIContent* aContent, DocAccessible* aDoc);
75 :
76 : // Accessible
77 : virtual a11y::role NativeRole() override;
78 : virtual uint64_t NativeState() override;
79 : };
80 :
81 : class XULLinkAccessible : public XULLabelAccessible
82 : {
83 :
84 : public:
85 : XULLinkAccessible(nsIContent* aContent, DocAccessible* aDoc);
86 :
87 : // Accessible
88 : virtual void Value(nsString& aValue) override;
89 : virtual a11y::role NativeRole() override;
90 : virtual uint64_t NativeLinkState() const override;
91 :
92 : // ActionAccessible
93 : virtual uint8_t ActionCount() override;
94 : virtual void ActionNameAt(uint8_t aIndex, nsAString& aName) override;
95 : virtual bool DoAction(uint8_t aIndex) override;
96 :
97 : // HyperLinkAccessible
98 : virtual bool IsLink() override;
99 : virtual uint32_t StartOffset() override;
100 : virtual uint32_t EndOffset() override;
101 : virtual already_AddRefed<nsIURI> AnchorURIAt(uint32_t aAnchorIndex) override;
102 :
103 : protected:
104 : virtual ~XULLinkAccessible();
105 :
106 : // Accessible
107 : virtual ENameValueFlag NativeName(nsString& aName) override;
108 :
109 : enum { eAction_Jump = 0 };
110 :
111 : };
112 :
113 : } // namespace a11y
114 : } // namespace mozilla
115 :
116 : #endif
|