123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223 |
- /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
- /* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
- #ifndef mozilla_a11y_HTMLSelectAccessible_h__
- #define mozilla_a11y_HTMLSelectAccessible_h__
- #include "HTMLFormControlAccessible.h"
- namespace mozilla {
- namespace a11y {
- /**
- * Selects, Listboxes and Comboboxes, are made up of a number of different
- * widgets, some of which are shared between the two. This file contains
- * all of the widgets for both of the Selects, for HTML only.
- *
- * Listbox:
- * - HTMLSelectListAccessible
- * - HTMLSelectOptionAccessible
- *
- * Comboboxes:
- * - HTMLComboboxAccessible
- * - HTMLComboboxListAccessible [ inserted in accessible tree ]
- * - HTMLSelectOptionAccessible(s)
- */
- /*
- * The list that contains all the options in the select.
- */
- class HTMLSelectListAccessible : public AccessibleWrap
- {
- public:
- HTMLSelectListAccessible(nsIContent* aContent, DocAccessible* aDoc);
- virtual ~HTMLSelectListAccessible() {}
- // Accessible
- virtual a11y::role NativeRole() override;
- virtual uint64_t NativeState() override;
- // SelectAccessible
- virtual bool SelectAll() override;
- virtual bool UnselectAll() override;
- // Widgets
- virtual bool IsWidget() const override;
- virtual bool IsActiveWidget() const override;
- virtual bool AreItemsOperable() const override;
- virtual Accessible* CurrentItem() override;
- virtual void SetCurrentItem(Accessible* aItem) override;
- virtual bool IsAcceptableChild(nsIContent* aEl) const override;
- };
- /*
- * Options inside the select, contained within the list
- */
- class HTMLSelectOptionAccessible : public HyperTextAccessibleWrap
- {
- public:
- enum { eAction_Select = 0 };
- HTMLSelectOptionAccessible(nsIContent* aContent, DocAccessible* aDoc);
- virtual ~HTMLSelectOptionAccessible() {}
- // Accessible
- virtual a11y::role NativeRole() override;
- virtual uint64_t NativeState() override;
- virtual uint64_t NativeInteractiveState() const override;
- virtual int32_t GetLevelInternal() override;
- virtual nsRect RelativeBounds(nsIFrame** aBoundingFrame) const override;
- virtual void SetSelected(bool aSelect) override;
- // ActionAccessible
- virtual uint8_t ActionCount() override;
- virtual void ActionNameAt(uint8_t aIndex, nsAString& aName) override;
- virtual bool DoAction(uint8_t aIndex) override;
- // Widgets
- virtual Accessible* ContainerWidget() const override;
- protected:
- // Accessible
- virtual ENameValueFlag NativeName(nsString& aName) override;
- private:
- /**
- * Return a select accessible the option belongs to if any.
- */
- Accessible* GetSelect() const
- {
- Accessible* parent = mParent;
- if (parent && parent->IsHTMLOptGroup())
- parent = parent->Parent();
- if (parent && parent->IsListControl()) {
- Accessible* combobox = parent->Parent();
- return combobox && combobox->IsCombobox() ? combobox : mParent;
- }
- return nullptr;
- }
- /**
- * Return a combobox accessible the option belongs to if any.
- */
- Accessible* GetCombobox() const
- {
- Accessible* parent = mParent;
- if (parent && parent->IsHTMLOptGroup())
- parent = parent->Parent();
- if (parent && parent->IsListControl()) {
- Accessible* combobox = parent->Parent();
- return combobox && combobox->IsCombobox() ? combobox : nullptr;
- }
- return nullptr;
- }
- };
- /*
- * Opt Groups inside the select, contained within the list
- */
- class HTMLSelectOptGroupAccessible : public HTMLSelectOptionAccessible
- {
- public:
- HTMLSelectOptGroupAccessible(nsIContent* aContent, DocAccessible* aDoc) :
- HTMLSelectOptionAccessible(aContent, aDoc)
- { mType = eHTMLOptGroupType; }
- virtual ~HTMLSelectOptGroupAccessible() {}
- // Accessible
- virtual a11y::role NativeRole() override;
- virtual uint64_t NativeInteractiveState() const override;
- // ActionAccessible
- virtual uint8_t ActionCount() override;
- virtual void ActionNameAt(uint8_t aIndex, nsAString& aName) override;
- virtual bool DoAction(uint8_t aIndex) override;
- };
- /** ------------------------------------------------------ */
- /** Finally, the Combobox widgets */
- /** ------------------------------------------------------ */
- class HTMLComboboxListAccessible;
- /*
- * A class the represents the HTML Combobox widget.
- */
- class HTMLComboboxAccessible final : public AccessibleWrap
- {
- public:
- enum { eAction_Click = 0 };
- HTMLComboboxAccessible(nsIContent* aContent, DocAccessible* aDoc);
- virtual ~HTMLComboboxAccessible() {}
- // Accessible
- virtual void Shutdown() override;
- virtual void Description(nsString& aDescription) override;
- virtual void Value(nsString& aValue) override;
- virtual a11y::role NativeRole() override;
- virtual uint64_t NativeState() override;
- virtual bool RemoveChild(Accessible* aChild) override;
- // ActionAccessible
- virtual uint8_t ActionCount() override;
- virtual void ActionNameAt(uint8_t aIndex, nsAString& aName) override;
- virtual bool DoAction(uint8_t aIndex) override;
- // Widgets
- virtual bool IsWidget() const override;
- virtual bool IsActiveWidget() const override;
- virtual bool AreItemsOperable() const override;
- virtual Accessible* CurrentItem() override;
- virtual void SetCurrentItem(Accessible* aItem) override;
- protected:
- /**
- * Return selected option.
- */
- Accessible* SelectedOption() const;
- private:
- RefPtr<HTMLComboboxListAccessible> mListAccessible;
- };
- /*
- * A class that represents the window that lives to the right
- * of the drop down button inside the Select. This is the window
- * that is made visible when the button is pressed.
- */
- class HTMLComboboxListAccessible : public HTMLSelectListAccessible
- {
- public:
- HTMLComboboxListAccessible(Accessible* aParent, nsIContent* aContent,
- DocAccessible* aDoc);
- virtual ~HTMLComboboxListAccessible() {}
- // Accessible
- virtual nsIFrame* GetFrame() const override;
- virtual a11y::role NativeRole() override;
- virtual uint64_t NativeState() override;
- virtual nsRect RelativeBounds(nsIFrame** aBoundingFrame) const override;
- // Widgets
- virtual bool IsActiveWidget() const override;
- virtual bool AreItemsOperable() const override;
- };
- } // namespace a11y
- } // namespace mozilla
- #endif
|