117 void shiftSelectionWithNonUniformItemSizes(); |
117 void shiftSelectionWithNonUniformItemSizes(); |
118 void clickOnViewportClearsSelection(); |
118 void clickOnViewportClearsSelection(); |
119 void task262152_setModelColumnNavigate(); |
119 void task262152_setModelColumnNavigate(); |
120 void taskQTBUG_2233_scrollHiddenItems_data(); |
120 void taskQTBUG_2233_scrollHiddenItems_data(); |
121 void taskQTBUG_2233_scrollHiddenItems(); |
121 void taskQTBUG_2233_scrollHiddenItems(); |
|
122 void taskQTBUG_633_changeModelData(); |
|
123 void taskQTBUG_435_deselectOnViewportClick(); |
|
124 void taskQTBUG_2678_spacingAndWrappedText(); |
|
125 void taskQTBUG_5877_skippingItemInPageDownUp(); |
122 }; |
126 }; |
123 |
127 |
124 // Testing get/set functions |
128 // Testing get/set functions |
125 void tst_QListView::getSetCheck() |
129 void tst_QListView::getSetCheck() |
126 { |
130 { |
504 QCoreApplication::processEvents(); |
508 QCoreApplication::processEvents(); |
505 |
509 |
506 QModelIndex idx = vu.moveCursor(QMoveCursorListView::MoveHome, Qt::NoModifier); |
510 QModelIndex idx = vu.moveCursor(QMoveCursorListView::MoveHome, Qt::NoModifier); |
507 QCOMPARE(idx, model.index(0,0)); |
511 QCOMPARE(idx, model.index(0,0)); |
508 idx = vu.moveCursor(QMoveCursorListView::MoveDown, Qt::NoModifier); |
512 idx = vu.moveCursor(QMoveCursorListView::MoveDown, Qt::NoModifier); |
509 QModelIndex p = model.index(8,0); |
|
510 QCOMPARE(idx, model.index(8,0)); |
513 QCOMPARE(idx, model.index(8,0)); |
511 |
|
512 } |
514 } |
513 |
515 |
514 void tst_QListView::moveCursor3() |
516 void tst_QListView::moveCursor3() |
515 { |
517 { |
516 //this tests is for task 159792 |
518 //this tests is for task 159792 |
582 QCOMPARE(index.row(), 1); |
584 QCOMPARE(index.row(), 1); |
583 |
585 |
584 index = view.indexAt(QPoint(20,2 * sz.height())); |
586 index = view.indexAt(QPoint(20,2 * sz.height())); |
585 QVERIFY(!index.isValid()); |
587 QVERIFY(!index.isValid()); |
586 |
588 |
587 |
589 // Check when peeking out of the viewport bounds |
|
590 index = view.indexAt(QPoint(view.viewport()->rect().width(), 0)); |
|
591 QVERIFY(!index.isValid()); |
|
592 index = view.indexAt(QPoint(-1, 0)); |
|
593 QVERIFY(!index.isValid()); |
|
594 index = view.indexAt(QPoint(20, view.viewport()->rect().height())); |
|
595 QVERIFY(!index.isValid()); |
|
596 index = view.indexAt(QPoint(20, -1)); |
|
597 QVERIFY(!index.isValid()); |
588 |
598 |
589 model.rCount = 30; |
599 model.rCount = 30; |
590 QListViewShowEventListener view2; |
600 QListViewShowEventListener view2; |
591 // Set the height to a small enough value so that it wraps to a new section. |
601 // Set the height to a small enough value so that it wraps to a new section. |
592 view2.resize(300,100); |
602 view2.resize(300,100); |
1130 #else |
1136 #else |
1131 v.resize(525,525); |
1137 v.resize(525,525); |
1132 #endif |
1138 #endif |
1133 |
1139 |
1134 v.show(); |
1140 v.show(); |
|
1141 QTest::qWaitForWindowShown(&v); |
1135 QApplication::processEvents(); |
1142 QApplication::processEvents(); |
1136 |
1143 |
1137 v.setSelection(selectionRect, QItemSelectionModel::ClearAndSelect); |
1144 v.setSelection(selectionRect, QItemSelectionModel::ClearAndSelect); |
1138 |
1145 |
1139 QModelIndexList selected = v.selectionModel()->selectedIndexes(); |
1146 QModelIndexList selected = v.selectionModel()->selectedIndexes(); |
1140 |
1147 |
1141 QCOMPARE(selected.count(), expectedItems.count()); |
1148 QCOMPARE(selected.count(), expectedItems.count()); |
1142 for (int i = 0; i < selected.count(); ++i) { |
1149 for (int i = 0; i < selected.count(); ++i) { |
1143 QVERIFY(expectedItems.contains(selected.at(i).row())); |
1150 QVERIFY(expectedItems.contains(selected.at(i).row())); |
1144 } |
1151 } |
1145 |
|
1146 } |
1152 } |
1147 |
1153 |
1148 void tst_QListView::scrollTo() |
1154 void tst_QListView::scrollTo() |
1149 { |
1155 { |
1150 QListView lv; |
1156 QListView lv; |
1182 list << "Short item"; |
1188 list << "Short item"; |
1183 model.setStringList(list); |
1189 model.setStringList(list); |
1184 lv.setModel(&model); |
1190 lv.setModel(&model); |
1185 lv.setFixedSize(100, 200); |
1191 lv.setFixedSize(100, 200); |
1186 lv.show(); |
1192 lv.show(); |
|
1193 QTest::qWaitForWindowShown(&lv); |
1187 |
1194 |
1188 //by default, the list view scrolls per item and has no wrapping |
1195 //by default, the list view scrolls per item and has no wrapping |
1189 QModelIndex index = model.index(6,0); |
1196 QModelIndex index = model.index(6,0); |
1190 |
1197 |
1191 //we save the size of the item for later comparisons |
1198 //we save the size of the item for later comparisons |
1780 |
1785 |
1781 view.setModel(&model); |
1786 view.setModel(&model); |
1782 view.setModelColumn(1); |
1787 view.setModelColumn(1); |
1783 |
1788 |
1784 view.show(); |
1789 view.show(); |
1785 QTest::qWait(100); |
1790 QApplication::setActiveWindow(&view); |
|
1791 QTest::qWaitForWindowShown(&view); |
|
1792 QTest::qWait(30); |
|
1793 QTRY_COMPARE(static_cast<QWidget *>(&view), QApplication::activeWindow()); |
1786 QTest::keyClick(&view, Qt::Key_Down); |
1794 QTest::keyClick(&view, Qt::Key_Down); |
1787 QTest::qWait(100); |
1795 QTest::qWait(30); |
1788 QCOMPARE(view.currentIndex(), model.index(1,1)); |
1796 QTRY_COMPARE(view.currentIndex(), model.index(1,1)); |
1789 QTest::keyClick(&view, Qt::Key_Down); |
1797 QTest::keyClick(&view, Qt::Key_Down); |
1790 QTest::qWait(100); |
1798 QTest::qWait(30); |
1791 QCOMPARE(view.currentIndex(), model.index(2,1)); |
1799 QTRY_COMPARE(view.currentIndex(), model.index(2,1)); |
1792 |
|
1793 } |
1800 } |
1794 |
1801 |
1795 void tst_QListView::taskQTBUG_2233_scrollHiddenItems_data() |
1802 void tst_QListView::taskQTBUG_2233_scrollHiddenItems_data() |
1796 { |
1803 { |
1797 QTest::addColumn<int>("flow"); |
1804 QTest::addColumn<int>("flow"); |
1827 QVERIFY(index.isValid()); |
1834 QVERIFY(index.isValid()); |
1828 QCOMPARE(index.row(), 2 * i + 1); |
1835 QCOMPARE(index.row(), 2 * i + 1); |
1829 } |
1836 } |
1830 } |
1837 } |
1831 |
1838 |
|
1839 void tst_QListView::taskQTBUG_633_changeModelData() |
|
1840 { |
|
1841 QListView view; |
|
1842 view.setFlow(QListView::LeftToRight); |
|
1843 QStandardItemModel model(5,1); |
|
1844 for (int i = 0; i < model.rowCount(); ++i) { |
|
1845 model.setData( model.index(i, 0), QString::number(i)); |
|
1846 } |
|
1847 |
|
1848 view.setModel(&model); |
|
1849 view.show(); |
|
1850 QTest::qWaitForWindowShown(&view); |
|
1851 model.setData( model.index(1, 0), QLatin1String("long long text")); |
|
1852 QTest::qWait(100); //leave time for relayouting the items |
|
1853 QRect rectLongText = view.visualRect(model.index(1,0)); |
|
1854 QRect rect2 = view.visualRect(model.index(2,0)); |
|
1855 QVERIFY( ! rectLongText.intersects(rect2) ); |
|
1856 } |
|
1857 |
|
1858 void tst_QListView::taskQTBUG_435_deselectOnViewportClick() |
|
1859 { |
|
1860 QListView view; |
|
1861 QStringListModel model( QStringList() << "1" << "2" << "3" << "4"); |
|
1862 view.setModel(&model); |
|
1863 view.setSelectionMode(QAbstractItemView::ExtendedSelection); |
|
1864 view.selectAll(); |
|
1865 QCOMPARE(view.selectionModel()->selectedIndexes().count(), model.rowCount()); |
|
1866 |
|
1867 |
|
1868 QPoint p = view.visualRect(model.index(model.rowCount() - 1)).center() + QPoint(0, 20); |
|
1869 //first the left button |
|
1870 QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, p); |
|
1871 QVERIFY(!view.selectionModel()->hasSelection()); |
|
1872 |
|
1873 view.selectAll(); |
|
1874 QCOMPARE(view.selectionModel()->selectedIndexes().count(), model.rowCount()); |
|
1875 |
|
1876 //and now the right button |
|
1877 QTest::mouseClick(view.viewport(), Qt::RightButton, 0, p); |
|
1878 QVERIFY(!view.selectionModel()->hasSelection()); |
|
1879 } |
|
1880 |
|
1881 void tst_QListView::taskQTBUG_2678_spacingAndWrappedText() |
|
1882 { |
|
1883 static const QString lorem("Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."); |
|
1884 QStringListModel model(QStringList() << lorem << lorem << "foo" << lorem << "bar" << lorem << lorem); |
|
1885 QListView w; |
|
1886 w.setModel(&model); |
|
1887 w.setViewMode(QListView::ListMode); |
|
1888 w.setWordWrap(true); |
|
1889 w.setSpacing(10); |
|
1890 w.show(); |
|
1891 QTest::qWaitForWindowShown(&w); |
|
1892 QCOMPARE(w.horizontalScrollBar()->minimum(), w.horizontalScrollBar()->maximum()); |
|
1893 } |
|
1894 |
|
1895 void tst_QListView::taskQTBUG_5877_skippingItemInPageDownUp() |
|
1896 { |
|
1897 QList<int> currentItemIndexes; |
|
1898 QtTestModel model(0); |
|
1899 model.colCount = 1; |
|
1900 model.rCount = 100; |
|
1901 |
|
1902 currentItemIndexes << 0 << 6 << 16 << 25 << 34 << 42 << 57 << 68 << 77 |
|
1903 << 83 << 91 << 94; |
|
1904 QMoveCursorListView vu; |
|
1905 vu.setModel(&model); |
|
1906 vu.show(); |
|
1907 |
|
1908 QTest::qWaitForWindowShown(&vu); |
|
1909 |
|
1910 int itemHeight = vu.visualRect(model.index(0, 0)).height(); |
|
1911 int visibleRowCount = vu.viewport()->height() / itemHeight; |
|
1912 int scrolledRowCount = visibleRowCount - 1; |
|
1913 |
|
1914 for (int i = 0; i < currentItemIndexes.size(); ++i) { |
|
1915 vu.selectionModel()->setCurrentIndex(model.index(currentItemIndexes[i], 0), |
|
1916 QItemSelectionModel::SelectCurrent); |
|
1917 |
|
1918 QModelIndex idx = vu.moveCursor(QMoveCursorListView::MovePageDown, Qt::NoModifier); |
|
1919 int newCurrent = qMin(currentItemIndexes[i] + scrolledRowCount, 99); |
|
1920 QCOMPARE(idx, model.index(newCurrent, 0)); |
|
1921 |
|
1922 idx = vu.moveCursor(QMoveCursorListView::MovePageUp, Qt::NoModifier); |
|
1923 newCurrent = qMax(currentItemIndexes[i] - scrolledRowCount, 0); |
|
1924 QCOMPARE(idx, model.index(newCurrent, 0)); |
|
1925 } |
|
1926 } |
|
1927 |
1832 QTEST_MAIN(tst_QListView) |
1928 QTEST_MAIN(tst_QListView) |
1833 #include "tst_qlistview.moc" |
1929 #include "tst_qlistview.moc" |