diff options
author | Thomas Hartmann <thomas.hartmann@qt.io> | 2022-09-28 17:51:01 +0200 |
---|---|---|
committer | Thomas Hartmann <thomas.hartmann@qt.io> | 2022-10-19 09:45:41 +0000 |
commit | 1523129d50c5c7b7fc9c8b142a34f60f01a99f67 (patch) | |
tree | 5fc5d36b64b549999aae6281cdca76edb2c4f820 | |
parent | ea13277c7a6522183c01b2569b181d69f068bc3a (diff) | |
download | qt-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>
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(); + } +} } |