@@ -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>
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);
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);
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()));
@@ -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);
125 m_delegateModel->setDelegate(delegate);
132 m_delegateModel->setDelegate(delegate);
@@ -232,12 +239,16 @@ void ListViewWithPageHeader::positionAtBeginning()
233 m_previousContentY = m_visibleItems.first()->y() - headerHeight;
240 m_previousContentY = m_visibleItems.first()->y() - headerHeight;
235− QQuickFlickable::setContentY(m_visibleItems.first()->y() + m_clipItem->y() - headerHeight);
242+ setContentY(m_visibleItems.first()->y() + m_clipItem->y() - headerHeight);
238void ListViewWithPageHeader::showHeader()
245void ListViewWithPageHeader::showHeader()
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();
243qreal ListViewWithPageHeader::minYExtent() const
254qreal ListViewWithPageHeader::minYExtent() const
@@ -305,11 +316,6 @@ void ListViewWithPageHeader::viewportMoved(Qt::Orientations orient)
305 polish();
316 polish();
308−void ListViewWithPageHeader::setContentY(qreal /*pos*/)
310− qWarning() << "ListViewWithPageHeader::setContentY unsupported feature";
313void ListViewWithPageHeader::createDelegateModel()
319void ListViewWithPageHeader::createDelegateModel()
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 §ionText)
451 m_sectionDelegate->completeCreate();
457 m_sectionDelegate->completeCreate();
459+ // TODO attach to sectionItem so we can accomodate to it changing its height
453 return sectionItem;
461 return sectionItem;