diff --git a/src/plugins/qmldesigner/components/integration/designdocument.cpp b/src/plugins/qmldesigner/components/integration/designdocument.cpp index a8dc05650bf..2d32dc358f9 100644 --- a/src/plugins/qmldesigner/components/integration/designdocument.cpp +++ b/src/plugins/qmldesigner/components/integration/designdocument.cpp @@ -608,6 +608,7 @@ void DesignDocument::setEditor(Core::IEditor *editor) this, &DesignDocument::updateFileName); updateActiveQtVersion(); + updateCurrentProject(); } Core::IEditor *DesignDocument::editor() const @@ -666,6 +667,12 @@ static inline Kit *getActiveKit(DesignDocument *designDocument) QObject::connect(currentProject, &Project::activeTargetChanged, designDocument, &DesignDocument::updateActiveQtVersion, Qt::UniqueConnection); + QObject::connect(ProjectTree::instance(), &ProjectTree::currentProjectChanged, + designDocument, &DesignDocument::updateCurrentProject, Qt::UniqueConnection); + + QObject::connect(currentProject, &Project::activeTargetChanged, + designDocument, &DesignDocument::updateCurrentProject, Qt::UniqueConnection); + Target *target = currentProject->activeTarget(); @@ -686,6 +693,12 @@ void DesignDocument::updateActiveQtVersion() viewManager().setNodeInstanceViewKit(m_currentKit); } +void DesignDocument::updateCurrentProject() +{ + ProjectExplorer::Project *currentProject = ProjectExplorer::SessionManager::projectForFile(fileName()); + viewManager().setNodeInstanceViewProject(currentProject); +} + QString DesignDocument::contextHelpId() const { if (view()) diff --git a/src/plugins/qmldesigner/components/integration/designdocument.h b/src/plugins/qmldesigner/components/integration/designdocument.h index e7aff639533..bb86eb8a745 100644 --- a/src/plugins/qmldesigner/components/integration/designdocument.h +++ b/src/plugins/qmldesigner/components/integration/designdocument.h @@ -115,6 +115,7 @@ public slots: void undo(); void redo(); void updateActiveQtVersion(); + void updateCurrentProject(); void changeToSubComponent(const ModelNode &componentNode); void changeToMaster(); diff --git a/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h b/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h index 4d4ffaa6290..7181df2845c 100644 --- a/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h +++ b/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h @@ -48,6 +48,7 @@ QT_END_NAMESPACE namespace ProjectExplorer { class Kit; +class Project; } namespace QmlDesigner { @@ -127,6 +128,7 @@ public: QImage statePreviewImage(const ModelNode &stateNode) const; void setKit(ProjectExplorer::Kit *kit); + void setProject(ProjectExplorer::Project *project); void sendToken(const QString &token, int number, const QVector &nodeVector); @@ -199,7 +201,8 @@ private: //variables QImage m_baseStatePreviewImage; QTime m_lastCrashTime; NodeInstanceServerInterface::RunModus m_runModus; - ProjectExplorer::Kit *m_currentKit; + ProjectExplorer::Kit *m_currentKit = nullptr; + ProjectExplorer::Project *m_currentProject = nullptr; int m_restartProcessTimerId; }; diff --git a/src/plugins/qmldesigner/designercore/include/viewmanager.h b/src/plugins/qmldesigner/designercore/include/viewmanager.h index f6a594f54b8..3304e7e5a93 100644 --- a/src/plugins/qmldesigner/designercore/include/viewmanager.h +++ b/src/plugins/qmldesigner/designercore/include/viewmanager.h @@ -31,6 +31,7 @@ namespace ProjectExplorer { class Kit; +class Project; } namespace QmlDesigner { @@ -63,6 +64,7 @@ public: void setComponentNode(const ModelNode &componentNode); void setComponentViewToMaster(); void setNodeInstanceViewKit(ProjectExplorer::Kit *kit); + void setNodeInstanceViewProject(ProjectExplorer::Project *project); void resetPropertyEditorView(); diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.cpp b/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.cpp index a2e1c8e4171..819f39e8240 100644 --- a/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.cpp +++ b/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.cpp @@ -96,7 +96,10 @@ static void showCannotConnectToPuppetWarningAndSwitchToEditMode() } -NodeInstanceServerProxy::NodeInstanceServerProxy(NodeInstanceView *nodeInstanceView, RunModus runModus, ProjectExplorer::Kit *kit) +NodeInstanceServerProxy::NodeInstanceServerProxy(NodeInstanceView *nodeInstanceView, + RunModus runModus, + ProjectExplorer::Kit *kit, + ProjectExplorer::Project *project) : NodeInstanceServerInterface(nodeInstanceView), m_localServer(new QLocalServer(this)), m_nodeInstanceView(nodeInstanceView), @@ -114,7 +117,7 @@ NodeInstanceServerProxy::NodeInstanceServerProxy(NodeInstanceView *nodeInstanceV m_localServer->listen(socketToken); m_localServer->setMaxPendingConnections(3); - PuppetCreator puppetCreator(kit, QString(), nodeInstanceView->model()); + PuppetCreator puppetCreator(kit, project, QString(), nodeInstanceView->model()); puppetCreator.setQrcMappingString(qrcMappingString()); puppetCreator.createPuppetExecutableIfMissing(); diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.h b/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.h index 1b770749a80..009c4b27630 100644 --- a/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.h +++ b/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.h @@ -40,6 +40,7 @@ QT_END_NAMESPACE namespace ProjectExplorer { class Kit; +class Project; } namespace QmlDesigner { @@ -59,7 +60,10 @@ public: ThirdPuppetStream, }; - explicit NodeInstanceServerProxy(NodeInstanceView *nodeInstanceView, RunModus runModus = NormalModus, ProjectExplorer::Kit *kit = 0); + explicit NodeInstanceServerProxy(NodeInstanceView *nodeInstanceView, + RunModus runModus, + ProjectExplorer::Kit *kit, + ProjectExplorer::Project *project); ~NodeInstanceServerProxy(); void createInstances(const CreateInstancesCommand &command); void changeFileUrl(const ChangeFileUrlCommand &command); diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp b/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp index 1f5de334005..00fabfe5aaa 100644 --- a/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp +++ b/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp @@ -103,7 +103,6 @@ NodeInstanceView::NodeInstanceView(QObject *parent, NodeInstanceServerInterface: : AbstractView(parent), m_baseStatePreviewImage(QSize(100, 100), QImage::Format_ARGB32), m_runModus(runModus), - m_currentKit(0), m_restartProcessTimerId(0) { m_baseStatePreviewImage.fill(0xFFFFFF); @@ -151,7 +150,7 @@ bool isSkippedNode(const ModelNode &node) void NodeInstanceView::modelAttached(Model *model) { AbstractView::modelAttached(model); - m_nodeInstanceServer = new NodeInstanceServerProxy(this, m_runModus, m_currentKit); + m_nodeInstanceServer = new NodeInstanceServerProxy(this, m_runModus, m_currentKit, m_currentProject); m_lastCrashTime.start(); connect(m_nodeInstanceServer.data(), SIGNAL(processCrashed()), this, SLOT(handleChrash())); @@ -203,7 +202,7 @@ void NodeInstanceView::restartProcess() if (model()) { delete nodeInstanceServer(); - m_nodeInstanceServer = new NodeInstanceServerProxy(this, m_runModus, m_currentKit); + m_nodeInstanceServer = new NodeInstanceServerProxy(this, m_runModus, m_currentKit, m_currentProject); connect(m_nodeInstanceServer.data(), SIGNAL(processCrashed()), this, SLOT(handleChrash())); if (!isSkippedRootNode(rootModelNode())) @@ -1133,6 +1132,14 @@ void NodeInstanceView::setKit(ProjectExplorer::Kit *newKit) } } +void NodeInstanceView::setProject(ProjectExplorer::Project *project) +{ + if (m_currentProject != project) { + m_currentProject = project; + restartProcess(); + } +} + void NodeInstanceView::statePreviewImagesChanged(const StatePreviewImageChangedCommand &command) { if (!model()) diff --git a/src/plugins/qmldesigner/designercore/instances/puppetcreator.cpp b/src/plugins/qmldesigner/designercore/instances/puppetcreator.cpp index 5f4d23883a6..e927c49f054 100644 --- a/src/plugins/qmldesigner/designercore/instances/puppetcreator.cpp +++ b/src/plugins/qmldesigner/designercore/instances/puppetcreator.cpp @@ -34,6 +34,7 @@ #include +#include #include #include #include @@ -121,11 +122,16 @@ bool PuppetCreator::useOnlyFallbackPuppet() const #endif } -PuppetCreator::PuppetCreator(ProjectExplorer::Kit *kit, const QString &qtCreatorVersion, const Model *model) +PuppetCreator::PuppetCreator(ProjectExplorer::Kit *kit, + ProjectExplorer::Project *project, + const QString &qtCreatorVersion, + const Model *model) + : m_qtCreatorVersion(qtCreatorVersion) - ,m_kit(kit) - ,m_availablePuppetType(FallbackPuppet) - ,m_model(model) + ,m_kit(kit) + ,m_availablePuppetType(FallbackPuppet) + ,m_model(model) + ,m_currentProject(project) #ifndef QMLDESIGNER_TEST ,m_designerSettings(QmlDesignerPlugin::instance()->settings()) #endif @@ -141,7 +147,11 @@ void PuppetCreator::createPuppetExecutableIfMissing() createQml2PuppetExecutableIfMissing(); } -QProcess *PuppetCreator::createPuppetProcess(const QString &puppetMode, const QString &socketToken, QObject *handlerObject, const char *outputSlot, const char *finishSlot) const +QProcess *PuppetCreator::createPuppetProcess(const QString &puppetMode, + const QString &socketToken, + QObject *handlerObject, + const char *outputSlot, + const char *finishSlot) const { return puppetProcess(qml2PuppetPath(m_availablePuppetType), qmlPuppetDirectory(m_availablePuppetType), @@ -367,7 +377,7 @@ QProcessEnvironment PuppetCreator::processEnvironment() const #else const QString controlsStyle; #endif - if (!controlsStyle.isEmpty()) { + if (!controlsStyle.isEmpty() && controlsStyle != "Default") { environment.set(QLatin1String("QT_QUICK_CONTROLS_STYLE"), controlsStyle); environment.set(QLatin1String("QT_LABS_CONTROLS_STYLE"), controlsStyle); } @@ -388,6 +398,14 @@ QProcessEnvironment PuppetCreator::processEnvironment() const qCInfo(puppetStart) << "Puppet import paths:" << importPaths; qCInfo(puppetStart) << "Puppet environment:" << environment.toStringList(); + if (m_currentProject) { + for (const QString &fileName : m_currentProject->files(ProjectExplorer::Project::SourceFiles)) { + QFileInfo fileInfo(fileName); + if (fileInfo.fileName() == "qtquickcontrols2.conf") + environment.appendOrSet("QT_QUICK_CONTROLS_CONF", fileName); + } + } + return environment.toProcessEnvironment(); } diff --git a/src/plugins/qmldesigner/designercore/instances/puppetcreator.h b/src/plugins/qmldesigner/designercore/instances/puppetcreator.h index e4108d74c11..8d6eb53fd98 100644 --- a/src/plugins/qmldesigner/designercore/instances/puppetcreator.h +++ b/src/plugins/qmldesigner/designercore/instances/puppetcreator.h @@ -34,6 +34,7 @@ namespace ProjectExplorer { class Kit; +class Project; } namespace QmlDesigner { @@ -49,7 +50,11 @@ public: UserSpacePuppet }; - PuppetCreator(ProjectExplorer::Kit *kit, const QString &qtCreatorVersion, const Model *model); + PuppetCreator(ProjectExplorer::Kit *kit, + ProjectExplorer::Project *project, + const QString &qtCreatorVersion, + const Model *model); + ~PuppetCreator(); void createPuppetExecutableIfMissing(); @@ -118,6 +123,7 @@ private: const DesignerSettings m_designerSettings; #endif QString m_qrcMapping; + ProjectExplorer::Project *m_currentProject = nullptr; }; } // namespace QmlDesigner diff --git a/src/plugins/qmldesigner/designercore/model/viewmanager.cpp b/src/plugins/qmldesigner/designercore/model/viewmanager.cpp index 0478f8a663e..cdf44e06064 100644 --- a/src/plugins/qmldesigner/designercore/model/viewmanager.cpp +++ b/src/plugins/qmldesigner/designercore/model/viewmanager.cpp @@ -226,6 +226,11 @@ void ViewManager::setNodeInstanceViewKit(ProjectExplorer::Kit *kit) d->nodeInstanceView.setKit(kit); } +void QmlDesigner::ViewManager::setNodeInstanceViewProject(ProjectExplorer::Project *project) +{ + d->nodeInstanceView.setProject(project); +} + QList ViewManager::widgetInfos() { QList widgetInfoList; diff --git a/src/plugins/qmldesigner/qmldesignerplugin.cpp b/src/plugins/qmldesigner/qmldesignerplugin.cpp index 60fd2b77ff7..1dd4b88df3a 100644 --- a/src/plugins/qmldesigner/qmldesignerplugin.cpp +++ b/src/plugins/qmldesigner/qmldesignerplugin.cpp @@ -419,6 +419,7 @@ void QmlDesignerPlugin::activateAutoSynchronization() currentDesignDocument()->loadDocument(currentDesignDocument()->plainTextEdit()); currentDesignDocument()->updateActiveQtVersion(); + currentDesignDocument()->updateCurrentProject(); currentDesignDocument()->attachRewriterToModel(); resetModelSelection();