summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMartin Jones <martin.jones@nokia.com>2012-07-04 14:04:02 +1000
committerQt by Nokia <qt-info@nokia.com>2012-07-04 07:30:11 +0200
commitd2af30206f6904fc2c3469691284c7f3c5bbf9ed (patch)
tree23ad4260a4f2d629b84b9f956d3cea17ee61c7c2 /src
parenta531f553a0b470329273dc45cde07284e8235f05 (diff)
Qml ListView highlight component cannot access ListView scope
Use the component creationContext to create the highlight item. Also do this for the header and footer. Task-number: QTBUG-26043 Change-Id: I74276dfbcb4989b8e2b5acf1f2b16ed5537e24de Reviewed-by: Bea Lam <bea.lam@nokia.com>
Diffstat (limited to 'src')
-rw-r--r--src/declarative/graphicsitems/qdeclarativegridview.cpp56
-rw-r--r--src/declarative/graphicsitems/qdeclarativelistview.cpp56
2 files changed, 48 insertions, 64 deletions
diff --git a/src/declarative/graphicsitems/qdeclarativegridview.cpp b/src/declarative/graphicsitems/qdeclarativegridview.cpp
index 37dc5d46..99ab192d 100644
--- a/src/declarative/graphicsitems/qdeclarativegridview.cpp
+++ b/src/declarative/graphicsitems/qdeclarativegridview.cpp
@@ -165,6 +165,7 @@ public:
void clear();
FxGridItem *createItem(int modelIndex);
void releaseItem(FxGridItem *item);
+ QDeclarativeItem *createComponentItem(QDeclarativeComponent *component);
void refill(qreal from, qreal to, bool doBuffer=false);
void updateGrid();
@@ -557,6 +558,26 @@ void QDeclarativeGridViewPrivate::releaseItem(FxGridItem *item)
delete item;
}
+QDeclarativeItem *QDeclarativeGridViewPrivate::createComponentItem(QDeclarativeComponent *component)
+{
+ Q_Q(QDeclarativeGridView);
+ QDeclarativeItem *item = 0;
+ QDeclarativeContext *creationContext = component->creationContext();
+ QDeclarativeContext *context = new QDeclarativeContext(
+ creationContext ? creationContext : qmlContext(q));
+ QObject *nobj = component->create(context);
+ if (nobj) {
+ QDeclarative_setParent_noEvent(context, nobj);
+ item = qobject_cast<QDeclarativeItem *>(nobj);
+ if (!item)
+ delete nobj;
+ } else {
+ delete context;
+ }
+
+ return item;
+}
+
void QDeclarativeGridViewPrivate::refill(qreal from, qreal to, bool doBuffer)
{
Q_Q(QDeclarativeGridView);
@@ -838,16 +859,7 @@ void QDeclarativeGridViewPrivate::createHighlight()
if (currentItem) {
QDeclarativeItem *item = 0;
if (highlightComponent) {
- QDeclarativeContext *highlightContext = new QDeclarativeContext(qmlContext(q));
- QObject *nobj = highlightComponent->create(highlightContext);
- if (nobj) {
- QDeclarative_setParent_noEvent(highlightContext, nobj);
- item = qobject_cast<QDeclarativeItem *>(nobj);
- if (!item)
- delete nobj;
- } else {
- delete highlightContext;
- }
+ item = createComponentItem(highlightComponent);
} else {
item = new QDeclarativeItem;
QDeclarative_setParent_noEvent(item, q->contentItem());
@@ -935,17 +947,7 @@ void QDeclarativeGridViewPrivate::updateFooter()
{
Q_Q(QDeclarativeGridView);
if (!footer && footerComponent) {
- QDeclarativeItem *item = 0;
- QDeclarativeContext *context = new QDeclarativeContext(qmlContext(q));
- QObject *nobj = footerComponent->create(context);
- if (nobj) {
- QDeclarative_setParent_noEvent(context, nobj);
- item = qobject_cast<QDeclarativeItem *>(nobj);
- if (!item)
- delete nobj;
- } else {
- delete context;
- }
+ QDeclarativeItem *item = createComponentItem(footerComponent);
if (item) {
QDeclarative_setParent_noEvent(item, q->contentItem());
item->setParentItem(q->contentItem());
@@ -988,17 +990,7 @@ void QDeclarativeGridViewPrivate::updateHeader()
{
Q_Q(QDeclarativeGridView);
if (!header && headerComponent) {
- QDeclarativeItem *item = 0;
- QDeclarativeContext *context = new QDeclarativeContext(qmlContext(q));
- QObject *nobj = headerComponent->create(context);
- if (nobj) {
- QDeclarative_setParent_noEvent(context, nobj);
- item = qobject_cast<QDeclarativeItem *>(nobj);
- if (!item)
- delete nobj;
- } else {
- delete context;
- }
+ QDeclarativeItem *item = createComponentItem(headerComponent);
if (item) {
QDeclarative_setParent_noEvent(item, q->contentItem());
item->setParentItem(q->contentItem());
diff --git a/src/declarative/graphicsitems/qdeclarativelistview.cpp b/src/declarative/graphicsitems/qdeclarativelistview.cpp
index b94ffd6a..1062e37f 100644
--- a/src/declarative/graphicsitems/qdeclarativelistview.cpp
+++ b/src/declarative/graphicsitems/qdeclarativelistview.cpp
@@ -217,6 +217,7 @@ public:
void clear();
FxListItem *createItem(int modelIndex);
void releaseItem(FxListItem *item);
+ QDeclarativeItem *createComponentItem(QDeclarativeComponent *component);
FxListItem *visibleItem(int modelIndex) const {
if (modelIndex >= visibleIndex && modelIndex < visibleIndex + visibleItems.count()) {
@@ -677,6 +678,26 @@ FxListItem *QDeclarativeListViewPrivate::createItem(int modelIndex)
return listItem;
}
+QDeclarativeItem *QDeclarativeListViewPrivate::createComponentItem(QDeclarativeComponent *component)
+{
+ Q_Q(QDeclarativeListView);
+ QDeclarativeItem *item = 0;
+ QDeclarativeContext *creationContext = component->creationContext();
+ QDeclarativeContext *context = new QDeclarativeContext(
+ creationContext ? creationContext : qmlContext(q));
+ QObject *nobj = component->create(context);
+ if (nobj) {
+ QDeclarative_setParent_noEvent(context, nobj);
+ item = qobject_cast<QDeclarativeItem *>(nobj);
+ if (!item)
+ delete nobj;
+ } else {
+ delete context;
+ }
+
+ return item;
+}
+
void QDeclarativeListViewPrivate::releaseItem(FxListItem *item)
{
Q_Q(QDeclarativeListView);
@@ -946,16 +967,7 @@ void QDeclarativeListViewPrivate::createHighlight()
if (currentItem) {
QDeclarativeItem *item = 0;
if (highlightComponent) {
- QDeclarativeContext *highlightContext = new QDeclarativeContext(qmlContext(q));
- QObject *nobj = highlightComponent->create(highlightContext);
- if (nobj) {
- QDeclarative_setParent_noEvent(highlightContext, nobj);
- item = qobject_cast<QDeclarativeItem *>(nobj);
- if (!item)
- delete nobj;
- } else {
- delete highlightContext;
- }
+ item = createComponentItem(highlightComponent);
} else {
item = new QDeclarativeItem;
}
@@ -1198,17 +1210,7 @@ void QDeclarativeListViewPrivate::updateFooter()
{
Q_Q(QDeclarativeListView);
if (!footer && footerComponent) {
- QDeclarativeItem *item = 0;
- QDeclarativeContext *context = new QDeclarativeContext(qmlContext(q));
- QObject *nobj = footerComponent->create(context);
- if (nobj) {
- QDeclarative_setParent_noEvent(context, nobj);
- item = qobject_cast<QDeclarativeItem *>(nobj);
- if (!item)
- delete nobj;
- } else {
- delete context;
- }
+ QDeclarativeItem *item = createComponentItem(footerComponent);
if (item) {
QDeclarative_setParent_noEvent(item, q->contentItem());
item->setParentItem(q->contentItem());
@@ -1238,17 +1240,7 @@ void QDeclarativeListViewPrivate::updateHeader()
{
Q_Q(QDeclarativeListView);
if (!header && headerComponent) {
- QDeclarativeItem *item = 0;
- QDeclarativeContext *context = new QDeclarativeContext(qmlContext(q));
- QObject *nobj = headerComponent->create(context);
- if (nobj) {
- QDeclarative_setParent_noEvent(context, nobj);
- item = qobject_cast<QDeclarativeItem *>(nobj);
- if (!item)
- delete nobj;
- } else {
- delete context;
- }
+ QDeclarativeItem *item = createComponentItem(headerComponent);
if (item) {
QDeclarative_setParent_noEvent(item, q->contentItem());
item->setParentItem(q->contentItem());