[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-release-team
Subject: [kdelibs/KDE/4.11] kdeui: Bring back "KLinkItemSelectionModel: Synchronize currentIndex"
From: Aurélien Gâteau <agateau () kde ! org>
Date: 2013-09-11 13:54:26
Message-ID: E1VJksE-0001VY-8A () scm ! kde ! org
[Download RAW message or body]
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:release-team@kde.org
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
release-team@kde.org
https://mail.kde.org/mailman/listinfo/release-team
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic