tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

XULTreeAccessible.h (8568B)


      1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
      2 /* This Source Code Form is subject to the terms of the Mozilla Public
      3 * License, v. 2.0. If a copy of the MPL was not distributed with this
      4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      5 
      6 #ifndef mozilla_a11y_XULTreeAccessible_h__
      7 #define mozilla_a11y_XULTreeAccessible_h__
      8 
      9 #include "nsITreeView.h"
     10 #include "XULListboxAccessible.h"
     11 #include "mozilla/dom/XULTreeElement.h"
     12 
     13 class nsTreeBodyFrame;
     14 class nsTreeColumn;
     15 
     16 namespace mozilla {
     17 namespace a11y {
     18 
     19 class XULTreeGridCellAccessible;
     20 class XULTreeItemAccessibleBase;
     21 
     22 /*
     23 * A class the represents the XUL Tree widget.
     24 */
     25 const uint32_t kMaxTreeColumns = 100;
     26 const uint32_t kDefaultTreeCacheLength = 128;
     27 
     28 /**
     29 * LocalAccessible class for XUL tree element.
     30 */
     31 
     32 class XULTreeAccessible : public AccessibleWrap {
     33 public:
     34  XULTreeAccessible(nsIContent* aContent, DocAccessible* aDoc,
     35                    nsTreeBodyFrame* aTreeframe);
     36 
     37  // nsISupports and cycle collection
     38  NS_DECL_ISUPPORTS_INHERITED
     39  NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(XULTreeAccessible, LocalAccessible)
     40 
     41  // LocalAccessible
     42  virtual void Shutdown() override;
     43  virtual void Value(nsString& aValue) const override;
     44  virtual a11y::role NativeRole() const override;
     45  virtual uint64_t NativeState() const override;
     46  virtual LocalAccessible* LocalChildAtPoint(
     47      int32_t aX, int32_t aY, EWhichChildAtPoint aWhichChild) override;
     48 
     49  virtual LocalAccessible* LocalChildAt(uint32_t aIndex) const override;
     50  virtual uint32_t ChildCount() const override;
     51  virtual Relation RelationByType(RelationType aType) const override;
     52 
     53  // SelectAccessible
     54  virtual void SelectedItems(nsTArray<Accessible*>* aItems) override;
     55  virtual uint32_t SelectedItemCount() override;
     56  virtual Accessible* GetSelectedItem(uint32_t aIndex) override;
     57  virtual bool IsItemSelected(uint32_t aIndex) override;
     58  virtual bool AddItemToSelection(uint32_t aIndex) override;
     59  virtual bool RemoveItemFromSelection(uint32_t aIndex) override;
     60  virtual bool SelectAll() override;
     61  virtual bool UnselectAll() override;
     62 
     63  // Widgets
     64  virtual bool IsWidget() const override;
     65  virtual bool IsActiveWidget() const override;
     66  virtual bool AreItemsOperable() const override;
     67  virtual LocalAccessible* CurrentItem() const override;
     68  virtual void SetCurrentItem(const LocalAccessible* aItem) override;
     69 
     70  virtual LocalAccessible* ContainerWidget() const override;
     71 
     72  // XULTreeAccessible
     73 
     74  /**
     75   * Return tree item accessible at the givem row. If accessible doesn't exist
     76   * in the cache then create and cache it.
     77   *
     78   * @param aRow         [in] the given row index
     79   */
     80  XULTreeItemAccessibleBase* GetTreeItemAccessible(int32_t aRow) const;
     81 
     82  /**
     83   * Invalidates the number of cached treeitem accessibles.
     84   *
     85   * @param aRow    [in] row index the invalidation starts from
     86   * @param aCount  [in] the number of treeitem accessibles to invalidate,
     87   *                 the number sign specifies whether rows have been
     88   *                 inserted (plus) or removed (minus)
     89   */
     90  void InvalidateCache(int32_t aRow, int32_t aCount);
     91 
     92  /**
     93   * Fires name change events for invalidated area of tree.
     94   *
     95   * @param aStartRow  [in] row index invalidation starts from
     96   * @param aEndRow    [in] row index invalidation ends, -1 means last row index
     97   * @param aStartCol  [in] column index invalidation starts from
     98   * @param aEndCol    [in] column index invalidation ends, -1 mens last column
     99   *                    index
    100   */
    101  void TreeViewInvalidated(int32_t aStartRow, int32_t aEndRow,
    102                           int32_t aStartCol, int32_t aEndCol);
    103 
    104  /**
    105   * Invalidates children created for previous tree view.
    106   */
    107  void TreeViewChanged(nsITreeView* aView);
    108 
    109 protected:
    110  virtual ~XULTreeAccessible();
    111 
    112  /**
    113   * Creates tree item accessible for the given row index.
    114   */
    115  virtual already_AddRefed<XULTreeItemAccessibleBase> CreateTreeItemAccessible(
    116      int32_t aRow) const;
    117 
    118  RefPtr<dom::XULTreeElement> mTree;
    119  nsITreeView* mTreeView;
    120  mutable nsRefPtrHashtable<nsPtrHashKey<const void>, XULTreeItemAccessibleBase>
    121      mAccessibleCache;
    122 };
    123 
    124 /**
    125 * Base class for tree item accessibles.
    126 */
    127 
    128 class XULTreeItemAccessibleBase : public AccessibleWrap {
    129 public:
    130  XULTreeItemAccessibleBase(nsIContent* aContent, DocAccessible* aDoc,
    131                            LocalAccessible* aParent,
    132                            dom::XULTreeElement* aTree, nsITreeView* aTreeView,
    133                            int32_t aRow);
    134 
    135  // nsISupports and cycle collection
    136  NS_DECL_ISUPPORTS_INHERITED
    137  NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(XULTreeItemAccessibleBase,
    138                                           AccessibleWrap)
    139 
    140  // LocalAccessible
    141  virtual void Shutdown() override;
    142  virtual nsRect BoundsInAppUnits() const override;
    143  MOZ_CAN_RUN_SCRIPT_BOUNDARY
    144  virtual nsIntRect BoundsInCSSPixels() const override;
    145  virtual GroupPos GroupPosition() override;
    146  virtual uint64_t NativeState() const override;
    147  virtual uint64_t NativeInteractiveState() const override;
    148  virtual int32_t IndexInParent() const override;
    149  virtual Relation RelationByType(RelationType aType) const override;
    150  virtual Accessible* FocusedChild() override;
    151  virtual void SetSelected(bool aSelect) override;
    152  virtual void TakeFocus() const override;
    153 
    154  // ActionAccessible
    155  virtual uint8_t ActionCount() const override;
    156  virtual bool HasPrimaryAction() const override;
    157  virtual void ActionNameAt(uint8_t aIndex, nsAString& aName) override;
    158  virtual bool DoAction(uint8_t aIndex) const override;
    159 
    160  // Widgets
    161  virtual LocalAccessible* ContainerWidget() const override;
    162 
    163  /**
    164   * Return row index associated with the accessible.
    165   */
    166  int32_t GetRowIndex() const { return mRow; }
    167 
    168  /**
    169   * Return cell accessible for the given column. If XUL tree accessible is not
    170   * accessible table then return null.
    171   */
    172  virtual XULTreeGridCellAccessible* GetCellAccessible(
    173      nsTreeColumn* aColumn) const {
    174    return nullptr;
    175  }
    176 
    177  /**
    178   * Proccess row invalidation. Used to fires name change events.
    179   */
    180  virtual void RowInvalidated(int32_t aStartColIdx, int32_t aEndColIdx) = 0;
    181 
    182 protected:
    183  virtual ~XULTreeItemAccessibleBase();
    184 
    185  enum { eAction_Click = 0, eAction_Expand = 1 };
    186 
    187  // LocalAccessible
    188  MOZ_CAN_RUN_SCRIPT
    189  virtual void DispatchClickEvent(uint32_t aActionIndex) const override;
    190  virtual LocalAccessible* GetSiblingAtOffset(
    191      int32_t aOffset, nsresult* aError = nullptr) const override;
    192 
    193  // XULTreeItemAccessibleBase
    194 
    195  /**
    196   * Return true if the tree item accessible is expandable (contains subrows).
    197   */
    198  bool IsExpandable() const;
    199 
    200  /**
    201   * Return name for cell at the given column.
    202   */
    203  void GetCellName(nsTreeColumn* aColumn, nsAString& aName) const;
    204 
    205  RefPtr<dom::XULTreeElement> mTree;
    206  nsITreeView* mTreeView;
    207  int32_t mRow;
    208 };
    209 
    210 /**
    211 * LocalAccessible class for items for XUL tree.
    212 */
    213 class XULTreeItemAccessible : public XULTreeItemAccessibleBase {
    214 public:
    215  XULTreeItemAccessible(nsIContent* aContent, DocAccessible* aDoc,
    216                        LocalAccessible* aParent, dom::XULTreeElement* aTree,
    217                        nsITreeView* aTreeView, int32_t aRow);
    218 
    219  // nsISupports and cycle collection
    220  NS_DECL_ISUPPORTS_INHERITED
    221  NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(XULTreeItemAccessible,
    222                                           XULTreeItemAccessibleBase)
    223 
    224  // LocalAccessible
    225  virtual void Shutdown() override;
    226  virtual ENameValueFlag DirectName(nsString& aName) const override;
    227  virtual a11y::role NativeRole() const override;
    228 
    229  // XULTreeItemAccessibleBase
    230  virtual void RowInvalidated(int32_t aStartColIdx,
    231                              int32_t aEndColIdx) override;
    232 
    233 protected:
    234  virtual ~XULTreeItemAccessible();
    235 
    236  // XULTreeItemAccessible
    237  RefPtr<nsTreeColumn> mColumn;
    238  nsString mCachedName;
    239 };
    240 
    241 /**
    242 * LocalAccessible class for columns element of XUL tree.
    243 */
    244 class XULTreeColumAccessible : public XULColumAccessible {
    245 public:
    246  XULTreeColumAccessible(nsIContent* aContent, DocAccessible* aDoc);
    247 
    248 protected:
    249  // LocalAccessible
    250  virtual LocalAccessible* GetSiblingAtOffset(
    251      int32_t aOffset, nsresult* aError = nullptr) const override;
    252 };
    253 
    254 ////////////////////////////////////////////////////////////////////////////////
    255 // LocalAccessible downcasting method
    256 
    257 inline XULTreeAccessible* LocalAccessible::AsXULTree() {
    258  return IsXULTree() ? static_cast<XULTreeAccessible*>(this) : nullptr;
    259 }
    260 
    261 }  // namespace a11y
    262 }  // namespace mozilla
    263 
    264 #endif