void QSGGridViewPrivate::updateFooter()
{
Q_Q(QSGGridView);
-
+ bool created = false;
if (!footer) {
QSGItem *item = createComponentItem(footerComponent, true);
if (!item)
return;
item->setZ(1);
footer = new FxGridItemSG(item, q, true);
+ created = true;
}
FxGridItemSG *gridItem = static_cast<FxGridItemSG*>(footer);
} else {
gridItem->setPosition(colOffset, rowOffset);
}
+
+ if (created)
+ emit q->footerItemChanged();
}
void QSGGridViewPrivate::updateHeader()
{
Q_Q(QSGGridView);
-
+ bool created = false;
if (!header) {
QSGItem *item = createComponentItem(headerComponent, true);
if (!item)
return;
item->setZ(1);
header = new FxGridItemSG(item, q, true);
+ created = true;
}
FxGridItemSG *gridItem = static_cast<FxGridItemSG*>(header);
else
gridItem->setPosition(colOffset, -headerSize());
}
+
+ if (created)
+ emit q->headerItemChanged();
}
void QSGGridViewPrivate::initializeCurrentItem()
return d->headerComponent;
}
+QSGItem *QSGItemView::headerItem() const
+{
+ Q_D(const QSGItemView);
+ return d->header ? d->header->item : 0;
+}
+
void QSGItemView::setHeader(QDeclarativeComponent *headerComponent)
{
Q_D(QSGItemView);
d->updateFooter();
d->updateViewport();
d->fixupPosition();
+ } else {
+ emit headerItemChanged();
}
emit headerChanged();
}
return d->footerComponent;
}
+QSGItem *QSGItemView::footerItem() const
+{
+ Q_D(const QSGItemView);
+ return d->footer ? d->footer->item : 0;
+}
+
void QSGItemView::setFooter(QDeclarativeComponent *footerComponent)
{
Q_D(QSGItemView);
d->updateFooter();
d->updateViewport();
d->fixupPosition();
+ } else {
+ emit footerItemChanged();
}
emit footerChanged();
}
Q_PROPERTY(Qt::LayoutDirection effectiveLayoutDirection READ effectiveLayoutDirection NOTIFY effectiveLayoutDirectionChanged)
Q_PROPERTY(QDeclarativeComponent *header READ header WRITE setHeader NOTIFY headerChanged)
+ Q_PROPERTY(QSGItem *headerItem READ headerItem NOTIFY headerItemChanged)
Q_PROPERTY(QDeclarativeComponent *footer READ footer WRITE setFooter NOTIFY footerChanged)
+ Q_PROPERTY(QSGItem *footerItem READ footerItem NOTIFY footerItemChanged)
Q_PROPERTY(QDeclarativeComponent *highlight READ highlight WRITE setHighlight NOTIFY highlightChanged)
Q_PROPERTY(QSGItem *highlightItem READ highlightItem NOTIFY highlightItemChanged)
QDeclarativeComponent *footer() const;
void setFooter(QDeclarativeComponent *);
+ QSGItem *footerItem() const;
QDeclarativeComponent *header() const;
void setHeader(QDeclarativeComponent *);
+ QSGItem *headerItem() const;
QDeclarativeComponent *highlight() const;
void setHighlight(QDeclarativeComponent *);
void headerChanged();
void footerChanged();
+ void headerItemChanged();
+ void footerItemChanged();
void highlightChanged();
void highlightItemChanged();
void QSGListViewPrivate::updateFooter()
{
Q_Q(QSGListView);
-
+ bool created = false;
if (!footer) {
QSGItem *item = createComponentItem(footerComponent, true);
if (!item)
return;
item->setZ(1);
footer = new FxListItemSG(item, q, true);
+ created = true;
}
FxListItemSG *listItem = static_cast<FxListItemSG*>(footer);
} else {
listItem->setPosition(visiblePos);
}
+
+ if (created)
+ emit q->footerItemChanged();
}
void QSGListViewPrivate::updateHeader()
{
Q_Q(QSGListView);
+ bool created = false;
if (!header) {
QSGItem *item = createComponentItem(headerComponent, true);
if (!item)
return;
item->setZ(1);
header = new FxListItemSG(item, q, true);
+ created = true;
}
FxListItemSG *listItem = static_cast<FxListItemSG*>(header);
listItem->setPosition(-headerSize());
}
}
+
+ if (created)
+ emit q->headerItemChanged();
}
void QSGListViewPrivate::itemGeometryChanged(QSGItem *item, const QRectF &newGeometry, const QRectF &oldGeometry)
QSGText *footer = findItem<QSGText>(contentItem, "footer");
QVERIFY(footer);
+ QVERIFY(footer == gridview->footerItem());
+
QCOMPARE(footer->pos(), initialFooterPos);
QCOMPARE(footer->width(), 100.);
QCOMPARE(footer->height(), 30.);
// add 30 items
for (int i = 0; i < 30; i++)
model.addItem("Item" + QString::number(i), "");
+
+ QSignalSpy footerItemSpy(gridview, SIGNAL(footerItemChanged()));
QMetaObject::invokeMethod(canvas->rootObject(), "changeFooter");
+ QCOMPARE(footerItemSpy.count(), 1);
+
footer = findItem<QSGText>(contentItem, "footer");
QVERIFY(!footer);
footer = findItem<QSGText>(contentItem, "footer2");
QVERIFY(footer);
+ QVERIFY(footer == gridview->footerItem());
+
QCOMPARE(footer->pos(), changedFooterPos);
QCOMPARE(footer->width(), 50.);
QCOMPARE(footer->height(), 20.);
QSGText *header = findItem<QSGText>(contentItem, "header");
QVERIFY(header);
+ QVERIFY(header == gridview->headerItem());
+
QCOMPARE(header->pos(), initialHeaderPos);
QCOMPARE(header->width(), 100.);
QCOMPARE(header->height(), 30.);
for (int i = 0; i < 30; i++)
model.addItem("Item" + QString::number(i), "");
+ QSignalSpy headerItemSpy(gridview, SIGNAL(headerItemChanged()));
QMetaObject::invokeMethod(canvas->rootObject(), "changeHeader");
+ QCOMPARE(headerItemSpy.count(), 1);
+
header = findItem<QSGText>(contentItem, "header");
QVERIFY(!header);
header = findItem<QSGText>(contentItem, "header2");
QVERIFY(header);
+ QVERIFY(header == gridview->headerItem());
+
QCOMPARE(header->pos(), changedHeaderPos);
QCOMPARE(header->width(), 50.);
QCOMPARE(header->height(), 20.);
QSGText *header = findItem<QSGText>(contentItem, "header");
QVERIFY(header);
+ QVERIFY(header == listview->headerItem());
+
QCOMPARE(header->width(), 100.);
QCOMPARE(header->height(), 30.);
QCOMPARE(header->pos(), initialHeaderPos);
for (int i = 0; i < 30; i++)
model.addItem("Item" + QString::number(i), "");
+ QSignalSpy headerItemSpy(listview, SIGNAL(headerItemChanged()));
QMetaObject::invokeMethod(canvas->rootObject(), "changeHeader");
+ QCOMPARE(headerItemSpy.count(), 1);
+
header = findItem<QSGText>(contentItem, "header");
QVERIFY(!header);
header = findItem<QSGText>(contentItem, "header2");
QVERIFY(header);
+ QVERIFY(header == listview->headerItem());
+
QCOMPARE(header->pos(), changedHeaderPos);
QCOMPARE(header->width(), 50.);
QCOMPARE(header->height(), 20.);
QSGText *footer = findItem<QSGText>(contentItem, "footer");
QVERIFY(footer);
+ QVERIFY(footer == listview->footerItem());
+
QCOMPARE(footer->pos(), initialFooterPos);
QCOMPARE(footer->width(), 100.);
QCOMPARE(footer->height(), 30.);
for (int i = 0; i < 30; i++)
model.addItem("Item" + QString::number(i), "");
+ QSignalSpy footerItemSpy(listview, SIGNAL(footerItemChanged()));
QMetaObject::invokeMethod(canvas->rootObject(), "changeFooter");
+ QCOMPARE(footerItemSpy.count(), 1);
+
footer = findItem<QSGText>(contentItem, "footer");
QVERIFY(!footer);
footer = findItem<QSGText>(contentItem, "footer2");
QVERIFY(footer);
+ QVERIFY(footer == listview->footerItem());
+
QCOMPARE(footer->pos(), changedFooterPos);
QCOMPARE(footer->width(), 50.);
QCOMPARE(footer->height(), 20.);