XULFormControlAccessible.h (5551B)
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_XULFormControlAccessible_H_ 7 #define MOZILLA_A11Y_XULFormControlAccessible_H_ 8 9 // NOTE: alphabetically ordered 10 #include "AccessibleWrap.h" 11 #include "FormControlAccessible.h" 12 #include "HyperTextAccessible.h" 13 #include "XULSelectControlAccessible.h" 14 15 namespace mozilla { 16 namespace a11y { 17 18 /** 19 * Used for XUL button. 20 * 21 * @note Don't inherit from LeafAccessible - it doesn't allow children 22 * and a button can have a dropmarker child. 23 */ 24 class XULButtonAccessible : public AccessibleWrap { 25 public: 26 enum { eAction_Click = 0 }; 27 XULButtonAccessible(nsIContent* aContent, DocAccessible* aDoc); 28 29 // nsISupports 30 NS_INLINE_DECL_REFCOUNTING_INHERITED(XULButtonAccessible, AccessibleWrap) 31 32 // LocalAccessible 33 virtual mozilla::a11y::role NativeRole() const override; 34 virtual uint64_t NativeState() const override; 35 36 // ActionAccessible 37 virtual bool HasPrimaryAction() const override; 38 virtual void ActionNameAt(uint8_t aIndex, nsAString& aName) override; 39 40 // Widgets 41 virtual bool IsWidget() const override; 42 virtual bool IsActiveWidget() const override; 43 virtual bool AreItemsOperable() const override; 44 45 virtual bool IsAcceptableChild(nsIContent* aEl) const override; 46 47 protected: 48 virtual ~XULButtonAccessible(); 49 50 // LocalAccessible 51 virtual bool AttributeChangesState(nsAtom* aAttribute) override; 52 virtual void DOMAttributeChanged(int32_t aNameSpaceID, nsAtom* aAttribute, 53 AttrModType aModType, 54 const nsAttrValue* aOldValue, 55 uint64_t aOldState) override; 56 57 // XULButtonAccessible 58 bool ContainsMenu() const; 59 }; 60 61 /** 62 * Used for XUL dropmarker element. 63 */ 64 class XULDropmarkerAccessible : public LeafAccessible { 65 public: 66 enum { eAction_Click = 0 }; 67 XULDropmarkerAccessible(nsIContent* aContent, DocAccessible* aDoc); 68 69 // LocalAccessible 70 virtual mozilla::a11y::role NativeRole() const override; 71 virtual uint64_t NativeState() const override; 72 73 // ActionAccessible 74 virtual bool HasPrimaryAction() const override; 75 virtual void ActionNameAt(uint8_t aIndex, nsAString& aName) override; 76 virtual bool DoAction(uint8_t aIndex) const override; 77 78 private: 79 bool DropmarkerOpen(bool aToggleOpen) const; 80 }; 81 82 /** 83 * Used for XUL groupbox element. 84 */ 85 class XULGroupboxAccessible final : public AccessibleWrap { 86 public: 87 XULGroupboxAccessible(nsIContent* aContent, DocAccessible* aDoc); 88 89 // LocalAccessible 90 virtual mozilla::a11y::role NativeRole() const override; 91 virtual Relation RelationByType(RelationType aType) const override; 92 93 protected: 94 // LocalAccessible 95 virtual ENameValueFlag NativeName(nsString& aName) const override; 96 }; 97 98 /** 99 * Used for XUL radio element (radio button). 100 */ 101 class XULRadioButtonAccessible : public RadioButtonAccessible { 102 public: 103 XULRadioButtonAccessible(nsIContent* aContent, DocAccessible* aDoc); 104 105 // LocalAccessible 106 virtual uint64_t NativeState() const override; 107 virtual uint64_t NativeInteractiveState() const override; 108 109 // Widgets 110 virtual LocalAccessible* ContainerWidget() const override; 111 }; 112 113 /** 114 * Used for XUL radiogroup element. 115 */ 116 class XULRadioGroupAccessible : public XULSelectControlAccessible { 117 public: 118 XULRadioGroupAccessible(nsIContent* aContent, DocAccessible* aDoc); 119 120 // LocalAccessible 121 virtual mozilla::a11y::role NativeRole() const override; 122 virtual uint64_t NativeInteractiveState() const override; 123 124 // Widgets 125 virtual bool IsWidget() const override; 126 virtual bool IsActiveWidget() const override; 127 virtual bool AreItemsOperable() const override; 128 virtual LocalAccessible* CurrentItem() const override; 129 virtual void SetCurrentItem(const LocalAccessible* aItem) override; 130 }; 131 132 /** 133 * Used for XUL statusbar element. 134 */ 135 class XULStatusBarAccessible : public AccessibleWrap { 136 public: 137 XULStatusBarAccessible(nsIContent* aContent, DocAccessible* aDoc); 138 139 // LocalAccessible 140 virtual mozilla::a11y::role NativeRole() const override; 141 }; 142 143 /** 144 * Used for XUL toolbarbutton element. 145 */ 146 class XULToolbarButtonAccessible : public XULButtonAccessible { 147 public: 148 XULToolbarButtonAccessible(nsIContent* aContent, DocAccessible* aDoc); 149 150 // nsXULToolbarButtonAccessible 151 static bool IsSeparator(LocalAccessible* aAccessible); 152 153 // Widgets 154 virtual bool IsAcceptableChild(nsIContent* aEl) const override; 155 156 protected: 157 // LocalAccessible 158 virtual void GetPositionAndSetSize(int32_t* aPosInSet, 159 int32_t* aSetSize) override; 160 }; 161 162 /** 163 * Used for XUL toolbar element. 164 */ 165 class XULToolbarAccessible : public AccessibleWrap { 166 public: 167 XULToolbarAccessible(nsIContent* aContent, DocAccessible* aDoc); 168 169 // LocalAccessible 170 virtual mozilla::a11y::role NativeRole() const override; 171 172 protected: 173 // LocalAccessible 174 virtual ENameValueFlag NativeName(nsString& aName) const override; 175 }; 176 177 /** 178 * Used for XUL toolbarseparator element. 179 */ 180 class XULToolbarSeparatorAccessible : public LeafAccessible { 181 public: 182 XULToolbarSeparatorAccessible(nsIContent* aContent, DocAccessible* aDoc); 183 184 // LocalAccessible 185 virtual mozilla::a11y::role NativeRole() const override; 186 virtual uint64_t NativeState() const override; 187 }; 188 189 } // namespace a11y 190 } // namespace mozilla 191 192 #endif