Use the virtual API to clear a selection.

Reviewed-by: Gabriel de Dietrich <gabriel.dietrich-de@nokia.com>
Merge-request: 980
(cherry picked from commit e3cd651d92a9e550fe52360d1be6ae41d0f2ab85)
bb10
Stephen Kelly 2010-12-12 22:11:23 +01:00 committed by Olivier Goffart
parent fde6021547
commit 3880eee2d0
2 changed files with 56 additions and 5 deletions

View File

@ -1145,11 +1145,8 @@ void QItemSelectionModel::clearSelection()
Q_D(QItemSelectionModel);
if (d->ranges.count() == 0 && d->currentSelection.count() == 0)
return;
QItemSelection selection = d->ranges;
selection.merge(d->currentSelection, d->currentCommand);
d->ranges.clear();
d->currentSelection.clear();
emit selectionChanged(QItemSelection(), selection);
select(QItemSelection(), Clear);
}

View File

@ -101,6 +101,7 @@ private slots:
void testDifferentModels();
void testValidRangesInSelectionsAfterReset();
void testChainedSelectionClear();
private:
QAbstractItemModel *model;
@ -2655,5 +2656,58 @@ void tst_QItemSelectionModel::testValidRangesInSelectionsAfterReset()
model.setStringList(strings);
}
class DuplicateItemSelectionModel : public QItemSelectionModel
{
Q_OBJECT
public:
DuplicateItemSelectionModel(QItemSelectionModel *target, QAbstractItemModel *model, QObject *parent = 0)
: QItemSelectionModel(model, parent), m_target(target)
{
}
void select(const QItemSelection &selection, QItemSelectionModel::SelectionFlags command)
{
QItemSelectionModel::select(selection, command);
m_target->select(selection, command);
}
using QItemSelectionModel::select;
private:
QItemSelectionModel *m_target;
};
void tst_QItemSelectionModel::testChainedSelectionClear()
{
QStringListModel model(QStringList() << "Apples" << "Pears");
QItemSelectionModel selectionModel(&model, 0);
DuplicateItemSelectionModel duplicate(&selectionModel, &model, 0);
duplicate.select(model.index(0, 0), QItemSelectionModel::Select);
{
QModelIndexList selectedIndexes = selectionModel.selection().indexes();
QModelIndexList duplicatedIndexes = duplicate.selection().indexes();
QVERIFY(selectedIndexes.size() == duplicatedIndexes.size());
QVERIFY(selectedIndexes.size() == 1);
QVERIFY(selectedIndexes.first() == model.index(0, 0));
}
duplicate.clearSelection();
{
QModelIndexList selectedIndexes = selectionModel.selection().indexes();
QModelIndexList duplicatedIndexes = duplicate.selection().indexes();
QVERIFY(selectedIndexes.size() == duplicatedIndexes.size());
QVERIFY(selectedIndexes.size() == 0);
}
}
QTEST_MAIN(tst_QItemSelectionModel)
#include "tst_qitemselectionmodel.moc"