summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Hartmann <thomas.hartmann@qt.io>2022-09-28 17:51:01 +0200
committerThomas Hartmann <thomas.hartmann@qt.io>2022-10-19 09:45:41 +0000
commit1523129d50c5c7b7fc9c8b142a34f60f01a99f67 (patch)
tree5fc5d36b64b549999aae6281cdca76edb2c4f820
parentea13277c7a6522183c01b2569b181d69f068bc3a (diff)
downloadqt-creator-1523129d50c5c7b7fc9c8b142a34f60f01a99f67.tar.gz
QmlDesigner: Add helper function to StylesheetMerger
Change-Id: If3857af4a3541cb1b77a87d168f33571954dd5e4 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Vikas Pachdha <vikas.pachdha@qt.io> Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
-rw-r--r--src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp64
-rw-r--r--src/plugins/qmldesigner/designercore/include/stylesheetmerger.h2
-rw-r--r--src/plugins/qmldesigner/designercore/model/stylesheetmerger.cpp71
3 files changed, 74 insertions, 63 deletions
diff --git a/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp b/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp
index 92f903aa0a..5724d5d100 100644
--- a/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp
+++ b/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp
@@ -1505,68 +1505,6 @@ QString getTemplateDialog(const Utils::FilePath &projectPath)
return result;
}
-void styleMerge(const SelectionContext &selectionContext, const QString &templateFile)
-{
- Model *parentModel = selectionContext.view()->model();
-
- QTC_ASSERT(parentModel, return);
-
- QScopedPointer<Model> templateModel(Model::create("QtQuick.Item", 2, 1, parentModel));
- Q_ASSERT(templateModel.data());
-
- templateModel->setFileUrl(selectionContext.view()->model()->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())
- imports += QStringLiteral("import ") + import.toString(true) + QLatin1Char(';') + QLatin1Char('\n');
-
- textEditTemplate.setPlainText(imports + qmlTemplateString);
- NotIndentingTextEditModifier textModifierTemplate(&textEditTemplate);
-
- QScopedPointer<RewriterView> templateRewriterView(new RewriterView(RewriterView::Amend, nullptr));
- templateRewriterView->setTextModifier(&textModifierTemplate);
- templateModel->attachView(templateRewriterView.data());
- templateRewriterView->setCheckSemanticErrors(false);
-
- ModelNode templateRootNode = templateRewriterView->rootModelNode();
- QTC_ASSERT(templateRootNode.isValid(), return);
-
- QScopedPointer<Model> styleModel(Model::create("QtQuick.Item", 2, 1, parentModel));
- Q_ASSERT(styleModel.data());
-
- styleModel->setFileUrl(selectionContext.view()->model()->fileUrl());
-
- QPlainTextEdit textEditStyle;
- RewriterView *parentRewriterView = selectionContext.view()->model()->rewriterView();
- QTC_ASSERT(parentRewriterView, return);
- textEditStyle.setPlainText(parentRewriterView->textModifierContent());
- NotIndentingTextEditModifier textModifierStyle(&textEditStyle);
-
- QScopedPointer<RewriterView> styleRewriterView(new RewriterView(RewriterView::Amend, nullptr));
- styleRewriterView->setTextModifier(&textModifierStyle);
- styleModel->attachView(styleRewriterView.data());
-
- StylesheetMerger merger(templateRewriterView.data(), styleRewriterView.data());
-
- try {
- merger.merge();
- } catch (Exception &e) {
- e.showException();
- }
-
- try {
- parentRewriterView->textModifier()->textDocument()->setPlainText(templateRewriterView->textModifierContent());
- } catch (Exception &e) {
- e.showException();
- }
-}
-
void mergeWithTemplate(const SelectionContext &selectionContext)
{
const Utils::FilePath projectPath = Utils::FilePath::fromString(baseDirectory(selectionContext.view()->model()->fileUrl()));
@@ -1574,7 +1512,7 @@ void mergeWithTemplate(const SelectionContext &selectionContext)
const QString templateFile = getTemplateDialog(projectPath);
if (QFileInfo::exists(templateFile))
- styleMerge(selectionContext, templateFile);
+ StylesheetMerger::styleMerge(selectionContext.view()->model(), templateFile);
}
void removeGroup(const SelectionContext &selectionContext)
diff --git a/src/plugins/qmldesigner/designercore/include/stylesheetmerger.h b/src/plugins/qmldesigner/designercore/include/stylesheetmerger.h
index 86f48f0677..202f54ad3b 100644
--- a/src/plugins/qmldesigner/designercore/include/stylesheetmerger.h
+++ b/src/plugins/qmldesigner/designercore/include/stylesheetmerger.h
@@ -48,6 +48,8 @@ class QMLDESIGNERCORE_EXPORT StylesheetMerger
public:
StylesheetMerger(AbstractView*, AbstractView*);
void merge();
+ static void styleMerge(Model *model, const QString &templateFile);
+
private:
void preprocessStyleSheet();
bool idExistsInBothModels(const QString& id);
diff --git a/src/plugins/qmldesigner/designercore/model/stylesheetmerger.cpp b/src/plugins/qmldesigner/designercore/model/stylesheetmerger.cpp
index e12912811f..655a8a0938 100644
--- a/src/plugins/qmldesigner/designercore/model/stylesheetmerger.cpp
+++ b/src/plugins/qmldesigner/designercore/model/stylesheetmerger.cpp
@@ -34,8 +34,14 @@
#include <nodelistproperty.h>
#include <nodemetainfo.h>
#include <nodeproperty.h>
+#include <plaintexteditmodifier.h>
+#include <rewriterview.h>
#include <variantproperty.h>
+#include <utils/fileutils.h>
+#include <utils/qtcassert.h>
+
+#include <QPlainTextEdit>
#include <QQueue>
#include <QRegularExpression>
@@ -527,4 +533,69 @@ void StylesheetMerger::merge()
}
}
}
+
+void StylesheetMerger::styleMerge(Model *model, const QString &templateFile)
+{
+ Model *parentModel = model;
+
+ QTC_ASSERT(parentModel, return );
+
+ QScopedPointer<Model> templateModel(Model::create("QtQuick.Item", 2, 1, parentModel));
+ Q_ASSERT(templateModel.data());
+
+ 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())
+ imports += QStringLiteral("import ") + import.toString(true) + QLatin1Char(';')
+ + QLatin1Char('\n');
+
+ textEditTemplate.setPlainText(imports + qmlTemplateString);
+ NotIndentingTextEditModifier textModifierTemplate(&textEditTemplate);
+
+ QScopedPointer<RewriterView> templateRewriterView(
+ new RewriterView(RewriterView::Amend, nullptr));
+ templateRewriterView->setTextModifier(&textModifierTemplate);
+ templateModel->attachView(templateRewriterView.data());
+ templateRewriterView->setCheckSemanticErrors(false);
+
+ ModelNode templateRootNode = templateRewriterView->rootModelNode();
+ QTC_ASSERT(templateRootNode.isValid(), return );
+
+ QScopedPointer<Model> styleModel(Model::create("QtQuick.Item", 2, 1, parentModel));
+ Q_ASSERT(styleModel.data());
+
+ styleModel->setFileUrl(parentModel->fileUrl());
+
+ QPlainTextEdit textEditStyle;
+ RewriterView *parentRewriterView = parentModel->rewriterView();
+ QTC_ASSERT(parentRewriterView, return );
+ textEditStyle.setPlainText(parentRewriterView->textModifierContent());
+ NotIndentingTextEditModifier textModifierStyle(&textEditStyle);
+
+ QScopedPointer<RewriterView> styleRewriterView(new RewriterView(RewriterView::Amend, nullptr));
+ styleRewriterView->setTextModifier(&textModifierStyle);
+ styleModel->attachView(styleRewriterView.data());
+
+ StylesheetMerger merger(templateRewriterView.data(), styleRewriterView.data());
+
+ try {
+ merger.merge();
+ } catch (Exception &e) {
+ e.showException();
+ }
+
+ try {
+ parentRewriterView->textModifier()->textDocument()->setPlainText(
+ templateRewriterView->textModifierContent());
+ } catch (Exception &e) {
+ e.showException();
+ }
+}
}