tor-browser

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

XULTreeGridAccessible.h (7033B)


      1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
      2 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
      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
      5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      6 
      7 #ifndef mozilla_a11y_XULTreeGridAccessible_h__
      8 #define mozilla_a11y_XULTreeGridAccessible_h__
      9 
     10 #include "mozilla/a11y/TableAccessible.h"
     11 #include "mozilla/a11y/TableCellAccessible.h"
     12 #include "XULTreeAccessible.h"
     13 
     14 namespace mozilla {
     15 namespace a11y {
     16 
     17 class XULTreeGridCellAccessible;
     18 
     19 /**
     20 * Represents accessible for XUL tree in the case when it has multiple columns.
     21 */
     22 class XULTreeGridAccessible : public XULTreeAccessible, public TableAccessible {
     23 public:
     24  XULTreeGridAccessible(nsIContent* aContent, DocAccessible* aDoc,
     25                        nsTreeBodyFrame* aTreeFrame)
     26      : XULTreeAccessible(aContent, aDoc, aTreeFrame) {
     27    mGenericTypes |= eTable;
     28  }
     29 
     30  // TableAccessible
     31  virtual uint32_t ColCount() const override;
     32  virtual uint32_t RowCount() override;
     33  virtual LocalAccessible* CellAt(uint32_t aRowIndex,
     34                                  uint32_t aColumnIndex) override;
     35  virtual void ColDescription(uint32_t aColIdx,
     36                              nsString& aDescription) override;
     37  virtual bool IsColSelected(uint32_t aColIdx) override;
     38  virtual bool IsRowSelected(uint32_t aRowIdx) override;
     39  virtual bool IsCellSelected(uint32_t aRowIdx, uint32_t aColIdx) override;
     40  virtual uint32_t SelectedCellCount() override;
     41  virtual uint32_t SelectedColCount() override;
     42  virtual uint32_t SelectedRowCount() override;
     43  virtual void SelectedCells(nsTArray<Accessible*>* aCells) override;
     44  virtual void SelectedCellIndices(nsTArray<uint32_t>* aCells) override;
     45  virtual void SelectedColIndices(nsTArray<uint32_t>* aCols) override;
     46  virtual void SelectedRowIndices(nsTArray<uint32_t>* aRows) override;
     47  virtual LocalAccessible* AsAccessible() override { return this; }
     48 
     49  virtual int32_t CellIndexAt(uint32_t aRowIdx, uint32_t aColIdx) override {
     50    return static_cast<int32_t>(ColCount() * aRowIdx + aColIdx);
     51  }
     52 
     53  virtual int32_t ColIndexAt(uint32_t aCellIdx) override;
     54  virtual int32_t RowIndexAt(uint32_t aCellIdx) override;
     55  virtual void RowAndColIndicesAt(uint32_t aCellIdx, int32_t* aRowIdx,
     56                                  int32_t* aColIdx) override;
     57 
     58  // LocalAccessible
     59  virtual TableAccessible* AsTable() override { return this; }
     60  virtual a11y::role NativeRole() const override;
     61 
     62 protected:
     63  virtual ~XULTreeGridAccessible();
     64 
     65  // XULTreeAccessible
     66  virtual already_AddRefed<XULTreeItemAccessibleBase> CreateTreeItemAccessible(
     67      int32_t aRow) const override;
     68 };
     69 
     70 /**
     71 * Represents accessible for XUL tree item in the case when XUL tree has
     72 * multiple columns.
     73 */
     74 class XULTreeGridRowAccessible final : public XULTreeItemAccessibleBase {
     75 public:
     76  using LocalAccessible::LocalChildAt;
     77 
     78  XULTreeGridRowAccessible(nsIContent* aContent, DocAccessible* aDoc,
     79                           LocalAccessible* aParent, dom::XULTreeElement* aTree,
     80                           nsITreeView* aTreeView, int32_t aRow);
     81 
     82  // nsISupports and cycle collection
     83  NS_DECL_ISUPPORTS_INHERITED
     84  NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(XULTreeGridRowAccessible,
     85                                           XULTreeItemAccessibleBase)
     86 
     87  // LocalAccessible
     88  virtual void Shutdown() override;
     89  virtual a11y::role NativeRole() const override;
     90  virtual ENameValueFlag DirectName(nsString& aName) const override;
     91  virtual LocalAccessible* LocalChildAtPoint(
     92      int32_t aX, int32_t aY, EWhichChildAtPoint aWhichChild) override;
     93 
     94  virtual LocalAccessible* LocalChildAt(uint32_t aIndex) const override;
     95  virtual uint32_t ChildCount() const override;
     96 
     97  // XULTreeItemAccessibleBase
     98  XULTreeGridCellAccessible* GetCellAccessible(
     99      nsTreeColumn* aColumn) const final;
    100  virtual void RowInvalidated(int32_t aStartColIdx,
    101                              int32_t aEndColIdx) override;
    102 
    103 protected:
    104  virtual ~XULTreeGridRowAccessible();
    105 
    106  // XULTreeItemAccessibleBase
    107  mutable nsRefPtrHashtable<nsPtrHashKey<const void>, XULTreeGridCellAccessible>
    108      mAccessibleCache;
    109 };
    110 
    111 /**
    112 * Represents an accessible for XUL tree cell in the case when XUL tree has
    113 * multiple columns.
    114 */
    115 
    116 class XULTreeGridCellAccessible : public LeafAccessible,
    117                                  public TableCellAccessible {
    118 public:
    119  XULTreeGridCellAccessible(nsIContent* aContent, DocAccessible* aDoc,
    120                            XULTreeGridRowAccessible* aRowAcc,
    121                            dom::XULTreeElement* aTree, nsITreeView* aTreeView,
    122                            int32_t aRow, nsTreeColumn* aColumn);
    123 
    124  // nsISupports
    125  NS_DECL_ISUPPORTS_INHERITED
    126  NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(XULTreeGridCellAccessible,
    127                                           LeafAccessible)
    128 
    129  // LocalAccessible
    130  virtual void Shutdown() override;
    131  virtual TableCellAccessible* AsTableCell() override { return this; }
    132  virtual nsRect BoundsInAppUnits() const override;
    133  virtual nsIntRect BoundsInCSSPixels() const override;
    134  virtual ENameValueFlag DirectName(nsString& aName) const override;
    135  virtual Accessible* FocusedChild() override;
    136  virtual already_AddRefed<AccAttributes> NativeAttributes() override;
    137  virtual int32_t IndexInParent() const override;
    138  virtual Relation RelationByType(RelationType aType) const override;
    139  virtual a11y::role NativeRole() const override;
    140  virtual uint64_t NativeState() const override;
    141  virtual uint64_t NativeInteractiveState() const override;
    142 
    143  // ActionAccessible
    144  virtual bool HasPrimaryAction() const override;
    145  virtual void ActionNameAt(uint8_t aIndex, nsAString& aName) override;
    146 
    147  // TableCellAccessible
    148  virtual TableAccessible* Table() const override;
    149  virtual uint32_t ColIdx() const override;
    150  virtual uint32_t RowIdx() const override;
    151  virtual void ColHeaderCells(nsTArray<Accessible*>* aHeaderCells) override;
    152  virtual void RowHeaderCells(nsTArray<Accessible*>* aCells) override {}
    153  virtual bool Selected() override;
    154 
    155  /**
    156   * Fire name or state change event if the accessible text or value has been
    157   * changed.
    158   * @return true if name has changed
    159   */
    160  bool CellInvalidated();
    161 
    162 protected:
    163  virtual ~XULTreeGridCellAccessible();
    164 
    165  // LocalAccessible
    166  virtual LocalAccessible* GetSiblingAtOffset(
    167      int32_t aOffset, nsresult* aError = nullptr) const override;
    168  MOZ_CAN_RUN_SCRIPT
    169  virtual void DispatchClickEvent(uint32_t aActionIndex) const override;
    170 
    171  // XULTreeGridCellAccessible
    172 
    173  /**
    174   * Return true if value of cell can be changed. Accounting for the state of
    175   * its column.
    176   */
    177  bool IsEditableCell() const;
    178 
    179  enum { eAction_Click = 0 };
    180 
    181  RefPtr<dom::XULTreeElement> mTree;
    182  nsITreeView* mTreeView;
    183 
    184  int32_t mRow;
    185  RefPtr<nsTreeColumn> mColumn;
    186 
    187  nsString mCachedTextEquiv;
    188 };
    189 
    190 }  // namespace a11y
    191 }  // namespace mozilla
    192 
    193 #endif