Bug 1504988 [wpt PR 13947] - Run py36-flake8 also for tools/wpt/, a=testonly
[gecko.git] / accessible / xul / XULElementAccessibles.h
blob455e8ac12e5308a65161ca855d3a623c98c32908
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/. */
6 #ifndef mozilla_a11y_XULElementAccessibles_h__
7 #define mozilla_a11y_XULElementAccessibles_h__
9 #include "HyperTextAccessibleWrap.h"
10 #include "TextLeafAccessibleWrap.h"
12 namespace mozilla {
13 namespace a11y {
15 class XULLabelTextLeafAccessible;
17 /**
18 * Used for XUL description and label elements.
20 class XULLabelAccessible : public HyperTextAccessibleWrap
22 public:
23 XULLabelAccessible(nsIContent* aContent, DocAccessible* aDoc);
25 // Accessible
26 virtual void Shutdown() override;
27 virtual a11y::role NativeRole() const override;
28 virtual uint64_t NativeState() const override;
29 virtual Relation RelationByType(RelationType aType) const override;
31 void UpdateLabelValue(const nsString& aValue);
33 protected:
34 // Accessible
35 virtual ENameValueFlag NativeName(nsString& aName) const override;
37 private:
38 RefPtr<XULLabelTextLeafAccessible> mValueTextLeaf;
41 inline XULLabelAccessible*
42 Accessible::AsXULLabel()
44 return IsXULLabel() ? static_cast<XULLabelAccessible*>(this) : nullptr;
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).
52 class XULLabelTextLeafAccessible final : public TextLeafAccessibleWrap
54 public:
55 XULLabelTextLeafAccessible(nsIContent* aContent, DocAccessible* aDoc) :
56 TextLeafAccessibleWrap(aContent, aDoc)
57 { mStateFlags |= eSharedNode; }
59 virtual ~XULLabelTextLeafAccessible() { }
61 // Accessible
62 virtual a11y::role NativeRole() const override;
63 virtual uint64_t NativeState() const override;
67 /**
68 * Used for XUL tooltip element.
70 class XULTooltipAccessible : public LeafAccessible
73 public:
74 XULTooltipAccessible(nsIContent* aContent, DocAccessible* aDoc);
76 // Accessible
77 virtual a11y::role NativeRole() const override;
78 virtual uint64_t NativeState() const override;
81 class XULLinkAccessible : public XULLabelAccessible
84 public:
85 XULLinkAccessible(nsIContent* aContent, DocAccessible* aDoc);
87 // Accessible
88 virtual void Value(nsString& aValue) const override;
89 virtual a11y::role NativeRole() const override;
90 virtual uint64_t NativeLinkState() const override;
92 // ActionAccessible
93 virtual uint8_t ActionCount() const override;
94 virtual void ActionNameAt(uint8_t aIndex, nsAString& aName) override;
95 virtual bool DoAction(uint8_t aIndex) const override;
97 // HyperLinkAccessible
98 virtual bool IsLink() const override;
99 virtual uint32_t StartOffset() override;
100 virtual uint32_t EndOffset() override;
101 virtual already_AddRefed<nsIURI> AnchorURIAt(uint32_t aAnchorIndex) const override;
103 protected:
104 virtual ~XULLinkAccessible();
106 // Accessible
107 virtual ENameValueFlag NativeName(nsString& aName) const override;
109 enum { eAction_Jump = 0 };
113 } // namespace a11y
114 } // namespace mozilla
116 #endif