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() override;
28   virtual uint64_t NativeState() override;
29   virtual uint64_t NativeInteractiveState() const override;
30   virtual Relation RelationByType(RelationType aType) override;
31 
32   // ActionAccessible
33   virtual uint8_t ActionCount() override;
34   virtual void ActionNameAt(uint8_t aIndex, nsAString& aName) override;
35   virtual bool DoAction(uint8_t aIndex) override;
36 };
37 
38 /**
39  * A container of tab objects, xul:tabs element.
40  */
41 class XULTabsAccessible : public XULSelectControlAccessible {
42  public:
43   XULTabsAccessible(nsIContent* aContent, DocAccessible* aDoc);
44 
45   // Accessible
46   virtual void Value(nsString& aValue) override;
47   virtual a11y::role NativeRole() override;
48 
49   // ActionAccessible
50   virtual uint8_t ActionCount() override;
51 
52  protected:
53   // Accessible
54   virtual ENameValueFlag NativeName(nsString& aName) override;
55 };
56 
57 /**
58  * A container of tab panels, xul:tabpanels element.
59  */
60 class XULTabpanelsAccessible : public AccessibleWrap {
61  public:
XULTabpanelsAccessible(nsIContent * aContent,DocAccessible * aDoc)62   XULTabpanelsAccessible(nsIContent* aContent, DocAccessible* aDoc)
63       : AccessibleWrap(aContent, aDoc) {
64     mType = eXULTabpanelsType;
65   }
66 
67   // Accessible
68   virtual a11y::role NativeRole() override;
69 };
70 
71 /**
72  * A tabpanel object, child elements of xul:tabpanels element.
73  *
74  * XXX: we need to move the class logic into generic class since
75  * for example we do not create instance of this class for XUL textbox used as
76  * a tabpanel.
77  */
78 class XULTabpanelAccessible : public AccessibleWrap {
79  public:
80   XULTabpanelAccessible(nsIContent* aContent, DocAccessible* aDoc);
81 
82   // Accessible
83   virtual a11y::role NativeRole() override;
84   virtual Relation RelationByType(RelationType aType) override;
85 };
86 
87 }  // namespace a11y
88 }  // namespace mozilla
89 
90 #endif
91