2012-07-24 19:58:25 +04:00
|
|
|
/* -*- 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_TableCellAccessible_h__
|
|
|
|
#define mozilla_a11y_TableCellAccessible_h__
|
|
|
|
|
|
|
|
#include "nsTArray.h"
|
2013-07-30 18:25:31 +04:00
|
|
|
#include <stdint.h>
|
2012-07-24 19:58:25 +04:00
|
|
|
|
|
|
|
namespace mozilla {
|
|
|
|
namespace a11y {
|
|
|
|
|
2012-11-18 06:01:44 +04:00
|
|
|
class Accessible;
|
2012-08-09 10:24:31 +04:00
|
|
|
class TableAccessible;
|
2012-07-24 19:58:25 +04:00
|
|
|
|
|
|
|
/**
|
2012-08-09 10:24:31 +04:00
|
|
|
* Abstract interface implemented by table cell accessibles.
|
2012-07-24 19:58:25 +04:00
|
|
|
*/
|
|
|
|
class TableCellAccessible {
|
|
|
|
public:
|
|
|
|
/**
|
|
|
|
* Return the table this cell is in.
|
|
|
|
*/
|
2012-08-09 10:24:31 +04:00
|
|
|
virtual TableAccessible* Table() const = 0;
|
2012-07-24 19:58:25 +04:00
|
|
|
|
|
|
|
/**
|
2012-08-09 10:24:31 +04:00
|
|
|
* Return the column of the table this cell is in.
|
2012-07-24 19:58:25 +04:00
|
|
|
*/
|
2012-08-09 10:24:31 +04:00
|
|
|
virtual uint32_t ColIdx() const = 0;
|
2012-07-24 19:58:25 +04:00
|
|
|
|
|
|
|
/**
|
2012-08-09 10:24:31 +04:00
|
|
|
* Return the row of the table this cell is in.
|
2012-07-24 19:58:25 +04:00
|
|
|
*/
|
2012-08-09 10:24:31 +04:00
|
|
|
virtual uint32_t RowIdx() const = 0;
|
2012-07-24 19:58:25 +04:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Return the column extent of this cell.
|
|
|
|
*/
|
2012-08-09 10:24:31 +04:00
|
|
|
virtual uint32_t ColExtent() const { return 1; }
|
2012-07-24 19:58:25 +04:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Return the row extent of this cell.
|
|
|
|
*/
|
2012-08-09 10:24:31 +04:00
|
|
|
virtual uint32_t RowExtent() const { return 1; }
|
2012-07-24 19:58:25 +04:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Return the column header cells for this cell.
|
|
|
|
*/
|
2012-08-09 10:24:31 +04:00
|
|
|
virtual void ColHeaderCells(nsTArray<Accessible*>* aCells);
|
2012-07-24 19:58:25 +04:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Return the row header cells for this cell.
|
|
|
|
*/
|
2012-08-09 10:24:31 +04:00
|
|
|
virtual void RowHeaderCells(nsTArray<Accessible*>* aCells);
|
2012-07-24 19:58:25 +04:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns true if this cell is selected.
|
|
|
|
*/
|
2012-08-09 10:24:31 +04:00
|
|
|
virtual bool Selected() = 0;
|
Bug 1638238: Cache previous column header for each cell to make TableCellAccessible::ColHeaders faster. r=eeejay
Previously, to get the column headers for a cell when there weren't explicit headers, we walked over all previous cells in the column looking for headers.
For large tables with thousands of rows, this was very expensive, particularly when Windows screen readers rendered virtual buffers, fetching headers for all cells.
To speed this up, we now lazily cache the previous column header for each cell.
We even cache whether there is no previous header, since that is quite common and we don't want to pointlessly walk in that case.
Subsequent cells utilise the cached values (if any) for prior cells.
We don't store the cache on individual TableCellAccessibles because that would require us to walk all cells to invalidate the cache, even if few or no cells had cached values.
Instead, we store the cache as a hash table on the TableAccessible.
This way, we can just clear the cache whenever a column header is added to the tree.
We invalidate the cache whenever a column header is bound to its parent.
We don't need to invalidate the cache for removals because we instead just ignore defunct Accessibles in the cache.
Differential Revision: https://phabricator.services.mozilla.com/D76106
2020-05-25 17:15:57 +03:00
|
|
|
|
|
|
|
private:
|
|
|
|
Accessible* PrevColHeader();
|
2012-07-24 19:58:25 +04:00
|
|
|
};
|
|
|
|
|
2012-08-09 10:24:31 +04:00
|
|
|
} // namespace a11y
|
|
|
|
} // namespace mozilla
|
2012-07-24 19:58:25 +04:00
|
|
|
|
|
|
|
#endif // mozilla_a11y_TableCellAccessible_h__
|