diff options
author | Frederik Gladhorn <frederik.gladhorn@nokia.com> | 2011-09-15 21:41:54 +0200 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2011-09-19 12:06:13 +0200 |
commit | 76d0d1926466d42b1b25f0bac642c1e0f239074c (patch) | |
tree | 84397813957307cf1ac393ac29d045acc6e08846 /src/plugins/accessible/widgets/itemviews.cpp | |
parent | 3647a00d47fd774daccce9f143cc2046fb59099d (diff) |
Add parent and child functions to QAccessibleInterface.
Stop the mis-use of navigate to find the parent.
In order to make navigation straight forward
parent and child functions are now part of
QAccessibleInterface.
This allows navigating the hierarchy of
accessible objects without the 1-based indexes in the
navigate function which lead to confusion.
Eventually the support for Ancestor in navigate can be completely removed
and forwarded in the windows bridge if needed.
In addition default parameters for virtual children.
This will make the transition smooth since it allows to remove the integer
already.
Change-Id: I278287ce17161f9fa46797ac244676778c859576
Reviewed-on: http://codereview.qt-project.org/5024
Reviewed-by: Frederik Gladhorn <frederik.gladhorn@nokia.com>
Reviewed-by: Jan-Arve Sæther <jan-arve.saether@nokia.com>
Diffstat (limited to 'src/plugins/accessible/widgets/itemviews.cpp')
-rw-r--r-- | src/plugins/accessible/widgets/itemviews.cpp | 78 |
1 files changed, 53 insertions, 25 deletions
diff --git a/src/plugins/accessible/widgets/itemviews.cpp b/src/plugins/accessible/widgets/itemviews.cpp index 19ef7b59e8..90e810ab32 100644 --- a/src/plugins/accessible/widgets/itemviews.cpp +++ b/src/plugins/accessible/widgets/itemviews.cpp @@ -359,9 +359,7 @@ QAccessible2::TableModelChange QAccessibleTable2::modelChange() const QAccessible::Role QAccessibleTable2::role(int child) const { - Q_ASSERT(child >= 0); - if (child > 0) - return QAccessible::Cell; + Q_ASSERT(child == 0); return m_role; } @@ -386,6 +384,8 @@ int QAccessibleTable2::childAt(int x, int y) const int QAccessibleTable2::childCount() const { + if (!view->model()) + return 0; int vHeader = verticalHeader() ? 1 : 0; int hHeader = horizontalHeader() ? 1 : 0; return (view->model()->rowCount()+hHeader) * (view->model()->columnCount()+vHeader); @@ -430,21 +430,31 @@ QRect QAccessibleTable2::rect(int child) const return QRect(pos.x(), pos.y(), view->width(), view->height()); } +QAccessibleInterface *QAccessibleTable2::parent() const +{ + if (view->parent()) { + return QAccessible::queryAccessibleInterface(view->parent()); + } + return 0; +} + +QAccessibleInterface *QAccessibleTable2::child(int index) const +{ + // Fixme: get rid of the +1 madness + return childFromLogical(index + 1); +} + int QAccessibleTable2::navigate(RelationFlag relation, int index, QAccessibleInterface **iface) const { *iface = 0; switch (relation) { case Ancestor: { - if (index == 1 && view->parent()) { - *iface = QAccessible::queryAccessibleInterface(view->parent()); - if (*iface) - return 0; - } - break; + *iface = parent(); + return *iface ? 0 : -1; } case QAccessible::Child: { Q_ASSERT(index > 0); - *iface = childFromLogical(index); + *iface = child(index - 1); if (*iface) { return 0; } @@ -806,14 +816,23 @@ bool QAccessibleTable2Cell::isValid() const return m_index.isValid(); } +QAccessibleInterface *QAccessibleTable2Cell::parent() const +{ + if (m_role == QAccessible::TreeItem) + return new QAccessibleTree(view); + + return new QAccessibleTable2(view); +} + +QAccessibleInterface *QAccessibleTable2Cell::child(int) const +{ + return 0; +} + int QAccessibleTable2Cell::navigate(RelationFlag relation, int index, QAccessibleInterface **iface) const { if (relation == Ancestor && index == 1) { - if (m_role == QAccessible::TreeItem) { - *iface = new QAccessibleTree(view); - } else { - *iface = new QAccessibleTable2(view); - } + *iface = parent(); return 0; } @@ -978,19 +997,28 @@ bool QAccessibleTable2HeaderCell::isValid() const return true; } -int QAccessibleTable2HeaderCell::navigate(RelationFlag relation, int index, QAccessibleInterface **iface) const +QAccessibleInterface *QAccessibleTable2HeaderCell::parent() const { - if (relation == QAccessible::Ancestor && index == 1) { - if (false) { + if (false) { #ifndef QT_NO_TREEVIEW - } else if (qobject_cast<const QTreeView*>(view)) { - *iface = new QAccessibleTree(view); - return 0; + } else if (qobject_cast<const QTreeView*>(view)) { + return new QAccessibleTree(view); #endif - } else { - *iface = new QAccessibleTable2(view); - return 0; - } + } else { + return new QAccessibleTable2(view); + } +} + +QAccessibleInterface *QAccessibleTable2HeaderCell::child(int) const +{ + return 0; +} + +int QAccessibleTable2HeaderCell::navigate(RelationFlag relation, int index, QAccessibleInterface **iface) const +{ + if (relation == QAccessible::Ancestor && index == 1) { + *iface = parent(); + return *iface ? 0 : -1; } *iface = 0; return -1; |