DXR is a code search and navigation tool aimed at making sense of large projects. It supports full-text and regex searches as well as structural queries.

Implementation

Mercurial (c68fe15a81fc)

VCS Links

Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* 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_ARIAGridAccessible_h_
#define MOZILLA_A11Y_ARIAGridAccessible_h_


#include "HyperTextAccessibleWrap.h"
#include "TableAccessible.h"
#include "TableCellAccessible.h"

namespace mozilla {
namespace mozilla {
namespace a11y {

/**
 * Accessible for ARIA grid and treegrid.
 */
 */
class ARIAGridAccessible : public HyperTextAccessibleWrap,
                           public TableAccessible {
 public:
  ARIAGridAccessible(nsIContent* aContent, DocAccessible* aDoc);


  NS_INLINE_DECL_REFCOUNTING_INHERITED(ARIAGridAccessible,
                                       HyperTextAccessibleWrap)

  // Accessible
  virtual a11y::role NativeRole() const override;
  virtual already_AddRefed<nsIPersistentProperties> NativeAttributes() override;
  virtual TableAccessible* AsTable() override { return this; }
  virtual TableAccessible* AsTable() override { return this; }

  // TableAccessible
  virtual uint32_t ColCount() const override;
  virtual uint32_t RowCount() override;
  virtual Accessible* CellAt(uint32_t aRowIndex,
                             uint32_t aColumnIndex) override;
  virtual bool IsColSelected(uint32_t aColIdx) override;
  virtual bool IsColSelected(uint32_t aColIdx) override;
  virtual bool IsRowSelected(uint32_t aRowIdx) override;
  virtual bool IsCellSelected(uint32_t aRowIdx, uint32_t aColIdx) override;
  virtual uint32_t SelectedCellCount() override;
  virtual uint32_t SelectedColCount() override;
  virtual uint32_t SelectedRowCount() override;
  virtual uint32_t SelectedRowCount() override;
  virtual void SelectedCells(nsTArray<Accessible*>* aCells) override;
  virtual void SelectedCellIndices(nsTArray<uint32_t>* aCells) override;
  virtual void SelectedColIndices(nsTArray<uint32_t>* aCols) override;
  virtual void SelectedRowIndices(nsTArray<uint32_t>* aRows) override;
  virtual void SelectCol(uint32_t aColIdx) override;
  virtual void SelectCol(uint32_t aColIdx) override;
  virtual void SelectRow(uint32_t aRowIdx) override;
  virtual void UnselectCol(uint32_t aColIdx) override;
  virtual void UnselectRow(uint32_t aRowIdx) override;
  virtual Accessible* AsAccessible() override { return this; }


 protected:
  virtual ~ARIAGridAccessible() {}

  /**
   * Set aria-selected attribute value on DOM node of the given accessible.
   *
   * @param  aAccessible  [in] accessible
   * @param  aAccessible  [in] accessible
   * @param  aIsSelected  [in] new value of aria-selected attribute
   * @param  aNotify      [in, optional] specifies if DOM should be notified
   *                       about attribute change (used internally).
   */
  nsresult SetARIASelected(Accessible* aAccessible, bool aIsSelected,
  nsresult SetARIASelected(Accessible* aAccessible, bool aIsSelected,
                           bool aNotify = true);
};

/**
 * Accessible for ARIA row.
 * Accessible for ARIA row.
 */
class ARIARowAccessible : public HyperTextAccessibleWrap {
 public:
  ARIARowAccessible(nsIContent* aContent, DocAccessible* aDoc);


  NS_INLINE_DECL_REFCOUNTING_INHERITED(ARIARowAccessible,
                                       HyperTextAccessibleWrap)

  // Accessible
  virtual a11y::role NativeRole() const override;
  virtual mozilla::a11y::GroupPos GroupPosition() override;


 protected:
  virtual ~ARIARowAccessible() {}

  // Accessible
  virtual ENameValueFlag NativeName(nsString& aName) const override;
  virtual ENameValueFlag NativeName(nsString& aName) const override;
};

/**
 * Accessible for ARIA gridcell and rowheader/columnheader.
 */
class ARIAGridCellAccessible : public HyperTextAccessibleWrap,
                               public TableCellAccessible {
                               public TableCellAccessible {
 public:
  ARIAGridCellAccessible(nsIContent* aContent, DocAccessible* aDoc);

  NS_INLINE_DECL_REFCOUNTING_INHERITED(ARIAGridCellAccessible,
                                       HyperTextAccessibleWrap)
                                       HyperTextAccessibleWrap)

  // Accessible
  virtual a11y::role NativeRole() const override;
  virtual TableCellAccessible* AsTableCell() override { return this; }
  virtual void ApplyARIAState(uint64_t* aState) const override;
  virtual void ApplyARIAState(uint64_t* aState) const override;
  virtual already_AddRefed<nsIPersistentProperties> NativeAttributes() override;
  virtual mozilla::a11y::GroupPos GroupPosition() override;

 protected:
  virtual ~ARIAGridCellAccessible() {}
  virtual ~ARIAGridCellAccessible() {}

  /**
   * Return a containing row.
   */
  Accessible* Row() const {
  Accessible* Row() const {
    Accessible* row = Parent();
    return row && row->IsTableRow() ? row : nullptr;
  }

  /**
  /**
   * Return index of the given row.
   * Returns -1 upon error.
   */
  int32_t RowIndexFor(Accessible* aRow) const;


  // TableCellAccessible
  virtual TableAccessible* Table() const override;
  virtual uint32_t ColIdx() const override;
  virtual uint32_t RowIdx() const override;
  virtual bool Selected() override;
  virtual bool Selected() override;
};

}  // namespace a11y
}  // namespace mozilla
}  // namespace mozilla

#endif