From 9065697572ec2815969d9e0b900b2b5fadcdb2af Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Fri, 10 Jun 2016 16:04:33 +0200 Subject: [PATCH] QmlDesigner: Support .qrc files in the qml2puppet The code model knows about .qrc files and has a mapping that we forward to the qml2puppet. Support for .qrc was broken when introducing the QmlPrivateGate. Change-Id: I22d1c1add65d0c9a914e471dbe51ef505f308494 Reviewed-by: Tim Jenssen --- .../instances/nodeinstanceserver.cpp | 1 + .../qmlprivategate/qmlprivategate.cpp | 4 ++++ .../qmlpuppet/qmlprivategate/qmlprivategate.h | 2 ++ .../qmlprivategate/qmlprivategate_56.cpp | 24 +++++++++++++++++++ 4 files changed, 31 insertions(+) diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.cpp index c3b0a6f09b..c5fb5fd1b9 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.cpp @@ -130,6 +130,7 @@ NodeInstanceServer::NodeInstanceServer(NodeInstanceClientInterface *nodeInstance connect(m_childrenChangeEventFilter.data(), &Internal::ChildrenChangeEventFilter::childrenChanged, this, &NodeInstanceServer::emitParentChanged); nodeInstanceServerInstance = this; Internal::QmlPrivateGate::registerNotifyPropertyChangeCallBack(notifyPropertyChangeCallBackPointer); + Internal::QmlPrivateGate::registerFixResourcePathsForObjectCallBack(); } NodeInstanceServer::~NodeInstanceServer() diff --git a/share/qtcreator/qml/qmlpuppet/qmlprivategate/qmlprivategate.cpp b/share/qtcreator/qml/qmlpuppet/qmlprivategate/qmlprivategate.cpp index 67d6a1287b..2af7f6cd87 100644 --- a/share/qtcreator/qml/qmlpuppet/qmlprivategate/qmlprivategate.cpp +++ b/share/qtcreator/qml/qmlpuppet/qmlprivategate/qmlprivategate.cpp @@ -790,6 +790,10 @@ ComponentCompleteDisabler::~ComponentCompleteDisabler() DesignerSupport::enableComponentComplete(); } +void registerFixResourcePathsForObjectCallBack() +{ +} + } // namespace QmlPrivateGate } // namespace Internal } // namespace QmlDesigner diff --git a/share/qtcreator/qml/qmlpuppet/qmlprivategate/qmlprivategate.h b/share/qtcreator/qml/qmlpuppet/qmlprivategate/qmlprivategate.h index bd17a68a1e..f1066b3d5b 100644 --- a/share/qtcreator/qml/qmlpuppet/qmlprivategate/qmlprivategate.h +++ b/share/qtcreator/qml/qmlpuppet/qmlprivategate/qmlprivategate.h @@ -127,6 +127,8 @@ public: void registerNotifyPropertyChangeCallBack(void (*callback)(QObject *, const PropertyName &)); + void registerFixResourcePathsForObjectCallBack(); + } // namespace QmlPrivateGate } // namespace Internal } // namespace QmlDesigner diff --git a/share/qtcreator/qml/qmlpuppet/qmlprivategate/qmlprivategate_56.cpp b/share/qtcreator/qml/qmlpuppet/qmlprivategate/qmlprivategate_56.cpp index 8edf669365..3daafd5af1 100644 --- a/share/qtcreator/qml/qmlpuppet/qmlprivategate/qmlprivategate_56.cpp +++ b/share/qtcreator/qml/qmlpuppet/qmlprivategate/qmlprivategate_56.cpp @@ -137,6 +137,25 @@ QVariant fixResourcePaths(const QVariant &value) } +void fixResourcePathsForObject(QObject *object) +{ + if (qgetenv("QMLDESIGNER_RC_PATHS").isEmpty()) + return; + + PropertyNameList propertyNameList = propertyNameListForWritableProperties(object); + + foreach (const PropertyName &propertyName, propertyNameList) { + QQmlProperty property(object, QString::fromUtf8(propertyName), QQmlEngine::contextForObject(object)); + + const QVariant value = property.read(); + const QVariant fixedValue = fixResourcePaths(value); + if (value != fixedValue) { + property.write(fixedValue); + } + } +} + + QObject *createComponent(const QUrl &componentUrl, QQmlContext *context) { return QQuickDesignerSupportItems::createComponent(componentUrl, context); @@ -396,6 +415,11 @@ ComponentCompleteDisabler::~ComponentCompleteDisabler() DesignerSupport::enableComponentComplete(); } +void registerFixResourcePathsForObjectCallBack() +{ + QQuickDesignerSupportItems::registerFixResourcePathsForObjectCallBack(&fixResourcePathsForObject); +} + } // namespace QmlPrivateGate } // namespace Internal } // namespace QmlDesigner -- GitLab