bug 777117 - add table cell accessible interface r=davidb

From 5d763ba823c357e2023c0e8b4ee6c7c173433d23 Mon Sep 17 00:00:00 2001
---
 accessible/src/generic/ARIAGridAccessible.cpp |    9 +++-
 accessible/src/generic/ARIAGridAccessible.h   |    9 +++-
 accessible/src/generic/TableCellAccessible.h  |   71 +++++++++++++++++++++++++
 accessible/src/html/HTMLTableAccessible.cpp   |    9 +++-
 accessible/src/html/HTMLTableAccessible.h     |    9 +++-
 accessible/src/xpcom/xpcAccessibleTableCell.h |   37 +++++++++++++
 accessible/src/xul/XULListboxAccessible.cpp   |    9 +++-
 accessible/src/xul/XULListboxAccessible.h     |    9 +++-
 accessible/src/xul/XULTreeGridAccessible.cpp  |    9 +++-
 accessible/src/xul/XULTreeGridAccessible.h    |    9 +++-
 10 files changed, 168 insertions(+), 12 deletions(-)
 create mode 100644 accessible/src/generic/TableCellAccessible.h
 create mode 100644 accessible/src/xpcom/xpcAccessibleTableCell.h
This commit is contained in:
Trevor Saunders 2012-07-24 11:58:25 -04:00
parent f537e09f60
commit ba6eb75773
10 changed files with 168 additions and 12 deletions

View File

@ -531,7 +531,7 @@ ARIAGridAccessible::SetARIASelected(Accessible* aAccessible,
ARIAGridCellAccessible::
ARIAGridCellAccessible(nsIContent* aContent, DocAccessible* aDoc) :
HyperTextAccessibleWrap(aContent, aDoc)
HyperTextAccessibleWrap(aContent, aDoc), xpcAccessibleTableCell(this)
{
}
@ -789,3 +789,10 @@ ARIAGridCellAccessible::GetAttributesInternal(nsIPersistentProperties* aAttribut
return NS_OK;
}
void
ARIAGridCellAccessible::Shutdown()
{
mTableCell = nsnull;
HyperTextAccessibleWrap::Shutdown();
}

View File

@ -10,7 +10,9 @@
#include "HyperTextAccessibleWrap.h"
#include "TableAccessible.h"
#include "TableCellAccessible.h"
#include "xpcAccessibleTable.h"
#include "xpcAccessibleTableCell.h"
namespace mozilla {
namespace a11y {
@ -95,7 +97,9 @@ protected:
* Accessible for ARIA gridcell and rowheader/columnheader.
*/
class ARIAGridCellAccessible : public HyperTextAccessibleWrap,
public nsIAccessibleTableCell
public nsIAccessibleTableCell,
public TableCellAccessible,
public xpcAccessibleTableCell
{
public:
ARIAGridCellAccessible(nsIContent* aContent, DocAccessible* aDoc);
@ -104,9 +108,10 @@ public:
NS_DECL_ISUPPORTS_INHERITED
// nsIAccessibleTableCell
NS_DECL_NSIACCESSIBLETABLECELL
NS_DECL_OR_FORWARD_NSIACCESSIBLETABLECELL_WITH_XPCACCESSIBLETABLECELL
// Accessible
virtual void Shutdown();
virtual void ApplyARIAState(PRUint64* aState) const;
virtual nsresult GetAttributesInternal(nsIPersistentProperties *aAttributes);
};

View File

@ -0,0 +1,71 @@
/* -*- 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"
#include "mozilla/StandardInteger.h"
class Accessible;
namespace mozilla {
namespace a11y {
class TableAccessible;
/**
* abstract interface implemented by table cell accessibles.
*/
class TableCellAccessible
{
public:
/**
* Return the table this cell is in.
*/
virtual TableAccessible* Table() { return nullptr; }
/**
* Return the Column of the table this cell is in.
*/
virtual uint32_t ColIdx() { return 0; }
/**
* Return the the row of the table this cell is in.
*/
virtual uint32_t RowIdx() { return 0; }
/**
* Return the column extent of this cell.
*/
virtual uint32_t ColExtent() { return 0; }
/**
* Return the row extent of this cell.
*/
virtual uint32_t RowExtent() { return 0; }
/**
* Return the column header cells for this cell.
*/
virtual void ColHeaderCells(nsTArray<Accessible*>* aCells) { }
/**
* Return the row header cells for this cell.
*/
virtual void RowHeaderCells(nsTArray<Accessible*>* aCells) { }
/**
* Returns true if this cell is selected.
*/
virtual bool Selected() { return false; }
};
}
}
#endif // mozilla_a11y_TableCellAccessible_h__

View File

@ -45,7 +45,7 @@ using namespace mozilla::a11y;
HTMLTableCellAccessible::
HTMLTableCellAccessible(nsIContent* aContent, DocAccessible* aDoc) :
HyperTextAccessibleWrap(aContent, aDoc)
HyperTextAccessibleWrap(aContent, aDoc), xpcAccessibleTableCell(this)
{
}
@ -59,6 +59,13 @@ NS_IMPL_ISUPPORTS_INHERITED1(HTMLTableCellAccessible,
////////////////////////////////////////////////////////////////////////////////
// HTMLTableCellAccessible: Accessible implementation
void
HTMLTableCellAccessible::Shutdown()
{
mTableCell = nsnull;
HyperTextAccessibleWrap::Shutdown();
}
role
HTMLTableCellAccessible::NativeRole()
{

View File

@ -9,7 +9,9 @@
#include "HyperTextAccessibleWrap.h"
#include "nsIAccessibleTable.h"
#include "TableAccessible.h"
#include "TableCellAccessible.h"
#include "xpcAccessibleTable.h"
#include "xpcAccessibleTableCell.h"
class nsITableLayout;
class nsITableCellLayout;
@ -21,7 +23,9 @@ namespace a11y {
* HTML table cell accessible (html:td).
*/
class HTMLTableCellAccessible : public HyperTextAccessibleWrap,
public nsIAccessibleTableCell
public nsIAccessibleTableCell,
public TableCellAccessible,
public xpcAccessibleTableCell
{
public:
HTMLTableCellAccessible(nsIContent* aContent, DocAccessible* aDoc);
@ -30,9 +34,10 @@ public:
NS_DECL_ISUPPORTS_INHERITED
// nsIAccessibleTableCell
NS_DECL_NSIACCESSIBLETABLECELL
NS_DECL_OR_FORWARD_NSIACCESSIBLETABLECELL_WITH_XPCACCESSIBLETABLECELL
// Accessible
virtual void Shutdown();
virtual a11y::role NativeRole();
virtual PRUint64 NativeState();
virtual PRUint64 NativeInteractiveState() const;

View File

@ -0,0 +1,37 @@
/* -*- 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_XPCOM_XPACESSIBLETABLECELL_H_
#define MOZILLA_A11Y_XPCOM_XPACESSIBLETABLECELL_H_
namespace mozilla {
namespace a11y {
class TableAccessible;
class TableCellAccessible;
}
}
class xpcAccessibleTableCell
{
public:
xpcAccessibleTableCell(mozilla::a11y::TableCellAccessible* aTableCell) :
mTableCell(aTableCell) { }
protected:
mozilla::a11y::TableCellAccessible* mTableCell;
};
#define NS_DECL_OR_FORWARD_NSIACCESSIBLETABLECELL_WITH_XPCACCESSIBLETABLECELL \
NS_IMETHOD GetTable(nsIAccessibleTable * *aTable); \
NS_IMETHOD GetColumnIndex(PRInt32 *aColumnIndex); \
NS_IMETHOD GetRowIndex(PRInt32 *aRowIndex); \
NS_IMETHOD GetColumnExtent(PRInt32 *aColumnExtent); \
NS_IMETHOD GetRowExtent(PRInt32 *aRowExtent); \
NS_IMETHOD GetColumnHeaderCells(nsIArray * *aColumnHeaderCells); \
NS_IMETHOD GetRowHeaderCells(nsIArray * *aRowHeaderCells); \
NS_IMETHOD IsSelected(bool *_retval );
#endif // MOZILLA_A11Y_XPCOM_XPACESSIBLETABLECELL_H_

View File

@ -727,7 +727,7 @@ XULListitemAccessible::ContainerWidget() const
XULListCellAccessible::
XULListCellAccessible(nsIContent* aContent, DocAccessible* aDoc) :
HyperTextAccessibleWrap(aContent, aDoc)
HyperTextAccessibleWrap(aContent, aDoc), xpcAccessibleTableCell(this)
{
}
@ -934,6 +934,13 @@ XULListCellAccessible::IsSelected(bool* aIsSelected)
////////////////////////////////////////////////////////////////////////////////
// XULListCellAccessible. Accessible implementation
void
XULListCellAccessible::Shutdown()
{
mTableCell = nsnull;
HyperTextAccessibleWrap::Shutdown();
}
role
XULListCellAccessible::NativeRole()
{

View File

@ -9,7 +9,9 @@
#include "BaseAccessibles.h"
#include "nsIAccessibleTable.h"
#include "TableAccessible.h"
#include "TableCellAccessible.h"
#include "xpcAccessibleTable.h"
#include "xpcAccessibleTableCell.h"
#include "XULMenuAccessible.h"
#include "XULSelectControlAccessible.h"
@ -151,7 +153,9 @@ private:
* Class represents xul:listcell.
*/
class XULListCellAccessible : public HyperTextAccessibleWrap,
public nsIAccessibleTableCell
public nsIAccessibleTableCell,
public TableCellAccessible,
public xpcAccessibleTableCell
{
public:
XULListCellAccessible(nsIContent* aContent, DocAccessible* aDoc);
@ -160,9 +164,10 @@ public:
NS_DECL_ISUPPORTS_INHERITED
// nsIAccessibleTableCell
NS_DECL_NSIACCESSIBLETABLECELL
NS_DECL_OR_FORWARD_NSIACCESSIBLETABLECELL_WITH_XPCACCESSIBLETABLECELL
// Accessible
virtual void Shutdown();
virtual nsresult GetAttributesInternal(nsIPersistentProperties *aAttributes);
virtual a11y::role NativeRole();
};

View File

@ -464,7 +464,7 @@ XULTreeGridCellAccessible::
XULTreeGridRowAccessible* aRowAcc,
nsITreeBoxObject* aTree, nsITreeView* aTreeView,
PRInt32 aRow, nsITreeColumn* aColumn) :
LeafAccessible(aContent, aDoc), mTree(aTree),
LeafAccessible(aContent, aDoc), xpcAccessibleTableCell(this), mTree(aTree),
mTreeView(aTreeView), mRow(aRow), mColumn(aColumn)
{
mParent = aRowAcc;
@ -498,6 +498,13 @@ NS_IMPL_RELEASE_INHERITED(XULTreeGridCellAccessible, LeafAccessible)
////////////////////////////////////////////////////////////////////////////////
// XULTreeGridCellAccessible: nsIAccessible implementation
void
XULTreeGridCellAccessible::Shutdown()
{
mTableCell = nsnull;
LeafAccessible::Shutdown();
}
Accessible*
XULTreeGridCellAccessible::FocusedChild()
{

View File

@ -8,7 +8,9 @@
#include "XULTreeAccessible.h"
#include "TableAccessible.h"
#include "TableCellAccessible.h"
#include "xpcAccessibleTable.h"
#include "xpcAccessibleTableCell.h"
namespace mozilla {
namespace a11y {
@ -120,7 +122,9 @@ protected:
}
class XULTreeGridCellAccessible : public LeafAccessible,
public nsIAccessibleTableCell
public nsIAccessibleTableCell,
public TableCellAccessible,
public xpcAccessibleTableCell
{
public:
@ -143,13 +147,14 @@ public:
NS_IMETHOD DoAction(PRUint8 aIndex);
// nsIAccessibleTableCell
NS_DECL_NSIACCESSIBLETABLECELL
NS_DECL_OR_FORWARD_NSIACCESSIBLETABLECELL_WITH_XPCACCESSIBLETABLECELL
// nsAccessNode
virtual bool Init();
virtual bool IsPrimaryForNode() const;
// Accessible
virtual void Shutdown();
virtual ENameValueFlag Name(nsString& aName);
virtual Accessible* FocusedChild();
virtual nsresult GetAttributesInternal(nsIPersistentProperties* aAttributes);