diff options
Diffstat (limited to '')
-rw-r--r-- | accessible/xpcom/xpcAccessibleGeneric.h | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/accessible/xpcom/xpcAccessibleGeneric.h b/accessible/xpcom/xpcAccessibleGeneric.h new file mode 100644 index 0000000000..499bdc8447 --- /dev/null +++ b/accessible/xpcom/xpcAccessibleGeneric.h @@ -0,0 +1,94 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set ts=2 et sw=2 tw=80: */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#ifndef mozilla_a11y_xpcAccessibleGeneric_h_ +#define mozilla_a11y_xpcAccessibleGeneric_h_ + +#include "xpcAccessible.h" +#include "xpcAccessibleHyperLink.h" +#include "xpcAccessibleSelectable.h" +#include "xpcAccessibleValue.h" + +#include "Accessible.h" +#include "AccessibleOrProxy.h" + +namespace mozilla { +namespace a11y { + +/** + * XPCOM wrapper around Accessible class. + */ +class xpcAccessibleGeneric : public xpcAccessible, + public xpcAccessibleHyperLink, + public xpcAccessibleSelectable, + public xpcAccessibleValue { + public: + explicit xpcAccessibleGeneric(Accessible* aInternal) + : mIntl(aInternal), mSupportedIfaces(0) { + if (aInternal->IsSelect()) mSupportedIfaces |= eSelectable; + if (aInternal->HasNumericValue()) mSupportedIfaces |= eValue; + if (aInternal->IsLink()) mSupportedIfaces |= eHyperLink; + } + + xpcAccessibleGeneric(ProxyAccessible* aProxy, uint8_t aInterfaces) + : mIntl(aProxy), mSupportedIfaces(aInterfaces) {} + + NS_DECL_ISUPPORTS + + // nsIAccessible + Accessible* ToInternalAccessible() const final; + + // xpcAccessibleGeneric + virtual void Shutdown(); + + protected: + virtual ~xpcAccessibleGeneric(); + + AccessibleOrProxy mIntl; + + enum { + eSelectable = 1 << 0, + eValue = 1 << 1, + eHyperLink = 1 << 2, + eText = 1 << 3 + }; + uint8_t mSupportedIfaces; + + private: + friend class Accessible; + friend class xpcAccessible; + friend class xpcAccessibleHyperLink; + friend class xpcAccessibleSelectable; + friend class xpcAccessibleValue; + + xpcAccessibleGeneric(const xpcAccessibleGeneric&) = delete; + xpcAccessibleGeneric& operator=(const xpcAccessibleGeneric&) = delete; +}; + +inline Accessible* xpcAccessible::Intl() { + return static_cast<xpcAccessibleGeneric*>(this)->mIntl.AsAccessible(); +} + +inline AccessibleOrProxy xpcAccessible::IntlGeneric() { + return static_cast<xpcAccessibleGeneric*>(this)->mIntl; +} + +inline AccessibleOrProxy xpcAccessibleHyperLink::Intl() { + return static_cast<xpcAccessibleGeneric*>(this)->mIntl; +} + +inline Accessible* xpcAccessibleSelectable::Intl() { + return static_cast<xpcAccessibleGeneric*>(this)->mIntl.AsAccessible(); +} + +inline AccessibleOrProxy xpcAccessibleValue::Intl() { + return static_cast<xpcAccessibleGeneric*>(this)->mIntl; +} + +} // namespace a11y +} // namespace mozilla + +#endif |