diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/plugins/accessible/widgets/itemviews.cpp | 29 | ||||
-rw-r--r-- | src/plugins/accessible/widgets/itemviews.h | 2 | ||||
-rw-r--r-- | src/widgets/itemviews/qtableview_p.h | 5 | ||||
-rw-r--r-- | src/widgets/itemviews/qtreeview.cpp | 14 | ||||
-rw-r--r-- | src/widgets/itemviews/qtreeview.h | 1 |
5 files changed, 42 insertions, 9 deletions
diff --git a/src/plugins/accessible/widgets/itemviews.cpp b/src/plugins/accessible/widgets/itemviews.cpp index 86c7812553..9dcf815cce 100644 --- a/src/plugins/accessible/widgets/itemviews.cpp +++ b/src/plugins/accessible/widgets/itemviews.cpp @@ -120,8 +120,6 @@ QHeaderView *QAccessibleTable::horizontalHeader() const #ifndef QT_NO_TREEVIEW } else if (const QTreeView *tv = qobject_cast<const QTreeView*>(view())) { header = tv->header(); - if (header && header->isHidden()) - header = 0; #endif } return header; @@ -1123,7 +1121,12 @@ QAccessible::Role QAccessibleTableHeaderCell::role() const QAccessible::State QAccessibleTableHeaderCell::state() const { - return QAccessible::State(); + QAccessible::State s; + if (QHeaderView *h = headerView()) { + s.invisible = !h->testAttribute(Qt::WA_WState_Visible); + s.disabled = !h->isEnabled(); + } + return s; } QRect QAccessibleTableHeaderCell::rect() const @@ -1194,6 +1197,26 @@ QAccessibleInterface *QAccessibleTableHeaderCell::child(int) const return 0; } +QHeaderView *QAccessibleTableHeaderCell::headerView() const +{ + QHeaderView *header = 0; + if (false) { +#ifndef QT_NO_TABLEVIEW + } else if (const QTableView *tv = qobject_cast<const QTableView*>(view)) { + if (orientation == Qt::Horizontal) { + header = tv->horizontalHeader(); + } else { + header = tv->verticalHeader(); + } +#endif +#ifndef QT_NO_TREEVIEW + } else if (const QTreeView *tv = qobject_cast<const QTreeView*>(view)) { + header = tv->header(); +#endif + } + return header; +} + #endif // QT_NO_ITEMVIEWS QT_END_NAMESPACE diff --git a/src/plugins/accessible/widgets/itemviews.h b/src/plugins/accessible/widgets/itemviews.h index 72b2339dd3..7692ce0e77 100644 --- a/src/plugins/accessible/widgets/itemviews.h +++ b/src/plugins/accessible/widgets/itemviews.h @@ -239,6 +239,8 @@ public: QAccessibleInterface *child(int index) const; private: + QHeaderView *headerView() const; + QPointer<QAbstractItemView> view; int index; Qt::Orientation orientation; diff --git a/src/widgets/itemviews/qtableview_p.h b/src/widgets/itemviews/qtableview_p.h index d36dcd2c3a..74eb7b7728 100644 --- a/src/widgets/itemviews/qtableview_p.h +++ b/src/widgets/itemviews/qtableview_p.h @@ -170,8 +170,9 @@ public: } inline int accessibleTable2Index(const QModelIndex &index) const { - return (index.row() + (horizontalHeader ? 1 : 0)) * (index.model()->columnCount() + (verticalHeader ? 1 : 0)) - + index.column() + (verticalHeader ? 1 : 0) + 1; + const int vHeader = verticalHeader ? 1 : 0; + return (index.row() + (horizontalHeader ? 1 : 0)) * (index.model()->columnCount() + vHeader) + + index.column() + vHeader; } int sectionSpanEndLogical(const QHeaderView *header, int logical, int span) const; diff --git a/src/widgets/itemviews/qtreeview.cpp b/src/widgets/itemviews/qtreeview.cpp index b5f1b12365..204a6c923f 100644 --- a/src/widgets/itemviews/qtreeview.cpp +++ b/src/widgets/itemviews/qtreeview.cpp @@ -3912,9 +3912,8 @@ void QTreeView::currentChanged(const QModelIndex ¤t, const QModelIndex &pr } #ifndef QT_NO_ACCESSIBILITY if (QAccessible::isActive() && current.isValid()) { - int entry = (visualIndex(current) + (header()?1:0))*current.model()->columnCount()+current.column(); QAccessibleEvent event(this, QAccessible::Focus); - event.setChild(entry); + event.setChild(accessibleTree2Index(current)); QAccessible::updateAccessibility(&event); } #endif @@ -3932,7 +3931,7 @@ void QTreeView::selectionChanged(const QItemSelection &selected, // ### does not work properly for selection ranges. QModelIndex sel = selected.indexes().value(0); if (sel.isValid()) { - int entry = (visualIndex(sel) + (header()?1:0))*sel.model()->columnCount()+sel.column(); + int entry = accessibleTree2Index(sel); Q_ASSERT(entry >= 0); QAccessibleEvent event(this, QAccessible::Selection); event.setChild(entry); @@ -3940,7 +3939,7 @@ void QTreeView::selectionChanged(const QItemSelection &selected, } QModelIndex desel = deselected.indexes().value(0); if (desel.isValid()) { - int entry = (visualIndex(desel) + (header()?1:0))*desel.model()->columnCount()+desel.column(); + int entry = accessibleTree2Index(desel); Q_ASSERT(entry >= 0); QAccessibleEvent event(this, QAccessible::SelectionRemove); event.setChild(entry); @@ -3957,6 +3956,13 @@ int QTreeView::visualIndex(const QModelIndex &index) const return d->viewIndex(index); } +int QTreeView::accessibleTree2Index(const QModelIndex &index) const +{ + // Note that this will include the header, even if its hidden. + return (visualIndex(index) + (header() ? 1 : 0)) * index.model()->columnCount() + index.column(); +} + + QT_END_NAMESPACE #include "moc_qtreeview.cpp" diff --git a/src/widgets/itemviews/qtreeview.h b/src/widgets/itemviews/qtreeview.h index d9c6cd9269..a29e9b64b0 100644 --- a/src/widgets/itemviews/qtreeview.h +++ b/src/widgets/itemviews/qtreeview.h @@ -224,6 +224,7 @@ private: friend class QAccessibleTree; friend class QAccessibleTableCell; int visualIndex(const QModelIndex &index) const; + int accessibleTree2Index(const QModelIndex &index) const; Q_DECLARE_PRIVATE(QTreeView) Q_DISABLE_COPY(QTreeView) |