michael@0: /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ michael@0: /* vim: set ts=2 et sw=2 tw=80: */ michael@0: /* This Source Code Form is subject to the terms of the Mozilla Public michael@0: * License, v. 2.0. If a copy of the MPL was not distributed with this file, michael@0: * You can obtain one at http://mozilla.org/MPL/2.0/. */ michael@0: michael@0: #ifndef mozilla_a11y_HTMLListAccessible_h__ michael@0: #define mozilla_a11y_HTMLListAccessible_h__ michael@0: michael@0: #include "BaseAccessibles.h" michael@0: #include "HyperTextAccessibleWrap.h" michael@0: michael@0: namespace mozilla { michael@0: namespace a11y { michael@0: michael@0: class HTMLListBulletAccessible; michael@0: michael@0: /** michael@0: * Used for HTML list (like HTML ul). michael@0: */ michael@0: class HTMLListAccessible : public HyperTextAccessibleWrap michael@0: { michael@0: public: michael@0: HTMLListAccessible(nsIContent* aContent, DocAccessible* aDoc) : michael@0: HyperTextAccessibleWrap(aContent, aDoc) { mGenericTypes |= eList; } michael@0: virtual ~HTMLListAccessible() { } michael@0: michael@0: // nsISupports michael@0: NS_DECL_ISUPPORTS_INHERITED michael@0: michael@0: // Accessible michael@0: virtual a11y::role NativeRole(); michael@0: virtual uint64_t NativeState(); michael@0: }; michael@0: michael@0: michael@0: /** michael@0: * Used for HTML list item (e.g. HTML li). michael@0: */ michael@0: class HTMLLIAccessible : public HyperTextAccessibleWrap michael@0: { michael@0: public: michael@0: HTMLLIAccessible(nsIContent* aContent, DocAccessible* aDoc); michael@0: virtual ~HTMLLIAccessible() { } michael@0: michael@0: // nsISupports michael@0: NS_DECL_ISUPPORTS_INHERITED michael@0: michael@0: // nsIAccessible michael@0: NS_IMETHOD GetBounds(int32_t* aX, int32_t* aY, michael@0: int32_t* aWidth, int32_t* aHeight); michael@0: michael@0: // Accessible michael@0: virtual void Shutdown(); michael@0: virtual a11y::role NativeRole(); michael@0: virtual uint64_t NativeState(); michael@0: michael@0: // HTMLLIAccessible michael@0: HTMLListBulletAccessible* Bullet() const { return mBullet; } michael@0: void UpdateBullet(bool aHasBullet); michael@0: michael@0: protected: michael@0: // Accessible michael@0: virtual void CacheChildren(); michael@0: michael@0: private: michael@0: nsRefPtr mBullet; michael@0: }; michael@0: michael@0: michael@0: /** michael@0: * Used for bullet of HTML list item element (for example, HTML li). michael@0: */ michael@0: class HTMLListBulletAccessible : public LeafAccessible michael@0: { michael@0: public: michael@0: HTMLListBulletAccessible(nsIContent* aContent, DocAccessible* aDoc); michael@0: virtual ~HTMLListBulletAccessible() { } michael@0: michael@0: // Accessible michael@0: virtual nsIFrame* GetFrame() const; michael@0: virtual ENameValueFlag Name(nsString& aName); michael@0: virtual a11y::role NativeRole(); michael@0: virtual uint64_t NativeState(); michael@0: virtual void AppendTextTo(nsAString& aText, uint32_t aStartOffset = 0, michael@0: uint32_t aLength = UINT32_MAX); michael@0: michael@0: // HTMLListBulletAccessible michael@0: michael@0: /** michael@0: * Return true if the bullet is inside of list item element boundaries. michael@0: */ michael@0: bool IsInside() const; michael@0: }; michael@0: michael@0: michael@0: inline HTMLLIAccessible* michael@0: Accessible::AsHTMLListItem() michael@0: { michael@0: return IsHTMLListItem() ? static_cast(this) : nullptr; michael@0: } michael@0: michael@0: } // namespace a11y michael@0: } // namespace mozilla michael@0: michael@0: #endif