on xenial help sign in
showHeader animation
commitc1506a797b0103f649af295e73218c295bd95f44 authorAlbert Astals <albert.astals@canonical.com> dateWed 12 Jun 2013, 16:25 (13 years ago) parent52f8f32
1 file changed+16−8
plugins/ListViewWithPageHeader/listviewwithpageheader.cpp+16−8
plugins/ListViewWithPageHeader/listviewwithpageheader.cpp+16−8
@@ -22,6 +22,7 @@
2222#include <private/qquickvisualdatamodel_p.h>
2323#include <private/qqmlglobal_p.h>
2424#include <private/qquickitem_p.h>
25+#include <private/qquickanimation_p.h>
2526// #include <private/qquickrectangle_p.h>
2627
2728qreal ListViewWithPageHeader::ListItem::height() const
@@ -72,6 +73,12 @@ ListViewWithPageHeader::ListViewWithPageHeader()
7273// m_clipItem = new QQuickRectangle(contentItem());
7374// ((QQuickRectangle*)m_clipItem)->setColor(Qt::gray);
7475
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+
7582 connect(this, SIGNAL(contentWidthChanged()), this, SLOT(onContentWidthChanged()));
7683 connect(this, SIGNAL(contentHeightChanged()), this, SLOT(onContentHeightChanged()));
7784}
@@ -119,7 +126,7 @@ void ListViewWithPageHeader::setDelegate(QQmlComponent *delegate)
119126 releaseItem(item);
120127 m_visibleItems.clear();
121128 m_firstVisibleIndex = -1;
122− QQuickFlickable::setContentY(0);
129+ setContentY(0);
123130 m_clipItem->setY(0);
124131
125132 m_delegateModel->setDelegate(delegate);
@@ -232,12 +239,16 @@ void ListViewWithPageHeader::positionAtBeginning()
232239
233240 m_previousContentY = m_visibleItems.first()->y() - headerHeight;
234241 }
235− QQuickFlickable::setContentY(m_visibleItems.first()->y() + m_clipItem->y() - headerHeight);
242+ setContentY(m_visibleItems.first()->y() + m_clipItem->y() - headerHeight);
236243}
237244
238245void ListViewWithPageHeader::showHeader()
239246{
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+ }
241252}
242253
243254qreal ListViewWithPageHeader::minYExtent() const
@@ -305,11 +316,6 @@ void ListViewWithPageHeader::viewportMoved(Qt::Orientations orient)
305316 polish();
306317}
307318
308−void ListViewWithPageHeader::setContentY(qreal /*pos*/)
309−{
310− qWarning() << "ListViewWithPageHeader::setContentY unsupported feature";
311−}
312−
313319void ListViewWithPageHeader::createDelegateModel()
314320{
315321 m_delegateModel = new QQuickVisualDataModel(qmlContext(this), this);
@@ -450,6 +456,8 @@ QQuickItem *ListViewWithPageHeader::getSectionItem(const QString &sectionText)
450456 }
451457 m_sectionDelegate->completeCreate();
452458
459+ // TODO attach to sectionItem so we can accomodate to it changing its height
460+
453461 return sectionItem;
454462}
455463