Add an option to style merge from string data

Task-number: QDS-8601
Change-Id: Icb56e5bc26c6cc3711c304641cce3cbbd6d7c8b2
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
This commit is contained in:
Vikas Pachdha
2022-12-14 14:09:15 +01:00
parent 973f74b8a0
commit 6ae064619f
3 changed files with 34 additions and 13 deletions

View File

@@ -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)

View File

@@ -5,6 +5,8 @@
#include "qmldesignercorelib_global.h"
#include "utils/filepath.h"
#include <QString>
#include <QHash>
#include <modelnode.h>
@@ -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();

View File

@@ -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<RewriterView> templateRewriterView(new RewriterView(externalDependencies, RewriterView::Amend));
QScopedPointer<RewriterView> 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<RewriterView> styleRewriterView(new RewriterView(externalDependencies, RewriterView::Amend));
QScopedPointer<RewriterView> styleRewriterView(
new RewriterView(externalDependencies, RewriterView::Amend));
styleRewriterView->setTextModifier(&textModifierStyle);
styleModel->attachView(styleRewriterView.data());