@@ -280,7 +280,7 @@ void ListViewWithPageHeader::setSectionDelegate(QQmlComponent *delegate)
280280
281281 m_sectionDelegate = delegate;
282282
283− m_topSectionItem = getSectionItem(-1, QString());
283+ m_topSectionItem = getSectionItem(QString());
284284 m_topSectionItem->setZ(3);
285285 QQuickItemPrivate::get(m_topSectionItem)->setCulled(true);
286286
@@ -380,20 +380,51 @@ void ListViewWithPageHeader::showHeader()
380380 }
381381}
382382
383+QQuickItem *ListViewWithPageHeader::item(int modelIndex) const
384+{
385+ ListItem *item = itemAtIndex(modelIndex);
386+ if (item)
387+ return item->m_item;
388+ else
389+ return nullptr;
390+}
391+
383392bool ListViewWithPageHeader::maximizeVisibleArea(int modelIndex)
384393{
385394 ListItem *listItem = itemAtIndex(modelIndex);
386− if (listItem)
387− {
395+ if (listItem) {
396+ return maximizeVisibleArea(listItem, listItem->height());
397+ }
398+
399+ return false;
400+}
401+
402+bool ListViewWithPageHeader::maximizeVisibleArea(int modelIndex, int itemHeight)
403+{
404+ if (itemHeight < 0)
405+ return false;
406+
407+ ListItem *listItem = itemAtIndex(modelIndex);
408+ if (listItem) {
409+ return maximizeVisibleArea(listItem, itemHeight + (listItem->m_sectionItem ? listItem->m_sectionItem->height() : 0));
410+ }
411+
412+ return false;
413+}
414+
415+bool ListViewWithPageHeader::maximizeVisibleArea(ListItem *listItem, int listItemHeight)
416+{
417+ if (listItem) {
418+ layout();
388419 const auto listItemY = m_clipItem->y() + listItem->y();
389− if (listItemY > contentY() && listItemY + listItem->height() > contentY() + height()) {
420+ if (listItemY > contentY() && listItemY + listItemHeight > contentY() + height()) {
390421 // we can scroll the list up to show more stuff
391− const auto to = qMin(listItemY, listItemY + listItem->height() - height());
422+ const auto to = qMin(listItemY, listItemY + listItemHeight - height());
392423 m_contentYAnimation->setTo(to);
393424 contentYAnimationType = ContentYAnimationMaximizeVisibleArea;
394425 m_contentYAnimation->start();
395− } else if ((listItemY < contentY() && listItemY + listItem->height() < contentY() + height()) ||
396− (m_topSectionItem && !listItem->m_sectionItem && listItemY - m_topSectionItem->height() < contentY() && listItemY + listItem->height() < contentY() + height()))
426+ } else if ((listItemY < contentY() && listItemY + listItemHeight < contentY() + height()) ||
427+ (m_topSectionItem && !listItem->m_sectionItem && listItemY - m_topSectionItem->height() < contentY() && listItemY + listItemHeight < contentY() + height()))
397428 {
398429 // we can scroll the list down to show more stuff
399430 auto realVisibleListItemY = listItemY;
@@ -406,7 +437,7 @@ bool ListViewWithPageHeader::maximizeVisibleArea(int modelIndex)
406437 realVisibleListItemY -= m_topSectionItem->height();
407438 }
408439 }
409− const auto to = qMax(realVisibleListItemY, listItemY + listItem->height() - height());
440+ const auto to = qMax(realVisibleListItemY, listItemY + listItemHeight - height());
410441 m_contentYAnimation->setTo(to);
411442 contentYAnimationType = ContentYAnimationMaximizeVisibleArea;
412443 m_contentYAnimation->start();
@@ -641,17 +672,17 @@ QQuickItem *ListViewWithPageHeader::getSectionItem(int modelIndex, bool alreadyI
641672 }
642673 }
643674
644− return getSectionItem(modelIndex, section);
675+ return getSectionItem(section);
645676}
646677
647−QQuickItem *ListViewWithPageHeader::getSectionItem(int modelIndex, const QString §ionText)
678+QQuickItem *ListViewWithPageHeader::getSectionItem(const QString §ionText)
648679{
649680 QQuickItem *sectionItem = nullptr;
650681
651682 QQmlContext *creationContext = m_sectionDelegate->creationContext();
652683 QQmlContext *context = new QQmlContext(creationContext ? creationContext : qmlContext(this));
653684 context->setContextProperty(QLatin1String("section"), sectionText);
654− context->setContextProperty(QLatin1String("delegateIndex"), modelIndex);
685+ context->setContextProperty(QLatin1String("delegateIndex"), -1);
655686 QObject *nobj = m_sectionDelegate->beginCreate(context);
656687 if (nobj) {
657688 QQml_setParent_noEvent(context, nobj);
@@ -786,6 +817,10 @@ ListViewWithPageHeader::ListItem *ListViewWithPageHeader::createItem(int modelIn
786817 m_firstVisibleIndex = modelIndex;
787818 polish();
788819 }
820+ if (listItem->m_sectionItem) {
821+ QQmlContext *context = QQmlEngine::contextForObject(listItem->m_sectionItem)->parentContext();
822+ context->setContextProperty(QLatin1String("delegateIndex"), modelIndex);
823+ }
789824 adjustMinYExtent();
790825 m_contentHeightDirty = true;
791826 }