QmlPuppet: Move doComponentCompleteRecursive to QmlPrivateGate

Change-Id: Ib6ccf791e1dd74878e04c8248bed371fb08084cf
Reviewed-by: Tim Jenssen <tim.jenssen@theqtcompany.com>
This commit is contained in:
Thomas Hartmann
2015-05-20 15:01:55 +02:00
parent 2659344873
commit d06980f9bb
4 changed files with 40 additions and 35 deletions

View File

@@ -425,7 +425,7 @@ void ObjectNodeInstance::setPropertyVariant(const PropertyName &name, const QVar
nodeInstanceServer()->removeFilePropertyFromFileSystemWatcher(object(), name, path); nodeInstanceServer()->removeFilePropertyFromFileSystemWatcher(object(), name, path);
} }
if (hasValidResetBinding(name)) { if (hasValidResetBinding(name)) { //####
QQmlPropertyPrivate::setBinding(property, 0, QQmlPropertyPrivate::BypassInterceptor | QQmlPropertyPrivate::DontRemoveBinding); QQmlPropertyPrivate::setBinding(property, 0, QQmlPropertyPrivate::BypassInterceptor | QQmlPropertyPrivate::DontRemoveBinding);
} }
@@ -852,38 +852,6 @@ QObject *ObjectNodeInstance::parentObject(QObject *object)
return object->parent(); return object->parent();
} }
void ObjectNodeInstance::doComponentCompleteRecursive(QObject *object, NodeInstanceServer *nodeInstanceServer)
{
if (object) {
QQuickItem *item = qobject_cast<QQuickItem*>(object);
if (item && DesignerSupport::isComponentComplete(item))
return;
QList<QObject*> childList = object->children();
if (item) {
foreach (QQuickItem *childItem, item->childItems()) {
if (!childList.contains(childItem))
childList.append(childItem);
}
}
foreach (QObject *child, childList) {
if (!nodeInstanceServer->hasInstanceForObject(child))
doComponentCompleteRecursive(child, nodeInstanceServer);
}
if (item) {
static_cast<QQmlParserStatus*>(item)->componentComplete();
} else {
QQmlParserStatus *qmlParserStatus = dynamic_cast< QQmlParserStatus*>(object);
if (qmlParserStatus)
qmlParserStatus->componentComplete();
}
}
}
ObjectNodeInstance::Pointer ObjectNodeInstance::parentInstance() const ObjectNodeInstance::Pointer ObjectNodeInstance::parentInstance() const
{ {
QObject *parentHolder = parent(); QObject *parentHolder = parent();
@@ -942,7 +910,7 @@ bool ObjectNodeInstance::resetStateProperty(const ObjectNodeInstance::Pointer &/
void ObjectNodeInstance::doComponentComplete() void ObjectNodeInstance::doComponentComplete()
{ {
doComponentCompleteRecursive(object(), nodeInstanceServer()); QmlPrivateGate::doComponentCompleteRecursive(object(), nodeInstanceServer());
} }
bool ObjectNodeInstance::isRootNodeInstance() const bool ObjectNodeInstance::isRootNodeInstance() const

View File

@@ -194,7 +194,6 @@ protected:
QVariant convertSpecialCharacter(const QVariant& value) const; QVariant convertSpecialCharacter(const QVariant& value) const;
QVariant convertEnumToValue(const QVariant &value, const PropertyName &name); QVariant convertEnumToValue(const QVariant &value, const PropertyName &name);
static QObject *parentObject(QObject *object); static QObject *parentObject(QObject *object);
static void doComponentCompleteRecursive(QObject *object, NodeInstanceServer *nodeInstanceServer);
static QVariant enumationValue(const Enumeration &enumeration); static QVariant enumationValue(const Enumeration &enumeration);
private: private:

View File

@@ -34,6 +34,7 @@
#include "designercustomobjectdata.h" #include "designercustomobjectdata.h"
#include <objectnodeinstance.h> #include <objectnodeinstance.h>
#include <nodeinstanceserver.h>
#include <QQuickItem> #include <QQuickItem>
#include <QQmlComponent> #include <QQmlComponent>
@@ -472,6 +473,38 @@ bool hasBindingForProperty(QObject *object, const PropertyName &propertyName, bo
return DesignerCustomObjectData::hasBindingForProperty(object, propertyName, hasChanged); return DesignerCustomObjectData::hasBindingForProperty(object, propertyName, hasChanged);
} }
void doComponentCompleteRecursive(QObject *object, NodeInstanceServer *nodeInstanceServer)
{
if (object) {
QQuickItem *item = qobject_cast<QQuickItem*>(object);
if (item && DesignerSupport::isComponentComplete(item))
return;
QList<QObject*> childList = object->children();
if (item) {
foreach (QQuickItem *childItem, item->childItems()) {
if (!childList.contains(childItem))
childList.append(childItem);
}
}
foreach (QObject *child, childList) {
if (!nodeInstanceServer->hasInstanceForObject(child))
doComponentCompleteRecursive(child, nodeInstanceServer);
}
if (item) {
static_cast<QQmlParserStatus*>(item)->componentComplete();
} else {
QQmlParserStatus *qmlParserStatus = dynamic_cast< QQmlParserStatus*>(object);
if (qmlParserStatus)
qmlParserStatus->componentComplete();
}
}
}
ComponentCompleteDisabler::ComponentCompleteDisabler() ComponentCompleteDisabler::ComponentCompleteDisabler()
{ {
DesignerSupport::disableComponentComplete(); DesignerSupport::disableComponentComplete();

View File

@@ -40,6 +40,9 @@
#include <QQmlListReference> #include <QQmlListReference>
namespace QmlDesigner { namespace QmlDesigner {
class NodeInstanceServer;
namespace Internal { namespace Internal {
class ObjectNodeInstance; class ObjectNodeInstance;
@@ -85,6 +88,8 @@ public:
bool hasValidResetBinding(QObject *object, const PropertyName &propertyName); bool hasValidResetBinding(QObject *object, const PropertyName &propertyName);
bool hasBindingForProperty(QObject *object, const PropertyName &propertyName, bool *hasChanged); bool hasBindingForProperty(QObject *object, const PropertyName &propertyName, bool *hasChanged);
void doComponentCompleteRecursive(QObject *object, NodeInstanceServer *nodeInstanceServer);
} // namespace QmlPrivateGate } // namespace QmlPrivateGate
} // namespace Internal } // namespace Internal
} // namespace QmlDesigner } // namespace QmlDesigner