Line data Source code
1 : /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 : /* vim: set ts=2 et sw=2 tw=80: */
3 : /* This Source Code Form is subject to the terms of the Mozilla Public
4 : * License, v. 2.0. If a copy of the MPL was not distributed with this file,
5 : * You can obtain one at http://mozilla.org/MPL/2.0/. */
6 :
7 : #ifndef mozilla_a11y_xpcAccessibleGeneric_h_
8 : #define mozilla_a11y_xpcAccessibleGeneric_h_
9 :
10 : #include "xpcAccessible.h"
11 : #include "xpcAccessibleHyperLink.h"
12 : #include "xpcAccessibleSelectable.h"
13 : #include "xpcAccessibleValue.h"
14 :
15 : #include "Accessible.h"
16 : #include "AccessibleOrProxy.h"
17 :
18 : namespace mozilla {
19 : namespace a11y {
20 :
21 : /**
22 : * XPCOM wrapper around Accessible class.
23 : */
24 : class xpcAccessibleGeneric : public xpcAccessible,
25 : public xpcAccessibleHyperLink,
26 : public xpcAccessibleSelectable,
27 : public xpcAccessibleValue
28 : {
29 : public:
30 0 : explicit xpcAccessibleGeneric(Accessible* aInternal) :
31 0 : mIntl(aInternal), mSupportedIfaces(0)
32 : {
33 0 : if (aInternal->IsSelect())
34 0 : mSupportedIfaces |= eSelectable;
35 0 : if (aInternal->HasNumericValue())
36 0 : mSupportedIfaces |= eValue;
37 0 : if (aInternal->IsLink())
38 0 : mSupportedIfaces |= eHyperLink;
39 0 : }
40 :
41 0 : xpcAccessibleGeneric(ProxyAccessible* aProxy, uint8_t aInterfaces) :
42 0 : mIntl(aProxy), mSupportedIfaces(aInterfaces) {}
43 :
44 : NS_DECL_ISUPPORTS
45 :
46 : // nsIAccessible
47 : virtual Accessible* ToInternalAccessible() const final override;
48 :
49 : // xpcAccessibleGeneric
50 : virtual void Shutdown();
51 :
52 : protected:
53 : virtual ~xpcAccessibleGeneric();
54 :
55 : AccessibleOrProxy mIntl;
56 :
57 : enum {
58 : eSelectable = 1 << 0,
59 : eValue = 1 << 1,
60 : eHyperLink = 1 << 2,
61 : eText = 1 << 3
62 : };
63 : uint8_t mSupportedIfaces;
64 :
65 : private:
66 : friend class Accessible;
67 : friend class xpcAccessible;
68 : friend class xpcAccessibleHyperLink;
69 : friend class xpcAccessibleSelectable;
70 : friend class xpcAccessibleValue;
71 :
72 : xpcAccessibleGeneric(const xpcAccessibleGeneric&) = delete;
73 : xpcAccessibleGeneric& operator =(const xpcAccessibleGeneric&) = delete;
74 : };
75 :
76 : inline Accessible*
77 0 : xpcAccessible::Intl()
78 : {
79 0 : return static_cast<xpcAccessibleGeneric*>(this)->mIntl.AsAccessible();
80 : }
81 :
82 : inline AccessibleOrProxy
83 0 : xpcAccessible::IntlGeneric()
84 : {
85 0 : return static_cast<xpcAccessibleGeneric*>(this)->mIntl;
86 : }
87 :
88 : inline AccessibleOrProxy
89 0 : xpcAccessibleHyperLink::Intl()
90 : {
91 0 : return static_cast<xpcAccessibleGeneric*>(this)->mIntl;
92 : }
93 :
94 : inline Accessible*
95 0 : xpcAccessibleSelectable::Intl()
96 : {
97 0 : return static_cast<xpcAccessibleGeneric*>(this)->mIntl.AsAccessible();
98 : }
99 :
100 : inline AccessibleOrProxy
101 0 : xpcAccessibleValue::Intl()
102 : {
103 0 : return static_cast<xpcAccessibleGeneric*>(this)->mIntl;
104 : }
105 :
106 : } // namespace a11y
107 : } // namespace mozilla
108 :
109 : #endif
|