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