Views do not notify count changes properly
The views don't have a valid count until both a model and a delegate are provided. But, countChanged() is not called when a delegate is set after the model, so bindings to count were not evaluated. Also test that count is updated for insertion/removal Change-Id: Ic82039a624c02f0bdb2862ac7a6e215df75bb314 Task-number: QTBUG-19037 Reviewed-by: Bea Lam (cherry picked from commit 4fbcb6a531bf424a8dbbbd0ca2947d9e15118885)
This commit is contained in:
parent
db49ce3f88
commit
bc83e44dc3
|
@ -1499,6 +1499,7 @@ void QDeclarativeGridView::setDelegate(QDeclarativeComponent *delegate)
|
|||
d->ownModel = true;
|
||||
}
|
||||
if (QDeclarativeVisualDataModel *dataModel = qobject_cast<QDeclarativeVisualDataModel*>(d->model)) {
|
||||
int oldCount = dataModel->count();
|
||||
dataModel->setDelegate(delegate);
|
||||
if (isComponentComplete()) {
|
||||
for (int i = 0; i < d->visibleItems.count(); ++i)
|
||||
|
@ -1516,6 +1517,8 @@ void QDeclarativeGridView::setDelegate(QDeclarativeComponent *delegate)
|
|||
}
|
||||
d->moveReason = QDeclarativeGridViewPrivate::Other;
|
||||
}
|
||||
if (oldCount != dataModel->count())
|
||||
emit countChanged();
|
||||
emit delegateChanged();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1813,6 +1813,7 @@ void QDeclarativeListView::setDelegate(QDeclarativeComponent *delegate)
|
|||
d->ownModel = true;
|
||||
}
|
||||
if (QDeclarativeVisualDataModel *dataModel = qobject_cast<QDeclarativeVisualDataModel*>(d->model)) {
|
||||
int oldCount = dataModel->count();
|
||||
dataModel->setDelegate(delegate);
|
||||
if (isComponentComplete()) {
|
||||
for (int i = 0; i < d->visibleItems.count(); ++i)
|
||||
|
@ -1831,6 +1832,8 @@ void QDeclarativeListView::setDelegate(QDeclarativeComponent *delegate)
|
|||
}
|
||||
d->updateViewport();
|
||||
}
|
||||
if (oldCount != dataModel->count())
|
||||
emit countChanged();
|
||||
}
|
||||
emit delegateChanged();
|
||||
}
|
||||
|
|
|
@ -1021,9 +1021,12 @@ void QDeclarativePathView::setDelegate(QDeclarativeComponent *delegate)
|
|||
d->ownModel = true;
|
||||
}
|
||||
if (QDeclarativeVisualDataModel *dataModel = qobject_cast<QDeclarativeVisualDataModel*>(d->model)) {
|
||||
int oldCount = dataModel->count();
|
||||
dataModel->setDelegate(delegate);
|
||||
d->modelCount = dataModel->count();
|
||||
d->regenerate();
|
||||
if (oldCount != dataModel->count())
|
||||
emit countChanged();
|
||||
emit delegateChanged();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@ import QtQuick 1.1
|
|||
|
||||
Rectangle {
|
||||
id: root
|
||||
property int count: grid.count
|
||||
property bool showHeader: false
|
||||
property bool showFooter: false
|
||||
property int added: -1
|
||||
|
|
|
@ -222,6 +222,7 @@ void tst_QDeclarativeGridView::items()
|
|||
QTRY_VERIFY(contentItem != 0);
|
||||
|
||||
QTRY_COMPARE(gridview->count(), model.count());
|
||||
QTRY_COMPARE(canvas->rootObject()->property("count").toInt(), model.count());
|
||||
QTRY_COMPARE(contentItem->childItems().count(), model.count()+1); // assumes all are visible, +1 for the (default) highlight item
|
||||
|
||||
for (int i = 0; i < model.count(); ++i) {
|
||||
|
@ -305,6 +306,7 @@ void tst_QDeclarativeGridView::inserted()
|
|||
QTRY_VERIFY(contentItem != 0);
|
||||
|
||||
model.insertItem(1, "Will", "9876");
|
||||
QCOMPARE(canvas->rootObject()->property("count").toInt(), model.count());
|
||||
|
||||
QTRY_COMPARE(contentItem->childItems().count(), model.count()+1); // assumes all are visible, +1 for the (default) highlight item
|
||||
|
||||
|
@ -382,6 +384,7 @@ void tst_QDeclarativeGridView::removed()
|
|||
QTRY_VERIFY(contentItem != 0);
|
||||
|
||||
model.removeItem(1);
|
||||
QCOMPARE(canvas->rootObject()->property("count").toInt(), model.count());
|
||||
|
||||
QDeclarativeText *name = findItem<QDeclarativeText>(contentItem, "textName", 1);
|
||||
QTRY_VERIFY(name != 0);
|
||||
|
|
|
@ -6,6 +6,7 @@ Rectangle {
|
|||
height: 320
|
||||
color: "#ffffff"
|
||||
|
||||
property int count: list.count
|
||||
property bool showHeader: false
|
||||
property bool showFooter: false
|
||||
property real hr: list.visibleArea.heightRatio
|
||||
|
|
|
@ -389,6 +389,7 @@ void tst_QDeclarativeListView::items()
|
|||
|
||||
QTRY_VERIFY(listview->highlightItem() != 0);
|
||||
QTRY_COMPARE(listview->count(), model.count());
|
||||
QTRY_COMPARE(canvas->rootObject()->property("count").toInt(), model.count());
|
||||
QTRY_COMPARE(contentItem->childItems().count(), model.count()+1); // assumes all are visible, +1 for the (default) highlight item
|
||||
|
||||
// current item should be first item
|
||||
|
@ -517,6 +518,7 @@ void tst_QDeclarativeListView::inserted()
|
|||
|
||||
model.insertItem(0, "Foo", "1111"); // zero index, and current item
|
||||
|
||||
QCOMPARE(canvas->rootObject()->property("count").toInt(), model.count());
|
||||
QTRY_COMPARE(contentItem->childItems().count(), model.count()+1); // assumes all are visible, +1 for the (default) highlight item
|
||||
|
||||
name = findItem<QDeclarativeText>(contentItem, "textName", 0);
|
||||
|
@ -583,6 +585,7 @@ void tst_QDeclarativeListView::removed(bool animated)
|
|||
QTRY_VERIFY(contentItem != 0);
|
||||
|
||||
model.removeItem(1);
|
||||
QCOMPARE(canvas->rootObject()->property("count").toInt(), model.count());
|
||||
|
||||
QDeclarativeText *name = findItem<QDeclarativeText>(contentItem, "textName", 1);
|
||||
QTRY_VERIFY(name != 0);
|
||||
|
|
|
@ -2,6 +2,7 @@ import QtQuick 1.0
|
|||
|
||||
PathView {
|
||||
id: pathview
|
||||
property int viewCount: count
|
||||
objectName: "pathview"
|
||||
width: 240; height: 320
|
||||
pathItemCount: testObject.pathItemCount
|
||||
|
|
|
@ -2,6 +2,7 @@ import QtQuick 1.0
|
|||
|
||||
Rectangle {
|
||||
id: root
|
||||
property int count: view.count
|
||||
property int currentA: -1
|
||||
property int currentB: -1
|
||||
property real delegateWidth: 60
|
||||
|
|
|
@ -253,6 +253,8 @@ void tst_QDeclarativePathView::items()
|
|||
QDeclarativePathView *pathview = findItem<QDeclarativePathView>(canvas->rootObject(), "view");
|
||||
QVERIFY(pathview != 0);
|
||||
|
||||
QCOMPARE(pathview->count(), model.count());
|
||||
QCOMPARE(canvas->rootObject()->property("count").toInt(), model.count());
|
||||
QCOMPARE(pathview->childItems().count(), model.count()+1); // assumes all are visible, including highlight
|
||||
|
||||
for (int i = 0; i < model.count(); ++i) {
|
||||
|
@ -400,6 +402,7 @@ void tst_QDeclarativePathView::dataModel()
|
|||
model.insertItem(4, "orange", "10");
|
||||
QTest::qWait(100);
|
||||
|
||||
QCOMPARE(canvas->rootObject()->property("viewCount").toInt(), model.count());
|
||||
QTRY_COMPARE(findItems<QDeclarativeItem>(pathview, "wrapper").count(), 14);
|
||||
|
||||
QVERIFY(pathview->currentIndex() == 0);
|
||||
|
@ -409,6 +412,7 @@ void tst_QDeclarativePathView::dataModel()
|
|||
QCOMPARE(text->text(), model.name(4));
|
||||
|
||||
model.removeItem(2);
|
||||
QCOMPARE(canvas->rootObject()->property("viewCount").toInt(), model.count());
|
||||
text = findItem<QDeclarativeText>(pathview, "myText", 2);
|
||||
QVERIFY(text);
|
||||
QCOMPARE(text->text(), model.name(2));
|
||||
|
|
Loading…
Reference in New Issue