summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/declarative/graphicsitems/qmlgraphicsflickable.cpp2
-rw-r--r--src/declarative/graphicsitems/qmlgraphicslistview.cpp44
-rw-r--r--src/declarative/graphicsitems/qmlgraphicslistview_p.h5
-rw-r--r--tests/auto/declarative/qmlgraphicslistview/tst_qmlgraphicslistview.cpp14
4 files changed, 41 insertions, 24 deletions
diff --git a/src/declarative/graphicsitems/qmlgraphicsflickable.cpp b/src/declarative/graphicsitems/qmlgraphicsflickable.cpp
index b030495..ea9c173 100644
--- a/src/declarative/graphicsitems/qmlgraphicsflickable.cpp
+++ b/src/declarative/graphicsitems/qmlgraphicsflickable.cpp
@@ -1177,7 +1177,7 @@ void QmlGraphicsFlickable::setMaximumFlickVelocity(qreal v)
}
/*!
- \qmlproperty real Flickable::maximumFlickVelocity
+ \qmlproperty real Flickable::flickDeceleration
This property holds the rate at which a flick will decelerate.
The default is 500.
diff --git a/src/declarative/graphicsitems/qmlgraphicslistview.cpp b/src/declarative/graphicsitems/qmlgraphicslistview.cpp
index a9bc721..53287a6 100644
--- a/src/declarative/graphicsitems/qmlgraphicslistview.cpp
+++ b/src/declarative/graphicsitems/qmlgraphicslistview.cpp
@@ -434,7 +434,6 @@ void QmlGraphicsListViewPrivate::clear()
visibleIndex = 0;
releaseItem(currentItem);
currentItem = 0;
- currentIndex = -1;
createHighlight();
trackedItem = 0;
}
@@ -746,7 +745,7 @@ void QmlGraphicsListViewPrivate::updateCurrentSection()
void QmlGraphicsListViewPrivate::updateCurrent(int modelIndex)
{
Q_Q(QmlGraphicsListView);
- if (!isValid() || modelIndex < 0 || modelIndex >= model->count()) {
+ if (!q->isComponentComplete() || !isValid() || modelIndex < 0 || modelIndex >= model->count()) {
if (currentItem) {
currentItem->attached->setIsCurrentItem(false);
releaseItem(currentItem);
@@ -1114,16 +1113,20 @@ void QmlGraphicsListView::setModel(const QVariant &model)
dataModel->setModel(model);
}
if (d->model) {
- if (d->currentIndex >= d->model->count() || d->currentIndex < 0)
- setCurrentIndex(0);
- else
- d->updateCurrent(d->currentIndex);
+ if (isComponentComplete()) {
+ refill();
+ if (d->currentIndex >= d->model->count() || d->currentIndex < 0) {
+ setCurrentIndex(0);
+ } else {
+ d->moveReason = QmlGraphicsListViewPrivate::SetIndex;
+ d->updateCurrent(d->currentIndex);
+ }
+ }
connect(d->model, SIGNAL(itemsInserted(int,int)), this, SLOT(itemsInserted(int,int)));
connect(d->model, SIGNAL(itemsRemoved(int,int)), this, SLOT(itemsRemoved(int,int)));
connect(d->model, SIGNAL(itemsMoved(int,int,int)), this, SLOT(itemsMoved(int,int,int)));
connect(d->model, SIGNAL(createdItem(int, QmlGraphicsItem*)), this, SLOT(createdItem(int,QmlGraphicsItem*)));
connect(d->model, SIGNAL(destroyingItem(QmlGraphicsItem*)), this, SLOT(destroyingItem(QmlGraphicsItem*)));
- refill();
emit countChanged();
}
}
@@ -1156,8 +1159,11 @@ void QmlGraphicsListView::setDelegate(QmlComponent *delegate)
}
if (QmlGraphicsVisualDataModel *dataModel = qobject_cast<QmlGraphicsVisualDataModel*>(d->model)) {
dataModel->setDelegate(delegate);
- d->updateCurrent(d->currentIndex);
- refill();
+ if (isComponentComplete()) {
+ refill();
+ d->moveReason = QmlGraphicsListViewPrivate::SetIndex;
+ d->updateCurrent(d->currentIndex);
+ }
}
}
@@ -1178,7 +1184,7 @@ int QmlGraphicsListView::currentIndex() const
void QmlGraphicsListView::setCurrentIndex(int index)
{
Q_D(QmlGraphicsListView);
- if (d->isValid() && index != d->currentIndex && index < d->model->count() && index >= 0) {
+ if (isComponentComplete() && d->isValid() && index != d->currentIndex && index < d->model->count() && index >= 0) {
d->moveReason = QmlGraphicsListViewPrivate::SetIndex;
cancelFlick();
d->updateCurrent(index);
@@ -1254,7 +1260,7 @@ void QmlGraphicsListView::setHighlight(QmlComponent *highlight)
is scrolled. This is because the view moves to maintain the
highlight within the preferred highlight range (or visible viewport).
- \sa highlight
+ \sa highlight, highlightMoveSpeed
*/
bool QmlGraphicsListView::highlightFollowsCurrentItem() const
{
@@ -1473,8 +1479,13 @@ QString QmlGraphicsListView::currentSection() const
/*!
\qmlproperty real ListView::highlightMoveSpeed
+ \qmlproperty real ListView::highlightResizeSpeed
+ These properties hold the move and resize animation speed of the highlight delegate.
+
+ highlightFollowsCurrentItem must be true for these properties
+ to have effect.
- This property holds the moving animation speed of the highlight delegate.
+ \sa highlightFollowsCurrentItem
*/
qreal QmlGraphicsListView::highlightMoveSpeed() const
{
@@ -1494,11 +1505,6 @@ void QmlGraphicsListView::setHighlightMoveSpeed(qreal speed)
}
}
-/*!
- \qmlproperty real ListView::highlightResizeSpeed
-
- This property holds the resizing animation speed of the highlight delegate.
-*/
qreal QmlGraphicsListView::highlightResizeSpeed() const
{
Q_D(const QmlGraphicsListView);\
@@ -1670,9 +1676,11 @@ void QmlGraphicsListView::componentComplete()
{
Q_D(QmlGraphicsListView);
QmlGraphicsFlickable::componentComplete();
+ refill();
if (d->currentIndex < 0)
d->updateCurrent(0);
- refill();
+ else
+ d->updateCurrent(d->currentIndex);
d->fixupPosition();
}
diff --git a/src/declarative/graphicsitems/qmlgraphicslistview_p.h b/src/declarative/graphicsitems/qmlgraphicslistview_p.h
index 446d71a..3f46434 100644
--- a/src/declarative/graphicsitems/qmlgraphicslistview_p.h
+++ b/src/declarative/graphicsitems/qmlgraphicslistview_p.h
@@ -64,8 +64,11 @@ class Q_DECLARATIVE_EXPORT QmlGraphicsListView : public QmlGraphicsFlickable
Q_PROPERTY(int currentIndex READ currentIndex WRITE setCurrentIndex NOTIFY currentIndexChanged)
Q_PROPERTY(QmlGraphicsItem *currentItem READ currentItem NOTIFY currentIndexChanged)
Q_PROPERTY(int count READ count NOTIFY countChanged)
+
Q_PROPERTY(QmlComponent *highlight READ highlight WRITE setHighlight)
Q_PROPERTY(bool highlightFollowsCurrentItem READ highlightFollowsCurrentItem WRITE setHighlightFollowsCurrentItem)
+ Q_PROPERTY(qreal highlightMoveSpeed READ highlightMoveSpeed WRITE setHighlightMoveSpeed NOTIFY highlightMoveSpeedChanged)
+ Q_PROPERTY(qreal highlightResizeSpeed READ highlightResizeSpeed WRITE setHighlightResizeSpeed NOTIFY highlightResizeSpeedChanged)
Q_PROPERTY(qreal preferredHighlightBegin READ preferredHighlightBegin WRITE setPreferredHighlightBegin)
Q_PROPERTY(qreal preferredHighlightEnd READ preferredHighlightEnd WRITE setPreferredHighlightEnd)
@@ -78,8 +81,6 @@ class Q_DECLARATIVE_EXPORT QmlGraphicsListView : public QmlGraphicsFlickable
Q_PROPERTY(QString sectionExpression READ sectionExpression WRITE setSectionExpression NOTIFY sectionExpressionChanged)
Q_PROPERTY(QString currentSection READ currentSection NOTIFY currentSectionChanged)
- Q_PROPERTY(qreal highlightMoveSpeed READ highlightMoveSpeed WRITE setHighlightMoveSpeed NOTIFY highlightMoveSpeedChanged)
- Q_PROPERTY(qreal highlightResizeSpeed READ highlightResizeSpeed WRITE setHighlightResizeSpeed NOTIFY highlightResizeSpeedChanged)
Q_ENUMS(HighlightRangeMode)
Q_ENUMS(Orientation)
Q_CLASSINFO("DefaultProperty", "data")
diff --git a/tests/auto/declarative/qmlgraphicslistview/tst_qmlgraphicslistview.cpp b/tests/auto/declarative/qmlgraphicslistview/tst_qmlgraphicslistview.cpp
index 4a33770..de26635 100644
--- a/tests/auto/declarative/qmlgraphicslistview/tst_qmlgraphicslistview.cpp
+++ b/tests/auto/declarative/qmlgraphicslistview/tst_qmlgraphicslistview.cpp
@@ -69,10 +69,10 @@ private slots:
void qListModelInterface_moved();
void qAbstractItemModel_moved();
+ void currentIndex();
void enforceRange();
void spacing();
void sections();
- void currentIndex();
private:
template <class T> void items();
@@ -766,15 +766,22 @@ void tst_QmlGraphicsListView::sections()
void tst_QmlGraphicsListView::currentIndex()
{
- QmlView *canvas = createView(SRCDIR "/data/listview-initCurrent.qml");
-
TestModel model;
for (int i = 0; i < 30; i++)
model.addItem("Item" + QString::number(i), QString::number(i));
+ QmlView *canvas = new QmlView(0);
+ canvas->setFixedSize(240,320);
+
QmlContext *ctxt = canvas->rootContext();
ctxt->setContextProperty("testModel", &model);
+ QString filename(SRCDIR "/data/listview-initCurrent.qml");
+ QFile file(filename);
+ file.open(QFile::ReadOnly);
+ QString qml = file.readAll();
+ canvas->setQml(qml, filename);
+
canvas->execute();
qApp->processEvents();
@@ -785,6 +792,7 @@ void tst_QmlGraphicsListView::currentIndex()
QVERIFY(viewport != 0);
// current item should be third item
+ QCOMPARE(listview->currentIndex(), 3);
QCOMPARE(listview->currentItem(), findItem<QmlGraphicsItem>(viewport, "wrapper", 3));
// no wrap