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_XULMenuAccessible_h__
7 #define mozilla_a11y_XULMenuAccessible_h__
8 
9 #include "AccessibleWrap.h"
10 #include "XULSelectControlAccessible.h"
11 
12 namespace mozilla {
13 namespace a11y {
14 
15 /**
16  * Used for XUL menu, menuitem elements.
17  */
18 class XULMenuitemAccessible : public AccessibleWrap {
19  public:
20   enum { eAction_Click = 0 };
21 
22   XULMenuitemAccessible(nsIContent* aContent, DocAccessible* aDoc);
23 
24   // LocalAccessible
25   virtual void Description(nsString& aDescription) const override;
26   virtual a11y::role NativeRole() const override;
27   virtual uint64_t NativeState() const override;
28   virtual uint64_t NativeInteractiveState() const override;
29 
30   // ActionAccessible
31   virtual bool HasPrimaryAction() const override;
32   virtual void ActionNameAt(uint8_t aIndex, nsAString& aName) override;
33   virtual KeyBinding AccessKey() const override;
34   virtual KeyBinding KeyboardShortcut() const override;
35 
36   // Widgets
37   virtual bool IsActiveWidget() const override;
38   virtual bool AreItemsOperable() const override;
39   virtual LocalAccessible* ContainerWidget() const override;
40 
41  protected:
42   // LocalAccessible
43   virtual ENameValueFlag NativeName(nsString& aName) const override;
44   virtual int32_t GetLevel(bool aFast) const override;
45 };
46 
47 /**
48  * Used for XUL menuseparator element.
49  */
50 class XULMenuSeparatorAccessible : public XULMenuitemAccessible {
51  public:
52   XULMenuSeparatorAccessible(nsIContent* aContent, DocAccessible* aDoc);
53 
54   // LocalAccessible
55   virtual a11y::role NativeRole() const override;
56   virtual uint64_t NativeState() const override;
57 
58   // ActionAccessible
59   virtual bool HasPrimaryAction() const override;
60 
61  protected:
62   // LocalAccessible
63   virtual ENameValueFlag NativeName(nsString& aName) const override;
64 };
65 
66 /**
67  * Used for XUL menupopup and panel.
68  */
69 class XULMenupopupAccessible : public XULSelectControlAccessible {
70  public:
71   XULMenupopupAccessible(nsIContent* aContent, DocAccessible* aDoc);
72 
73   // LocalAccessible
74   virtual a11y::role NativeRole() const override;
75   virtual uint64_t NativeState() const override;
76 
77   // Widgets
78   virtual bool IsWidget() const override;
79   virtual bool IsActiveWidget() const override;
80   virtual bool AreItemsOperable() const override;
81 
82   virtual LocalAccessible* ContainerWidget() const override;
83 
84  protected:
85   // LocalAccessible
86   virtual ENameValueFlag NativeName(nsString& aName) const override;
87 };
88 
89 /**
90  * Used for XUL menubar element.
91  */
92 class XULMenubarAccessible : public AccessibleWrap {
93  public:
94   XULMenubarAccessible(nsIContent* aContent, DocAccessible* aDoc);
95 
96   // LocalAccessible
97   virtual a11y::role NativeRole() const override;
98 
99   // Widget
100   virtual bool IsActiveWidget() const override;
101   virtual bool AreItemsOperable() const override;
102   virtual LocalAccessible* CurrentItem() const override;
103   virtual void SetCurrentItem(const LocalAccessible* aItem) override;
104 
105  protected:
106   // LocalAccessible
107   virtual ENameValueFlag NativeName(nsString& aName) const override;
108 };
109 
110 }  // namespace a11y
111 }  // namespace mozilla
112 
113 #endif
114