forked from qt-creator/qt-creator
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:
@@ -1525,8 +1525,11 @@ void mergeWithTemplate(const SelectionContext &selectionContext, ExternalDepende
|
|||||||
|
|
||||||
const QString templateFile = getTemplateDialog(projectPath);
|
const QString templateFile = getTemplateDialog(projectPath);
|
||||||
|
|
||||||
if (QFileInfo::exists(templateFile))
|
if (QFileInfo::exists(templateFile)) {
|
||||||
StylesheetMerger::styleMerge(selectionContext.view()->model(), templateFile, externalDependencies);
|
StylesheetMerger::styleMerge(Utils::FilePath::fromString(templateFile),
|
||||||
|
selectionContext.view()->model(),
|
||||||
|
externalDependencies);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void removeGroup(const SelectionContext &selectionContext)
|
void removeGroup(const SelectionContext &selectionContext)
|
||||||
|
@@ -5,6 +5,8 @@
|
|||||||
|
|
||||||
#include "qmldesignercorelib_global.h"
|
#include "qmldesignercorelib_global.h"
|
||||||
|
|
||||||
|
#include "utils/filepath.h"
|
||||||
|
|
||||||
#include <QString>
|
#include <QString>
|
||||||
#include <QHash>
|
#include <QHash>
|
||||||
#include <modelnode.h>
|
#include <modelnode.h>
|
||||||
@@ -26,7 +28,12 @@ class QMLDESIGNERCORE_EXPORT StylesheetMerger
|
|||||||
public:
|
public:
|
||||||
StylesheetMerger(AbstractView*, AbstractView*);
|
StylesheetMerger(AbstractView*, AbstractView*);
|
||||||
void merge();
|
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:
|
private:
|
||||||
void preprocessStyleSheet();
|
void preprocessStyleSheet();
|
||||||
|
@@ -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;
|
Model *parentModel = model;
|
||||||
|
|
||||||
QTC_ASSERT(parentModel, return);
|
QTC_ASSERT(parentModel, return );
|
||||||
|
|
||||||
auto templateModel(Model::create("QtQuick.Item", 2, 1, parentModel));
|
auto templateModel(Model::create("QtQuick.Item", 2, 1, parentModel));
|
||||||
Q_ASSERT(templateModel.get());
|
Q_ASSERT(templateModel.get());
|
||||||
@@ -527,10 +540,6 @@ void StylesheetMerger::styleMerge(Model *model, const QString &templateFile, Ext
|
|||||||
templateModel->setFileUrl(parentModel->fileUrl());
|
templateModel->setFileUrl(parentModel->fileUrl());
|
||||||
|
|
||||||
QPlainTextEdit textEditTemplate;
|
QPlainTextEdit textEditTemplate;
|
||||||
Utils::FileReader reader;
|
|
||||||
|
|
||||||
QTC_ASSERT(reader.fetch(Utils::FilePath::fromString(templateFile)), return);
|
|
||||||
QString qmlTemplateString = QString::fromUtf8(reader.data());
|
|
||||||
QString imports;
|
QString imports;
|
||||||
|
|
||||||
for (const Import &import : parentModel->imports()) {
|
for (const Import &import : parentModel->imports()) {
|
||||||
@@ -541,13 +550,14 @@ void StylesheetMerger::styleMerge(Model *model, const QString &templateFile, Ext
|
|||||||
textEditTemplate.setPlainText(imports + qmlTemplateString);
|
textEditTemplate.setPlainText(imports + qmlTemplateString);
|
||||||
NotIndentingTextEditModifier textModifierTemplate(&textEditTemplate);
|
NotIndentingTextEditModifier textModifierTemplate(&textEditTemplate);
|
||||||
|
|
||||||
QScopedPointer<RewriterView> templateRewriterView(new RewriterView(externalDependencies, RewriterView::Amend));
|
QScopedPointer<RewriterView> templateRewriterView(
|
||||||
|
new RewriterView(externalDependencies, RewriterView::Amend));
|
||||||
templateRewriterView->setTextModifier(&textModifierTemplate);
|
templateRewriterView->setTextModifier(&textModifierTemplate);
|
||||||
templateModel->attachView(templateRewriterView.data());
|
templateModel->attachView(templateRewriterView.data());
|
||||||
templateRewriterView->setCheckSemanticErrors(false);
|
templateRewriterView->setCheckSemanticErrors(false);
|
||||||
|
|
||||||
ModelNode templateRootNode = templateRewriterView->rootModelNode();
|
ModelNode templateRootNode = templateRewriterView->rootModelNode();
|
||||||
QTC_ASSERT(templateRootNode.isValid(), return);
|
QTC_ASSERT(templateRootNode.isValid(), return );
|
||||||
|
|
||||||
auto styleModel(Model::create("QtQuick.Item", 2, 1, parentModel));
|
auto styleModel(Model::create("QtQuick.Item", 2, 1, parentModel));
|
||||||
Q_ASSERT(styleModel.get());
|
Q_ASSERT(styleModel.get());
|
||||||
@@ -556,11 +566,12 @@ void StylesheetMerger::styleMerge(Model *model, const QString &templateFile, Ext
|
|||||||
|
|
||||||
QPlainTextEdit textEditStyle;
|
QPlainTextEdit textEditStyle;
|
||||||
RewriterView *parentRewriterView = parentModel->rewriterView();
|
RewriterView *parentRewriterView = parentModel->rewriterView();
|
||||||
QTC_ASSERT(parentRewriterView, return);
|
QTC_ASSERT(parentRewriterView, return );
|
||||||
textEditStyle.setPlainText(parentRewriterView->textModifierContent());
|
textEditStyle.setPlainText(parentRewriterView->textModifierContent());
|
||||||
NotIndentingTextEditModifier textModifierStyle(&textEditStyle);
|
NotIndentingTextEditModifier textModifierStyle(&textEditStyle);
|
||||||
|
|
||||||
QScopedPointer<RewriterView> styleRewriterView(new RewriterView(externalDependencies, RewriterView::Amend));
|
QScopedPointer<RewriterView> styleRewriterView(
|
||||||
|
new RewriterView(externalDependencies, RewriterView::Amend));
|
||||||
styleRewriterView->setTextModifier(&textModifierStyle);
|
styleRewriterView->setTextModifier(&textModifierStyle);
|
||||||
styleModel->attachView(styleRewriterView.data());
|
styleModel->attachView(styleRewriterView.data());
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user