diff options
author | Gabriel de Dietrich <gabriel.dietrich-de@nokia.com> | 2009-08-07 15:14:31 (GMT) |
---|---|---|
committer | Gabriel de Dietrich <gabriel.dietrich-de@nokia.com> | 2009-08-07 15:14:31 (GMT) |
commit | d13418effc5f00474541ae513a30c9a42c2a1cb3 (patch) | |
tree | 9ce95e34eaf57b2936cc77c7004988493433c093 /src | |
parent | 132a319dc782ef1feebe6582fb6f05dc91df74bb (diff) | |
download | Qt-d13418effc5f00474541ae513a30c9a42c2a1cb3.zip Qt-d13418effc5f00474541ae513a30c9a42c2a1cb3.tar.gz Qt-d13418effc5f00474541ae513a30c9a42c2a1cb3.tar.bz2 |
QItemSelectionModel did not send selectionChanged signal when deleting an item
in a tree-like model with one of its grand-children being selected.
Added recursive deselection for the model.
Task-number: 232634
Reviewed-by: thierry
Diffstat (limited to 'src')
-rw-r--r-- | src/gui/itemviews/qitemselectionmodel.cpp | 22 | ||||
-rw-r--r-- | src/gui/itemviews/qitemselectionmodel_p.h | 2 |
2 files changed, 23 insertions, 1 deletions
diff --git a/src/gui/itemviews/qitemselectionmodel.cpp b/src/gui/itemviews/qitemselectionmodel.cpp index 9dad95f..0f35ac1 100644 --- a/src/gui/itemviews/qitemselectionmodel.cpp +++ b/src/gui/itemviews/qitemselectionmodel.cpp @@ -593,10 +593,30 @@ void QItemSelectionModelPrivate::_q_rowsAboutToBeRemoved(const QModelIndex &pare // update selectionsx QModelIndex tl = model->index(start, 0, parent); QModelIndex br = model->index(end, model->columnCount(parent) - 1, parent); - q->select(QItemSelection(tl, br), QItemSelectionModel::Deselect); + recursiveDeselect(QItemSelectionRange(tl, br)); finalize(); } +void QItemSelectionModelPrivate::recursiveDeselect(const QItemSelectionRange &range) +{ + Q_Q(QItemSelectionModel); + + QItemSelection sel(range.topLeft(), range.bottomRight()); + q->select(sel, QItemSelectionModel::Deselect); + + QModelIndexList idxList = range.indexes(); + QModelIndexList::const_iterator it = idxList.begin(); + for (; it != idxList.end(); ++it) + { + if (!model->hasChildren(*it)) + continue; + + const QModelIndex &firstChild = it->child(0,0); + const QModelIndex &lastChild = it->child(model->rowCount(*it) - 1, model->columnCount(*it) - 1); + recursiveDeselect(QItemSelectionRange(firstChild, lastChild)); + } +} + /*! \internal */ diff --git a/src/gui/itemviews/qitemselectionmodel_p.h b/src/gui/itemviews/qitemselectionmodel_p.h index 18ad506..8176d4c 100644 --- a/src/gui/itemviews/qitemselectionmodel_p.h +++ b/src/gui/itemviews/qitemselectionmodel_p.h @@ -77,6 +77,8 @@ public: void _q_layoutAboutToBeChanged(); void _q_layoutChanged(); + void recursiveDeselect(const QItemSelectionRange &range); + inline void remove(QList<QItemSelectionRange> &r) { QList<QItemSelectionRange>::const_iterator it = r.constBegin(); |