Git commit e1618e3abece58cd72537cc741fd827df2b52aba by Aurélien Gâteau. Committed on 11/09/2013 at 09:29. Pushed by gateau into branch 'KDE/4.11'.
Bring back "KLinkItemSelectionModel: Synchronize currentIndex" The changes from this commit were initially committed to KDE/4.11 as 14e2ff5b7359d572cd520fd7da3791230ded169a, but I asked for it to be reverted before 4.11.1 went out because it caused a bad regression in Gwenview. It was thus reverted by commit 26201fd95cf69f6fda1d443714beebec3b5be40d. The fix for the regression in Gwenview has just been committed, so I am bringing back this one. CCMAIL:[email protected] M +17 -0 kdeui/itemviews/klinkitemselectionmodel.cpp M +2 -0 kdeui/itemviews/klinkitemselectionmodel.h M +53 -14 kdeui/tests/klinkitemselectionmodeltest.cpp M +16 -0 kdeui/tests/klinkitemselectionmodeltest.h http://commits.kde.org/kdelibs/e1618e3abece58cd72537cc741fd827df2b52aba diff --git a/kdeui/itemviews/klinkitemselectionmodel.cpp b/kdeui/itemviews/klinkitemselectionmodel.cpp index ee55d4f..be8395f 100644 --- a/kdeui/itemviews/klinkitemselectionmodel.cpp +++ b/kdeui/itemviews/klinkitemselectionmodel.cpp @@ -56,6 +56,8 @@ public: } void sourceSelectionChanged(const QItemSelection& selected, const QItemSelection& deselected); + void sourceCurrentChanged(const QModelIndex& current); + void slotCurrentChanged(const QModelIndex& current); QAbstractItemModel * const m_model; QItemSelectionModel * const m_linkedItemSelectionModel; @@ -68,6 +70,8 @@ KLinkItemSelectionModel::KLinkItemSelectionModel(QAbstractItemModel *model, QIte d_ptr(new KLinkItemSelectionModelPrivate(this, model, proxySelector)) { connect(proxySelector, SIGNAL(selectionChanged(QItemSelection,QItemSelection)), SLOT(sourceSelectionChanged(QItemSelection,QItemSelection))); + connect(proxySelector, SIGNAL(currentChanged(QModelIndex,QModelIndex)), SLOT(sourceCurrentChanged(QModelIndex))); + connect(this, SIGNAL(currentChanged(QModelIndex,QModelIndex)), SLOT(slotCurrentChanged(QModelIndex))); } KLinkItemSelectionModel::~KLinkItemSelectionModel() @@ -144,6 +148,12 @@ void KLinkItemSelectionModel::select(const QItemSelection &selection, QItemSelec d->m_ignoreCurrentChanged = false; } +void KLinkItemSelectionModelPrivate::slotCurrentChanged(const QModelIndex& current) +{ + const QModelIndex mappedCurrent = m_indexMapper->mapLeftToRight(current); + m_linkedItemSelectionModel->setCurrentIndex(mappedCurrent, QItemSelectionModel::NoUpdate); +} + void KLinkItemSelectionModelPrivate::sourceSelectionChanged(const QItemSelection& selected, const QItemSelection& deselected) { Q_Q(KLinkItemSelectionModel); @@ -163,4 +173,11 @@ void KLinkItemSelectionModelPrivate::sourceSelectionChanged(const QItemSelection q->QItemSelectionModel::select(mappedSelection, QItemSelectionModel::Select); } +void KLinkItemSelectionModelPrivate::sourceCurrentChanged(const QModelIndex& current) +{ + Q_Q(KLinkItemSelectionModel); + const QModelIndex mappedCurrent = m_indexMapper->mapRightToLeft(current); + q->setCurrentIndex(mappedCurrent, QItemSelectionModel::NoUpdate); +} + #include "klinkitemselectionmodel.moc" diff --git a/kdeui/itemviews/klinkitemselectionmodel.h b/kdeui/itemviews/klinkitemselectionmodel.h index 392da46..13393de 100644 --- a/kdeui/itemviews/klinkitemselectionmodel.h +++ b/kdeui/itemviews/klinkitemselectionmodel.h @@ -110,6 +110,8 @@ protected: private: Q_DECLARE_PRIVATE(KLinkItemSelectionModel) Q_PRIVATE_SLOT( d_func(), void sourceSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected)) + Q_PRIVATE_SLOT( d_func(), void sourceCurrentChanged(const QModelIndex ¤t)) + Q_PRIVATE_SLOT( d_func(), void slotCurrentChanged(const QModelIndex ¤t)) }; #endif diff --git a/kdeui/tests/klinkitemselectionmodeltest.cpp b/kdeui/tests/klinkitemselectionmodeltest.cpp index c3f7132..91540fd 100644 --- a/kdeui/tests/klinkitemselectionmodeltest.cpp +++ b/kdeui/tests/klinkitemselectionmodeltest.cpp @@ -29,34 +29,73 @@ QTEST_KDEMAIN(KLinkItemSelectionModelTest, GUI) -void KLinkItemSelectionModelTest::testToggle() +void KLinkItemSelectionModelTest::init() { - // Init mainModel - QStandardItemModel mainModel; + // Init m_mainModel + m_mainModel = new QStandardItemModel; for (int x=0; x < 10; ++x) { - mainModel.appendRow(new QStandardItem(QString::number(x))); + m_mainModel->appendRow(new QStandardItem(QString::number(x))); } - QItemSelectionModel mainSelectionModel(&mainModel); + m_mainSelectionModel = new QItemSelectionModel(m_mainModel); // Init subModel - QSortFilterProxyModel subModel; - subModel.setFilterRegExp(QRegExp("^[5-9]")); - subModel.setSourceModel(&mainModel); - KLinkItemSelectionModel subSelectionModel(&subModel, &mainSelectionModel); + m_subModel = new QSortFilterProxyModel; + m_subModel->setFilterRegExp(QRegExp("^[5-9]")); + m_subModel->setSourceModel(m_mainModel); + m_subSelectionModel = new KLinkItemSelectionModel(m_subModel, m_mainSelectionModel); +} + +void KLinkItemSelectionModelTest::cleanup() +{ + delete m_mainSelectionModel; + m_mainSelectionModel = 0; + delete m_mainModel; + m_mainModel = 0; + delete m_subSelectionModel; + m_subSelectionModel = 0; + delete m_subModel; + m_subModel = 0; +} +void KLinkItemSelectionModelTest::testToggle() +{ // Select last index in subModel - QModelIndex subIndex = subModel.index(subModel.rowCount() - 1, 0); - subSelectionModel.select(subIndex, QItemSelectionModel::Toggle); + QModelIndex subIndex = m_subModel->index(m_subModel->rowCount() - 1, 0); + m_subSelectionModel->select(subIndex, QItemSelectionModel::Toggle); // Check selections - QModelIndexList subList = subSelectionModel.selectedIndexes(); + QModelIndexList subList = m_subSelectionModel->selectedIndexes(); QCOMPARE(subList.count(), 1); QCOMPARE(subList.first(), subIndex); - QModelIndexList mainList = mainSelectionModel.selectedIndexes(); - QModelIndex mainIndex = mainModel.index(mainModel.rowCount() - 1, 0); + QModelIndexList mainList = m_mainSelectionModel->selectedIndexes(); + QModelIndex mainIndex = m_mainModel->index(m_mainModel->rowCount() - 1, 0); QCOMPARE(mainList.count(), 1); QCOMPARE(mainList.first(), mainIndex); } +void KLinkItemSelectionModelTest::testMainSetCurrent() +{ + // Set last index of mainModel as current + QModelIndex mainIndex = m_mainModel->index(m_mainModel->rowCount() - 1, 0); + m_mainSelectionModel->setCurrentIndex(mainIndex, QItemSelectionModel::Current); + + // Last index of subModel should be current as well + QModelIndex subIndex = m_subSelectionModel->currentIndex(); + QVERIFY(subIndex.isValid()); + QCOMPARE(subIndex, m_subModel->index(m_subModel->rowCount() - 1, 0)); +} + +void KLinkItemSelectionModelTest::testSubSetCurrent() +{ + // Set last index of subModel as current + QModelIndex subIndex = m_subModel->index(m_subModel->rowCount() - 1, 0); + m_subSelectionModel->setCurrentIndex(subIndex, QItemSelectionModel::Current); + + // Last index of mainModel should be current as well + QModelIndex mainIndex = m_mainSelectionModel->currentIndex(); + QVERIFY(mainIndex.isValid()); + QCOMPARE(mainIndex, m_mainModel->index(m_mainModel->rowCount() - 1, 0)); +} + #include <klinkitemselectionmodeltest.moc> diff --git a/kdeui/tests/klinkitemselectionmodeltest.h b/kdeui/tests/klinkitemselectionmodeltest.h index f3e0fd1..6e9c178 100644 --- a/kdeui/tests/klinkitemselectionmodeltest.h +++ b/kdeui/tests/klinkitemselectionmodeltest.h @@ -21,12 +21,28 @@ #include <QtCore/QObject> +class QItemSelectionModel; +class QStandardItemModel; +class QSortFilterProxyModel; + +class KLinkItemSelectionModel; + class KLinkItemSelectionModelTest : public QObject { Q_OBJECT private Q_SLOTS: + void init(); + void cleanup(); void testToggle(); + void testMainSetCurrent(); + void testSubSetCurrent(); + +private: + QStandardItemModel *m_mainModel; + QItemSelectionModel *m_mainSelectionModel; + QSortFilterProxyModel *m_subModel; + KLinkItemSelectionModel *m_subSelectionModel; }; #endif /* KLINKITEMSELECTIONMODELTEST_H */ _______________________________________________ release-team mailing list [email protected] https://mail.kde.org/mailman/listinfo/release-team
