xpcAccessibleGeneric.h (2714B)
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 "LocalAccessible.h" 16 #include "mozilla/a11y/Accessible.h" 17 #include "mozilla/a11y/RemoteAccessible.h" 18 19 namespace mozilla { 20 namespace a11y { 21 22 /** 23 * XPCOM wrapper around Accessible class. 24 */ 25 class xpcAccessibleGeneric : public xpcAccessible, 26 public xpcAccessibleHyperLink, 27 public xpcAccessibleSelectable, 28 public xpcAccessibleValue { 29 public: 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; 35 } 36 37 NS_DECL_ISUPPORTS 38 39 // nsIAccessible 40 LocalAccessible* ToInternalAccessible() final; 41 Accessible* ToInternalGeneric() final { return mIntl; } 42 43 // xpcAccessibleGeneric 44 virtual void Shutdown(); 45 46 protected: 47 virtual ~xpcAccessibleGeneric(); 48 49 Accessible* mIntl; 50 51 enum { 52 eSelectable = 1 << 0, 53 eValue = 1 << 1, 54 eHyperLink = 1 << 2, 55 eText = 1 << 3 56 }; 57 uint8_t mSupportedIfaces; 58 59 private: 60 friend class LocalAccessible; 61 friend class xpcAccessible; 62 friend class xpcAccessibleHyperLink; 63 friend class xpcAccessibleSelectable; 64 friend class xpcAccessibleValue; 65 66 xpcAccessibleGeneric(const xpcAccessibleGeneric&) = delete; 67 xpcAccessibleGeneric& operator=(const xpcAccessibleGeneric&) = delete; 68 }; 69 70 inline LocalAccessible* xpcAccessible::Intl() { 71 if (!static_cast<xpcAccessibleGeneric*>(this)->mIntl) { 72 return nullptr; 73 } 74 return static_cast<xpcAccessibleGeneric*>(this)->mIntl->AsLocal(); 75 } 76 77 inline Accessible* xpcAccessible::IntlGeneric() { 78 return static_cast<xpcAccessibleGeneric*>(this)->mIntl; 79 } 80 81 inline Accessible* xpcAccessibleHyperLink::Intl() { 82 return static_cast<xpcAccessibleGeneric*>(this)->mIntl; 83 } 84 85 inline Accessible* xpcAccessibleSelectable::Intl() { 86 return static_cast<xpcAccessibleGeneric*>(this)->mIntl; 87 } 88 89 inline Accessible* xpcAccessibleValue::Intl() { 90 return static_cast<xpcAccessibleGeneric*>(this)->mIntl; 91 } 92 93 } // namespace a11y 94 } // namespace mozilla 95 96 #endif