aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/qmldesigner/designercore
diff options
context:
space:
mode:
authorEike Ziller <eike.ziller@qt.io>2020-06-29 09:01:31 +0200
committerEike Ziller <eike.ziller@qt.io>2020-06-29 09:01:31 +0200
commit40a14070d38476724b35c2217370e3367d036cfa (patch)
tree28791c338325615b0871d7004fafd93904bfae16 /src/plugins/qmldesigner/designercore
parent569ad988525e29140b47d7338468bd60cac37614 (diff)
parent018e4aa19755713f1fdb628c5fc6281f35b5d6ac (diff)
Merge remote-tracking branch 'origin/4.13'
Diffstat (limited to 'src/plugins/qmldesigner/designercore')
-rw-r--r--src/plugins/qmldesigner/designercore/include/qmlitemnode.h3
-rw-r--r--src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp44
-rw-r--r--src/plugins/qmldesigner/designercore/instances/puppetcreator.cpp33
-rw-r--r--src/plugins/qmldesigner/designercore/instances/puppetcreator.h1
-rw-r--r--src/plugins/qmldesigner/designercore/model/modeltotextmerger.cpp2
-rw-r--r--src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp54
-rw-r--r--src/plugins/qmldesigner/designercore/model/rewriterview.cpp8
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();