aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Jones <martin.jones@nokia.com>2011-07-26 15:33:58 +1000
committerQt by Nokia <qt-info@nokia.com>2011-07-26 09:37:52 +0200
commita380768b135c16d3621ec0be8e1bbe410cd7ed47 (patch)
tree4289d9e690e1e19cc33a1979d6f4ecac5eca10da
parente06211e4c67c0c7470fdac86c3fa6d50792516c5 (diff)
Add headerItem and footerItem properties to views.
Fixes: QTBUG-19684 Change-Id: Iea7d4a4f902cc45cb0cca8e1221fdb993f0bebd2 Reviewed-on: http://codereview.qt.nokia.com/2151 Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com> Reviewed-by: Bea Lam <bea.lam@nokia.com>
-rw-r--r--src/declarative/items/qsggridview.cpp12
-rw-r--r--src/declarative/items/qsgitemview.cpp16
-rw-r--r--src/declarative/items/qsgitemview_p.h6
-rw-r--r--src/declarative/items/qsglistview.cpp11
-rw-r--r--tests/auto/declarative/qsggridview/tst_qsggridview.cpp15
-rw-r--r--tests/auto/declarative/qsglistview/tst_qsglistview.cpp14
6 files changed, 71 insertions, 3 deletions
diff --git a/src/declarative/items/qsggridview.cpp b/src/declarative/items/qsggridview.cpp
index 8d91a410fa..307aeae32f 100644
--- a/src/declarative/items/qsggridview.cpp
+++ b/src/declarative/items/qsggridview.cpp
@@ -641,13 +641,14 @@ qreal QSGGridViewPrivate::footerSize() const
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);
@@ -671,18 +672,22 @@ void QSGGridViewPrivate::updateFooter()
} 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);
@@ -710,6 +715,9 @@ void QSGGridViewPrivate::updateHeader()
else
gridItem->setPosition(colOffset, -headerSize());
}
+
+ if (created)
+ emit q->headerItemChanged();
}
void QSGGridViewPrivate::initializeCurrentItem()
diff --git a/src/declarative/items/qsgitemview.cpp b/src/declarative/items/qsgitemview.cpp
index df8de86ba8..a9550e82b7 100644
--- a/src/declarative/items/qsgitemview.cpp
+++ b/src/declarative/items/qsgitemview.cpp
@@ -309,6 +309,12 @@ QDeclarativeComponent *QSGItemView::header() const
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);
@@ -325,6 +331,8 @@ void QSGItemView::setHeader(QDeclarativeComponent *headerComponent)
d->updateFooter();
d->updateViewport();
d->fixupPosition();
+ } else {
+ emit headerItemChanged();
}
emit headerChanged();
}
@@ -336,6 +344,12 @@ QDeclarativeComponent *QSGItemView::footer() const
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);
@@ -348,6 +362,8 @@ void QSGItemView::setFooter(QDeclarativeComponent *footerComponent)
d->updateFooter();
d->updateViewport();
d->fixupPosition();
+ } else {
+ emit footerItemChanged();
}
emit footerChanged();
}
diff --git a/src/declarative/items/qsgitemview_p.h b/src/declarative/items/qsgitemview_p.h
index fb95e4fd8d..4c5b91fcde 100644
--- a/src/declarative/items/qsgitemview_p.h
+++ b/src/declarative/items/qsgitemview_p.h
@@ -71,7 +71,9 @@ class Q_AUTOTEST_EXPORT QSGItemView : public QSGFlickable
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)
@@ -113,9 +115,11 @@ public:
QDeclarativeComponent *footer() const;
void setFooter(QDeclarativeComponent *);
+ QSGItem *footerItem() const;
QDeclarativeComponent *header() const;
void setHeader(QDeclarativeComponent *);
+ QSGItem *headerItem() const;
QDeclarativeComponent *highlight() const;
void setHighlight(QDeclarativeComponent *);
@@ -164,6 +168,8 @@ signals:
void headerChanged();
void footerChanged();
+ void headerItemChanged();
+ void footerItemChanged();
void highlightChanged();
void highlightItemChanged();
diff --git a/src/declarative/items/qsglistview.cpp b/src/declarative/items/qsglistview.cpp
index 4502dc8216..fa4260214b 100644
--- a/src/declarative/items/qsglistview.cpp
+++ b/src/declarative/items/qsglistview.cpp
@@ -917,13 +917,14 @@ qreal QSGListViewPrivate::footerSize() const
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);
@@ -939,17 +940,22 @@ void QSGListViewPrivate::updateFooter()
} 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);
@@ -966,6 +972,9 @@ void QSGListViewPrivate::updateHeader()
listItem->setPosition(-headerSize());
}
}
+
+ if (created)
+ emit q->headerItemChanged();
}
void QSGListViewPrivate::itemGeometryChanged(QSGItem *item, const QRectF &newGeometry, const QRectF &oldGeometry)
diff --git a/tests/auto/declarative/qsggridview/tst_qsggridview.cpp b/tests/auto/declarative/qsggridview/tst_qsggridview.cpp
index 3929c712af..d8b084ae9f 100644
--- a/tests/auto/declarative/qsggridview/tst_qsggridview.cpp
+++ b/tests/auto/declarative/qsggridview/tst_qsggridview.cpp
@@ -1865,6 +1865,8 @@ void tst_QSGGridView::footer()
QSGText *footer = findItem<QSGText>(contentItem, "footer");
QVERIFY(footer);
+ QVERIFY(footer == gridview->footerItem());
+
QCOMPARE(footer->pos(), initialFooterPos);
QCOMPARE(footer->width(), 100.);
QCOMPARE(footer->height(), 30.);
@@ -1905,13 +1907,19 @@ void tst_QSGGridView::footer()
// 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.);
@@ -2005,6 +2013,8 @@ void tst_QSGGridView::header()
QSGText *header = findItem<QSGText>(contentItem, "header");
QVERIFY(header);
+ QVERIFY(header == gridview->headerItem());
+
QCOMPARE(header->pos(), initialHeaderPos);
QCOMPARE(header->width(), 100.);
QCOMPARE(header->height(), 30.);
@@ -2020,13 +2030,18 @@ void tst_QSGGridView::header()
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.);
diff --git a/tests/auto/declarative/qsglistview/tst_qsglistview.cpp b/tests/auto/declarative/qsglistview/tst_qsglistview.cpp
index 75b68e484b..4d6920cd20 100644
--- a/tests/auto/declarative/qsglistview/tst_qsglistview.cpp
+++ b/tests/auto/declarative/qsglistview/tst_qsglistview.cpp
@@ -1930,6 +1930,8 @@ void tst_QSGListView::header()
QSGText *header = findItem<QSGText>(contentItem, "header");
QVERIFY(header);
+ QVERIFY(header == listview->headerItem());
+
QCOMPARE(header->width(), 100.);
QCOMPARE(header->height(), 30.);
QCOMPARE(header->pos(), initialHeaderPos);
@@ -1945,13 +1947,18 @@ void tst_QSGListView::header()
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.);
@@ -2070,6 +2077,8 @@ void tst_QSGListView::footer()
QSGText *footer = findItem<QSGText>(contentItem, "footer");
QVERIFY(footer);
+ QVERIFY(footer == listview->footerItem());
+
QCOMPARE(footer->pos(), initialFooterPos);
QCOMPARE(footer->width(), 100.);
QCOMPARE(footer->height(), 30.);
@@ -2106,13 +2115,18 @@ void tst_QSGListView::footer()
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.);