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_XULTabAccessible_h__
7 #define mozilla_a11y_XULTabAccessible_h__
8 
9 // NOTE: alphabetically ordered
10 #include "HyperTextAccessibleWrap.h"
11 #include "XULMenuAccessible.h"
12 #include "XULSelectControlAccessible.h"
13 
14 namespace mozilla {
15 namespace a11y {
16 
17 /**
18  * An individual tab, xul:tab element.
19  */
20 class XULTabAccessible : public HyperTextAccessibleWrap {
21  public:
22   enum { eAction_Switch = 0 };
23 
24   XULTabAccessible(nsIContent* aContent, DocAccessible* aDoc);
25 
26   // Accessible
27   virtual a11y::role NativeRole() const override;
28   virtual uint64_t NativeState() const override;
29   virtual uint64_t NativeInteractiveState() const override;
30   virtual Relation RelationByType(RelationType aType) const override;
31   virtual void ApplyARIAState(uint64_t* aState) const override;
32 
33   // ActionAccessible
34   virtual uint8_t ActionCount() const override;
35   virtual void ActionNameAt(uint8_t aIndex, nsAString& aName) override;
36   virtual bool DoAction(uint8_t aIndex) const override;
37 };
38 
39 /**
40  * A container of tab objects, xul:tabs element.
41  */
42 class XULTabsAccessible : public XULSelectControlAccessible {
43  public:
44   XULTabsAccessible(nsIContent* aContent, DocAccessible* aDoc);
45 
46   // Accessible
47   virtual void Value(nsString& aValue) const override;
48   virtual a11y::role NativeRole() const override;
49   virtual void ApplyARIAState(uint64_t* aState) const override;
50 
51   // ActionAccessible
52   virtual uint8_t ActionCount() const override;
53 
54   // SelectAccessible
55   virtual void SelectedItems(nsTArray<Accessible*>* aItems) override;
56   virtual uint32_t SelectedItemCount() override;
57   virtual Accessible* GetSelectedItem(uint32_t aIndex) override;
58   virtual bool IsItemSelected(uint32_t aIndex) override;
59 
60  protected:
61   // Accessible
62   virtual ENameValueFlag NativeName(nsString& aName) const override;
63 };
64 
65 /**
66  * A container of tab panels, xul:tabpanels element.
67  */
68 class XULTabpanelsAccessible : public AccessibleWrap {
69  public:
XULTabpanelsAccessible(nsIContent * aContent,DocAccessible * aDoc)70   XULTabpanelsAccessible(nsIContent* aContent, DocAccessible* aDoc)
71       : AccessibleWrap(aContent, aDoc) {
72     mType = eXULTabpanelsType;
73   }
74 
75   // Accessible
76   virtual a11y::role NativeRole() const override;
77 };
78 
79 /**
80  * A tabpanel object, child elements of xul:tabpanels element.
81  *
82  * XXX: we need to move the class logic into generic class since
83  * for example we do not create instance of this class for XUL textbox used as
84  * a tabpanel.
85  */
86 class XULTabpanelAccessible : public AccessibleWrap {
87  public:
88   XULTabpanelAccessible(nsIContent* aContent, DocAccessible* aDoc);
89 
90   // Accessible
91   virtual a11y::role NativeRole() const override;
92   virtual Relation RelationByType(RelationType aType) const override;
93 };
94 
95 }  // namespace a11y
96 }  // namespace mozilla
97 
98 #endif
99