michael@0: /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ michael@0: /* This Source Code Form is subject to the terms of the Mozilla Public michael@0: * License, v. 2.0. If a copy of the MPL was not distributed with this michael@0: * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ michael@0: michael@0: #ifndef MOZILLA_A11Y_HTMLFormControlAccessible_H_ michael@0: #define MOZILLA_A11Y_HTMLFormControlAccessible_H_ michael@0: michael@0: #include "FormControlAccessible.h" michael@0: #include "HyperTextAccessibleWrap.h" michael@0: michael@0: namespace mozilla { michael@0: namespace a11y { michael@0: michael@0: /** michael@0: * Accessible for HTML progress element. michael@0: */ michael@0: typedef ProgressMeterAccessible<1> HTMLProgressMeterAccessible; michael@0: michael@0: /** michael@0: * Accessible for HTML input@type="checkbox". michael@0: */ michael@0: class HTMLCheckboxAccessible : public LeafAccessible michael@0: { michael@0: michael@0: public: michael@0: enum { eAction_Click = 0 }; michael@0: michael@0: HTMLCheckboxAccessible(nsIContent* aContent, DocAccessible* aDoc) : michael@0: LeafAccessible(aContent, aDoc) michael@0: { michael@0: // Ignore "CheckboxStateChange" DOM event in lieu of document observer michael@0: // state change notification. michael@0: mStateFlags |= eIgnoreDOMUIEvent; michael@0: } michael@0: michael@0: // nsIAccessible michael@0: NS_IMETHOD GetActionName(uint8_t aIndex, nsAString& aName); michael@0: NS_IMETHOD DoAction(uint8_t index); michael@0: michael@0: // Accessible michael@0: virtual mozilla::a11y::role NativeRole(); michael@0: virtual uint64_t NativeState(); michael@0: michael@0: // ActionAccessible michael@0: virtual uint8_t ActionCount(); michael@0: michael@0: // Widgets michael@0: virtual bool IsWidget() const; michael@0: }; michael@0: michael@0: michael@0: /** michael@0: * Accessible for HTML input@type="radio" element. michael@0: */ michael@0: class HTMLRadioButtonAccessible : public RadioButtonAccessible michael@0: { michael@0: michael@0: public: michael@0: HTMLRadioButtonAccessible(nsIContent* aContent, DocAccessible* aDoc) : michael@0: RadioButtonAccessible(aContent, aDoc) michael@0: { michael@0: // Ignore "RadioStateChange" DOM event in lieu of document observer michael@0: // state change notification. michael@0: mStateFlags |= eIgnoreDOMUIEvent; michael@0: } michael@0: michael@0: // Accessible michael@0: virtual uint64_t NativeState(); michael@0: virtual void GetPositionAndSizeInternal(int32_t *aPosInSet, michael@0: int32_t *aSetSize); michael@0: }; michael@0: michael@0: michael@0: /** michael@0: * Accessible for HTML input@type="button", @type="submit", @type="image" michael@0: * and HTML button elements. michael@0: */ michael@0: class HTMLButtonAccessible : public HyperTextAccessibleWrap michael@0: { michael@0: michael@0: public: michael@0: enum { eAction_Click = 0 }; michael@0: michael@0: HTMLButtonAccessible(nsIContent* aContent, DocAccessible* aDoc); michael@0: michael@0: // nsIAccessible michael@0: NS_IMETHOD GetActionName(uint8_t aIndex, nsAString& aName); michael@0: NS_IMETHOD DoAction(uint8_t index); michael@0: michael@0: // Accessible michael@0: virtual mozilla::a11y::role NativeRole(); michael@0: virtual uint64_t State(); michael@0: virtual uint64_t NativeState(); michael@0: michael@0: // ActionAccessible michael@0: virtual uint8_t ActionCount(); michael@0: michael@0: // Widgets michael@0: virtual bool IsWidget() const; michael@0: michael@0: protected: michael@0: // Accessible michael@0: virtual ENameValueFlag NativeName(nsString& aName) MOZ_OVERRIDE; michael@0: }; michael@0: michael@0: michael@0: /** michael@0: * Accessible for HTML input@type="text", input@type="password", textarea and michael@0: * other HTML text controls. michael@0: */ michael@0: class HTMLTextFieldAccessible : public HyperTextAccessibleWrap michael@0: { michael@0: michael@0: public: michael@0: enum { eAction_Click = 0 }; michael@0: michael@0: HTMLTextFieldAccessible(nsIContent* aContent, DocAccessible* aDoc); michael@0: michael@0: NS_DECL_ISUPPORTS_INHERITED michael@0: michael@0: // nsIAccessible michael@0: NS_IMETHOD GetActionName(uint8_t aIndex, nsAString& aName); michael@0: NS_IMETHOD DoAction(uint8_t index); michael@0: michael@0: // HyperTextAccessible michael@0: virtual already_AddRefed GetEditor() const; michael@0: michael@0: // Accessible michael@0: virtual void Value(nsString& aValue); michael@0: virtual void ApplyARIAState(uint64_t* aState) const; michael@0: virtual mozilla::a11y::role NativeRole(); michael@0: virtual uint64_t NativeState(); michael@0: virtual already_AddRefed NativeAttributes() MOZ_OVERRIDE; michael@0: michael@0: // ActionAccessible michael@0: virtual uint8_t ActionCount(); michael@0: michael@0: // Widgets michael@0: virtual bool IsWidget() const; michael@0: virtual Accessible* ContainerWidget() const; michael@0: michael@0: protected: michael@0: // Accessible michael@0: virtual ENameValueFlag NativeName(nsString& aName) MOZ_OVERRIDE; michael@0: michael@0: /** michael@0: * Return a XUL widget element this input is part of. michael@0: */ michael@0: nsIContent* XULWidgetElm() const { return mContent->GetBindingParent(); } michael@0: }; michael@0: michael@0: michael@0: /** michael@0: * Accessible for input@type="file" element. michael@0: */ michael@0: class HTMLFileInputAccessible : public HyperTextAccessibleWrap michael@0: { michael@0: public: michael@0: HTMLFileInputAccessible(nsIContent* aContent, DocAccessible* aDoc); michael@0: michael@0: // Accessible michael@0: virtual mozilla::a11y::role NativeRole(); michael@0: virtual nsresult HandleAccEvent(AccEvent* aAccEvent); michael@0: }; michael@0: michael@0: michael@0: /** michael@0: * Used for HTML input@type="number". michael@0: */ michael@0: class HTMLSpinnerAccessible : public AccessibleWrap michael@0: { michael@0: public: michael@0: HTMLSpinnerAccessible(nsIContent* aContent, DocAccessible* aDoc) : michael@0: AccessibleWrap(aContent, aDoc) michael@0: { michael@0: mStateFlags |= eHasNumericValue; michael@0: } michael@0: michael@0: // Accessible michael@0: virtual mozilla::a11y::role NativeRole() MOZ_OVERRIDE; michael@0: virtual void Value(nsString& aValue) MOZ_OVERRIDE; michael@0: michael@0: virtual double MaxValue() const MOZ_OVERRIDE; michael@0: virtual double MinValue() const MOZ_OVERRIDE; michael@0: virtual double CurValue() const MOZ_OVERRIDE; michael@0: virtual double Step() const MOZ_OVERRIDE; michael@0: virtual bool SetCurValue(double aValue) MOZ_OVERRIDE; michael@0: }; michael@0: michael@0: michael@0: /** michael@0: * Used for input@type="range" element. michael@0: */ michael@0: class HTMLRangeAccessible : public LeafAccessible michael@0: { michael@0: public: michael@0: HTMLRangeAccessible(nsIContent* aContent, DocAccessible* aDoc) : michael@0: LeafAccessible(aContent, aDoc) michael@0: { michael@0: mStateFlags |= eHasNumericValue; michael@0: } michael@0: michael@0: // Accessible michael@0: virtual void Value(nsString& aValue); michael@0: virtual mozilla::a11y::role NativeRole(); michael@0: michael@0: // Value michael@0: virtual double MaxValue() const MOZ_OVERRIDE; michael@0: virtual double MinValue() const MOZ_OVERRIDE; michael@0: virtual double CurValue() const MOZ_OVERRIDE; michael@0: virtual double Step() const MOZ_OVERRIDE; michael@0: virtual bool SetCurValue(double aValue) MOZ_OVERRIDE; michael@0: michael@0: // Widgets michael@0: virtual bool IsWidget() const; michael@0: }; michael@0: michael@0: michael@0: /** michael@0: * Accessible for HTML fieldset element. michael@0: */ michael@0: class HTMLGroupboxAccessible : public HyperTextAccessibleWrap michael@0: { michael@0: public: michael@0: HTMLGroupboxAccessible(nsIContent* aContent, DocAccessible* aDoc); michael@0: michael@0: // Accessible michael@0: virtual mozilla::a11y::role NativeRole(); michael@0: virtual Relation RelationByType(RelationType aType) MOZ_OVERRIDE; michael@0: michael@0: protected: michael@0: // Accessible michael@0: virtual ENameValueFlag NativeName(nsString& aName) MOZ_OVERRIDE; michael@0: michael@0: // HTMLGroupboxAccessible michael@0: nsIContent* GetLegend(); michael@0: }; michael@0: michael@0: michael@0: /** michael@0: * Accessible for HTML legend element. michael@0: */ michael@0: class HTMLLegendAccessible : public HyperTextAccessibleWrap michael@0: { michael@0: public: michael@0: HTMLLegendAccessible(nsIContent* aContent, DocAccessible* aDoc); michael@0: michael@0: // Accessible michael@0: virtual mozilla::a11y::role NativeRole(); michael@0: virtual Relation RelationByType(RelationType aType) MOZ_OVERRIDE; michael@0: }; michael@0: michael@0: /** michael@0: * Accessible for HTML5 figure element. michael@0: */ michael@0: class HTMLFigureAccessible : public HyperTextAccessibleWrap michael@0: { michael@0: public: michael@0: HTMLFigureAccessible(nsIContent* aContent, DocAccessible* aDoc); michael@0: michael@0: // Accessible michael@0: virtual already_AddRefed NativeAttributes() MOZ_OVERRIDE; michael@0: virtual mozilla::a11y::role NativeRole(); michael@0: virtual Relation RelationByType(RelationType aType) MOZ_OVERRIDE; michael@0: michael@0: protected: michael@0: // Accessible michael@0: virtual ENameValueFlag NativeName(nsString& aName) MOZ_OVERRIDE; michael@0: michael@0: // HTMLLegendAccessible michael@0: nsIContent* Caption() const; michael@0: }; michael@0: michael@0: michael@0: /** michael@0: * Accessible for HTML5 figcaption element. michael@0: */ michael@0: class HTMLFigcaptionAccessible : public HyperTextAccessibleWrap michael@0: { michael@0: public: michael@0: HTMLFigcaptionAccessible(nsIContent* aContent, DocAccessible* aDoc); michael@0: michael@0: // Accessible michael@0: virtual mozilla::a11y::role NativeRole(); michael@0: virtual Relation RelationByType(RelationType aType) MOZ_OVERRIDE; michael@0: }; michael@0: michael@0: } // namespace a11y michael@0: } // namespace mozilla michael@0: michael@0: #endif