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