~mterry/+junk/u8

« back to all changes in this revision

Viewing changes to plugins/Dash/listviewwithpageheader.cpp

Merge

Show diffs side-by-side

added added

removed removed

Lines of Context:
253
253
            oldHeaderHeight = m_headerItem->height();
254
254
            oldHeaderY = m_headerItem->y();
255
255
            m_headerItem->setParentItem(nullptr);
 
256
            QQuickItemPrivate::get(m_headerItem)->removeItemChangeListener(this, QQuickItemPrivate::ImplicitHeight);
256
257
        }
257
258
        m_headerItem = headerItem;
258
259
        if (m_headerItem) {
284
285
        m_sectionDelegate = delegate;
285
286
 
286
287
        m_topSectionItem = getSectionItem(QString(), false /*watchGeometry*/);
287
 
        m_topSectionItem->setZ(3);
288
 
        QQuickItemPrivate::get(m_topSectionItem)->setCulled(true);
289
 
        connect(m_topSectionItem, &QQuickItem::heightChanged, this, &ListViewWithPageHeader::stickyHeaderHeightChanged);
 
288
        if (m_topSectionItem) {
 
289
            m_topSectionItem->setZ(3);
 
290
            QQuickItemPrivate::get(m_topSectionItem)->setCulled(true);
 
291
            connect(m_topSectionItem, &QQuickItem::heightChanged, this, &ListViewWithPageHeader::stickyHeaderHeightChanged);
 
292
        }
290
293
 
291
294
        // TODO create sections for existing items
292
295
 
584
587
                } else {
585
588
                    m_headerItem->setY(-m_minYExtent);
586
589
                }
 
590
            } else if (m_headerItemShownHeight == 0 && m_previousContentY > m_headerItem->y() && contentY() < m_headerItem->y()) {
 
591
                // The header was hidden but now that we've moved up (e.g. because of item removed) it's visible
 
592
                // make sure it isn't
 
593
                m_headerItem->setY(-m_minYExtent);
587
594
            }
588
595
            Q_EMIT headerItemShownHeightChanged();
589
596
        } else {
697
704
    if (flags & QQmlDelegateModel::Destroyed) {
698
705
        item->setParentItem(nullptr);
699
706
    }
700
 
    listItem->sectionItem()->deleteLater();
 
707
    if (listItem->sectionItem()) {
 
708
        listItem->sectionItem()->deleteLater();
 
709
    }
701
710
    delete listItem;
702
711
}
703
712
 
763
772
            delete nobj;
764
773
        } else {
765
774
            sectionItem->setProperty("text", sectionText);
766
 
            sectionItem->setProperty("delegateIndex", -1);
 
775
            sectionItem->setProperty("delegate", QVariant());
767
776
            sectionItem->setZ(2);
768
777
            QQml_setParent_noEvent(sectionItem, m_clipItem);
769
778
            sectionItem->setParentItem(m_clipItem);
773
782
    }
774
783
    m_sectionDelegate->completeCreate();
775
784
 
776
 
    if (watchGeometry) {
 
785
    if (watchGeometry && sectionItem) {
777
786
        QQuickItemPrivate::get(sectionItem)->addItemChangeListener(this, QQuickItemPrivate::Geometry);
778
787
    }
779
788
 
920
929
                polish();
921
930
            }
922
931
            if (listItem->sectionItem()) {
923
 
                listItem->sectionItem()->setProperty("delegateIndex", modelIndex);
 
932
                listItem->sectionItem()->setProperty("delegate", QVariant::fromValue(listItem->m_item));
924
933
            }
925
934
            adjustMinYExtent();
926
935
            m_contentHeightDirty = true;
973
982
 
974
983
void ListViewWithPageHeader::onHeightChanged()
975
984
{
 
985
    m_clipItem->setHeight(height() - m_headerItemShownHeight);
976
986
    polish();
977
987
}
978
988
 
1113
1123
    for (int i = 0; i < m_visibleItems.count(); ++i) {
1114
1124
        ListItem *item = m_visibleItems[i];
1115
1125
        if (item->sectionItem()) {
1116
 
            item->sectionItem()->setProperty("delegateIndex", m_firstVisibleIndex + i);
 
1126
            item->sectionItem()->setProperty("delegate", QVariant::fromValue(item->m_item));
1117
1127
        }
1118
1128
    }
1119
1129
 
1287
1297
 
1288
1298
                        QQuickItemPrivate::get(m_topSectionItem)->setCulled(false);
1289
1299
                        m_topSectionItem->setY(topSectionStickPos);
1290
 
                        int delegateIndex = modelIndex;
1291
 
                        // Look for the first index with this section text
1292
 
                        while (delegateIndex > 0) {
1293
 
                            const QString prevSection = m_delegateModel->stringValue(delegateIndex - 1, m_sectionProperty);
1294
 
                            if (prevSection != section)
1295
 
                                break;
1296
 
                            delegateIndex--;
1297
 
                        }
1298
 
                        m_topSectionItem->setProperty("delegateIndex", delegateIndex);
 
1300
                        m_topSectionItem->setProperty("delegate", QVariant::fromValue(item->m_item));
1299
1301
                        if (item->sectionItem()) {
1300
1302
                            QQuickItemPrivate::get(item->sectionItem())->setCulled(true);
1301
1303
                        }
1329
1331
            }
1330
1332
        }
1331
1333
    }
 
1334
    if (m_headerItem) {
 
1335
        const bool cullHeader = m_headerItem->y() + m_headerItem->height() < contentY();
 
1336
        QQuickItemPrivate::get(m_headerItem)->setCulled(cullHeader);
 
1337
    }
1332
1338
    m_inLayout = false;
1333
1339
}
1334
1340
 
1379
1385
 
1380
1386
        m_contentHeightDirty = false;
1381
1387
        adjustMinYExtent();
1382
 
        if (contentHeight + m_minYExtent < height()) {
1383
 
            // need this since in the previous call to adjustMinYExtent contentHeight is not set yet
1384
 
            m_minYExtent = 0;
1385
 
        }
1386
1388
        m_inContentHeightKeepHeaderShown = m_headerItem && m_headerItem->y() == contentY();
1387
1389
        setContentHeight(contentHeight);
1388
1390
        m_inContentHeightKeepHeaderShown = false;