author | Eckhart Koeppen <eckhart.koppen@nokia.com> |
Mon, 19 Apr 2010 10:15:19 +0300 | |
branch | RCL_3 |
changeset 10 | b5b118452c7d |
parent 8 | 3f74d0d4af4c |
permissions | -rw-r--r-- |
0 | 1 |
/**************************************************************************** |
2 |
** |
|
4
3b1da2848fc7
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
3
diff
changeset
|
3 |
** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). |
0 | 4 |
** All rights reserved. |
5 |
** Contact: Nokia Corporation (qt-info@nokia.com) |
|
6 |
** |
|
7 |
** This file is part of the test suite of the Qt Toolkit. |
|
8 |
** |
|
9 |
** $QT_BEGIN_LICENSE:LGPL$ |
|
10 |
** No Commercial Usage |
|
11 |
** This file contains pre-release code and may not be distributed. |
|
12 |
** You may use this file in accordance with the terms and conditions |
|
13 |
** contained in the Technology Preview License Agreement accompanying |
|
14 |
** this package. |
|
15 |
** |
|
16 |
** GNU Lesser General Public License Usage |
|
17 |
** Alternatively, this file may be used under the terms of the GNU Lesser |
|
18 |
** General Public License version 2.1 as published by the Free Software |
|
19 |
** Foundation and appearing in the file LICENSE.LGPL included in the |
|
20 |
** packaging of this file. Please review the following information to |
|
21 |
** ensure the GNU Lesser General Public License version 2.1 requirements |
|
22 |
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. |
|
23 |
** |
|
24 |
** In addition, as a special exception, Nokia gives you certain additional |
|
25 |
** rights. These rights are described in the Nokia Qt LGPL Exception |
|
26 |
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. |
|
27 |
** |
|
28 |
** If you have questions regarding the use of this file, please contact |
|
29 |
** Nokia at qt-info@nokia.com. |
|
30 |
** |
|
31 |
** |
|
32 |
** |
|
33 |
** |
|
34 |
** |
|
35 |
** |
|
36 |
** |
|
37 |
** |
|
38 |
** $QT_END_LICENSE$ |
|
39 |
** |
|
40 |
****************************************************************************/ |
|
41 |
||
42 |
||
43 |
#include <QtTest/QtTest> |
|
44 |
||
45 |
#include <qabstractitemmodel.h> |
|
46 |
#include <qapplication.h> |
|
47 |
#include <qlistview.h> |
|
48 |
#include <qitemdelegate.h> |
|
49 |
#include <qstandarditemmodel.h> |
|
50 |
#include <qstringlistmodel.h> |
|
51 |
#ifndef Q_OS_SYMBIAN |
|
52 |
#include <cmath> |
|
53 |
#endif |
|
54 |
#include <math.h> |
|
55 |
#include <QtGui/QScrollBar> |
|
56 |
#include <QtGui/QDialog> |
|
57 |
#include <QtGui/QStyledItemDelegate> |
|
58 |
#if defined(Q_OS_WIN) || defined(Q_OS_WINCE) |
|
59 |
#include <windows.h> |
|
60 |
#endif |
|
61 |
||
62 |
#include "../../shared/util.h" |
|
63 |
||
64 |
//TESTED_CLASS= |
|
65 |
//TESTED_FILES= |
|
66 |
||
67 |
class tst_QListView : public QObject |
|
68 |
{ |
|
69 |
Q_OBJECT |
|
70 |
||
71 |
public: |
|
72 |
tst_QListView(); |
|
73 |
virtual ~tst_QListView(); |
|
74 |
||
75 |
||
76 |
public slots: |
|
77 |
void initTestCase(); |
|
78 |
void cleanupTestCase(); |
|
79 |
void init(); |
|
80 |
void cleanup(); |
|
81 |
private slots: |
|
82 |
void getSetCheck(); |
|
83 |
void noDelegate(); |
|
84 |
void noModel(); |
|
85 |
void emptyModel(); |
|
86 |
void removeRows(); |
|
87 |
void cursorMove(); |
|
88 |
void hideRows(); |
|
89 |
void moveCursor(); |
|
90 |
void moveCursor2(); |
|
91 |
void moveCursor3(); |
|
92 |
void indexAt(); |
|
93 |
void clicked(); |
|
94 |
void singleSelectionRemoveRow(); |
|
95 |
void singleSelectionRemoveColumn(); |
|
96 |
void modelColumn(); |
|
97 |
void hideFirstRow(); |
|
98 |
void batchedMode(); |
|
99 |
void setCurrentIndex(); |
|
100 |
void selection_data(); |
|
101 |
void selection(); |
|
102 |
void scrollTo(); |
|
103 |
void scrollBarRanges(); |
|
104 |
void scrollBarAsNeeded_data(); |
|
105 |
void scrollBarAsNeeded(); |
|
106 |
void moveItems(); |
|
107 |
void wordWrap(); |
|
108 |
void setCurrentIndexAfterAppendRowCrash(); |
|
109 |
void emptyItemSize(); |
|
110 |
void task203585_selectAll(); |
|
111 |
void task228566_infiniteRelayout(); |
|
112 |
void task248430_crashWith0SizedItem(); |
|
113 |
void task250446_scrollChanged(); |
|
114 |
void task196118_visualRegionForSelection(); |
|
115 |
void task254449_draggingItemToNegativeCoordinates(); |
|
116 |
void keyboardSearch(); |
|
117 |
void shiftSelectionWithNonUniformItemSizes(); |
|
118 |
void clickOnViewportClearsSelection(); |
|
119 |
void task262152_setModelColumnNavigate(); |
|
120 |
void taskQTBUG_2233_scrollHiddenItems_data(); |
|
121 |
void taskQTBUG_2233_scrollHiddenItems(); |
|
3
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
122 |
void taskQTBUG_633_changeModelData(); |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
123 |
void taskQTBUG_435_deselectOnViewportClick(); |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
124 |
void taskQTBUG_2678_spacingAndWrappedText(); |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
125 |
void taskQTBUG_5877_skippingItemInPageDownUp(); |
0 | 126 |
}; |
127 |
||
128 |
// Testing get/set functions |
|
129 |
void tst_QListView::getSetCheck() |
|
130 |
{ |
|
131 |
QListView obj1; |
|
132 |
// Movement QListView::movement() |
|
133 |
// void QListView::setMovement(Movement) |
|
134 |
obj1.setMovement(QListView::Movement(QListView::Static)); |
|
135 |
QCOMPARE(QListView::Movement(QListView::Static), obj1.movement()); |
|
136 |
obj1.setMovement(QListView::Movement(QListView::Free)); |
|
137 |
QCOMPARE(QListView::Movement(QListView::Free), obj1.movement()); |
|
138 |
obj1.setMovement(QListView::Movement(QListView::Snap)); |
|
139 |
QCOMPARE(QListView::Movement(QListView::Snap), obj1.movement()); |
|
140 |
||
141 |
// Flow QListView::flow() |
|
142 |
// void QListView::setFlow(Flow) |
|
143 |
obj1.setFlow(QListView::Flow(QListView::LeftToRight)); |
|
144 |
QCOMPARE(QListView::Flow(QListView::LeftToRight), obj1.flow()); |
|
145 |
obj1.setFlow(QListView::Flow(QListView::TopToBottom)); |
|
146 |
QCOMPARE(QListView::Flow(QListView::TopToBottom), obj1.flow()); |
|
147 |
||
148 |
// ResizeMode QListView::resizeMode() |
|
149 |
// void QListView::setResizeMode(ResizeMode) |
|
150 |
obj1.setResizeMode(QListView::ResizeMode(QListView::Fixed)); |
|
151 |
QCOMPARE(QListView::ResizeMode(QListView::Fixed), obj1.resizeMode()); |
|
152 |
obj1.setResizeMode(QListView::ResizeMode(QListView::Adjust)); |
|
153 |
QCOMPARE(QListView::ResizeMode(QListView::Adjust), obj1.resizeMode()); |
|
154 |
||
155 |
// LayoutMode QListView::layoutMode() |
|
156 |
// void QListView::setLayoutMode(LayoutMode) |
|
157 |
obj1.setLayoutMode(QListView::LayoutMode(QListView::SinglePass)); |
|
158 |
QCOMPARE(QListView::LayoutMode(QListView::SinglePass), obj1.layoutMode()); |
|
159 |
obj1.setLayoutMode(QListView::LayoutMode(QListView::Batched)); |
|
160 |
QCOMPARE(QListView::LayoutMode(QListView::Batched), obj1.layoutMode()); |
|
161 |
||
162 |
// int QListView::spacing() |
|
163 |
// void QListView::setSpacing(int) |
|
164 |
obj1.setSpacing(0); |
|
165 |
QCOMPARE(0, obj1.spacing()); |
|
166 |
obj1.setSpacing(INT_MIN); |
|
167 |
QCOMPARE(INT_MIN, obj1.spacing()); |
|
168 |
obj1.setSpacing(INT_MAX); |
|
169 |
QCOMPARE(INT_MAX, obj1.spacing()); |
|
170 |
||
171 |
// ViewMode QListView::viewMode() |
|
172 |
// void QListView::setViewMode(ViewMode) |
|
173 |
obj1.setViewMode(QListView::ViewMode(QListView::ListMode)); |
|
174 |
QCOMPARE(QListView::ViewMode(QListView::ListMode), obj1.viewMode()); |
|
175 |
obj1.setViewMode(QListView::ViewMode(QListView::IconMode)); |
|
176 |
QCOMPARE(QListView::ViewMode(QListView::IconMode), obj1.viewMode()); |
|
177 |
||
178 |
// int QListView::modelColumn() |
|
179 |
// void QListView::setModelColumn(int) |
|
180 |
obj1.setModelColumn(0); |
|
181 |
QCOMPARE(0, obj1.modelColumn()); |
|
182 |
obj1.setModelColumn(INT_MIN); |
|
183 |
QCOMPARE(0, obj1.modelColumn()); // Less than 0 => 0 |
|
184 |
obj1.setModelColumn(INT_MAX); |
|
185 |
QCOMPARE(0, obj1.modelColumn()); // No model => 0 |
|
186 |
||
187 |
// bool QListView::uniformItemSizes() |
|
188 |
// void QListView::setUniformItemSizes(bool) |
|
189 |
obj1.setUniformItemSizes(false); |
|
190 |
QCOMPARE(false, obj1.uniformItemSizes()); |
|
191 |
obj1.setUniformItemSizes(true); |
|
192 |
QCOMPARE(true, obj1.uniformItemSizes()); |
|
193 |
||
194 |
// make sure setViewMode() doesn't reset resizeMode |
|
195 |
obj1.clearPropertyFlags(); |
|
196 |
obj1.setResizeMode(QListView::Adjust); |
|
197 |
obj1.setViewMode(QListView::IconMode); |
|
198 |
QCOMPARE(obj1.resizeMode(), QListView::Adjust); |
|
199 |
||
200 |
obj1.setWordWrap(false); |
|
201 |
QCOMPARE(false, obj1.wordWrap()); |
|
202 |
obj1.setWordWrap(true); |
|
203 |
QCOMPARE(true, obj1. wordWrap()); |
|
204 |
} |
|
205 |
||
206 |
class QtTestModel: public QAbstractListModel |
|
207 |
{ |
|
208 |
public: |
|
209 |
QtTestModel(QObject *parent = 0): QAbstractListModel(parent), |
|
210 |
colCount(0), rCount(0), wrongIndex(false) {} |
|
211 |
int rowCount(const QModelIndex&) const { return rCount; } |
|
212 |
int columnCount(const QModelIndex&) const { return colCount; } |
|
213 |
bool isEditable(const QModelIndex &) const { return true; } |
|
214 |
||
215 |
QVariant data(const QModelIndex &idx, int role) const |
|
216 |
{ |
|
217 |
||
218 |
if (!m_icon.isNull() && role == Qt::DecorationRole) { |
|
219 |
return m_icon; |
|
220 |
} |
|
221 |
if (role != Qt::DisplayRole) |
|
222 |
return QVariant(); |
|
223 |
||
224 |
if (idx.row() < 0 || idx.column() < 0 || idx.column() >= colCount |
|
225 |
|| idx.row() >= rCount) { |
|
226 |
wrongIndex = true; |
|
227 |
qWarning("got invalid modelIndex %d/%d", idx.row(), idx.column()); |
|
228 |
} |
|
229 |
return QString("%1/%2").arg(idx.row()).arg(idx.column()); |
|
230 |
} |
|
231 |
||
232 |
void removeLastRow() |
|
233 |
{ |
|
234 |
beginRemoveRows(QModelIndex(), rCount - 2, rCount - 1); |
|
235 |
--rCount; |
|
236 |
endRemoveRows(); |
|
237 |
} |
|
238 |
||
239 |
void removeAllRows() |
|
240 |
{ |
|
241 |
beginRemoveRows(QModelIndex(), 0, rCount - 1); |
|
242 |
rCount = 0; |
|
243 |
endRemoveRows(); |
|
244 |
} |
|
245 |
||
246 |
void setDataIcon(const QIcon &icon) |
|
247 |
{ |
|
248 |
m_icon = icon; |
|
249 |
} |
|
250 |
||
251 |
int colCount, rCount; |
|
252 |
QIcon m_icon; |
|
253 |
mutable bool wrongIndex; |
|
254 |
}; |
|
255 |
||
256 |
tst_QListView::tst_QListView() |
|
257 |
{ |
|
258 |
} |
|
259 |
||
260 |
tst_QListView::~tst_QListView() |
|
261 |
{ |
|
262 |
} |
|
263 |
||
264 |
void tst_QListView::initTestCase() |
|
265 |
{ |
|
266 |
} |
|
267 |
||
268 |
void tst_QListView::cleanupTestCase() |
|
269 |
{ |
|
270 |
} |
|
271 |
||
272 |
void tst_QListView::init() |
|
273 |
{ |
|
274 |
#ifdef Q_OS_WINCE //disable magic for WindowsCE |
|
275 |
qApp->setAutoMaximizeThreshold(-1); |
|
276 |
#endif |
|
277 |
} |
|
278 |
||
279 |
void tst_QListView::cleanup() |
|
280 |
{ |
|
281 |
} |
|
282 |
||
283 |
||
284 |
void tst_QListView::noDelegate() |
|
285 |
{ |
|
286 |
QtTestModel model(0); |
|
287 |
model.rCount = model.colCount = 10; |
|
288 |
QListView view; |
|
289 |
view.setModel(&model); |
|
290 |
view.setItemDelegate(0); |
|
291 |
view.show(); |
|
292 |
} |
|
293 |
||
294 |
void tst_QListView::noModel() |
|
295 |
{ |
|
296 |
QListView view; |
|
297 |
view.show(); |
|
298 |
view.setRowHidden(0, true); |
|
299 |
} |
|
300 |
||
301 |
void tst_QListView::emptyModel() |
|
302 |
{ |
|
303 |
QtTestModel model(0); |
|
304 |
QListView view; |
|
305 |
view.setModel(&model); |
|
306 |
view.show(); |
|
307 |
QVERIFY(!model.wrongIndex); |
|
308 |
} |
|
309 |
||
310 |
void tst_QListView::removeRows() |
|
311 |
{ |
|
312 |
QtTestModel model(0); |
|
313 |
model.rCount = model.colCount = 10; |
|
314 |
||
315 |
QListView view; |
|
316 |
view.setModel(&model); |
|
317 |
view.show(); |
|
318 |
||
319 |
model.removeLastRow(); |
|
320 |
QVERIFY(!model.wrongIndex); |
|
321 |
||
322 |
model.removeAllRows(); |
|
323 |
QVERIFY(!model.wrongIndex); |
|
324 |
} |
|
325 |
||
326 |
void tst_QListView::cursorMove() |
|
327 |
{ |
|
328 |
int rows = 6*6; |
|
329 |
int columns = 6; |
|
330 |
||
331 |
QStandardItemModel model(rows, columns); |
|
332 |
QListView view; |
|
333 |
view.setModel(&model); |
|
334 |
||
335 |
for (int j = 0; j < columns; ++j) { |
|
336 |
view.setModelColumn(j); |
|
337 |
for (int i = 0; i < rows; ++i) { |
|
338 |
QModelIndex index = model.index(i, j); |
|
339 |
model.setData(index, QString("[%1,%2]").arg(i).arg(j)); |
|
340 |
view.setCurrentIndex(index); |
|
341 |
QApplication::processEvents(); |
|
342 |
QCOMPARE(view.currentIndex(), index); |
|
343 |
} |
|
344 |
} |
|
345 |
||
346 |
QSize cellsize(60, 25); |
|
347 |
int gap = 1; // compensate for the scrollbars |
|
348 |
int displayColumns = 6; |
|
349 |
||
350 |
view.resize((displayColumns + gap) * cellsize.width(), |
|
351 |
int((ceil(double(rows) / displayColumns) + gap) * cellsize.height())); |
|
352 |
view.setResizeMode(QListView::Adjust); |
|
353 |
view.setGridSize(cellsize); |
|
354 |
view.setViewMode(QListView::IconMode); |
|
355 |
view.doItemsLayout(); |
|
356 |
view.show(); |
|
357 |
||
358 |
QVector<Qt::Key> keymoves; |
|
359 |
keymoves << Qt::Key_Up << Qt::Key_Up << Qt::Key_Right << Qt::Key_Right << Qt::Key_Up |
|
360 |
<< Qt::Key_Left << Qt::Key_Left << Qt::Key_Up << Qt::Key_Down << Qt::Key_Up |
|
361 |
<< Qt::Key_Up << Qt::Key_Up << Qt::Key_Up << Qt::Key_Up << Qt::Key_Up |
|
362 |
<< Qt::Key_Left << Qt::Key_Left << Qt::Key_Up << Qt::Key_Down; |
|
363 |
||
364 |
int displayRow = rows / displayColumns - 1; |
|
365 |
int displayColumn = displayColumns - (rows % displayColumns) - 1; |
|
366 |
||
367 |
QApplication::instance()->processEvents(); |
|
368 |
for (int i = 0; i < keymoves.size(); ++i) { |
|
369 |
Qt::Key key = keymoves.at(i); |
|
370 |
QTest::keyClick(&view, key); |
|
371 |
switch (key) { |
|
372 |
case Qt::Key_Up: |
|
373 |
displayRow = qMax(0, displayRow - 1); |
|
374 |
break; |
|
375 |
case Qt::Key_Down: |
|
376 |
displayRow = qMin(rows / displayColumns - 1, displayRow + 1); |
|
377 |
break; |
|
378 |
case Qt::Key_Left: |
|
379 |
displayColumn = qMax(0, displayColumn - 1); |
|
380 |
break; |
|
381 |
case Qt::Key_Right: |
|
382 |
displayColumn = qMin(displayColumns-1, displayColumn + 1); |
|
383 |
break; |
|
384 |
default: |
|
385 |
QVERIFY(false); |
|
386 |
} |
|
387 |
||
388 |
QApplication::instance()->processEvents(); |
|
389 |
||
390 |
int row = displayRow * displayColumns + displayColumn; |
|
391 |
int column = columns - 1; |
|
392 |
QModelIndex index = model.index(row, column); |
|
393 |
QCOMPARE(view.currentIndex().row(), row); |
|
394 |
QCOMPARE(view.currentIndex().column(), column); |
|
395 |
QCOMPARE(view.currentIndex(), index); |
|
396 |
} |
|
397 |
} |
|
398 |
||
399 |
void tst_QListView::hideRows() |
|
400 |
{ |
|
401 |
QtTestModel model(0); |
|
402 |
model.rCount = model.colCount = 10; |
|
403 |
||
404 |
QListView view; |
|
405 |
view.setModel(&model); |
|
406 |
view.show(); |
|
407 |
||
408 |
// hide then show |
|
409 |
QVERIFY(!view.isRowHidden(2)); |
|
410 |
view.setRowHidden(2, true); |
|
411 |
QVERIFY(view.isRowHidden(2)); |
|
412 |
view.setRowHidden(2, false); |
|
413 |
QVERIFY(!view.isRowHidden(2)); |
|
414 |
||
415 |
// re show same row |
|
416 |
QVERIFY(!view.isRowHidden(2)); |
|
417 |
view.setRowHidden(2, false); |
|
418 |
QVERIFY(!view.isRowHidden(2)); |
|
419 |
||
420 |
// double hidding |
|
421 |
QVERIFY(!view.isRowHidden(2)); |
|
422 |
view.setRowHidden(2, true); |
|
423 |
QVERIFY(view.isRowHidden(2)); |
|
424 |
view.setRowHidden(2, true); |
|
425 |
QVERIFY(view.isRowHidden(2)); |
|
426 |
view.setRowHidden(2, false); |
|
427 |
QVERIFY(!view.isRowHidden(2)); |
|
428 |
||
429 |
// show in per-item mode, then hide the first row |
|
430 |
view.setVerticalScrollMode(QAbstractItemView::ScrollPerItem); |
|
431 |
QVERIFY(!view.isRowHidden(0)); |
|
432 |
view.setRowHidden(0, true); |
|
433 |
QVERIFY(view.isRowHidden(0)); |
|
434 |
view.setRowHidden(0, false); |
|
435 |
QVERIFY(!view.isRowHidden(0)); |
|
436 |
||
437 |
QStandardItemModel sim(0); |
|
438 |
QStandardItem *root = new QStandardItem("Root row"); |
|
439 |
for (int i=0;i<5;i++) |
|
440 |
root->appendRow(new QStandardItem(QString("Row %1").arg(i))); |
|
441 |
sim.appendRow(root); |
|
442 |
view.setModel(&sim); |
|
443 |
view.setRootIndex(root->index()); |
|
444 |
QVERIFY(!view.isRowHidden(0)); |
|
445 |
view.setRowHidden(0, true); |
|
446 |
QVERIFY(view.isRowHidden(0)); |
|
447 |
view.setRowHidden(0, false); |
|
448 |
QVERIFY(!view.isRowHidden(0)); |
|
449 |
} |
|
450 |
||
451 |
||
452 |
void tst_QListView::moveCursor() |
|
453 |
{ |
|
454 |
QtTestModel model(0); |
|
455 |
model.rCount = model.colCount = 10; |
|
456 |
||
457 |
QListView view; |
|
458 |
view.setModel(&model); |
|
459 |
||
460 |
QTest::keyClick(&view, Qt::Key_Down); |
|
461 |
||
462 |
view.setModel(0); |
|
463 |
view.setModel(&model); |
|
464 |
view.setRowHidden(0, true); |
|
465 |
||
466 |
QTest::keyClick(&view, Qt::Key_Down); |
|
467 |
QCOMPARE(view.selectionModel()->currentIndex(), model.index(1, 0)); |
|
468 |
} |
|
469 |
||
470 |
class QMoveCursorListView : public QListView |
|
471 |
{ |
|
472 |
public: |
|
473 |
QMoveCursorListView() : QListView() {} |
|
474 |
||
475 |
enum CursorAction { MoveUp, MoveDown, MoveLeft, MoveRight, |
|
476 |
MoveHome, MoveEnd, MovePageUp, MovePageDown, |
|
477 |
MoveNext, MovePrevious }; |
|
478 |
||
479 |
QModelIndex moveCursor(QMoveCursorListView::CursorAction action, Qt::KeyboardModifiers modifiers) |
|
480 |
{ |
|
481 |
return QListView::moveCursor((QListView::CursorAction)action, modifiers); |
|
482 |
} |
|
483 |
}; |
|
484 |
||
485 |
void tst_QListView::moveCursor2() |
|
486 |
{ |
|
487 |
QtTestModel model(0); |
|
488 |
model.colCount = 1; |
|
489 |
model.rCount = 100; |
|
490 |
QPixmap pm(32, 32); |
|
491 |
pm.fill(Qt::green); |
|
492 |
model.setDataIcon(QIcon(pm)); |
|
493 |
||
494 |
QMoveCursorListView vu; |
|
495 |
vu.setModel(&model); |
|
496 |
vu.setIconSize(QSize(36,48)); |
|
497 |
vu.setGridSize(QSize(34,56)); |
|
498 |
//Standard framesize is 1. If Framesize > 2 increase size |
|
499 |
int frameSize = qApp->style()->pixelMetric(QStyle::PM_DefaultFrameWidth); |
|
500 |
vu.resize(300 + frameSize * 2,300); |
|
501 |
vu.setFlow(QListView::LeftToRight); |
|
502 |
vu.setMovement(QListView::Static); |
|
503 |
vu.setWrapping(true); |
|
504 |
vu.setViewMode(QListView::IconMode); |
|
505 |
vu.setLayoutMode(QListView::Batched); |
|
506 |
vu.show(); |
|
507 |
vu.selectionModel()->setCurrentIndex(model.index(0,0), QItemSelectionModel::SelectCurrent); |
|
508 |
QCoreApplication::processEvents(); |
|
509 |
||
510 |
QModelIndex idx = vu.moveCursor(QMoveCursorListView::MoveHome, Qt::NoModifier); |
|
511 |
QCOMPARE(idx, model.index(0,0)); |
|
512 |
idx = vu.moveCursor(QMoveCursorListView::MoveDown, Qt::NoModifier); |
|
513 |
QCOMPARE(idx, model.index(8,0)); |
|
514 |
} |
|
515 |
||
516 |
void tst_QListView::moveCursor3() |
|
517 |
{ |
|
518 |
//this tests is for task 159792 |
|
519 |
//it tests that navigation works even with non uniform item sizes |
|
520 |
QListView view; |
|
521 |
QStandardItemModel model(0, 1); |
|
522 |
QStandardItem *i1 = new QStandardItem("First item, long name"); |
|
523 |
QStandardItem *i2 = new QStandardItem("2nd item"); |
|
524 |
QStandardItem *i3 = new QStandardItem("Third item, long name"); |
|
525 |
i1->setSizeHint(QSize(200,32)); |
|
526 |
model.appendRow(i1); |
|
527 |
model.appendRow(i2); |
|
528 |
model.appendRow(i3); |
|
529 |
view.setModel(&model); |
|
530 |
||
531 |
view.setCurrentIndex(model.index(0, 0)); |
|
532 |
||
533 |
QCOMPARE(view.selectionModel()->currentIndex(), model.index(0, 0)); |
|
534 |
QTest::keyClick(&view, Qt::Key_Down); |
|
535 |
QCOMPARE(view.selectionModel()->currentIndex(), model.index(1, 0)); |
|
536 |
QTest::keyClick(&view, Qt::Key_Down); |
|
537 |
QCOMPARE(view.selectionModel()->currentIndex(), model.index(2, 0)); |
|
538 |
QTest::keyClick(&view, Qt::Key_Up); |
|
539 |
QCOMPARE(view.selectionModel()->currentIndex(), model.index(1, 0)); |
|
540 |
QTest::keyClick(&view, Qt::Key_Up); |
|
541 |
QCOMPARE(view.selectionModel()->currentIndex(), model.index(0, 0)); |
|
542 |
} |
|
543 |
||
544 |
||
545 |
class QListViewShowEventListener : public QListView |
|
546 |
{ |
|
547 |
public: |
|
548 |
QListViewShowEventListener() : QListView() { m_shown = false;} |
|
549 |
||
550 |
virtual void showEvent(QShowEvent * /*e*/) |
|
551 |
{ |
|
552 |
int columnwidth = sizeHintForColumn(0); |
|
553 |
QSize sz = sizeHintForIndex(model()->index(0,0)); |
|
554 |
||
555 |
// This should retrieve a model index in the 2nd section |
|
556 |
m_index = indexAt(QPoint(columnwidth +2, sz.height()/2)); |
|
557 |
m_shown = true; |
|
558 |
} |
|
559 |
||
560 |
QModelIndex m_index; |
|
561 |
bool m_shown; |
|
562 |
||
563 |
}; |
|
564 |
||
565 |
void tst_QListView::indexAt() |
|
566 |
{ |
|
567 |
QtTestModel model(0); |
|
568 |
model.rCount = 2; |
|
569 |
model.colCount = 1; |
|
570 |
||
571 |
QListView view; |
|
572 |
view.setModel(&model); |
|
573 |
view.setViewMode(QListView::ListMode); |
|
574 |
view.setFlow(QListView::TopToBottom); |
|
575 |
||
576 |
QSize sz = view.sizeHintForIndex(model.index(0,0)); |
|
577 |
QModelIndex index; |
|
578 |
index = view.indexAt(QPoint(20,0)); |
|
579 |
QVERIFY(index.isValid()); |
|
580 |
QCOMPARE(index.row(), 0); |
|
581 |
||
582 |
index = view.indexAt(QPoint(20,sz.height())); |
|
583 |
QVERIFY(index.isValid()); |
|
584 |
QCOMPARE(index.row(), 1); |
|
585 |
||
586 |
index = view.indexAt(QPoint(20,2 * sz.height())); |
|
587 |
QVERIFY(!index.isValid()); |
|
588 |
||
3
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
589 |
// Check when peeking out of the viewport bounds |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
590 |
index = view.indexAt(QPoint(view.viewport()->rect().width(), 0)); |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
591 |
QVERIFY(!index.isValid()); |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
592 |
index = view.indexAt(QPoint(-1, 0)); |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
593 |
QVERIFY(!index.isValid()); |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
594 |
index = view.indexAt(QPoint(20, view.viewport()->rect().height())); |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
595 |
QVERIFY(!index.isValid()); |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
596 |
index = view.indexAt(QPoint(20, -1)); |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
597 |
QVERIFY(!index.isValid()); |
0 | 598 |
|
599 |
model.rCount = 30; |
|
600 |
QListViewShowEventListener view2; |
|
601 |
// Set the height to a small enough value so that it wraps to a new section. |
|
602 |
view2.resize(300,100); |
|
603 |
view2.setModel(&model); |
|
604 |
view2.setFlow(QListView::TopToBottom); |
|
605 |
view2.setViewMode(QListView::ListMode); |
|
606 |
view2.setWrapping(true); |
|
607 |
// We really want to make sure it is shown, because the layout won't be known until it is shown |
|
608 |
view2.show(); |
|
8
3f74d0d4af4c
qt:70947f0f93d948bc89b3b43d00da758a51f1ef84
Eckhart Koeppen <eckhart.koppen@nokia.com>
parents:
4
diff
changeset
|
609 |
QTest::qWaitForWindowShown(&view2); |
3f74d0d4af4c
qt:70947f0f93d948bc89b3b43d00da758a51f1ef84
Eckhart Koeppen <eckhart.koppen@nokia.com>
parents:
4
diff
changeset
|
610 |
QTRY_VERIFY(view2.m_shown); |
0 | 611 |
|
612 |
QVERIFY(view2.m_index.isValid()); |
|
613 |
QVERIFY(view2.m_index.row() != 0); |
|
614 |
} |
|
615 |
||
616 |
void tst_QListView::clicked() |
|
617 |
{ |
|
618 |
QtTestModel model; |
|
619 |
model.rCount = 10; |
|
620 |
model.colCount = 2; |
|
621 |
||
622 |
qRegisterMetaType<QModelIndex>("QModelIndex"); |
|
623 |
||
624 |
QListView view; |
|
625 |
view.setModel(&model); |
|
626 |
||
627 |
view.show(); |
|
628 |
QApplication::processEvents(); |
|
629 |
||
630 |
QModelIndex firstIndex = model.index(0, 0, QModelIndex()); |
|
631 |
QVERIFY(firstIndex.isValid()); |
|
632 |
int itemHeight = view.visualRect(firstIndex).height(); |
|
633 |
view.resize(200, itemHeight * (model.rCount + 1)); |
|
634 |
||
635 |
for (int i = 0; i < model.rCount; ++i) { |
|
636 |
QPoint p(5, 1 + itemHeight * i); |
|
637 |
QModelIndex index = view.indexAt(p); |
|
638 |
if (!index.isValid()) |
|
639 |
continue; |
|
640 |
QSignalSpy spy(&view, SIGNAL(clicked(const QModelIndex&))); |
|
641 |
QTest::mouseClick(view.viewport(), Qt::LeftButton, Qt::NoModifier, p); |
|
642 |
QCOMPARE(spy.count(), 1); |
|
643 |
} |
|
644 |
} |
|
645 |
||
646 |
void tst_QListView::singleSelectionRemoveRow() |
|
647 |
{ |
|
648 |
QStringList items; |
|
649 |
items << "item1" << "item2" << "item3" << "item4"; |
|
650 |
QStringListModel model(items); |
|
651 |
||
652 |
QListView view; |
|
653 |
view.setModel(&model); |
|
654 |
view.show(); |
|
655 |
||
656 |
QModelIndex index; |
|
657 |
view.setCurrentIndex(model.index(1)); |
|
658 |
index = view.currentIndex(); |
|
659 |
QCOMPARE(view.model()->data(index).toString(), QString("item2")); |
|
660 |
||
661 |
model.removeRow(1); |
|
662 |
index = view.currentIndex(); |
|
663 |
QCOMPARE(view.model()->data(index).toString(), QString("item3")); |
|
664 |
||
665 |
model.removeRow(0); |
|
666 |
index = view.currentIndex(); |
|
667 |
QCOMPARE(view.model()->data(index).toString(), QString("item3")); |
|
668 |
} |
|
669 |
||
670 |
void tst_QListView::singleSelectionRemoveColumn() |
|
671 |
{ |
|
672 |
int numCols = 3; |
|
673 |
int numRows = 3; |
|
674 |
QStandardItemModel model(numCols, numRows); |
|
675 |
for (int r = 0; r < numRows; ++r) |
|
676 |
for (int c = 0; c < numCols; ++c) |
|
677 |
model.setData(model.index(r, c), QString("%1,%2").arg(r).arg(c)); |
|
678 |
||
679 |
QListView view; |
|
680 |
view.setModel(&model); |
|
681 |
view.show(); |
|
682 |
||
683 |
QModelIndex index; |
|
684 |
view.setCurrentIndex(model.index(1, 1)); |
|
685 |
index = view.currentIndex(); |
|
686 |
QCOMPARE(view.model()->data(index).toString(), QString("1,1")); |
|
687 |
||
688 |
model.removeColumn(1); |
|
689 |
index = view.currentIndex(); |
|
690 |
QCOMPARE(view.model()->data(index).toString(), QString("1,0")); |
|
691 |
||
692 |
model.removeColumn(0); |
|
693 |
index = view.currentIndex(); |
|
694 |
QCOMPARE(view.model()->data(index).toString(), QString("1,2")); |
|
695 |
} |
|
696 |
||
697 |
void tst_QListView::modelColumn() |
|
698 |
{ |
|
699 |
int numCols = 3; |
|
700 |
int numRows = 3; |
|
701 |
QStandardItemModel model(numCols, numRows); |
|
702 |
for (int r = 0; r < numRows; ++r) |
|
703 |
for (int c = 0; c < numCols; ++c) |
|
704 |
model.setData(model.index(r, c), QString("%1,%2").arg(r).arg(c)); |
|
705 |
||
706 |
||
707 |
QListView view; |
|
708 |
view.setModel(&model); |
|
709 |
||
710 |
||
711 |
// |
|
712 |
// Set and get with a valid model |
|
713 |
// |
|
714 |
||
715 |
// Default is column 0 |
|
716 |
QCOMPARE(view.modelColumn(), 0); |
|
717 |
||
718 |
view.setModelColumn(0); |
|
719 |
QCOMPARE(view.modelColumn(), 0); |
|
720 |
view.setModelColumn(1); |
|
721 |
QCOMPARE(view.modelColumn(), 1); |
|
722 |
view.setModelColumn(2); |
|
723 |
QCOMPARE(view.modelColumn(), 2); |
|
724 |
||
725 |
// Out of bound cases should not modify the modelColumn |
|
726 |
view.setModelColumn(-1); |
|
727 |
QCOMPARE(view.modelColumn(), 2); |
|
728 |
view.setModelColumn(INT_MAX); |
|
729 |
QCOMPARE(view.modelColumn(), 2); |
|
730 |
||
731 |
||
732 |
// See if it displays the right column using indexAt()... |
|
733 |
view.resize(400,400); |
|
734 |
view.show(); |
|
735 |
||
736 |
for (int c = 0; c < 3; ++c) { |
|
737 |
view.setModelColumn(c); |
|
738 |
int startrow = 0; |
|
739 |
for (int y = 0; y < view.height(); ++y) { |
|
740 |
QModelIndex idx = view.indexAt( QPoint(1, y) ); |
|
741 |
if (idx.row() == startrow + 1) ++startrow; |
|
742 |
else if (idx.row() == -1) break; |
|
743 |
QCOMPARE(idx.row(), startrow); |
|
744 |
QCOMPARE(idx.column(), c); |
|
745 |
} |
|
746 |
QCOMPARE(startrow, 2); |
|
747 |
} |
|
748 |
} |
|
749 |
||
750 |
void tst_QListView::hideFirstRow() |
|
751 |
{ |
|
752 |
QStringList items; |
|
753 |
for (int i=0; i <100; ++i) |
|
754 |
items << "item"; |
|
755 |
QStringListModel model(items); |
|
756 |
||
757 |
QListView view; |
|
758 |
view.setModel(&model); |
|
759 |
view.setUniformItemSizes(true); |
|
760 |
view.setRowHidden(0,true); |
|
761 |
view.show(); |
|
8
3f74d0d4af4c
qt:70947f0f93d948bc89b3b43d00da758a51f1ef84
Eckhart Koeppen <eckhart.koppen@nokia.com>
parents:
4
diff
changeset
|
762 |
QTest::qWaitForWindowShown(&view); |
3f74d0d4af4c
qt:70947f0f93d948bc89b3b43d00da758a51f1ef84
Eckhart Koeppen <eckhart.koppen@nokia.com>
parents:
4
diff
changeset
|
763 |
QTest::qWait(10); |
0 | 764 |
} |
765 |
||
766 |
void tst_QListView::batchedMode() |
|
767 |
{ |
|
768 |
QStringList items; |
|
769 |
for (int i=0; i <3; ++i) |
|
770 |
items << "item"; |
|
771 |
QStringListModel model(items); |
|
772 |
||
773 |
QListView view; |
|
774 |
view.setModel(&model); |
|
775 |
view.setUniformItemSizes(true); |
|
776 |
view.setViewMode(QListView::ListMode); |
|
777 |
view.setLayoutMode(QListView::Batched); |
|
778 |
view.setBatchSize(2); |
|
779 |
view.resize(200,400); |
|
780 |
view.show(); |
|
8
3f74d0d4af4c
qt:70947f0f93d948bc89b3b43d00da758a51f1ef84
Eckhart Koeppen <eckhart.koppen@nokia.com>
parents:
4
diff
changeset
|
781 |
QTest::qWaitForWindowShown(&view); |
3f74d0d4af4c
qt:70947f0f93d948bc89b3b43d00da758a51f1ef84
Eckhart Koeppen <eckhart.koppen@nokia.com>
parents:
4
diff
changeset
|
782 |
QTest::qWait(100); |
0 | 783 |
|
8
3f74d0d4af4c
qt:70947f0f93d948bc89b3b43d00da758a51f1ef84
Eckhart Koeppen <eckhart.koppen@nokia.com>
parents:
4
diff
changeset
|
784 |
#if defined(Q_OS_WINCE) |
0 | 785 |
QTest::qWait(2000); |
786 |
#endif |
|
787 |
QBitArray ba; |
|
788 |
for (int y = 0; y < view.height(); ++y) { |
|
789 |
QModelIndex idx = view.indexAt( QPoint(1, y) ); |
|
790 |
if (!idx.isValid()) |
|
791 |
break; |
|
792 |
if (idx.row() >= ba.size()) |
|
793 |
ba.resize(idx.row() + 1); |
|
794 |
ba.setBit(idx.row(), true); |
|
795 |
} |
|
796 |
QCOMPARE(ba.size(), 3); |
|
797 |
||
798 |
||
799 |
// Test the dynamic listview too. |
|
800 |
view.setViewMode(QListView::IconMode); |
|
801 |
view.setLayoutMode(QListView::Batched); |
|
802 |
view.setFlow(QListView::TopToBottom); |
|
803 |
view.setBatchSize(2); |
|
804 |
||
805 |
#if !defined(Q_OS_WINCE) |
|
806 |
QTest::qWait(100); |
|
807 |
#else |
|
808 |
QTest::qWait(2000); |
|
809 |
#endif |
|
810 |
||
811 |
ba.clear(); |
|
812 |
for (int y = 0; y < view.height(); ++y) { |
|
813 |
QModelIndex idx = view.indexAt( QPoint(1, y) ); |
|
814 |
if (!idx.isValid()) |
|
815 |
break; |
|
816 |
if (idx.row() >= ba.size()) |
|
817 |
ba.resize(idx.row() + 1); |
|
818 |
ba.setBit(idx.row(), true); |
|
819 |
} |
|
820 |
QCOMPARE(ba.size(), 3); |
|
821 |
} |
|
822 |
||
823 |
void tst_QListView::setCurrentIndex() |
|
824 |
{ |
|
825 |
QStringList items; |
|
826 |
int i; |
|
827 |
for (i=0; i <20; ++i) |
|
828 |
items << QString("item %1").arg(i); |
|
829 |
QStringListModel model(items); |
|
830 |
||
831 |
QListView view; |
|
832 |
view.setModel(&model); |
|
833 |
||
834 |
view.resize(220,182); |
|
835 |
view.show(); |
|
836 |
||
837 |
for (int pass = 0; pass < 2; ++pass) { |
|
838 |
view.setFlow(pass == 0 ? QListView::TopToBottom : QListView::LeftToRight); |
|
839 |
QScrollBar *sb = pass == 0 ? view.verticalScrollBar() : view.horizontalScrollBar(); |
|
840 |
QList<QSize> gridsizes; |
|
841 |
gridsizes << QSize() << QSize(200,38); |
|
842 |
for (int ig = 0; ig < gridsizes.count(); ++ig) { |
|
843 |
if (pass == 1 && !gridsizes.at(ig).isValid()) // the width of an item varies, so it might jump two times |
|
844 |
continue; |
|
845 |
view.setGridSize(gridsizes.at(ig)); |
|
846 |
||
847 |
qApp->processEvents(); |
|
848 |
int offset = sb->value(); |
|
849 |
||
850 |
// first "scroll" down, verify that we scroll one step at a time |
|
851 |
i = 0; |
|
852 |
for (i = 0; i < 20; ++i) { |
|
853 |
QModelIndex idx = model.index(i,0); |
|
854 |
view.setCurrentIndex(idx); |
|
855 |
if (offset != sb->value()) { |
|
856 |
// If it has scrolled, it should have scrolled only by one. |
|
857 |
QCOMPARE(sb->value(), offset + 1); |
|
858 |
++offset; |
|
859 |
} |
|
860 |
//QTest::qWait(50); |
|
861 |
} |
|
862 |
||
863 |
--i; // item 20 does not exist |
|
864 |
// and then "scroll" up, verify that we scroll one step at a time |
|
865 |
for (; i >= 0; --i) { |
|
866 |
QModelIndex idx = model.index(i,0); |
|
867 |
view.setCurrentIndex(idx); |
|
868 |
if (offset != sb->value()) { |
|
869 |
// If it has scrolled, it should have scrolled only by one. |
|
870 |
QCOMPARE(sb->value(), offset - 1); |
|
871 |
--offset; |
|
872 |
} |
|
873 |
//QTest::qWait(50); |
|
874 |
} |
|
875 |
} |
|
876 |
} |
|
877 |
} |
|
878 |
||
879 |
class PublicListView : public QListView |
|
880 |
{ |
|
881 |
public: |
|
882 |
PublicListView(QWidget *parent = 0) : QListView(parent) |
|
883 |
{ |
|
884 |
||
885 |
} |
|
886 |
void setSelection(const QRect &rect, QItemSelectionModel::SelectionFlags flags) { |
|
887 |
QListView::setSelection(rect, flags); |
|
888 |
} |
|
889 |
QSize contentsSize() const { return QListView::contentsSize(); } |
|
890 |
||
891 |
void setPositionForIndex(const QPoint &pos, const QModelIndex &index) { |
|
892 |
QListView::setPositionForIndex(pos, index); |
|
893 |
} |
|
894 |
}; |
|
895 |
||
896 |
class TestDelegate : public QItemDelegate |
|
897 |
{ |
|
898 |
public: |
|
899 |
TestDelegate(QObject *parent) : QItemDelegate(parent), m_sizeHint(50,50) {} |
|
900 |
QSize sizeHint(const QStyleOptionViewItem &, const QModelIndex &) const { return m_sizeHint; } |
|
901 |
||
902 |
QSize m_sizeHint; |
|
903 |
}; |
|
904 |
||
905 |
typedef QList<int> IntList; |
|
906 |
Q_DECLARE_METATYPE(IntList) |
|
907 |
||
908 |
void tst_QListView::selection_data() |
|
909 |
{ |
|
910 |
QTest::addColumn<int>("itemCount"); |
|
911 |
QTest::addColumn<int>("viewMode"); |
|
912 |
QTest::addColumn<int>("flow"); |
|
913 |
QTest::addColumn<bool>("wrapping"); |
|
914 |
QTest::addColumn<int>("spacing"); |
|
915 |
QTest::addColumn<QSize>("gridSize"); |
|
916 |
QTest::addColumn<IntList>("hiddenRows"); |
|
917 |
QTest::addColumn<QRect>("selectionRect"); |
|
918 |
QTest::addColumn<IntList>("expectedItems"); |
|
919 |
||
920 |
QTest::newRow("select all") |
|
921 |
<< 4 // itemCount |
|
922 |
<< int(QListView::ListMode) |
|
923 |
<< int(QListView::TopToBottom) |
|
924 |
<< false // wrapping |
|
925 |
<< 0 // spacing |
|
926 |
<< QSize() // gridSize |
|
927 |
<< IntList() // hiddenRows |
|
928 |
<< QRect(0, 0, 10, 200) // selection rectangle |
|
929 |
<< (IntList() << 0 << 1 << 2 << 3); // expected items |
|
930 |
||
931 |
QTest::newRow("select below, (on viewport)") |
|
932 |
<< 4 // itemCount |
|
933 |
<< int(QListView::ListMode) |
|
934 |
<< int(QListView::TopToBottom) |
|
935 |
<< false // wrapping |
|
936 |
<< 0 // spacing |
|
937 |
<< QSize() // gridSize |
|
938 |
<< IntList() // hiddenRows |
|
939 |
<< QRect(10, 250, 1, 1) // selection rectangle |
|
940 |
<< IntList(); // expected items |
|
941 |
||
942 |
QTest::newRow("select below 2, (on viewport)") |
|
943 |
<< 4 // itemCount |
|
944 |
<< int(QListView::ListMode) |
|
945 |
<< int(QListView::TopToBottom) |
|
946 |
<< true // wrapping |
|
947 |
<< 0 // spacing |
|
948 |
<< QSize() // gridSize |
|
949 |
<< IntList() // hiddenRows |
|
950 |
<< QRect(10, 250, 1, 1) // selection rectangle |
|
951 |
<< IntList(); // expected items |
|
952 |
||
953 |
QTest::newRow("select to the right, (on viewport)") |
|
954 |
<< 40 // itemCount |
|
955 |
<< int(QListView::ListMode) |
|
956 |
<< int(QListView::TopToBottom) |
|
957 |
<< true // wrapping |
|
958 |
<< 0 // spacing |
|
959 |
<< QSize() // gridSize |
|
960 |
<< IntList() // hiddenRows |
|
961 |
<< QRect(300, 10, 1, 1) // selection rectangle |
|
962 |
<< IntList(); // expected items |
|
963 |
||
964 |
QTest::newRow("select to the right, (on viewport)") |
|
965 |
<< 40 // itemCount |
|
966 |
<< int(QListView::ListMode) |
|
967 |
<< int(QListView::TopToBottom) |
|
968 |
<< true // wrapping |
|
969 |
<< 0 // spacing |
|
970 |
<< QSize() // gridSize |
|
971 |
<< IntList() // hiddenRows |
|
972 |
<< QRect(300, 0, 1, 300) // selection rectangle |
|
973 |
<< IntList(); // expected items |
|
974 |
||
975 |
#if defined(Q_OS_WINCE) |
|
976 |
// depending on wether the display is double-pixeld, we need |
|
977 |
// to click at a different position |
|
978 |
bool doubledSize = false; |
|
979 |
int dpi = GetDeviceCaps(GetDC(0), LOGPIXELSX); |
|
980 |
if ((dpi < 1000) && (dpi > 0)) { |
|
981 |
doubledSize = true; |
|
982 |
} |
|
983 |
QTest::newRow("select inside contents, (on viewport)") |
|
984 |
<< 35 // itemCount |
|
985 |
<< int(QListView::ListMode) |
|
986 |
<< int(QListView::TopToBottom) |
|
987 |
<< true // wrapping |
|
988 |
<< 0 // spacing |
|
989 |
<< QSize() // gridSize |
|
990 |
<< IntList() // hiddenRows |
|
991 |
<< QRect(doubledSize?350:175,doubledSize?550:275, 1, 1)// selection rectangle |
|
992 |
<< IntList(); // expected items |
|
993 |
#else |
|
994 |
QTest::newRow("select inside contents, (on viewport)") |
|
995 |
<< 35 // itemCount |
|
996 |
<< int(QListView::ListMode) |
|
997 |
<< int(QListView::TopToBottom) |
|
998 |
<< true // wrapping |
|
999 |
<< 0 // spacing |
|
1000 |
<< QSize() // gridSize |
|
1001 |
<< IntList() // hiddenRows |
|
1002 |
<< QRect(175, 275, 1, 1) // selection rectangle |
|
1003 |
<< IntList(); // expected items |
|
1004 |
#endif |
|
1005 |
||
1006 |
QTest::newRow("select a tall rect in LeftToRight flow, wrap items") |
|
1007 |
<< 70 // itemCount |
|
1008 |
<< int(QListView::ListMode) |
|
1009 |
<< int(QListView::LeftToRight) |
|
1010 |
<< true // wrapping |
|
1011 |
<< 0 // spacing |
|
1012 |
<< QSize() // gridSize |
|
1013 |
<< IntList() // hiddenRows |
|
1014 |
<< QRect(90, 90, 1, 100) // selection rectangle |
|
1015 |
<< (IntList() // expected items |
|
1016 |
<< 11 << 12 << 13 << 14 << 15 << 16 << 17 << 18 << 19 |
|
1017 |
<< 20 << 21 << 22 << 23 << 24 << 25 << 26 << 27 << 28 << 29 |
|
1018 |
<< 30 << 31); |
|
1019 |
||
1020 |
QTest::newRow("select a wide rect in LeftToRight, wrap items") |
|
1021 |
<< 70 // itemCount |
|
1022 |
<< int(QListView::ListMode) |
|
1023 |
<< int(QListView::LeftToRight) |
|
1024 |
<< true // wrapping |
|
1025 |
<< 0 // spacing |
|
1026 |
<< QSize() // gridSize |
|
1027 |
<< IntList() // hiddenRows |
|
1028 |
<< QRect(90, 90, 200, 1) // selection rectangle |
|
1029 |
<< (IntList() // expected items |
|
1030 |
<< 11 << 12 << 13 << 14 << 15); |
|
1031 |
||
1032 |
QTest::newRow("select a wide negative rect in LeftToRight flow, wrap items") |
|
1033 |
<< 70 // itemCount |
|
1034 |
<< int(QListView::ListMode) |
|
1035 |
<< int(QListView::LeftToRight) |
|
1036 |
<< true // wrapping |
|
1037 |
<< 0 // spacing |
|
1038 |
<< QSize() // gridSize |
|
1039 |
<< IntList() // hiddenRows |
|
1040 |
<< QRect(290, 90, -200, 1) // selection rectangle |
|
1041 |
<< (IntList() // expected items |
|
1042 |
<< 11 << 12 << 13 << 14 << 15); |
|
1043 |
||
1044 |
QTest::newRow("select a tall rect in TopToBottom flow, wrap items") |
|
1045 |
<< 70 // itemCount |
|
1046 |
<< int(QListView::ListMode) |
|
1047 |
<< int(QListView::TopToBottom) |
|
1048 |
<< true // wrapping |
|
1049 |
<< 0 // spacing |
|
1050 |
<< QSize() // gridSize |
|
1051 |
<< IntList() // hiddenRows |
|
1052 |
<< QRect(90, 90, 1, 100) // selection rectangle |
|
1053 |
<< (IntList() // expected items |
|
1054 |
<< 11 |
|
1055 |
<< 12 |
|
1056 |
<< 13); |
|
1057 |
||
1058 |
QTest::newRow("select a tall negative rect in TopToBottom flow, wrap items") |
|
1059 |
<< 70 // itemCount |
|
1060 |
<< int(QListView::ListMode) |
|
1061 |
<< int(QListView::TopToBottom) |
|
1062 |
<< true // wrapping |
|
1063 |
<< 0 // spacing |
|
1064 |
<< QSize() // gridSize |
|
1065 |
<< IntList() // hiddenRows |
|
1066 |
<< QRect(90, 190, 1, -100) // selection rectangle |
|
1067 |
<< (IntList() // expected items |
|
1068 |
<< 11 |
|
1069 |
<< 12 |
|
1070 |
<< 13); |
|
1071 |
||
1072 |
QTest::newRow("select a wide rect in TopToBottom, wrap items") |
|
1073 |
<< 70 // itemCount |
|
1074 |
<< int(QListView::ListMode) |
|
1075 |
<< int(QListView::TopToBottom) |
|
1076 |
<< true // wrapping |
|
1077 |
<< 0 // spacing |
|
1078 |
<< QSize() // gridSize |
|
1079 |
<< IntList() // hiddenRows |
|
1080 |
<< QRect(90, 90, 100, 1) // selection rectangle |
|
1081 |
<< (IntList() // expected items |
|
1082 |
<< 20 << 30 |
|
1083 |
<< 11 << 21 << 31 |
|
1084 |
<< 12 << 22 |
|
1085 |
<< 13 << 23 |
|
1086 |
<< 14 << 24 |
|
1087 |
<< 15 << 25 |
|
1088 |
<< 16 << 26 |
|
1089 |
<< 17 << 27 |
|
1090 |
<< 18 << 28 |
|
1091 |
<< 19 << 29); |
|
1092 |
} |
|
1093 |
||
1094 |
void tst_QListView::selection() |
|
1095 |
{ |
|
1096 |
QFETCH(int, itemCount); |
|
1097 |
QFETCH(int, viewMode); |
|
1098 |
QFETCH(int, flow); |
|
1099 |
QFETCH(bool, wrapping); |
|
1100 |
QFETCH(int, spacing); |
|
1101 |
QFETCH(QSize, gridSize); |
|
1102 |
QFETCH(IntList, hiddenRows); |
|
1103 |
QFETCH(QRect, selectionRect); |
|
1104 |
QFETCH(IntList, expectedItems); |
|
1105 |
||
1106 |
PublicListView v; |
|
1107 |
QtTestModel model; |
|
1108 |
model.colCount = 1; |
|
1109 |
model.rCount = itemCount; |
|
1110 |
||
1111 |
// avoid scrollbar size mismatches among different styles |
|
1112 |
v.setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); |
|
1113 |
v.setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); |
|
1114 |
||
1115 |
v.setItemDelegate(new TestDelegate(&v)); |
|
1116 |
v.setModel(&model); |
|
1117 |
v.setViewMode(QListView::ViewMode(viewMode)); |
|
1118 |
v.setFlow(QListView::Flow(flow)); |
|
1119 |
v.setWrapping(wrapping); |
|
1120 |
v.setResizeMode(QListView::Adjust); |
|
1121 |
v.setSpacing(spacing); |
|
1122 |
if (gridSize.isValid()) |
|
1123 |
v.setGridSize(gridSize); |
|
1124 |
for (int j = 0; j < hiddenRows.count(); ++j) { |
|
1125 |
v.setRowHidden(hiddenRows.at(j), true); |
|
1126 |
} |
|
1127 |
||
1128 |
#if defined(Q_OS_WINCE) |
|
1129 |
// If the device is double-pixeled then the scrollbars become |
|
1130 |
// 10 pixels wider than normal (Windows Style: 16, Windows Mobile Style: 26). |
|
1131 |
// So we have to make the window slightly bigger to have the same count of |
|
1132 |
// items in each row of the list view like in the other styles. |
|
1133 |
static const int dpi = ::GetDeviceCaps(GetDC(0), LOGPIXELSX); |
|
1134 |
if ((dpi < 1000) && (dpi > 0)) |
|
1135 |
v.resize(535,535); |
|
1136 |
#else |
|
1137 |
v.resize(525,525); |
|
1138 |
#endif |
|
1139 |
||
1140 |
v.show(); |
|
3
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1141 |
QTest::qWaitForWindowShown(&v); |
0 | 1142 |
QApplication::processEvents(); |
1143 |
||
1144 |
v.setSelection(selectionRect, QItemSelectionModel::ClearAndSelect); |
|
1145 |
||
1146 |
QModelIndexList selected = v.selectionModel()->selectedIndexes(); |
|
1147 |
||
1148 |
QCOMPARE(selected.count(), expectedItems.count()); |
|
1149 |
for (int i = 0; i < selected.count(); ++i) { |
|
1150 |
QVERIFY(expectedItems.contains(selected.at(i).row())); |
|
1151 |
} |
|
1152 |
} |
|
1153 |
||
1154 |
void tst_QListView::scrollTo() |
|
1155 |
{ |
|
1156 |
QListView lv; |
|
1157 |
QStringListModel model(&lv); |
|
1158 |
QStringList list; |
|
1159 |
list << "Short item 1"; |
|
1160 |
list << "Short item 2"; |
|
1161 |
list << "Short item 3"; |
|
1162 |
list << "Short item 4"; |
|
1163 |
list << "Short item 5"; |
|
1164 |
list << "Short item 6"; |
|
1165 |
list << "Begin This is a very long item\nThis is a very long item\nThis is a very long item\nThis is a very long item\nThis is a very long item\n" |
|
1166 |
"This is a very long item\nThis is a very long item\nThis is a very long item\nThis is a very long item\nThis is a very long item\n" |
|
1167 |
"This is a very long item\nThis is a very long item\nThis is a very long item\nThis is a very long item\nThis is a very long item\n" |
|
1168 |
"This is a very long item\nThis is a very long item\nThis is a very long item\nThis is a very long item\nThis is a very long item\n" |
|
1169 |
"This is a very long item\nThis is a very long item\nThis is a very long item\nThis is a very long item\nThis is a very long item\n" |
|
1170 |
"This is a very long item\nThis is a very long item\nThis is a very long item\nThis is a very long item\nThis is a very long item\n" |
|
1171 |
"This is a very long item\nThis is a very long item\nThis is a very long item\nThis is a very long item\nThis is a very long item\n" |
|
1172 |
"This is a very long item\nThis is a very long item\nThis is a very long item\nThis is a very long item\nThis is a very long item\n" |
|
1173 |
"This is a very long item\nThis is a very long item\nThis is a very long item\nThis is a very long item\nThis is a very long item\n" |
|
1174 |
"This is a very long item\nThis is a very long item\nThis is a very long item\nThis is a very long item\nThis is a very long item\n" |
|
1175 |
"This is a very long item\nThis is a very long item\nThis is a very long item\nThis is a very long item\nThis is a very long item\n" |
|
1176 |
"This is a very long item\nThis is a very long item\nThis is a very long item\nThis is a very long item\nThis is a very long item\n" |
|
1177 |
"This is a very long item\nThis is a very long item\nThis is a very long item\nThis is a very long item\nThis is a very long item\n" |
|
1178 |
"This is a very long item\nThis is a very long item\nThis is a very long item\nThis is a very long item\nThis is a very long item\n" |
|
1179 |
"This is a very long item\nThis is a very long item\nThis is a very long item\nThis is a very long item\nThis is a very long item\n" |
|
1180 |
"This is a very long item\nThis is a very long item\nThis is a very long item\nThis is a very long item\nThis is a very long item End\n"; |
|
1181 |
list << "Short item"; |
|
1182 |
list << "Short item"; |
|
1183 |
list << "Short item"; |
|
1184 |
list << "Short item"; |
|
1185 |
list << "Short item"; |
|
1186 |
list << "Short item"; |
|
1187 |
list << "Short item"; |
|
1188 |
list << "Short item"; |
|
1189 |
model.setStringList(list); |
|
1190 |
lv.setModel(&model); |
|
1191 |
lv.setFixedSize(100, 200); |
|
1192 |
lv.show(); |
|
3
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1193 |
QTest::qWaitForWindowShown(&lv); |
0 | 1194 |
|
1195 |
//by default, the list view scrolls per item and has no wrapping |
|
1196 |
QModelIndex index = model.index(6,0); |
|
1197 |
||
1198 |
//we save the size of the item for later comparisons |
|
1199 |
const QSize itemsize = lv.visualRect(index).size(); |
|
1200 |
QVERIFY(itemsize.height() > lv.height()); |
|
1201 |
QVERIFY(itemsize.width() > lv.width()); |
|
1202 |
||
1203 |
//we click the item |
|
1204 |
QPoint p = lv.visualRect(index).center(); |
|
1205 |
QTest::mouseClick(lv.viewport(), Qt::LeftButton, Qt::NoModifier, p); |
|
8
3f74d0d4af4c
qt:70947f0f93d948bc89b3b43d00da758a51f1ef84
Eckhart Koeppen <eckhart.koppen@nokia.com>
parents:
4
diff
changeset
|
1206 |
//let's wait because the scrolling is delayed |
3f74d0d4af4c
qt:70947f0f93d948bc89b3b43d00da758a51f1ef84
Eckhart Koeppen <eckhart.koppen@nokia.com>
parents:
4
diff
changeset
|
1207 |
QTest::qWait(QApplication::doubleClickInterval() + 150); |
3f74d0d4af4c
qt:70947f0f93d948bc89b3b43d00da758a51f1ef84
Eckhart Koeppen <eckhart.koppen@nokia.com>
parents:
4
diff
changeset
|
1208 |
QTRY_COMPARE(lv.visualRect(index).y(),0); |
0 | 1209 |
|
1210 |
//we scroll down. As the item is to tall for the view, it will disappear |
|
1211 |
QTest::keyClick(lv.viewport(), Qt::Key_Down, Qt::NoModifier); |
|
1212 |
QCOMPARE(lv.visualRect(index).y(), -itemsize.height()); |
|
1213 |
||
1214 |
QTest::keyClick(lv.viewport(), Qt::Key_Up, Qt::NoModifier); |
|
1215 |
QCOMPARE(lv.visualRect(index).y(), 0); |
|
1216 |
||
1217 |
//Let's enable wrapping |
|
1218 |
||
1219 |
lv.setWrapping(true); |
|
1220 |
lv.horizontalScrollBar()->setValue(0); //let's scroll to the beginning |
|
1221 |
||
1222 |
//we click the item |
|
1223 |
p = lv.visualRect(index).center(); |
|
1224 |
QTest::mouseClick(lv.viewport(), Qt::LeftButton, Qt::NoModifier, p); |
|
8
3f74d0d4af4c
qt:70947f0f93d948bc89b3b43d00da758a51f1ef84
Eckhart Koeppen <eckhart.koppen@nokia.com>
parents:
4
diff
changeset
|
1225 |
//let's wait because the scrolling is delayed |
3f74d0d4af4c
qt:70947f0f93d948bc89b3b43d00da758a51f1ef84
Eckhart Koeppen <eckhart.koppen@nokia.com>
parents:
4
diff
changeset
|
1226 |
QTest::qWait(QApplication::doubleClickInterval() + 150); |
3f74d0d4af4c
qt:70947f0f93d948bc89b3b43d00da758a51f1ef84
Eckhart Koeppen <eckhart.koppen@nokia.com>
parents:
4
diff
changeset
|
1227 |
QTRY_COMPARE(lv.visualRect(index).x(),0); |
0 | 1228 |
|
1229 |
//we scroll right. As the item is too wide for the view, it will disappear |
|
1230 |
QTest::keyClick(lv.viewport(), Qt::Key_Right, Qt::NoModifier); |
|
1231 |
QCOMPARE(lv.visualRect(index).x(), -itemsize.width()); |
|
1232 |
||
1233 |
QTest::keyClick(lv.viewport(), Qt::Key_Left, Qt::NoModifier); |
|
1234 |
QCOMPARE(lv.visualRect(index).x(), 0); |
|
1235 |
||
1236 |
lv.setWrapping(false); |
|
1237 |
qApp->processEvents(); //let the layout happen |
|
1238 |
||
1239 |
//Let's try with scrolling per pixel |
|
1240 |
lv.setHorizontalScrollMode( QListView::ScrollPerPixel); |
|
1241 |
lv.verticalScrollBar()->setValue(0); //scrolls back to the first item |
|
1242 |
||
1243 |
//we click the item |
|
1244 |
p = lv.visualRect(index).center(); |
|
1245 |
QTest::mouseClick(lv.viewport(), Qt::LeftButton, Qt::NoModifier, p); |
|
8
3f74d0d4af4c
qt:70947f0f93d948bc89b3b43d00da758a51f1ef84
Eckhart Koeppen <eckhart.koppen@nokia.com>
parents:
4
diff
changeset
|
1246 |
//let's wait because the scrolling is delayed |
3f74d0d4af4c
qt:70947f0f93d948bc89b3b43d00da758a51f1ef84
Eckhart Koeppen <eckhart.koppen@nokia.com>
parents:
4
diff
changeset
|
1247 |
QTest::qWait(QApplication::doubleClickInterval() + 150); |
3f74d0d4af4c
qt:70947f0f93d948bc89b3b43d00da758a51f1ef84
Eckhart Koeppen <eckhart.koppen@nokia.com>
parents:
4
diff
changeset
|
1248 |
QTRY_COMPARE(lv.visualRect(index).y(),0); |
0 | 1249 |
|
1250 |
//we scroll down. As the item is too tall for the view, it will partially disappear |
|
1251 |
QTest::keyClick(lv.viewport(), Qt::Key_Down, Qt::NoModifier); |
|
1252 |
QVERIFY(lv.visualRect(index).y()<0); |
|
1253 |
||
1254 |
QTest::keyClick(lv.viewport(), Qt::Key_Up, Qt::NoModifier); |
|
1255 |
QCOMPARE(lv.visualRect(index).y(), 0); |
|
1256 |
} |
|
1257 |
||
1258 |
||
1259 |
void tst_QListView::scrollBarRanges() |
|
1260 |
{ |
|
1261 |
const int rowCount = 10; |
|
1262 |
const int rowHeight = 20; |
|
1263 |
||
1264 |
QListView lv; |
|
1265 |
QStringListModel model(&lv); |
|
1266 |
QStringList list; |
|
1267 |
for (int i = 0; i < rowCount; ++i) |
|
1268 |
list << QString::fromAscii("Item %1").arg(i); |
|
1269 |
||
1270 |
model.setStringList(list); |
|
1271 |
lv.setModel(&model); |
|
1272 |
lv.resize(250, 130); |
|
1273 |
TestDelegate *delegate = new TestDelegate(&lv); |
|
1274 |
delegate->m_sizeHint = QSize(100, rowHeight); |
|
1275 |
lv.setItemDelegate(delegate); |
|
1276 |
lv.show(); |
|
1277 |
||
1278 |
for (int h = 30; h <= 210; ++h) { |
|
1279 |
lv.resize(250, h); |
|
8
3f74d0d4af4c
qt:70947f0f93d948bc89b3b43d00da758a51f1ef84
Eckhart Koeppen <eckhart.koppen@nokia.com>
parents:
4
diff
changeset
|
1280 |
QApplication::processEvents(); // wait for the layout to be done |
0 | 1281 |
int visibleRowCount = lv.viewport()->size().height() / rowHeight; |
1282 |
int invisibleRowCount = rowCount - visibleRowCount; |
|
1283 |
QCOMPARE(lv.verticalScrollBar()->maximum(), invisibleRowCount); |
|
1284 |
} |
|
1285 |
} |
|
1286 |
||
1287 |
void tst_QListView::scrollBarAsNeeded_data() |
|
1288 |
{ |
|
1289 |
QTest::addColumn<QSize>("size"); |
|
1290 |
QTest::addColumn<int>("itemCount"); |
|
1291 |
QTest::addColumn<int>("flow"); |
|
1292 |
QTest::addColumn<bool>("horizontalScrollBarVisible"); |
|
1293 |
QTest::addColumn<bool>("verticalScrollBarVisible"); |
|
1294 |
||
1295 |
||
1296 |
QTest::newRow("TopToBottom, count:0") |
|
1297 |
<< QSize(200, 100) |
|
1298 |
<< 0 |
|
1299 |
<< int(QListView::TopToBottom) |
|
1300 |
<< false |
|
1301 |
<< false; |
|
1302 |
||
1303 |
QTest::newRow("TopToBottom, count:1") |
|
1304 |
<< QSize(200, 100) |
|
1305 |
<< 1 |
|
1306 |
<< int(QListView::TopToBottom) |
|
1307 |
<< false |
|
1308 |
<< false; |
|
1309 |
||
1310 |
QTest::newRow("TopToBottom, count:20") |
|
1311 |
<< QSize(200, 100) |
|
1312 |
<< 20 |
|
1313 |
<< int(QListView::TopToBottom) |
|
1314 |
<< false |
|
1315 |
<< true; |
|
1316 |
||
1317 |
QTest::newRow("LeftToRight, count:0") |
|
1318 |
<< QSize(200, 100) |
|
1319 |
<< 0 |
|
1320 |
<< int(QListView::LeftToRight) |
|
1321 |
<< false |
|
1322 |
<< false; |
|
1323 |
||
1324 |
QTest::newRow("LeftToRight, count:1") |
|
1325 |
<< QSize(200, 100) |
|
1326 |
<< 1 |
|
1327 |
<< int(QListView::LeftToRight) |
|
1328 |
<< false |
|
1329 |
<< false; |
|
1330 |
||
1331 |
QTest::newRow("LeftToRight, count:20") |
|
1332 |
<< QSize(200, 100) |
|
1333 |
<< 20 |
|
1334 |
<< int(QListView::LeftToRight) |
|
1335 |
<< true |
|
1336 |
<< false; |
|
1337 |
||
1338 |
||
1339 |
} |
|
1340 |
void tst_QListView::scrollBarAsNeeded() |
|
1341 |
{ |
|
1342 |
||
1343 |
QFETCH(QSize, size); |
|
1344 |
QFETCH(int, itemCount); |
|
1345 |
QFETCH(int, flow); |
|
1346 |
QFETCH(bool, horizontalScrollBarVisible); |
|
1347 |
QFETCH(bool, verticalScrollBarVisible); |
|
1348 |
||
1349 |
||
1350 |
const int rowCounts[3] = {0, 1, 20}; |
|
1351 |
||
1352 |
QListView lv; |
|
1353 |
lv.setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded); |
|
1354 |
lv.setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded); |
|
1355 |
lv.setFlow((QListView::Flow)flow); |
|
1356 |
QStringListModel model(&lv); |
|
1357 |
lv.setModel(&model); |
|
1358 |
lv.resize(size); |
|
1359 |
lv.show(); |
|
1360 |
||
1361 |
for (uint r = 0; r < sizeof(rowCounts)/sizeof(int); ++r) { |
|
1362 |
QStringList list; |
|
1363 |
int i; |
|
1364 |
for (i = 0; i < rowCounts[r]; ++i) |
|
1365 |
list << QString::fromAscii("Item %1").arg(i); |
|
1366 |
||
1367 |
model.setStringList(list); |
|
1368 |
QApplication::processEvents(); |
|
8
3f74d0d4af4c
qt:70947f0f93d948bc89b3b43d00da758a51f1ef84
Eckhart Koeppen <eckhart.koppen@nokia.com>
parents:
4
diff
changeset
|
1369 |
QTest::qWait(50); |
0 | 1370 |
|
1371 |
QStringList replacement; |
|
1372 |
for (i = 0; i < itemCount; ++i) { |
|
1373 |
replacement << QString::fromAscii("Item %1").arg(i); |
|
1374 |
} |
|
1375 |
model.setStringList(replacement); |
|
1376 |
||
1377 |
QApplication::processEvents(); |
|
1378 |
||
8
3f74d0d4af4c
qt:70947f0f93d948bc89b3b43d00da758a51f1ef84
Eckhart Koeppen <eckhart.koppen@nokia.com>
parents:
4
diff
changeset
|
1379 |
QTRY_COMPARE(lv.horizontalScrollBar()->isVisible(), horizontalScrollBarVisible); |
3f74d0d4af4c
qt:70947f0f93d948bc89b3b43d00da758a51f1ef84
Eckhart Koeppen <eckhart.koppen@nokia.com>
parents:
4
diff
changeset
|
1380 |
QTRY_COMPARE(lv.verticalScrollBar()->isVisible(), verticalScrollBarVisible); |
0 | 1381 |
} |
1382 |
} |
|
1383 |
||
1384 |
void tst_QListView::moveItems() |
|
1385 |
{ |
|
1386 |
QStandardItemModel model; |
|
1387 |
for (int r = 0; r < 4; ++r) { |
|
1388 |
for (int c = 0; c < 4; ++c) { |
|
1389 |
QStandardItem* item = new QStandardItem(QString("standard item (%1,%2)").arg(r).arg(c)); |
|
1390 |
model.setItem(r, c, item); |
|
1391 |
} |
|
1392 |
} |
|
1393 |
||
1394 |
PublicListView view; |
|
1395 |
view.setViewMode(QListView::IconMode); |
|
1396 |
view.setResizeMode(QListView::Fixed); |
|
1397 |
view.setWordWrap(true); |
|
1398 |
view.setModel(&model); |
|
1399 |
view.setItemDelegate(new TestDelegate(&view)); |
|
1400 |
||
1401 |
for (int r = 0; r < model.rowCount(); ++r) { |
|
1402 |
for (int c = 0; c < model.columnCount(); ++c) { |
|
1403 |
const QModelIndex& idx = model.index(r, c); |
|
1404 |
view.setPositionForIndex(QPoint(r * 75, r * 75), idx); |
|
1405 |
} |
|
1406 |
} |
|
1407 |
||
1408 |
QCOMPARE(view.contentsSize(), QSize(275, 275)); |
|
1409 |
} |
|
1410 |
||
1411 |
void tst_QListView::wordWrap() |
|
1412 |
{ |
|
1413 |
QListView lv; |
|
1414 |
lv.setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded); |
|
1415 |
lv.setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded); |
|
1416 |
QStringListModel model(&lv); |
|
1417 |
QStringList list; |
|
1418 |
list << "Short item 1"; |
|
1419 |
list << "Short item 2"; |
|
1420 |
list << "Short item 3"; |
|
1421 |
list << "Begin\nThis item take severals Lines\nEnd"; |
|
1422 |
list << "And this is a very long item very long item this is a very vary vary long item" |
|
1423 |
"very long very very long long long this is a long item a very long item a very very long item"; |
|
1424 |
list << "And this is a second even a little more long very long item very long item this is a very vary vary long item" |
|
1425 |
"very long very very long long long this is a long item a very long item a very very long item"; |
|
1426 |
list << "Short item"; |
|
1427 |
list << "rzeofig zerig fslfgj smdlfkgj qmsdlfj amrzriougf qsla zrg fgsdf gsdfg sdfgs dfg sdfgcvb sdfg qsdjfh qsdfjklh qs"; |
|
1428 |
list << "Short item"; |
|
1429 |
model.setStringList(list); |
|
1430 |
lv.setModel(&model); |
|
1431 |
lv.setWordWrap(true); |
|
1432 |
lv.setFixedSize(150, 150); |
|
1433 |
lv.show(); |
|
1434 |
QApplication::processEvents(); |
|
1435 |
||
8
3f74d0d4af4c
qt:70947f0f93d948bc89b3b43d00da758a51f1ef84
Eckhart Koeppen <eckhart.koppen@nokia.com>
parents:
4
diff
changeset
|
1436 |
QTRY_COMPARE(lv.horizontalScrollBar()->isVisible(), false); |
3f74d0d4af4c
qt:70947f0f93d948bc89b3b43d00da758a51f1ef84
Eckhart Koeppen <eckhart.koppen@nokia.com>
parents:
4
diff
changeset
|
1437 |
QTRY_COMPARE(lv.verticalScrollBar()->isVisible(), true); |
0 | 1438 |
} |
1439 |
||
1440 |
#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE) |
|
1441 |
class SetCurrentIndexAfterAppendRowCrashDialog : public QDialog |
|
1442 |
{ |
|
1443 |
Q_OBJECT |
|
1444 |
public: |
|
1445 |
SetCurrentIndexAfterAppendRowCrashDialog() |
|
1446 |
{ |
|
1447 |
#if WINVER >= 0x0500 |
|
1448 |
listView = new QListView(); |
|
1449 |
listView->setViewMode(QListView::IconMode); |
|
1450 |
||
1451 |
model = new QStandardItemModel(this); |
|
1452 |
listView->setModel(model); |
|
1453 |
||
1454 |
timer = new QTimer(this); |
|
1455 |
connect(timer, SIGNAL(timeout()), this, SLOT(buttonClicked())); |
|
1456 |
timer->start(1000); |
|
1457 |
||
1458 |
DWORD lParam = 0xFFFFFFFC/*OBJID_CLIENT*/; |
|
1459 |
DWORD wParam = 0; |
|
1460 |
SendMessage(winId(), WM_GETOBJECT, wParam, lParam); |
|
1461 |
#endif |
|
1462 |
} |
|
1463 |
||
1464 |
private slots: |
|
1465 |
void buttonClicked() |
|
1466 |
{ |
|
1467 |
timer->stop(); |
|
1468 |
QStandardItem *item = new QStandardItem("test"); |
|
1469 |
model->appendRow(item); |
|
1470 |
listView->setCurrentIndex(model->indexFromItem(item)); |
|
1471 |
close(); |
|
1472 |
} |
|
1473 |
private: |
|
1474 |
QListView *listView; |
|
1475 |
QStandardItemModel *model; |
|
1476 |
QTimer *timer; |
|
1477 |
}; |
|
1478 |
#endif |
|
1479 |
||
1480 |
void tst_QListView::setCurrentIndexAfterAppendRowCrash() |
|
1481 |
{ |
|
1482 |
#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE) && WINVER >= 0x0500 |
|
1483 |
SetCurrentIndexAfterAppendRowCrashDialog w; |
|
1484 |
w.exec(); |
|
1485 |
#else |
|
1486 |
QSKIP("This test only makes sense on windows 2000 and higher.", SkipAll); |
|
1487 |
#endif |
|
1488 |
} |
|
1489 |
||
1490 |
void tst_QListView::emptyItemSize() |
|
1491 |
{ |
|
1492 |
QStandardItemModel model; |
|
1493 |
for (int r = 0; r < 4; ++r) { |
|
1494 |
QStandardItem* item = new QStandardItem(QString("standard item (%1)").arg(r)); |
|
1495 |
model.setItem(r, 0, item); |
|
1496 |
} |
|
1497 |
model.setItem(4, 0, new QStandardItem()); |
|
1498 |
||
1499 |
PublicListView view; |
|
1500 |
view.setModel(&model); |
|
1501 |
||
1502 |
for (int i = 0; i < 5; ++i) |
|
1503 |
QVERIFY(!view.visualRect(model.index(i, 0)).isEmpty()); |
|
1504 |
} |
|
1505 |
||
1506 |
void tst_QListView::task203585_selectAll() |
|
1507 |
{ |
|
1508 |
//we make sure that "select all" doesn't select the hidden items |
|
1509 |
QListView view; |
|
1510 |
view.setSelectionMode(QAbstractItemView::ExtendedSelection); |
|
1511 |
view.setModel(new QStringListModel( QStringList() << "foo")); |
|
1512 |
view.setRowHidden(0, true); |
|
1513 |
view.selectAll(); |
|
1514 |
QVERIFY(view.selectionModel()->selectedIndexes().isEmpty()); |
|
1515 |
view.setRowHidden(0, false); |
|
1516 |
view.selectAll(); |
|
1517 |
QCOMPARE(view.selectionModel()->selectedIndexes().count(), 1); |
|
1518 |
} |
|
1519 |
||
1520 |
void tst_QListView::task228566_infiniteRelayout() |
|
1521 |
{ |
|
1522 |
QListView view; |
|
1523 |
||
1524 |
QStringList list; |
|
1525 |
for (int i = 0; i < 10; ++i) { |
|
1526 |
list << "small"; |
|
1527 |
} |
|
1528 |
||
1529 |
list << "BIGBIGBIGBIGBIGBIGBIGBIGBIGBIGBIGBIG"; |
|
1530 |
list << "BIGBIGBIGBIGBIGBIGBIGBIGBIGBIGBIGBIG"; |
|
1531 |
||
1532 |
QStringListModel model(list); |
|
1533 |
view.setModel(&model); |
|
1534 |
view.setWrapping(true); |
|
1535 |
view.setResizeMode(QListView::Adjust); |
|
1536 |
||
1537 |
const int itemHeight = view.visualRect( model.index(0, 0)).height(); |
|
1538 |
||
1539 |
view.setFixedHeight(itemHeight * 12); |
|
1540 |
view.show(); |
|
1541 |
QTest::qWait(100); //make sure the layout is done once |
|
1542 |
||
1543 |
QSignalSpy spy(view.horizontalScrollBar(), SIGNAL(rangeChanged(int, int))); |
|
1544 |
||
1545 |
QTest::qWait(200); |
|
1546 |
//the layout should already have been done |
|
1547 |
//so there should be no change made to the scrollbar |
|
1548 |
QCOMPARE(spy.count(), 0); |
|
1549 |
} |
|
1550 |
||
1551 |
void tst_QListView::task248430_crashWith0SizedItem() |
|
1552 |
{ |
|
1553 |
QListView view; |
|
1554 |
view.setViewMode(QListView::IconMode); |
|
1555 |
QStringListModel model(QStringList() << QLatin1String("item1") << QString()); |
|
1556 |
view.setModel(&model); |
|
1557 |
view.show(); |
|
8
3f74d0d4af4c
qt:70947f0f93d948bc89b3b43d00da758a51f1ef84
Eckhart Koeppen <eckhart.koppen@nokia.com>
parents:
4
diff
changeset
|
1558 |
QTest::qWaitForWindowShown(&view); |
3f74d0d4af4c
qt:70947f0f93d948bc89b3b43d00da758a51f1ef84
Eckhart Koeppen <eckhart.koppen@nokia.com>
parents:
4
diff
changeset
|
1559 |
QTest::qWait(20); |
0 | 1560 |
} |
1561 |
||
1562 |
void tst_QListView::task250446_scrollChanged() |
|
1563 |
{ |
|
1564 |
QStandardItemModel model(200, 1); |
|
1565 |
QListView view; |
|
1566 |
view.setModel(&model); |
|
1567 |
QModelIndex index = model.index(0, 0); |
|
1568 |
QVERIFY(index.isValid()); |
|
1569 |
view.setCurrentIndex(index); |
|
1570 |
view.show(); |
|
8
3f74d0d4af4c
qt:70947f0f93d948bc89b3b43d00da758a51f1ef84
Eckhart Koeppen <eckhart.koppen@nokia.com>
parents:
4
diff
changeset
|
1571 |
QTest::qWaitForWindowShown(&view); |
0 | 1572 |
const int scrollValue = view.verticalScrollBar()->maximum(); |
1573 |
view.verticalScrollBar()->setValue(scrollValue); |
|
1574 |
QCOMPARE(view.verticalScrollBar()->value(), scrollValue); |
|
1575 |
QCOMPARE(view.currentIndex(), index); |
|
1576 |
||
1577 |
view.showMinimized(); |
|
8
3f74d0d4af4c
qt:70947f0f93d948bc89b3b43d00da758a51f1ef84
Eckhart Koeppen <eckhart.koppen@nokia.com>
parents:
4
diff
changeset
|
1578 |
QTest::qWait(50); |
3f74d0d4af4c
qt:70947f0f93d948bc89b3b43d00da758a51f1ef84
Eckhart Koeppen <eckhart.koppen@nokia.com>
parents:
4
diff
changeset
|
1579 |
QTRY_COMPARE(view.verticalScrollBar()->value(), scrollValue); |
3f74d0d4af4c
qt:70947f0f93d948bc89b3b43d00da758a51f1ef84
Eckhart Koeppen <eckhart.koppen@nokia.com>
parents:
4
diff
changeset
|
1580 |
QTRY_COMPARE(view.currentIndex(), index); |
0 | 1581 |
|
1582 |
view.showNormal(); |
|
8
3f74d0d4af4c
qt:70947f0f93d948bc89b3b43d00da758a51f1ef84
Eckhart Koeppen <eckhart.koppen@nokia.com>
parents:
4
diff
changeset
|
1583 |
QTest::qWait(50); |
3f74d0d4af4c
qt:70947f0f93d948bc89b3b43d00da758a51f1ef84
Eckhart Koeppen <eckhart.koppen@nokia.com>
parents:
4
diff
changeset
|
1584 |
QTRY_COMPARE(view.verticalScrollBar()->value(), scrollValue); |
3f74d0d4af4c
qt:70947f0f93d948bc89b3b43d00da758a51f1ef84
Eckhart Koeppen <eckhart.koppen@nokia.com>
parents:
4
diff
changeset
|
1585 |
QTRY_COMPARE(view.currentIndex(), index); |
0 | 1586 |
} |
1587 |
||
1588 |
void tst_QListView::task196118_visualRegionForSelection() |
|
1589 |
{ |
|
1590 |
class MyListView : public QListView |
|
1591 |
{ |
|
1592 |
public: |
|
1593 |
QRegion visualRegionForSelection() const |
|
1594 |
{ return QListView::visualRegionForSelection( selectionModel()->selection()); } |
|
1595 |
} view; |
|
1596 |
||
1597 |
QStandardItemModel model; |
|
1598 |
QStandardItem top1("top1"); |
|
1599 |
QStandardItem sub1("sub1"); |
|
1600 |
top1.appendRow(QList<QStandardItem*>() << &sub1); |
|
1601 |
model.appendColumn(QList<QStandardItem*>() << &top1); |
|
1602 |
view.setModel(&model); |
|
1603 |
view.setRootIndex(top1.index()); |
|
1604 |
||
1605 |
view.selectionModel()->select(top1.index(), QItemSelectionModel::Select); |
|
1606 |
||
1607 |
QCOMPARE(view.selectionModel()->selectedIndexes().count(), 1); |
|
1608 |
QVERIFY(view.visualRegionForSelection().isEmpty()); |
|
1609 |
} |
|
1610 |
||
1611 |
void tst_QListView::task254449_draggingItemToNegativeCoordinates() |
|
1612 |
{ |
|
1613 |
//we'll check that the items are painted correctly |
|
1614 |
class MyListView : public QListView |
|
1615 |
{ |
|
1616 |
public: |
|
1617 |
void setPositionForIndex(const QPoint &position, const QModelIndex &index) |
|
1618 |
{ QListView::setPositionForIndex(position, index); } |
|
1619 |
||
1620 |
} list; |
|
1621 |
||
1622 |
QStandardItemModel model(1,1); |
|
1623 |
QModelIndex index = model.index(0,0); |
|
1624 |
model.setData(index, QLatin1String("foo")); |
|
1625 |
list.setModel(&model); |
|
1626 |
list.setViewMode(QListView::IconMode); |
|
1627 |
list.show(); |
|
1628 |
QTest::qWaitForWindowShown(&list); |
|
1629 |
||
1630 |
class MyItemDelegate : public QStyledItemDelegate |
|
1631 |
{ |
|
1632 |
public: |
|
1633 |
MyItemDelegate() : numPaints(0) { } |
|
1634 |
void paint(QPainter *painter, |
|
1635 |
const QStyleOptionViewItem &option, const QModelIndex &index) const |
|
1636 |
{ |
|
1637 |
numPaints++; |
|
1638 |
QStyledItemDelegate::paint(painter, option, index); |
|
1639 |
} |
|
1640 |
||
1641 |
mutable int numPaints; |
|
1642 |
} delegate; |
|
1643 |
delegate.numPaints = 0; |
|
1644 |
list.setItemDelegate(&delegate); |
|
1645 |
QApplication::processEvents(); |
|
1646 |
QTRY_VERIFY(delegate.numPaints > 0); //makes sure the layout is done |
|
1647 |
||
1648 |
const QPoint topLeft(-6, 0); |
|
1649 |
list.setPositionForIndex(topLeft, index); |
|
1650 |
||
1651 |
//we'll make sure the item is repainted |
|
1652 |
delegate.numPaints = 0; |
|
1653 |
QApplication::processEvents(); |
|
1654 |
QCOMPARE(list.visualRect(index).topLeft(), topLeft); |
|
1655 |
QCOMPARE(delegate.numPaints, 1); |
|
1656 |
} |
|
1657 |
||
1658 |
||
1659 |
void tst_QListView::keyboardSearch() |
|
1660 |
{ |
|
1661 |
QStringList items; |
|
1662 |
items << "AB" << "AC" << "BA" << "BB" << "BD" << "KAFEINE" << "KONQUEROR" << "KOPETE" << "KOOKA" << "OKULAR"; |
|
1663 |
QStringListModel model(items); |
|
1664 |
||
1665 |
QListView view; |
|
1666 |
view.setModel(&model); |
|
1667 |
view.show(); |
|
1668 |
QTest::qWait(30); |
|
1669 |
// QCOMPARE(view.currentIndex() , model.index(0,0)); |
|
1670 |
||
1671 |
QTest::keyClick(&view, Qt::Key_K); |
|
1672 |
QTest::qWait(10); |
|
1673 |
QCOMPARE(view.currentIndex() , model.index(5,0)); //KAFEINE |
|
1674 |
||
1675 |
QTest::keyClick(&view, Qt::Key_O); |
|
1676 |
QTest::qWait(10); |
|
1677 |
QCOMPARE(view.currentIndex() , model.index(6,0)); //KONQUEROR |
|
1678 |
||
1679 |
QTest::keyClick(&view, Qt::Key_N); |
|
1680 |
QTest::qWait(10); |
|
1681 |
QCOMPARE(view.currentIndex() , model.index(6,0)); //KONQUEROR |
|
1682 |
} |
|
1683 |
||
1684 |
void tst_QListView::shiftSelectionWithNonUniformItemSizes() |
|
1685 |
{ |
|
1686 |
// This checks that no items are selected unexpectedly by Shift-Arrow |
|
1687 |
// when items with non-uniform sizes are laid out in a grid |
|
1688 |
{ // First test: QListView::LeftToRight flow |
|
1689 |
QStringList items; |
|
1690 |
items << "Long\nText" << "Text" << "Text" << "Text"; |
|
1691 |
QStringListModel model(items); |
|
1692 |
||
1693 |
QListView view; |
|
1694 |
view.setFixedSize(250, 250); |
|
1695 |
view.setFlow(QListView::LeftToRight); |
|
1696 |
view.setGridSize(QSize(100, 100)); |
|
1697 |
view.setSelectionMode(QListView::ExtendedSelection); |
|
1698 |
view.setViewMode(QListView::IconMode); |
|
1699 |
view.setModel(&model); |
|
1700 |
view.show(); |
|
8
3f74d0d4af4c
qt:70947f0f93d948bc89b3b43d00da758a51f1ef84
Eckhart Koeppen <eckhart.koppen@nokia.com>
parents:
4
diff
changeset
|
1701 |
QTest::qWaitForWindowShown(&view); |
0 | 1702 |
|
1703 |
// Verfify that item sizes are non-uniform |
|
1704 |
QVERIFY(view.sizeHintForIndex(model.index(0, 0)).height() > view.sizeHintForIndex(model.index(1, 0)).height()); |
|
1705 |
||
1706 |
QModelIndex index = model.index(3, 0); |
|
1707 |
view.setCurrentIndex(index); |
|
1708 |
QCOMPARE(view.currentIndex(), index); |
|
1709 |
||
1710 |
QTest::keyClick(&view, Qt::Key_Up, Qt::ShiftModifier); |
|
1711 |
QTest::qWait(10); |
|
1712 |
QCOMPARE(view.currentIndex(), model.index(1, 0)); |
|
1713 |
||
1714 |
QModelIndexList selected = view.selectionModel()->selectedIndexes(); |
|
1715 |
QCOMPARE(selected.count(), 3); |
|
1716 |
QVERIFY(!selected.contains(model.index(0, 0))); |
|
1717 |
} |
|
1718 |
{ // Second test: QListView::TopToBottom flow |
|
1719 |
QStringList items; |
|
1720 |
items << "ab" << "a" << "a" << "a"; |
|
1721 |
QStringListModel model(items); |
|
1722 |
||
1723 |
QListView view; |
|
1724 |
view.setFixedSize(250, 250); |
|
1725 |
view.setFlow(QListView::TopToBottom); |
|
1726 |
view.setGridSize(QSize(100, 100)); |
|
1727 |
view.setSelectionMode(QListView::ExtendedSelection); |
|
1728 |
view.setViewMode(QListView::IconMode); |
|
1729 |
view.setModel(&model); |
|
1730 |
view.show(); |
|
8
3f74d0d4af4c
qt:70947f0f93d948bc89b3b43d00da758a51f1ef84
Eckhart Koeppen <eckhart.koppen@nokia.com>
parents:
4
diff
changeset
|
1731 |
QTest::qWaitForWindowShown(&view); |
0 | 1732 |
|
1733 |
// Verfify that item sizes are non-uniform |
|
1734 |
QVERIFY(view.sizeHintForIndex(model.index(0, 0)).width() > view.sizeHintForIndex(model.index(1, 0)).width()); |
|
1735 |
||
1736 |
QModelIndex index = model.index(3, 0); |
|
1737 |
view.setCurrentIndex(index); |
|
1738 |
QCOMPARE(view.currentIndex(), index); |
|
1739 |
||
1740 |
QTest::keyClick(&view, Qt::Key_Left, Qt::ShiftModifier); |
|
1741 |
QTest::qWait(10); |
|
1742 |
QCOMPARE(view.currentIndex(), model.index(1, 0)); |
|
1743 |
||
1744 |
QModelIndexList selected = view.selectionModel()->selectedIndexes(); |
|
1745 |
QCOMPARE(selected.count(), 3); |
|
1746 |
QVERIFY(!selected.contains(model.index(0, 0))); |
|
1747 |
} |
|
1748 |
} |
|
1749 |
||
1750 |
void tst_QListView::clickOnViewportClearsSelection() |
|
1751 |
{ |
|
1752 |
QStringList items; |
|
1753 |
items << "Text1"; |
|
1754 |
QStringListModel model(items); |
|
1755 |
QListView view; |
|
1756 |
view.setModel(&model); |
|
1757 |
view.setSelectionMode(QListView::ExtendedSelection); |
|
1758 |
||
1759 |
view.selectAll(); |
|
1760 |
QModelIndex index = model.index(0); |
|
1761 |
QCOMPARE(view.selectionModel()->selectedIndexes().count(), 1); |
|
1762 |
QVERIFY(view.selectionModel()->isSelected(index)); |
|
1763 |
||
1764 |
//we try to click outside of the index |
|
1765 |
const QPoint point = view.visualRect(index).bottomRight() + QPoint(10,10); |
|
1766 |
||
1767 |
QTest::mousePress(view.viewport(), Qt::LeftButton, 0, point); |
|
1768 |
//at this point, the selection shouldn't have changed |
|
1769 |
QCOMPARE(view.selectionModel()->selectedIndexes().count(), 1); |
|
1770 |
QVERIFY(view.selectionModel()->isSelected(index)); |
|
1771 |
||
1772 |
QTest::mouseRelease(view.viewport(), Qt::LeftButton, 0, point); |
|
1773 |
//now the selection should be cleared |
|
1774 |
QVERIFY(!view.selectionModel()->hasSelection()); |
|
1775 |
} |
|
1776 |
||
1777 |
void tst_QListView::task262152_setModelColumnNavigate() |
|
1778 |
{ |
|
1779 |
QListView view; |
|
1780 |
QStandardItemModel model(3,2); |
|
1781 |
model.setItem(0,1,new QStandardItem("[0,1]")); |
|
1782 |
model.setItem(1,1,new QStandardItem("[1,1]")); |
|
1783 |
model.setItem(2,1,new QStandardItem("[2,1]")); |
|
1784 |
||
1785 |
view.setModel(&model); |
|
1786 |
view.setModelColumn(1); |
|
1787 |
||
1788 |
view.show(); |
|
3
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1789 |
QApplication::setActiveWindow(&view); |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1790 |
QTest::qWaitForWindowShown(&view); |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1791 |
QTRY_COMPARE(static_cast<QWidget *>(&view), QApplication::activeWindow()); |
0 | 1792 |
QTest::keyClick(&view, Qt::Key_Down); |
3
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1793 |
QTest::qWait(30); |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1794 |
QTRY_COMPARE(view.currentIndex(), model.index(1,1)); |
0 | 1795 |
QTest::keyClick(&view, Qt::Key_Down); |
3
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1796 |
QTest::qWait(30); |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1797 |
QTRY_COMPARE(view.currentIndex(), model.index(2,1)); |
0 | 1798 |
} |
1799 |
||
1800 |
void tst_QListView::taskQTBUG_2233_scrollHiddenItems_data() |
|
1801 |
{ |
|
1802 |
QTest::addColumn<int>("flow"); |
|
1803 |
||
1804 |
QTest::newRow("TopToBottom") << static_cast<int>(QListView::TopToBottom); |
|
1805 |
QTest::newRow("LeftToRight") << static_cast<int>(QListView::LeftToRight); |
|
1806 |
} |
|
1807 |
||
1808 |
void tst_QListView::taskQTBUG_2233_scrollHiddenItems() |
|
1809 |
{ |
|
1810 |
QFETCH(int, flow); |
|
1811 |
const int rowCount = 200; |
|
1812 |
||
1813 |
QListView view; |
|
1814 |
QStringListModel model(&view); |
|
1815 |
QStringList list; |
|
1816 |
for (int i = 0; i < rowCount; ++i) |
|
1817 |
list << QString::fromAscii("Item %1").arg(i); |
|
1818 |
||
1819 |
model.setStringList(list); |
|
1820 |
view.setModel(&model); |
|
1821 |
view.setViewMode(QListView::ListMode); |
|
1822 |
for (int i = 0; i < rowCount / 2; ++i) |
|
1823 |
view.setRowHidden(2 * i, true); |
|
1824 |
view.setFlow(static_cast<QListView::Flow>(flow)); |
|
1825 |
view.resize(130, 130); |
|
1826 |
||
1827 |
for (int i = 0; i < 10; ++i) { |
|
1828 |
(view.flow() == QListView::TopToBottom |
|
1829 |
? view.verticalScrollBar() |
|
1830 |
: view.horizontalScrollBar())->setValue(i); |
|
1831 |
QModelIndex index = view.indexAt(QPoint(0,0)); |
|
1832 |
QVERIFY(index.isValid()); |
|
1833 |
QCOMPARE(index.row(), 2 * i + 1); |
|
1834 |
} |
|
8
3f74d0d4af4c
qt:70947f0f93d948bc89b3b43d00da758a51f1ef84
Eckhart Koeppen <eckhart.koppen@nokia.com>
parents:
4
diff
changeset
|
1835 |
|
3f74d0d4af4c
qt:70947f0f93d948bc89b3b43d00da758a51f1ef84
Eckhart Koeppen <eckhart.koppen@nokia.com>
parents:
4
diff
changeset
|
1836 |
//QTBUG-7929 should not crash |
3f74d0d4af4c
qt:70947f0f93d948bc89b3b43d00da758a51f1ef84
Eckhart Koeppen <eckhart.koppen@nokia.com>
parents:
4
diff
changeset
|
1837 |
view.show(); |
3f74d0d4af4c
qt:70947f0f93d948bc89b3b43d00da758a51f1ef84
Eckhart Koeppen <eckhart.koppen@nokia.com>
parents:
4
diff
changeset
|
1838 |
QTest::qWaitForWindowShown(&view); |
3f74d0d4af4c
qt:70947f0f93d948bc89b3b43d00da758a51f1ef84
Eckhart Koeppen <eckhart.koppen@nokia.com>
parents:
4
diff
changeset
|
1839 |
QScrollBar *bar = view.flow() == QListView::TopToBottom |
3f74d0d4af4c
qt:70947f0f93d948bc89b3b43d00da758a51f1ef84
Eckhart Koeppen <eckhart.koppen@nokia.com>
parents:
4
diff
changeset
|
1840 |
? view.verticalScrollBar() : view.horizontalScrollBar(); |
3f74d0d4af4c
qt:70947f0f93d948bc89b3b43d00da758a51f1ef84
Eckhart Koeppen <eckhart.koppen@nokia.com>
parents:
4
diff
changeset
|
1841 |
|
3f74d0d4af4c
qt:70947f0f93d948bc89b3b43d00da758a51f1ef84
Eckhart Koeppen <eckhart.koppen@nokia.com>
parents:
4
diff
changeset
|
1842 |
int nbVisibleItem = rowCount / 2 - bar->maximum(); |
3f74d0d4af4c
qt:70947f0f93d948bc89b3b43d00da758a51f1ef84
Eckhart Koeppen <eckhart.koppen@nokia.com>
parents:
4
diff
changeset
|
1843 |
|
3f74d0d4af4c
qt:70947f0f93d948bc89b3b43d00da758a51f1ef84
Eckhart Koeppen <eckhart.koppen@nokia.com>
parents:
4
diff
changeset
|
1844 |
bar->setValue(bar->maximum()); |
3f74d0d4af4c
qt:70947f0f93d948bc89b3b43d00da758a51f1ef84
Eckhart Koeppen <eckhart.koppen@nokia.com>
parents:
4
diff
changeset
|
1845 |
QApplication::processEvents(); |
3f74d0d4af4c
qt:70947f0f93d948bc89b3b43d00da758a51f1ef84
Eckhart Koeppen <eckhart.koppen@nokia.com>
parents:
4
diff
changeset
|
1846 |
for (int i = rowCount; i > rowCount / 2; i--) { |
3f74d0d4af4c
qt:70947f0f93d948bc89b3b43d00da758a51f1ef84
Eckhart Koeppen <eckhart.koppen@nokia.com>
parents:
4
diff
changeset
|
1847 |
view.setRowHidden(i, true); |
3f74d0d4af4c
qt:70947f0f93d948bc89b3b43d00da758a51f1ef84
Eckhart Koeppen <eckhart.koppen@nokia.com>
parents:
4
diff
changeset
|
1848 |
} |
3f74d0d4af4c
qt:70947f0f93d948bc89b3b43d00da758a51f1ef84
Eckhart Koeppen <eckhart.koppen@nokia.com>
parents:
4
diff
changeset
|
1849 |
QApplication::processEvents(); |
3f74d0d4af4c
qt:70947f0f93d948bc89b3b43d00da758a51f1ef84
Eckhart Koeppen <eckhart.koppen@nokia.com>
parents:
4
diff
changeset
|
1850 |
QTest::qWait(50); |
3f74d0d4af4c
qt:70947f0f93d948bc89b3b43d00da758a51f1ef84
Eckhart Koeppen <eckhart.koppen@nokia.com>
parents:
4
diff
changeset
|
1851 |
QCOMPARE(bar->value(), bar->maximum()); |
3f74d0d4af4c
qt:70947f0f93d948bc89b3b43d00da758a51f1ef84
Eckhart Koeppen <eckhart.koppen@nokia.com>
parents:
4
diff
changeset
|
1852 |
QCOMPARE(bar->maximum(), rowCount/4 - nbVisibleItem); |
0 | 1853 |
} |
1854 |
||
3
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1855 |
void tst_QListView::taskQTBUG_633_changeModelData() |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1856 |
{ |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1857 |
QListView view; |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1858 |
view.setFlow(QListView::LeftToRight); |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1859 |
QStandardItemModel model(5,1); |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1860 |
for (int i = 0; i < model.rowCount(); ++i) { |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1861 |
model.setData( model.index(i, 0), QString::number(i)); |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1862 |
} |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1863 |
|
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1864 |
view.setModel(&model); |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1865 |
view.show(); |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1866 |
QTest::qWaitForWindowShown(&view); |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1867 |
model.setData( model.index(1, 0), QLatin1String("long long text")); |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1868 |
QTest::qWait(100); //leave time for relayouting the items |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1869 |
QRect rectLongText = view.visualRect(model.index(1,0)); |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1870 |
QRect rect2 = view.visualRect(model.index(2,0)); |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1871 |
QVERIFY( ! rectLongText.intersects(rect2) ); |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1872 |
} |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1873 |
|
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1874 |
void tst_QListView::taskQTBUG_435_deselectOnViewportClick() |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1875 |
{ |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1876 |
QListView view; |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1877 |
QStringListModel model( QStringList() << "1" << "2" << "3" << "4"); |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1878 |
view.setModel(&model); |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1879 |
view.setSelectionMode(QAbstractItemView::ExtendedSelection); |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1880 |
view.selectAll(); |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1881 |
QCOMPARE(view.selectionModel()->selectedIndexes().count(), model.rowCount()); |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1882 |
|
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1883 |
|
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1884 |
QPoint p = view.visualRect(model.index(model.rowCount() - 1)).center() + QPoint(0, 20); |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1885 |
//first the left button |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1886 |
QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, p); |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1887 |
QVERIFY(!view.selectionModel()->hasSelection()); |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1888 |
|
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1889 |
view.selectAll(); |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1890 |
QCOMPARE(view.selectionModel()->selectedIndexes().count(), model.rowCount()); |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1891 |
|
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1892 |
//and now the right button |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1893 |
QTest::mouseClick(view.viewport(), Qt::RightButton, 0, p); |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1894 |
QVERIFY(!view.selectionModel()->hasSelection()); |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1895 |
} |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1896 |
|
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1897 |
void tst_QListView::taskQTBUG_2678_spacingAndWrappedText() |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1898 |
{ |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1899 |
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."); |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1900 |
QStringListModel model(QStringList() << lorem << lorem << "foo" << lorem << "bar" << lorem << lorem); |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1901 |
QListView w; |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1902 |
w.setModel(&model); |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1903 |
w.setViewMode(QListView::ListMode); |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1904 |
w.setWordWrap(true); |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1905 |
w.setSpacing(10); |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1906 |
w.show(); |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1907 |
QTest::qWaitForWindowShown(&w); |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1908 |
QCOMPARE(w.horizontalScrollBar()->minimum(), w.horizontalScrollBar()->maximum()); |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1909 |
} |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1910 |
|
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1911 |
void tst_QListView::taskQTBUG_5877_skippingItemInPageDownUp() |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1912 |
{ |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1913 |
QList<int> currentItemIndexes; |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1914 |
QtTestModel model(0); |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1915 |
model.colCount = 1; |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1916 |
model.rCount = 100; |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1917 |
|
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1918 |
currentItemIndexes << 0 << 6 << 16 << 25 << 34 << 42 << 57 << 68 << 77 |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1919 |
<< 83 << 91 << 94; |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1920 |
QMoveCursorListView vu; |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1921 |
vu.setModel(&model); |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1922 |
vu.show(); |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1923 |
|
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1924 |
QTest::qWaitForWindowShown(&vu); |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1925 |
|
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1926 |
int itemHeight = vu.visualRect(model.index(0, 0)).height(); |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1927 |
int visibleRowCount = vu.viewport()->height() / itemHeight; |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1928 |
int scrolledRowCount = visibleRowCount - 1; |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1929 |
|
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1930 |
for (int i = 0; i < currentItemIndexes.size(); ++i) { |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1931 |
vu.selectionModel()->setCurrentIndex(model.index(currentItemIndexes[i], 0), |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1932 |
QItemSelectionModel::SelectCurrent); |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1933 |
|
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1934 |
QModelIndex idx = vu.moveCursor(QMoveCursorListView::MovePageDown, Qt::NoModifier); |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1935 |
int newCurrent = qMin(currentItemIndexes[i] + scrolledRowCount, 99); |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1936 |
QCOMPARE(idx, model.index(newCurrent, 0)); |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1937 |
|
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1938 |
idx = vu.moveCursor(QMoveCursorListView::MovePageUp, Qt::NoModifier); |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1939 |
newCurrent = qMax(currentItemIndexes[i] - scrolledRowCount, 0); |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1940 |
QCOMPARE(idx, model.index(newCurrent, 0)); |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1941 |
} |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1942 |
} |
41300fa6a67c
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
0
diff
changeset
|
1943 |
|
0 | 1944 |
QTEST_MAIN(tst_QListView) |
1945 |
#include "tst_qlistview.moc" |