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