on xenial help sign in
Code+Test for the insert/remove at the end
commitc43037ee141abc205846146e3d7205df7cc9abf4 authorAlbert Astals <albert.astals@canonical.com> dateWed 18 Dec 2013, 12:45 (13 years ago) parentc3b3248
2 files changed+139−12
plugins/DashViews/verticaljournal.cpp+23−3 tests/plugins/DashViews/verticaljournaltest.cpp+116−9
plugins/DashViews/verticaljournal.cpp+23−3
@@ -500,14 +500,34 @@ void VerticalJournal::itemCreated(int modelIndex, QObject *object)
500500}
501501
502502#if (QT_VERSION < QT_VERSION_CHECK(5, 1, 0))
503−void VerticalJournal::onModelUpdated(const QQuickChangeSet & /*changeSet*/, bool reset)
503+void VerticalJournal::onModelUpdated(const QQuickChangeSet &changeSet, bool reset)
504504#else
505−void VerticalJournal::onModelUpdated(const QQmlChangeSet & /*changeSet*/, bool reset)
505+void VerticalJournal::onModelUpdated(const QQmlChangeSet &changeSet, bool reset)
506506#endif
507507{
508− // TODO Add support for additions/removals at end that are not reset calls
509508 if (reset) {
510509 cleanupExistingItems();
510+ } else {
511+#if (QT_VERSION < QT_VERSION_CHECK(5, 1, 0))
512+ Q_FOREACH(const QQuickChangeSet::Remove &remove, changeSet.removes()) {
513+#else
514+ Q_FOREACH(const QQmlChangeSet::Remove &remove, changeSet.removes()) {
515+#endif
516+ for (int i = remove.count - 1; i >= 0; --i) {
517+ const int indexToRemove = remove.index + i;
518+ // We only support removing from the end so
519+ // any of the last items of a column has to be indexToRemove
520+ bool found = false;
521+ for (int i = 0; !found && i < m_columnVisibleItems.count(); ++i) {
522+ QList<ViewItem> &column = m_columnVisibleItems[i];
523+ if (!column.isEmpty() && column.last().m_modelIndex == indexToRemove) {
524+ releaseItem(column.takeLast());
525+ found = true;
526+ }
527+ }
528+ Q_ASSERT(found);
529+ }
530+ }
511531 }
512532 polish();
513533}
tests/plugins/DashViews/verticaljournaltest.cpp+116−9
@@ -30,7 +30,7 @@
3030
3131#include "verticaljournal.h"
3232
33−class QHeightModel : public QStringListModel {
33+class QHeightModel : public QAbstractListModel {
3434public:
3535 QHash<int, QByteArray> roleNames() const
3636 {
@@ -38,6 +38,45 @@ public:
3838 roles.insert(Qt::DisplayRole, "modelHeight");
3939 return roles;
4040 }
41+
42+ int rowCount(const QModelIndex & /*parent*/) const
43+ {
44+ return m_list.count();
45+ }
46+
47+ QVariant data(const QModelIndex &index, int /*role*/) const
48+ {
49+ return m_list[index.row()];
50+ }
51+
52+ QStringList stringList() const
53+ {
54+ return m_list;
55+ }
56+
57+ void setStringList(const QStringList &list)
58+ {
59+ beginResetModel();
60+ m_list = list;
61+ endResetModel();
62+ }
63+
64+ void addString(const QString& string)
65+ {
66+ beginInsertRows(QModelIndex(), m_list.count(), m_list.count());
67+ m_list << string;
68+ endInsertRows();
69+ }
70+
71+ void removeLast()
72+ {
73+ beginRemoveRows(QModelIndex(), m_list.count() - 1, m_list.count() - 1);
74+ m_list.takeLast();
75+ endRemoveRows();
76+ }
77+
78+private:
79+ QStringList m_list;
4180};
4281
4382class VerticalJournalTest : public QObject
@@ -50,7 +89,7 @@ private:
5089 QTRY_COMPARE(item.m_modelIndex, modelIndex);
5190 QTRY_COMPARE(item.x(), x);
5291 QTRY_COMPARE(item.y(), y);
53− QTRY_COMPARE(item.height(), heightList[modelIndex].toDouble());
92+ QTRY_COMPARE(item.height(), model->stringList()[modelIndex].toDouble());
5493 QTRY_COMPARE(QQuickItemPrivate::get(item.m_item)->culled, !visible);
5594 }
5695
@@ -89,7 +128,7 @@ private Q_SLOTS:
89128 view->engine()->addImportPath(BUILT_PLUGINS_DIR);
90129
91130 model = new QHeightModel();
92− heightList.clear();
131+ QStringList heightList;
93132 heightList << "100" << "50" << "125" << "10" << "40" << "70" << "200" << "110" << "160" << "20" << "20" << "65" << "80" << "200" << "300" << "130" << "400" << "300" << "500" << "10";
94133 model->setStringList(heightList);
95134
@@ -284,12 +323,13 @@ private Q_SLOTS:
284323
285324 void testChangeModel()
286325 {
287− QHeightModel model2;
326+ QHeightModel *model2 = new QHeightModel();
288327 QStringList list2;
289328 list2 << "100" << "50" << "25" << "25" << "50" << "50";
290− model2.setStringList(list2);
291− vj->setModel(&model2);
292− heightList = list2;
329+ model2->setStringList(list2);
330+ vj->setModel(model2);
331+ delete model;
332+ model = model2;
293333
294334 QTRY_COMPARE(vj->m_columnVisibleItems.count(), 3);
295335 QTRY_COMPARE(vj->m_columnVisibleItems[0].count(), 1);
@@ -305,7 +345,7 @@ private Q_SLOTS:
305345
306346 void testModelReset()
307347 {
308− heightList.clear();
348+ QStringList heightList;
309349 heightList << "100" << "50" << "50" << "30";
310350 model->setStringList(heightList);
311351
@@ -319,10 +359,77 @@ private Q_SLOTS:
319359 verifyItem(vj->m_columnVisibleItems[1][1], 3, 160, 60, true);
320360 }
321361
362+ void testModelAppendRemoveLast()
363+ {
364+ QHeightModel *model2 = new QHeightModel();
365+ QStringList list2;
366+ list2 << "100" << "50" << "25" << "25" << "50" << "50";
367+ model2->setStringList(list2);
368+ vj->setModel(model2);
369+ delete model;
370+ model = model2;
371+
372+ QTRY_COMPARE(vj->m_columnVisibleItems.count(), 3);
373+ QTRY_COMPARE(vj->m_columnVisibleItems[0].count(), 1);
374+ QTRY_COMPARE(vj->m_columnVisibleItems[1].count(), 2);
375+ QTRY_COMPARE(vj->m_columnVisibleItems[2].count(), 3);
376+ verifyItem(vj->m_columnVisibleItems[0][0], 0, 0, 0, true);
377+ verifyItem(vj->m_columnVisibleItems[1][0], 1, 160, 0, true);
378+ verifyItem(vj->m_columnVisibleItems[2][0], 2, 320, 0, true);
379+ verifyItem(vj->m_columnVisibleItems[2][1], 3, 320, 35, true);
380+ verifyItem(vj->m_columnVisibleItems[1][1], 4, 160, 60, true);
381+ verifyItem(vj->m_columnVisibleItems[2][2], 5, 320, 70, true);
382+
383+ model2->addString("75");
384+
385+ QTRY_COMPARE(vj->m_columnVisibleItems.count(), 3);
386+ QTRY_COMPARE(vj->m_columnVisibleItems[0].count(), 2);
387+ QTRY_COMPARE(vj->m_columnVisibleItems[1].count(), 2);
388+ QTRY_COMPARE(vj->m_columnVisibleItems[2].count(), 3);
389+ verifyItem(vj->m_columnVisibleItems[0][0], 0, 0, 0, true);
390+ verifyItem(vj->m_columnVisibleItems[1][0], 1, 160, 0, true);
391+ verifyItem(vj->m_columnVisibleItems[2][0], 2, 320, 0, true);
392+ verifyItem(vj->m_columnVisibleItems[2][1], 3, 320, 35, true);
393+ verifyItem(vj->m_columnVisibleItems[1][1], 4, 160, 60, true);
394+ verifyItem(vj->m_columnVisibleItems[2][2], 5, 320, 70, true);
395+ verifyItem(vj->m_columnVisibleItems[0][1], 6, 0, 110, true);
396+
397+ model2->addString("50");
398+ model2->addString("50");
399+
400+ QTRY_COMPARE(vj->m_columnVisibleItems.count(), 3);
401+ QTRY_COMPARE(vj->m_columnVisibleItems[0].count(), 2);
402+ QTRY_COMPARE(vj->m_columnVisibleItems[1].count(), 3);
403+ QTRY_COMPARE(vj->m_columnVisibleItems[2].count(), 4);
404+ verifyItem(vj->m_columnVisibleItems[0][0], 0, 0, 0, true);
405+ verifyItem(vj->m_columnVisibleItems[1][0], 1, 160, 0, true);
406+ verifyItem(vj->m_columnVisibleItems[2][0], 2, 320, 0, true);
407+ verifyItem(vj->m_columnVisibleItems[2][1], 3, 320, 35, true);
408+ verifyItem(vj->m_columnVisibleItems[1][1], 4, 160, 60, true);
409+ verifyItem(vj->m_columnVisibleItems[2][2], 5, 320, 70, true);
410+ verifyItem(vj->m_columnVisibleItems[0][1], 6, 0, 110, true);
411+ verifyItem(vj->m_columnVisibleItems[1][2], 7, 160, 120, true);
412+ verifyItem(vj->m_columnVisibleItems[2][3], 8, 320, 130, true);
413+
414+ model2->removeLast();
415+
416+ QTRY_COMPARE(vj->m_columnVisibleItems.count(), 3);
417+ QTRY_COMPARE(vj->m_columnVisibleItems[0].count(), 2);
418+ QTRY_COMPARE(vj->m_columnVisibleItems[1].count(), 3);
419+ QTRY_COMPARE(vj->m_columnVisibleItems[2].count(), 3);
420+ verifyItem(vj->m_columnVisibleItems[0][0], 0, 0, 0, true);
421+ verifyItem(vj->m_columnVisibleItems[1][0], 1, 160, 0, true);
422+ verifyItem(vj->m_columnVisibleItems[2][0], 2, 320, 0, true);
423+ verifyItem(vj->m_columnVisibleItems[2][1], 3, 320, 35, true);
424+ verifyItem(vj->m_columnVisibleItems[1][1], 4, 160, 60, true);
425+ verifyItem(vj->m_columnVisibleItems[2][2], 5, 320, 70, true);
426+ verifyItem(vj->m_columnVisibleItems[0][1], 6, 0, 110, true);
427+ verifyItem(vj->m_columnVisibleItems[1][2], 7, 160, 120, true);
428+ }
429+
322430private:
323431 QQuickView *view;
324432 VerticalJournal *vj;
325− QStringList heightList;
326433 QHeightModel *model;
327434};
328435