on xenial help sign in
showHeader animation
c1506a7Albert Astals
plugins/ListViewWithPageHeader/listviewwithpageheader.cpp+16−8
@@ -22,6 +22,7 @@
22#include <private/qquickvisualdatamodel_p.h>
22#include <private/qquickvisualdatamodel_p.h>
23#include <private/qqmlglobal_p.h>
23#include <private/qqmlglobal_p.h>
24#include <private/qquickitem_p.h>
24#include <private/qquickitem_p.h>
25+#include <private/qquickanimation_p.h>
25// #include <private/qquickrectangle_p.h>
26// #include <private/qquickrectangle_p.h>
26
27
27qreal ListViewWithPageHeader::ListItem::height() const
28qreal ListViewWithPageHeader::ListItem::height() const
@@ -72,6 +73,12 @@ ListViewWithPageHeader::ListViewWithPageHeader()
72// m_clipItem = new QQuickRectangle(contentItem());
73// m_clipItem = new QQuickRectangle(contentItem());
73// ((QQuickRectangle*)m_clipItem)->setColor(Qt::gray);
74// ((QQuickRectangle*)m_clipItem)->setColor(Qt::gray);
74
75
76+ m_headerShowAnimation = new QQuickNumberAnimation(this);
77+ m_headerShowAnimation->setEasing(QEasingCurve::OutQuad);
78+ m_headerShowAnimation->setProperty("contentY");
79+ m_headerShowAnimation->setDuration(200);
80+ m_headerShowAnimation->setTargetObject(this);
81+
75 connect(this, SIGNAL(contentWidthChanged()), this, SLOT(onContentWidthChanged()));
82 connect(this, SIGNAL(contentWidthChanged()), this, SLOT(onContentWidthChanged()));
76 connect(this, SIGNAL(contentHeightChanged()), this, SLOT(onContentHeightChanged()));
83 connect(this, SIGNAL(contentHeightChanged()), this, SLOT(onContentHeightChanged()));
77}
84}
@@ -119,7 +126,7 @@ void ListViewWithPageHeader::setDelegate(QQmlComponent *delegate)
119 releaseItem(item);
126 releaseItem(item);
120 m_visibleItems.clear();
127 m_visibleItems.clear();
121 m_firstVisibleIndex = -1;
128 m_firstVisibleIndex = -1;
122− QQuickFlickable::setContentY(0);
129+ setContentY(0);
123 m_clipItem->setY(0);
130 m_clipItem->setY(0);
124
131
125 m_delegateModel->setDelegate(delegate);
132 m_delegateModel->setDelegate(delegate);
@@ -232,12 +239,16 @@ void ListViewWithPageHeader::positionAtBeginning()
232
239
233 m_previousContentY = m_visibleItems.first()->y() - headerHeight;
240 m_previousContentY = m_visibleItems.first()->y() - headerHeight;
234 }
241 }
235− QQuickFlickable::setContentY(m_visibleItems.first()->y() + m_clipItem->y() - headerHeight);
242+ setContentY(m_visibleItems.first()->y() + m_clipItem->y() - headerHeight);
236}
243}
237
244
238void ListViewWithPageHeader::showHeader()
245void ListViewWithPageHeader::showHeader()
239{
246{
240− // TODO
247+ auto to = qMax(-minYExtent(), contentY() - m_headerItem->height() + m_headerItemShownHeight);
248+ if (to != contentY()) {
249+ m_headerShowAnimation->setTo(to);
250+ m_headerShowAnimation->start();
251+ }
241}
252}
242
253
243qreal ListViewWithPageHeader::minYExtent() const
254qreal ListViewWithPageHeader::minYExtent() const
@@ -305,11 +316,6 @@ void ListViewWithPageHeader::viewportMoved(Qt::Orientations orient)
305 polish();
316 polish();
306}
317}
307
318
308−void ListViewWithPageHeader::setContentY(qreal /*pos*/)
309−{
310− qWarning() << "ListViewWithPageHeader::setContentY unsupported feature";
311−}
312−
313void ListViewWithPageHeader::createDelegateModel()
319void ListViewWithPageHeader::createDelegateModel()
314{
320{
315 m_delegateModel = new QQuickVisualDataModel(qmlContext(this), this);
321 m_delegateModel = new QQuickVisualDataModel(qmlContext(this), this);
@@ -450,6 +456,8 @@ QQuickItem *ListViewWithPageHeader::getSectionItem(const QString &sectionText)
450 }
456 }
451 m_sectionDelegate->completeCreate();
457 m_sectionDelegate->completeCreate();
452
458
459+ // TODO attach to sectionItem so we can accomodate to it changing its height
460+
453 return sectionItem;
461 return sectionItem;
454}
462}
455
463