diff options
author | Tim Jenssen <tim.jenssen@qt.io> | 2020-06-26 15:13:07 +0200 |
---|---|---|
committer | Tim Jenssen <tim.jenssen@qt.io> | 2020-06-26 16:51:22 +0200 |
commit | b8cd87dea027f54957373a10c77a506ec2509b10 (patch) | |
tree | ab7b00b4be9a46c1a0c89afaab7016444a257633 /src/plugins/qmldesigner/designercore | |
parent | 97ac63b4012ab55def11a58ee6bd7b6878dc37e1 (diff) | |
parent | 5a06305ffe054287f55cba4c5d860ea73fccf684 (diff) |
Merge remote-tracking branch 'origin/qds-1.59' into 4.13
Conflicts:
src/plugins/clangformat/clangformatplugin.cpp
src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp
src/plugins/qmldesigner/qmldesigner.qbs
Change-Id: Ie4a0beeb9fd32ac9683f4e8769988a9c3f3e369a
Diffstat (limited to 'src/plugins/qmldesigner/designercore')
7 files changed, 85 insertions, 60 deletions
diff --git a/src/plugins/qmldesigner/designercore/include/qmlitemnode.h b/src/plugins/qmldesigner/designercore/include/qmlitemnode.h index d779cc15bf..f37bae869e 100644 --- a/src/plugins/qmldesigner/designercore/include/qmlitemnode.h +++ b/src/plugins/qmldesigner/designercore/include/qmlitemnode.h @@ -157,7 +157,6 @@ public: void assignTargetFlowItem(const QmlFlowTargetNode &flowItem); QmlFlowItemNode flowItemParent() const; void destroyTarget(); - ModelNode decisionNodeForTransition(const ModelNode &transition) const; }; class QMLDESIGNERCORE_EXPORT QmlFlowItemNode : public QmlItemNode @@ -168,6 +167,8 @@ public: static bool isValidQmlFlowItemNode(const ModelNode &modelNode); QList<QmlFlowActionAreaNode> flowActionAreas() const; QmlFlowViewNode flowView() const; + + static ModelNode decisionNodeForTransition(const ModelNode &transition); }; class QMLDESIGNERCORE_EXPORT QmlFlowViewNode : public QmlItemNode diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp b/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp index 32cd4e6602..2e3b5be32b 100644 --- a/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp +++ b/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp @@ -69,6 +69,7 @@ #include "variantproperty.h" #include "view3dactioncommand.h" +#include <designersettings.h> #include <metainfo.h> #include <model.h> #include <modelnode.h> @@ -82,6 +83,10 @@ #include <coreplugin/documentmanager.h> #endif +#include <projectexplorer/target.h> + +#include <qmlprojectmanager/qmlmultilanguageaspect.h> + #include <utils/algorithm.h> #include <utils/qtcassert.h> @@ -540,7 +545,14 @@ void NodeInstanceView::auxiliaryDataChanged(const ModelNode &node, } } } else if (node.isRootNode() && name == "language@Internal") { - nodeInstanceServer()->changeLanguage({value.toString()}); + const QString languageAsString = value.toString(); + if (m_currentTarget) { + if (auto rc = m_currentTarget->activeRunConfiguration()) { + if (auto multiLanguageAspect = rc->aspect<QmlProjectManager::QmlMultiLanguageAspect>()) + multiLanguageAspect->setLastUsedLanguage(languageAsString); + } + } + nodeInstanceServer()->changeLanguage({languageAsString}); } else if (node.isRootNode() && name == "previewSize@Internal") { nodeInstanceServer()->changePreviewImageSize(value.toSize()); } @@ -981,17 +993,27 @@ CreateSceneCommand NodeInstanceView::createCreateSceneCommand() } } + QString lastUsedLanguage; + if (m_currentTarget) { + if (auto rc = m_currentTarget->activeRunConfiguration()) { + if (auto multiLanguageAspect = rc->aspect<QmlProjectManager::QmlMultiLanguageAspect>()) + lastUsedLanguage = multiLanguageAspect->lastUsedLanguage(); + } + } - return CreateSceneCommand(instanceContainerList, - reparentContainerList, - idContainerList, - valueContainerList, - bindingContainerList, - auxiliaryContainerVector, - importVector, - mockupTypesVector, - model()->fileUrl(), - m_edit3DToolStates[model()->fileUrl()]); + return CreateSceneCommand( + instanceContainerList, + reparentContainerList, + idContainerList, + valueContainerList, + bindingContainerList, + auxiliaryContainerVector, + importVector, + mockupTypesVector, + model()->fileUrl(), + m_edit3DToolStates[model()->fileUrl()], + lastUsedLanguage + ); } ClearSceneCommand NodeInstanceView::createClearSceneCommand() const diff --git a/src/plugins/qmldesigner/designercore/instances/puppetcreator.cpp b/src/plugins/qmldesigner/designercore/instances/puppetcreator.cpp index cfdc030c86..fcd5e88404 100644 --- a/src/plugins/qmldesigner/designercore/instances/puppetcreator.cpp +++ b/src/plugins/qmldesigner/designercore/instances/puppetcreator.cpp @@ -36,17 +36,20 @@ #include <app/app_version.h> +#include <coreplugin/messagebox.h> +#include <coreplugin/icore.h> + #include <projectexplorer/kit.h> #include <projectexplorer/project.h> #include <projectexplorer/projectexplorerconstants.h> #include <projectexplorer/target.h> #include <projectexplorer/toolchain.h> -#include <coreplugin/messagebox.h> -#include <coreplugin/icore.h> + +#include <qmlprojectmanager/qmlmultilanguageaspect.h> + #include <qtsupport/baseqtversion.h> #include <qtsupport/qtkitinformation.h> #include <qtsupport/qtsupportconstants.h> -#include <coreplugin/icore.h> #include <utils/algorithm.h> #include <utils/environment.h> @@ -164,18 +167,6 @@ QString PuppetCreator::getStyleConfigFileName() const return QString(); } -QString PuppetCreator::getMultilanguageDatabaseFilePath() const -{ -#ifndef QMLDESIGNER_TEST - if (m_target) { - auto filePath = m_target->project()->projectDirectory().pathAppended("/multilanguage-experimental-v1.db"); - if (filePath.exists()) - return filePath.toString(); - } -#endif - return {}; -} - PuppetCreator::PuppetCreator(ProjectExplorer::Target *target, const Model *model) : m_target(target) @@ -496,11 +487,6 @@ QProcessEnvironment PuppetCreator::processEnvironment() const environment.set("QMLDESIGNER_RC_PATHS", m_qrcMapping); } - const QString multilanguageDatabaseFilePath = getMultilanguageDatabaseFilePath(); - - if (!multilanguageDatabaseFilePath.isEmpty()) - environment.set("QT_MULTILANGUAGE_DATABASE", multilanguageDatabaseFilePath); - #ifndef QMLDESIGNER_TEST auto view = QmlDesignerPlugin::instance()->viewManager().nodeInstanceView(); view->emitCustomNotification("PuppetStatus", {}, {QVariant(m_qrcMapping)}); @@ -527,6 +513,13 @@ QProcessEnvironment PuppetCreator::processEnvironment() const importPaths.append(designerImports); customFileSelectors = m_target->additionalData("CustomFileSelectorsData").toStringList(); + + if (auto *rc = m_target->activeRunConfiguration()) { + if (auto multiLanguageAspect = rc->aspect<QmlProjectManager::QmlMultiLanguageAspect>()) { + if (!multiLanguageAspect->databaseFilePath().isEmpty()) + environment.set("QT_MULTILANGUAGE_DATABASE", multiLanguageAspect->databaseFilePath().toString()); + } + } } customFileSelectors.append("DesignMode"); diff --git a/src/plugins/qmldesigner/designercore/instances/puppetcreator.h b/src/plugins/qmldesigner/designercore/instances/puppetcreator.h index f8033fd3e1..bafea8fa3e 100644 --- a/src/plugins/qmldesigner/designercore/instances/puppetcreator.h +++ b/src/plugins/qmldesigner/designercore/instances/puppetcreator.h @@ -102,7 +102,6 @@ protected: bool useOnlyFallbackPuppet() const; QString getStyleConfigFileName() const; - QString getMultilanguageDatabaseFilePath() const; private: mutable QString m_compileLog; diff --git a/src/plugins/qmldesigner/designercore/model/modeltotextmerger.cpp b/src/plugins/qmldesigner/designercore/model/modeltotextmerger.cpp index 18bea1990c..b35a54a3fe 100644 --- a/src/plugins/qmldesigner/designercore/model/modeltotextmerger.cpp +++ b/src/plugins/qmldesigner/designercore/model/modeltotextmerger.cpp @@ -388,6 +388,8 @@ PropertyNameList ModelToTextMerger::propertyOrder() PropertyName("wrapMode"), PropertyName(), PropertyName("states"), + PropertyName("to"), + PropertyName("from"), PropertyName("transitions") }; diff --git a/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp b/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp index 959f417c4c..fe42f2b7e0 100644 --- a/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp +++ b/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp @@ -614,32 +614,6 @@ void QmlFlowActionAreaNode::destroyTarget() } } -ModelNode QmlFlowActionAreaNode::decisionNodeForTransition(const ModelNode &transition) const -{ - ModelNode target = targetTransition(); - - if (target.isValid() && target.hasMetaInfo() && QmlVisualNode::isFlowTransition(target)) { - - ModelNode finalTarget = target.bindingProperty("to").resolveToModelNode(); - - if (finalTarget.isValid() && finalTarget.hasMetaInfo() && QmlVisualNode::isFlowDecision(finalTarget)) { - if (finalTarget.hasBindingProperty("targets") - && finalTarget.bindingProperty("targets").resolveToModelNodeList().contains(transition)) - return finalTarget; - } - QmlFlowViewNode flowView(view()->rootModelNode()); - if (flowView.isValid()) { - for (const ModelNode &target : flowView.decicions()) { - if (target.hasBindingProperty("targets") - && target.bindingProperty("targets").resolveToModelNodeList().contains(transition)) - return target; - } - } - } - - return {}; -} - bool QmlFlowViewNode::isValid() const { return isValidQmlFlowViewNode(modelNode()); @@ -781,12 +755,38 @@ QmlFlowViewNode QmlFlowTargetNode::flowView() const return view()->rootModelNode(); } +ModelNode QmlFlowItemNode::decisionNodeForTransition(const ModelNode &transition) +{ + ModelNode target = transition; + + if (target.isValid() && target.hasMetaInfo() && QmlVisualNode::isFlowTransition(target)) { + + ModelNode finalTarget = target.bindingProperty("to").resolveToModelNode(); + + if (finalTarget.isValid() && finalTarget.hasMetaInfo() && QmlVisualNode::isFlowDecision(finalTarget)) { + if (finalTarget.hasBindingProperty("targets") + && finalTarget.bindingProperty("targets").resolveToModelNodeList().contains(transition)) + return finalTarget; + } + QmlFlowViewNode flowView(transition.view()->rootModelNode()); + if (flowView.isValid()) { + for (const ModelNode target : flowView.decicions()) { + if (target.hasBindingProperty("targets") + && target.bindingProperty("targets").resolveToModelNodeList().contains(transition)) + return target; + } + } + } + + return {}; +} + ModelNode QmlFlowTargetNode::findSourceForDecisionNode() const { if (!isFlowDecision()) return {}; - for (const ModelNode &transition : flowView().transitionsForTarget(modelNode())) { + for (const ModelNode transition : flowView().transitionsForTarget(modelNode())) { if (transition.hasBindingProperty("from")) { const ModelNode source = transition.bindingProperty("from").resolveToModelNode(); if (source.isValid()) { diff --git a/src/plugins/qmldesigner/designercore/model/rewriterview.cpp b/src/plugins/qmldesigner/designercore/model/rewriterview.cpp index f2f7f02e64..5d0cd5da35 100644 --- a/src/plugins/qmldesigner/designercore/model/rewriterview.cpp +++ b/src/plugins/qmldesigner/designercore/model/rewriterview.cpp @@ -53,6 +53,8 @@ #include <utils/changeset.h> #include <utils/qtcassert.h> +#include <QRegExp> + #include <utility> #include <vector> @@ -539,6 +541,9 @@ QString RewriterView::auxiliaryDataAsQML() const QTC_ASSERT(!m_canonicalIntModelNode.isEmpty(), return {}); int columnCount = 0; + + const QRegExp safeName("[a-z][a-zA-Z0-9]*"); + for (const auto &node : allModelNodes()) { QHash<PropertyName, QVariant> data = node.auxiliaryData(); if (!data.isEmpty()) { @@ -571,6 +576,9 @@ QString RewriterView::auxiliaryDataAsQML() const if (idIsQmlKeyWord(key)) continue; + if (!safeName.exactMatch(key)) + continue; + const QVariant value = data.value(key.toUtf8()); QString strValue = value.toString(); |