diff options
Diffstat (limited to 'src/declarative/fx/qfxlistview.cpp')
-rw-r--r-- | src/declarative/fx/qfxlistview.cpp | 30 |
1 files changed, 19 insertions, 11 deletions
diff --git a/src/declarative/fx/qfxlistview.cpp b/src/declarative/fx/qfxlistview.cpp index 1e75026..860e9e4 100644 --- a/src/declarative/fx/qfxlistview.cpp +++ b/src/declarative/fx/qfxlistview.cpp @@ -265,7 +265,7 @@ public: } bool isValid() const { - return model && model->count() && (!ownModel || model->delegate()); + return model && model->count() && model->isValid(); } int snapIndex() { @@ -357,7 +357,7 @@ public: virtual void fixupY(); virtual void fixupX(); - QFxVisualItemModel *model; + QFxVisualModel *model; QVariant modelVariant; QList<FxListItem*> visibleItems; QHash<QFxItem*,int> unrequestedItems; @@ -910,8 +910,8 @@ void QFxListView::setModel(const QVariant &model) d->clear(); d->modelVariant = model; QObject *object = qvariant_cast<QObject*>(model); - QFxVisualItemModel *vim = 0; - if (object && (vim = qobject_cast<QFxVisualItemModel *>(object))) { + QFxVisualModel *vim = 0; + if (object && (vim = qobject_cast<QFxVisualModel *>(object))) { if (d->ownModel) { delete d->model; d->ownModel = false; @@ -919,10 +919,11 @@ void QFxListView::setModel(const QVariant &model) d->model = vim; } else { if (!d->ownModel) { - d->model = new QFxVisualItemModel(qmlContext(this)); + d->model = new QFxVisualDataModel(qmlContext(this)); d->ownModel = true; } - d->model->setModel(model); + if (QFxVisualDataModel *dataModel = qobject_cast<QFxVisualDataModel*>(d->model)) + dataModel->setModel(model); } if (d->model) { if (d->currentIndex >= d->model->count() || d->currentIndex < 0) @@ -949,19 +950,26 @@ void QFxListView::setModel(const QVariant &model) QmlComponent *QFxListView::delegate() const { Q_D(const QFxListView); - return d->model ? d->model->delegate() : 0; + if (d->model) { + if (QFxVisualDataModel *dataModel = qobject_cast<QFxVisualDataModel*>(d->model)) + return dataModel->delegate(); + } + + return 0; } void QFxListView::setDelegate(QmlComponent *delegate) { Q_D(QFxListView); if (!d->ownModel) { - d->model = new QFxVisualItemModel(qmlContext(this)); + d->model = new QFxVisualDataModel(qmlContext(this)); d->ownModel = true; } - d->model->setDelegate(delegate); - d->updateCurrent(d->currentIndex); - refill(); + if (QFxVisualDataModel *dataModel = qobject_cast<QFxVisualDataModel*>(d->model)) { + dataModel->setDelegate(delegate); + d->updateCurrent(d->currentIndex); + refill(); + } } /*! |