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/. */
7 #ifndef mozilla_a11y_xpcAccessibleGeneric_h_
8 #define mozilla_a11y_xpcAccessibleGeneric_h_
10 #include "xpcAccessible.h"
11 #include "xpcAccessibleHyperLink.h"
12 #include "xpcAccessibleSelectable.h"
13 #include "xpcAccessibleValue.h"
15 #include "LocalAccessible.h"
16 #include "mozilla/a11y/Accessible.h"
17 #include "mozilla/a11y/RemoteAccessible.h"
23 * XPCOM wrapper around Accessible class.
25 class xpcAccessibleGeneric
: public xpcAccessible
,
26 public xpcAccessibleHyperLink
,
27 public xpcAccessibleSelectable
,
28 public xpcAccessibleValue
{
30 explicit xpcAccessibleGeneric(Accessible
* aInternal
)
31 : mIntl(aInternal
), mSupportedIfaces(0) {
32 if (aInternal
->IsSelect()) mSupportedIfaces
|= eSelectable
;
33 if (aInternal
->HasNumericValue()) mSupportedIfaces
|= eValue
;
34 if (aInternal
->IsLink()) mSupportedIfaces
|= eHyperLink
;
40 LocalAccessible
* ToInternalAccessible() const final
;
41 Accessible
* ToInternalGeneric() const final
{ return mIntl
; }
43 // xpcAccessibleGeneric
44 virtual void Shutdown();
47 virtual ~xpcAccessibleGeneric();
57 uint8_t mSupportedIfaces
;
60 friend class LocalAccessible
;
61 friend class xpcAccessible
;
62 friend class xpcAccessibleHyperLink
;
63 friend class xpcAccessibleSelectable
;
64 friend class xpcAccessibleValue
;
66 xpcAccessibleGeneric(const xpcAccessibleGeneric
&) = delete;
67 xpcAccessibleGeneric
& operator=(const xpcAccessibleGeneric
&) = delete;
70 inline LocalAccessible
* xpcAccessible::Intl() {
71 if (!static_cast<xpcAccessibleGeneric
*>(this)->mIntl
) {
74 return static_cast<xpcAccessibleGeneric
*>(this)->mIntl
->AsLocal();
77 inline Accessible
* xpcAccessible::IntlGeneric() {
78 return static_cast<xpcAccessibleGeneric
*>(this)->mIntl
;
81 inline Accessible
* xpcAccessibleHyperLink::Intl() {
82 return static_cast<xpcAccessibleGeneric
*>(this)->mIntl
;
85 inline Accessible
* xpcAccessibleSelectable::Intl() {
86 return static_cast<xpcAccessibleGeneric
*>(this)->mIntl
;
89 inline Accessible
* xpcAccessibleValue::Intl() {
90 return static_cast<xpcAccessibleGeneric
*>(this)->mIntl
;
94 } // namespace mozilla