summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorFrank Reininghaus <frank78ac@googlemail.com>2009-06-13 10:23:35 (GMT)
committerOlivier Goffart <ogoffart@trolltech.com>2009-07-17 17:02:28 (GMT)
commit5539b4ab311501821eb0e971432d769a25000032 (patch)
tree7f7940f13821e4a68a711c573b59475363edd357 /tests
parentc0a9fe18baec3c0ea1f37326ef5a7f527511c33c (diff)
downloadQt-5539b4ab311501821eb0e971432d769a25000032.zip
Qt-5539b4ab311501821eb0e971432d769a25000032.tar.gz
Qt-5539b4ab311501821eb0e971432d769a25000032.tar.bz2
Fix for selection with Shift-Arrow/Shift-Click in QListView's IconMode
This addresses the selection of items using Shift-Arrow or Shift-Click in QListView's IconMode if the items are in a grid layout. In the case that the items do not have the same size (e.g., because their text is wrapped), this commit prevents the unexpected selection of additional items. New unit tests are included. Merge-request: 666 Reviewed-by: Olivier Goffart
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/qlistview/tst_qlistview.cpp67
1 files changed, 67 insertions, 0 deletions
diff --git a/tests/auto/qlistview/tst_qlistview.cpp b/tests/auto/qlistview/tst_qlistview.cpp
index a18f037..cc80931 100644
--- a/tests/auto/qlistview/tst_qlistview.cpp
+++ b/tests/auto/qlistview/tst_qlistview.cpp
@@ -110,6 +110,7 @@ private slots:
void task196118_visualRegionForSelection();
void task254449_draggingItemToNegativeCoordinates();
void keyboardSearch();
+ void shiftSelectionWithNonUniformItemSizes();
};
// Testing get/set functions
@@ -1656,5 +1657,71 @@ void tst_QListView::keyboardSearch()
QCOMPARE(view.currentIndex() , model.index(6,0)); //KONQUEROR
}
+void tst_QListView::shiftSelectionWithNonUniformItemSizes()
+{
+ // This checks that no items are selected unexpectedly by Shift-Arrow
+ // when items with non-uniform sizes are laid out in a grid
+ { // First test: QListView::LeftToRight flow
+ QStringList items;
+ items << "Long\nText" << "Text" << "Text" << "Text";
+ QStringListModel model(items);
+
+ QListView view;
+ view.setFixedSize(250, 250);
+ view.setFlow(QListView::LeftToRight);
+ view.setGridSize(QSize(100, 100));
+ view.setSelectionMode(QListView::ExtendedSelection);
+ view.setViewMode(QListView::IconMode);
+ view.setModel(&model);
+ view.show();
+ QTest::qWait(30);
+
+ // Verfify that item sizes are non-uniform
+ QVERIFY(view.sizeHintForIndex(model.index(0, 0)).height() > view.sizeHintForIndex(model.index(1, 0)).height());
+
+ QModelIndex index = model.index(3, 0);
+ view.setCurrentIndex(index);
+ QCOMPARE(view.currentIndex(), index);
+
+ QTest::keyClick(&view, Qt::Key_Up, Qt::ShiftModifier);
+ QTest::qWait(10);
+ QCOMPARE(view.currentIndex(), model.index(1, 0));
+
+ QModelIndexList selected = view.selectionModel()->selectedIndexes();
+ QCOMPARE(selected.count(), 3);
+ QVERIFY(!selected.contains(model.index(0, 0)));
+ }
+ { // Second test: QListView::TopToBottom flow
+ QStringList items;
+ items << "ab" << "a" << "a" << "a";
+ QStringListModel model(items);
+
+ QListView view;
+ view.setFixedSize(250, 250);
+ view.setFlow(QListView::TopToBottom);
+ view.setGridSize(QSize(100, 100));
+ view.setSelectionMode(QListView::ExtendedSelection);
+ view.setViewMode(QListView::IconMode);
+ view.setModel(&model);
+ view.show();
+ QTest::qWait(30);
+
+ // Verfify that item sizes are non-uniform
+ QVERIFY(view.sizeHintForIndex(model.index(0, 0)).width() > view.sizeHintForIndex(model.index(1, 0)).width());
+
+ QModelIndex index = model.index(3, 0);
+ view.setCurrentIndex(index);
+ QCOMPARE(view.currentIndex(), index);
+
+ QTest::keyClick(&view, Qt::Key_Left, Qt::ShiftModifier);
+ QTest::qWait(10);
+ QCOMPARE(view.currentIndex(), model.index(1, 0));
+
+ QModelIndexList selected = view.selectionModel()->selectedIndexes();
+ QCOMPARE(selected.count(), 3);
+ QVERIFY(!selected.contains(model.index(0, 0)));
+ }
+}
+
QTEST_MAIN(tst_QListView)
#include "tst_qlistview.moc"