1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/accessible/src/html/HTMLFormControlAccessible.h Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,292 @@ 1.4 +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 1.5 +/* This Source Code Form is subject to the terms of the Mozilla Public 1.6 + * License, v. 2.0. If a copy of the MPL was not distributed with this 1.7 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 1.8 + 1.9 +#ifndef MOZILLA_A11Y_HTMLFormControlAccessible_H_ 1.10 +#define MOZILLA_A11Y_HTMLFormControlAccessible_H_ 1.11 + 1.12 +#include "FormControlAccessible.h" 1.13 +#include "HyperTextAccessibleWrap.h" 1.14 + 1.15 +namespace mozilla { 1.16 +namespace a11y { 1.17 + 1.18 +/** 1.19 + * Accessible for HTML progress element. 1.20 + */ 1.21 +typedef ProgressMeterAccessible<1> HTMLProgressMeterAccessible; 1.22 + 1.23 +/** 1.24 + * Accessible for HTML input@type="checkbox". 1.25 + */ 1.26 +class HTMLCheckboxAccessible : public LeafAccessible 1.27 +{ 1.28 + 1.29 +public: 1.30 + enum { eAction_Click = 0 }; 1.31 + 1.32 + HTMLCheckboxAccessible(nsIContent* aContent, DocAccessible* aDoc) : 1.33 + LeafAccessible(aContent, aDoc) 1.34 + { 1.35 + // Ignore "CheckboxStateChange" DOM event in lieu of document observer 1.36 + // state change notification. 1.37 + mStateFlags |= eIgnoreDOMUIEvent; 1.38 + } 1.39 + 1.40 + // nsIAccessible 1.41 + NS_IMETHOD GetActionName(uint8_t aIndex, nsAString& aName); 1.42 + NS_IMETHOD DoAction(uint8_t index); 1.43 + 1.44 + // Accessible 1.45 + virtual mozilla::a11y::role NativeRole(); 1.46 + virtual uint64_t NativeState(); 1.47 + 1.48 + // ActionAccessible 1.49 + virtual uint8_t ActionCount(); 1.50 + 1.51 + // Widgets 1.52 + virtual bool IsWidget() const; 1.53 +}; 1.54 + 1.55 + 1.56 +/** 1.57 + * Accessible for HTML input@type="radio" element. 1.58 + */ 1.59 +class HTMLRadioButtonAccessible : public RadioButtonAccessible 1.60 +{ 1.61 + 1.62 +public: 1.63 + HTMLRadioButtonAccessible(nsIContent* aContent, DocAccessible* aDoc) : 1.64 + RadioButtonAccessible(aContent, aDoc) 1.65 + { 1.66 + // Ignore "RadioStateChange" DOM event in lieu of document observer 1.67 + // state change notification. 1.68 + mStateFlags |= eIgnoreDOMUIEvent; 1.69 + } 1.70 + 1.71 + // Accessible 1.72 + virtual uint64_t NativeState(); 1.73 + virtual void GetPositionAndSizeInternal(int32_t *aPosInSet, 1.74 + int32_t *aSetSize); 1.75 +}; 1.76 + 1.77 + 1.78 +/** 1.79 + * Accessible for HTML input@type="button", @type="submit", @type="image" 1.80 + * and HTML button elements. 1.81 + */ 1.82 +class HTMLButtonAccessible : public HyperTextAccessibleWrap 1.83 +{ 1.84 + 1.85 +public: 1.86 + enum { eAction_Click = 0 }; 1.87 + 1.88 + HTMLButtonAccessible(nsIContent* aContent, DocAccessible* aDoc); 1.89 + 1.90 + // nsIAccessible 1.91 + NS_IMETHOD GetActionName(uint8_t aIndex, nsAString& aName); 1.92 + NS_IMETHOD DoAction(uint8_t index); 1.93 + 1.94 + // Accessible 1.95 + virtual mozilla::a11y::role NativeRole(); 1.96 + virtual uint64_t State(); 1.97 + virtual uint64_t NativeState(); 1.98 + 1.99 + // ActionAccessible 1.100 + virtual uint8_t ActionCount(); 1.101 + 1.102 + // Widgets 1.103 + virtual bool IsWidget() const; 1.104 + 1.105 +protected: 1.106 + // Accessible 1.107 + virtual ENameValueFlag NativeName(nsString& aName) MOZ_OVERRIDE; 1.108 +}; 1.109 + 1.110 + 1.111 +/** 1.112 + * Accessible for HTML input@type="text", input@type="password", textarea and 1.113 + * other HTML text controls. 1.114 + */ 1.115 +class HTMLTextFieldAccessible : public HyperTextAccessibleWrap 1.116 +{ 1.117 + 1.118 +public: 1.119 + enum { eAction_Click = 0 }; 1.120 + 1.121 + HTMLTextFieldAccessible(nsIContent* aContent, DocAccessible* aDoc); 1.122 + 1.123 + NS_DECL_ISUPPORTS_INHERITED 1.124 + 1.125 + // nsIAccessible 1.126 + NS_IMETHOD GetActionName(uint8_t aIndex, nsAString& aName); 1.127 + NS_IMETHOD DoAction(uint8_t index); 1.128 + 1.129 + // HyperTextAccessible 1.130 + virtual already_AddRefed<nsIEditor> GetEditor() const; 1.131 + 1.132 + // Accessible 1.133 + virtual void Value(nsString& aValue); 1.134 + virtual void ApplyARIAState(uint64_t* aState) const; 1.135 + virtual mozilla::a11y::role NativeRole(); 1.136 + virtual uint64_t NativeState(); 1.137 + virtual already_AddRefed<nsIPersistentProperties> NativeAttributes() MOZ_OVERRIDE; 1.138 + 1.139 + // ActionAccessible 1.140 + virtual uint8_t ActionCount(); 1.141 + 1.142 + // Widgets 1.143 + virtual bool IsWidget() const; 1.144 + virtual Accessible* ContainerWidget() const; 1.145 + 1.146 +protected: 1.147 + // Accessible 1.148 + virtual ENameValueFlag NativeName(nsString& aName) MOZ_OVERRIDE; 1.149 + 1.150 + /** 1.151 + * Return a XUL widget element this input is part of. 1.152 + */ 1.153 + nsIContent* XULWidgetElm() const { return mContent->GetBindingParent(); } 1.154 +}; 1.155 + 1.156 + 1.157 +/** 1.158 + * Accessible for input@type="file" element. 1.159 + */ 1.160 +class HTMLFileInputAccessible : public HyperTextAccessibleWrap 1.161 +{ 1.162 +public: 1.163 + HTMLFileInputAccessible(nsIContent* aContent, DocAccessible* aDoc); 1.164 + 1.165 + // Accessible 1.166 + virtual mozilla::a11y::role NativeRole(); 1.167 + virtual nsresult HandleAccEvent(AccEvent* aAccEvent); 1.168 +}; 1.169 + 1.170 + 1.171 +/** 1.172 + * Used for HTML input@type="number". 1.173 + */ 1.174 +class HTMLSpinnerAccessible : public AccessibleWrap 1.175 +{ 1.176 +public: 1.177 + HTMLSpinnerAccessible(nsIContent* aContent, DocAccessible* aDoc) : 1.178 + AccessibleWrap(aContent, aDoc) 1.179 + { 1.180 + mStateFlags |= eHasNumericValue; 1.181 +} 1.182 + 1.183 + // Accessible 1.184 + virtual mozilla::a11y::role NativeRole() MOZ_OVERRIDE; 1.185 + virtual void Value(nsString& aValue) MOZ_OVERRIDE; 1.186 + 1.187 + virtual double MaxValue() const MOZ_OVERRIDE; 1.188 + virtual double MinValue() const MOZ_OVERRIDE; 1.189 + virtual double CurValue() const MOZ_OVERRIDE; 1.190 + virtual double Step() const MOZ_OVERRIDE; 1.191 + virtual bool SetCurValue(double aValue) MOZ_OVERRIDE; 1.192 +}; 1.193 + 1.194 + 1.195 +/** 1.196 + * Used for input@type="range" element. 1.197 + */ 1.198 +class HTMLRangeAccessible : public LeafAccessible 1.199 +{ 1.200 +public: 1.201 + HTMLRangeAccessible(nsIContent* aContent, DocAccessible* aDoc) : 1.202 + LeafAccessible(aContent, aDoc) 1.203 + { 1.204 + mStateFlags |= eHasNumericValue; 1.205 + } 1.206 + 1.207 + // Accessible 1.208 + virtual void Value(nsString& aValue); 1.209 + virtual mozilla::a11y::role NativeRole(); 1.210 + 1.211 + // Value 1.212 + virtual double MaxValue() const MOZ_OVERRIDE; 1.213 + virtual double MinValue() const MOZ_OVERRIDE; 1.214 + virtual double CurValue() const MOZ_OVERRIDE; 1.215 + virtual double Step() const MOZ_OVERRIDE; 1.216 + virtual bool SetCurValue(double aValue) MOZ_OVERRIDE; 1.217 + 1.218 + // Widgets 1.219 + virtual bool IsWidget() const; 1.220 +}; 1.221 + 1.222 + 1.223 +/** 1.224 + * Accessible for HTML fieldset element. 1.225 + */ 1.226 +class HTMLGroupboxAccessible : public HyperTextAccessibleWrap 1.227 +{ 1.228 +public: 1.229 + HTMLGroupboxAccessible(nsIContent* aContent, DocAccessible* aDoc); 1.230 + 1.231 + // Accessible 1.232 + virtual mozilla::a11y::role NativeRole(); 1.233 + virtual Relation RelationByType(RelationType aType) MOZ_OVERRIDE; 1.234 + 1.235 +protected: 1.236 + // Accessible 1.237 + virtual ENameValueFlag NativeName(nsString& aName) MOZ_OVERRIDE; 1.238 + 1.239 + // HTMLGroupboxAccessible 1.240 + nsIContent* GetLegend(); 1.241 +}; 1.242 + 1.243 + 1.244 +/** 1.245 + * Accessible for HTML legend element. 1.246 + */ 1.247 +class HTMLLegendAccessible : public HyperTextAccessibleWrap 1.248 +{ 1.249 +public: 1.250 + HTMLLegendAccessible(nsIContent* aContent, DocAccessible* aDoc); 1.251 + 1.252 + // Accessible 1.253 + virtual mozilla::a11y::role NativeRole(); 1.254 + virtual Relation RelationByType(RelationType aType) MOZ_OVERRIDE; 1.255 +}; 1.256 + 1.257 +/** 1.258 + * Accessible for HTML5 figure element. 1.259 + */ 1.260 +class HTMLFigureAccessible : public HyperTextAccessibleWrap 1.261 +{ 1.262 +public: 1.263 + HTMLFigureAccessible(nsIContent* aContent, DocAccessible* aDoc); 1.264 + 1.265 + // Accessible 1.266 + virtual already_AddRefed<nsIPersistentProperties> NativeAttributes() MOZ_OVERRIDE; 1.267 + virtual mozilla::a11y::role NativeRole(); 1.268 + virtual Relation RelationByType(RelationType aType) MOZ_OVERRIDE; 1.269 + 1.270 +protected: 1.271 + // Accessible 1.272 + virtual ENameValueFlag NativeName(nsString& aName) MOZ_OVERRIDE; 1.273 + 1.274 + // HTMLLegendAccessible 1.275 + nsIContent* Caption() const; 1.276 +}; 1.277 + 1.278 + 1.279 +/** 1.280 + * Accessible for HTML5 figcaption element. 1.281 + */ 1.282 +class HTMLFigcaptionAccessible : public HyperTextAccessibleWrap 1.283 +{ 1.284 +public: 1.285 + HTMLFigcaptionAccessible(nsIContent* aContent, DocAccessible* aDoc); 1.286 + 1.287 + // Accessible 1.288 + virtual mozilla::a11y::role NativeRole(); 1.289 + virtual Relation RelationByType(RelationType aType) MOZ_OVERRIDE; 1.290 +}; 1.291 + 1.292 +} // namespace a11y 1.293 +} // namespace mozilla 1.294 + 1.295 +#endif