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