From 6ae064619f4f3f6131493e2af107696a6d46c170 Mon Sep 17 00:00:00 2001 From: Vikas Pachdha Date: Wed, 14 Dec 2022 14:09:15 +0100 Subject: [PATCH] Add an option to style merge from string data Task-number: QDS-8601 Change-Id: Icb56e5bc26c6cc3711c304641cce3cbbd6d7c8b2 Reviewed-by: Qt CI Bot Reviewed-by: Reviewed-by: Thomas Hartmann --- .../componentcore/modelnodeoperations.cpp | 7 +++-- .../designercore/include/stylesheetmerger.h | 9 +++++- .../designercore/model/stylesheetmerger.cpp | 31 +++++++++++++------ 3 files changed, 34 insertions(+), 13 deletions(-) diff --git a/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp b/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp index 711b84c3798..5dd2b1dd5d6 100644 --- a/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp +++ b/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp @@ -1525,8 +1525,11 @@ void mergeWithTemplate(const SelectionContext &selectionContext, ExternalDepende const QString templateFile = getTemplateDialog(projectPath); - if (QFileInfo::exists(templateFile)) - StylesheetMerger::styleMerge(selectionContext.view()->model(), templateFile, externalDependencies); + if (QFileInfo::exists(templateFile)) { + StylesheetMerger::styleMerge(Utils::FilePath::fromString(templateFile), + selectionContext.view()->model(), + externalDependencies); + } } void removeGroup(const SelectionContext &selectionContext) diff --git a/src/plugins/qmldesigner/designercore/include/stylesheetmerger.h b/src/plugins/qmldesigner/designercore/include/stylesheetmerger.h index f4e09cf6f5b..036cb9df659 100644 --- a/src/plugins/qmldesigner/designercore/include/stylesheetmerger.h +++ b/src/plugins/qmldesigner/designercore/include/stylesheetmerger.h @@ -5,6 +5,8 @@ #include "qmldesignercorelib_global.h" +#include "utils/filepath.h" + #include #include #include @@ -26,7 +28,12 @@ class QMLDESIGNERCORE_EXPORT StylesheetMerger public: StylesheetMerger(AbstractView*, AbstractView*); void merge(); - static void styleMerge(Model *model, const QString &templateFile, class ExternalDependenciesInterface &externalDependencies); + static void styleMerge(const Utils::FilePath &templateFile, + Model *model, + class ExternalDependenciesInterface &ed); + static void styleMerge(const QString &qmlTemplateString, + Model *model, + class ExternalDependenciesInterface &externalDependencies); private: void preprocessStyleSheet(); diff --git a/src/plugins/qmldesigner/designercore/model/stylesheetmerger.cpp b/src/plugins/qmldesigner/designercore/model/stylesheetmerger.cpp index dd377cc0180..6df3e58a1d1 100644 --- a/src/plugins/qmldesigner/designercore/model/stylesheetmerger.cpp +++ b/src/plugins/qmldesigner/designercore/model/stylesheetmerger.cpp @@ -515,11 +515,24 @@ void StylesheetMerger::merge() } } -void StylesheetMerger::styleMerge(Model *model, const QString &templateFile, ExternalDependenciesInterface &externalDependencies) +void StylesheetMerger::styleMerge(const Utils::FilePath &templateFile, + Model *model, + ExternalDependenciesInterface &externalDependencies) +{ + Utils::FileReader reader; + + QTC_ASSERT(reader.fetch(templateFile), return ); + const QString qmlTemplateString = QString::fromUtf8(reader.data()); + StylesheetMerger::styleMerge(qmlTemplateString, model, externalDependencies); +} + +void StylesheetMerger::styleMerge(const QString &qmlTemplateString, + Model *model, + ExternalDependenciesInterface &externalDependencies) { Model *parentModel = model; - QTC_ASSERT(parentModel, return); + QTC_ASSERT(parentModel, return ); auto templateModel(Model::create("QtQuick.Item", 2, 1, parentModel)); Q_ASSERT(templateModel.get()); @@ -527,10 +540,6 @@ void StylesheetMerger::styleMerge(Model *model, const QString &templateFile, Ext templateModel->setFileUrl(parentModel->fileUrl()); QPlainTextEdit textEditTemplate; - Utils::FileReader reader; - - QTC_ASSERT(reader.fetch(Utils::FilePath::fromString(templateFile)), return); - QString qmlTemplateString = QString::fromUtf8(reader.data()); QString imports; for (const Import &import : parentModel->imports()) { @@ -541,13 +550,14 @@ void StylesheetMerger::styleMerge(Model *model, const QString &templateFile, Ext textEditTemplate.setPlainText(imports + qmlTemplateString); NotIndentingTextEditModifier textModifierTemplate(&textEditTemplate); - QScopedPointer templateRewriterView(new RewriterView(externalDependencies, RewriterView::Amend)); + QScopedPointer templateRewriterView( + new RewriterView(externalDependencies, RewriterView::Amend)); templateRewriterView->setTextModifier(&textModifierTemplate); templateModel->attachView(templateRewriterView.data()); templateRewriterView->setCheckSemanticErrors(false); ModelNode templateRootNode = templateRewriterView->rootModelNode(); - QTC_ASSERT(templateRootNode.isValid(), return); + QTC_ASSERT(templateRootNode.isValid(), return ); auto styleModel(Model::create("QtQuick.Item", 2, 1, parentModel)); Q_ASSERT(styleModel.get()); @@ -556,11 +566,12 @@ void StylesheetMerger::styleMerge(Model *model, const QString &templateFile, Ext QPlainTextEdit textEditStyle; RewriterView *parentRewriterView = parentModel->rewriterView(); - QTC_ASSERT(parentRewriterView, return); + QTC_ASSERT(parentRewriterView, return ); textEditStyle.setPlainText(parentRewriterView->textModifierContent()); NotIndentingTextEditModifier textModifierStyle(&textEditStyle); - QScopedPointer styleRewriterView(new RewriterView(externalDependencies, RewriterView::Amend)); + QScopedPointer styleRewriterView( + new RewriterView(externalDependencies, RewriterView::Amend)); styleRewriterView->setTextModifier(&textModifierStyle); styleModel->attachView(styleRewriterView.data());