Add API to clear the current index. Symmetric with clearing selection.

Change-Id: I08070f4fdf26898d5b6edd5259f011f9b3c75512
Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
bb10
Stephen Kelly 2011-11-10 20:34:46 +01:00 committed by Qt by Nokia
parent 0b293e4afc
commit 999196e336
3 changed files with 42 additions and 1 deletions

View File

@ -1118,8 +1118,16 @@ void QItemSelectionModel::select(const QItemSelection &selection, QItemSelection
*/
void QItemSelectionModel::clear()
{
Q_D(QItemSelectionModel);
clearSelection();
clearCurrentIndex();
}
/*!
Clears the current index. Emits currentChanged().
*/
void QItemSelectionModel::clearCurrentIndex()
{
Q_D(QItemSelectionModel);
QModelIndex previous = d->currentIndex;
d->currentIndex = QModelIndex();
if (previous.isValid()) {

View File

@ -202,6 +202,7 @@ public Q_SLOTS:
virtual void reset();
void clearSelection();
virtual void clearCurrentIndex();
Q_SIGNALS:
void selectionChanged(const QItemSelection &selected, const QItemSelection &deselected);

View File

@ -103,6 +103,7 @@ private slots:
void testValidRangesInSelectionsAfterReset();
void testChainedSelectionClear();
void testClearCurrentIndex();
private:
QAbstractItemModel *model;
@ -2681,6 +2682,12 @@ public:
m_target->setCurrentIndex(index, command);
}
void clearCurrentIndex()
{
QItemSelectionModel::clearCurrentIndex();
m_target->clearCurrentIndex();
}
private:
QItemSelectionModel *m_target;
@ -2717,6 +2724,31 @@ void tst_QItemSelectionModel::testChainedSelectionClear()
duplicate.setCurrentIndex(model.index(0, 0), QItemSelectionModel::NoUpdate);
QVERIFY(selectionModel.currentIndex() == duplicate.currentIndex());
duplicate.clearCurrentIndex();
QVERIFY(!duplicate.currentIndex().isValid());
QVERIFY(selectionModel.currentIndex() == duplicate.currentIndex());
}
void tst_QItemSelectionModel::testClearCurrentIndex()
{
QStringListModel model(QStringList() << "Apples" << "Pears");
QItemSelectionModel selectionModel(&model, 0);
QSignalSpy currentIndexSpy(&selectionModel, SIGNAL(currentChanged(QModelIndex,QModelIndex)));
QModelIndex firstIndex = model.index(0, 0);
QVERIFY(firstIndex.isValid());
selectionModel.setCurrentIndex(firstIndex, QItemSelectionModel::NoUpdate);
QVERIFY(selectionModel.currentIndex() == firstIndex);
QVERIFY(currentIndexSpy.size() == 1);
selectionModel.clearCurrentIndex();
QVERIFY(selectionModel.currentIndex() == QModelIndex());
QVERIFY(currentIndexSpy.size() == 2);
}
QTEST_MAIN(tst_QItemSelectionModel)