AccessibilityARIAGridCell.cpp [plain text]
#include "config.h"
#include "AccessibilityARIAGridCell.h"
#include "AccessibilityObject.h"
#include "AccessibilityTable.h"
#include "AccessibilityTableRow.h"
using namespace std;
namespace WebCore {
AccessibilityARIAGridCell::AccessibilityARIAGridCell(RenderObject* renderer)
: AccessibilityTableCell(renderer)
{
}
AccessibilityARIAGridCell::~AccessibilityARIAGridCell()
{
}
PassRefPtr<AccessibilityARIAGridCell> AccessibilityARIAGridCell::create(RenderObject* renderer)
{
return adoptRef(new AccessibilityARIAGridCell(renderer));
}
AccessibilityObject* AccessibilityARIAGridCell::parentTable() const
{
AccessibilityObject* parent = parentObjectUnignored();
if (!parent)
return 0;
if (parent->isAccessibilityTable())
return parent;
parent = parent->parentObjectUnignored();
if (!parent || !parent->isAccessibilityTable())
return 0;
return parent;
}
void AccessibilityARIAGridCell::rowIndexRange(pair<unsigned, unsigned>& rowRange)
{
AccessibilityObject* parent = parentObjectUnignored();
if (!parent)
return;
if (parent->isTableRow()) {
rowRange.first = static_cast<AccessibilityTableRow*>(parent)->rowIndex();
} else if (parent->isAccessibilityTable()) {
unsigned columnCount = static_cast<AccessibilityTable*>(parent)->columnCount();
if (!columnCount)
return;
AccessibilityChildrenVector siblings = parent->children();
unsigned childrenSize = siblings.size();
for (unsigned k = 0; k < childrenSize; ++k) {
if (siblings[k].get() == this) {
rowRange.first = k / columnCount;
break;
}
}
}
rowRange.second = 1;
}
void AccessibilityARIAGridCell::columnIndexRange(pair<unsigned, unsigned>& columnRange)
{
AccessibilityObject* parent = parentObjectUnignored();
if (!parent)
return;
if (!parent->isTableRow() && !parent->isAccessibilityTable())
return;
AccessibilityChildrenVector siblings = parent->children();
unsigned childrenSize = siblings.size();
for (unsigned k = 0; k < childrenSize; ++k) {
if (siblings[k].get() == this) {
columnRange.first = k;
break;
}
}
columnRange.second = 1;
}
}