diff --git a/src/plugins/qmldesigner/designercore/include/basetexteditmodifier.h b/src/plugins/qmldesigner/designercore/include/basetexteditmodifier.h index e5b1bd368cd..e20566724bf 100644 --- a/src/plugins/qmldesigner/designercore/include/basetexteditmodifier.h +++ b/src/plugins/qmldesigner/designercore/include/basetexteditmodifier.h @@ -41,6 +41,7 @@ class QMLDESIGNERCORE_EXPORT BaseTextEditModifier: public PlainTextEditModifier public: BaseTextEditModifier(TextEditor::TextEditorWidget *textEdit); + void indentLines(int startLine, int endLine) override; void indent(int offset, int length) override; int indentDepth() const override; diff --git a/src/plugins/qmldesigner/designercore/include/componenttextmodifier.h b/src/plugins/qmldesigner/designercore/include/componenttextmodifier.h index 194ebd2d5bb..01b8f63e539 100644 --- a/src/plugins/qmldesigner/designercore/include/componenttextmodifier.h +++ b/src/plugins/qmldesigner/designercore/include/componenttextmodifier.h @@ -39,6 +39,7 @@ public: void replace(int offset, int length, const QString& replacement) override; void move(const MoveInfo &moveInfo) override; void indent(int offset, int length) override; + void indentLines(int startLine, int endLine) override; int indentDepth() const override; diff --git a/src/plugins/qmldesigner/designercore/include/plaintexteditmodifier.h b/src/plugins/qmldesigner/designercore/include/plaintexteditmodifier.h index cd866c94691..210f2c30408 100644 --- a/src/plugins/qmldesigner/designercore/include/plaintexteditmodifier.h +++ b/src/plugins/qmldesigner/designercore/include/plaintexteditmodifier.h @@ -58,6 +58,7 @@ public: void replace(int offset, int length, const QString &replacement) override; void move(const MoveInfo &moveInfo) override; void indent(int offset, int length) override = 0; + void indentLines(int startLine, int endLine) override = 0; int indentDepth() const override = 0; @@ -102,10 +103,12 @@ public: : PlainTextEditModifier(textEdit) {} - virtual void indent(int /*offset*/, int /*length*/) + void indent(int /*offset*/, int /*length*/) override + {} + void indentLines(int /*offset*/, int /*length*/) override {} - virtual int indentDepth() const + int indentDepth() const override { return 0; } }; diff --git a/src/plugins/qmldesigner/designercore/include/textmodifier.h b/src/plugins/qmldesigner/designercore/include/textmodifier.h index c5d494e0e56..d0c4cebeb4d 100644 --- a/src/plugins/qmldesigner/designercore/include/textmodifier.h +++ b/src/plugins/qmldesigner/designercore/include/textmodifier.h @@ -64,6 +64,7 @@ public: virtual void replace(int offset, int length, const QString& replacement) = 0; virtual void move(const MoveInfo &moveInfo) = 0; virtual void indent(int offset, int length) = 0; + virtual void indentLines(int startLine, int endLine) = 0; virtual int indentDepth() const = 0; diff --git a/src/plugins/qmldesigner/designercore/model/basetexteditmodifier.cpp b/src/plugins/qmldesigner/designercore/model/basetexteditmodifier.cpp index 2bcfcd7bbae..ab68cc16054 100644 --- a/src/plugins/qmldesigner/designercore/model/basetexteditmodifier.cpp +++ b/src/plugins/qmldesigner/designercore/model/basetexteditmodifier.cpp @@ -43,41 +43,41 @@ BaseTextEditModifier::BaseTextEditModifier(TextEditor::TextEditorWidget *textEdi { } +void BaseTextEditModifier::indentLines(int startLine, int endLine) +{ + if (startLine < 0) + return; + TextEditor::TextEditorWidget *baseTextEditorWidget = qobject_cast(plainTextEdit()); + if (!baseTextEditorWidget) + return; + + QTextDocument *textDocument = plainTextEdit()->document(); + TextEditor::TextDocument *baseTextEditorDocument = baseTextEditorWidget->textDocument(); + TextEditor::TabSettings tabSettings = baseTextEditorDocument->tabSettings(); + QTextCursor tc(textDocument); + + tc.beginEditBlock(); + for (int i = startLine; i <= endLine; i++) { + QTextBlock start = textDocument->findBlockByNumber(i); + + if (start.isValid()) { + QmlJSEditor::Internal::Indenter indenter; + indenter.indentBlock(textDocument, start, QChar::Null, tabSettings); + } + } + tc.endEditBlock(); +} + void BaseTextEditModifier::indent(int offset, int length) { if (length == 0 || offset < 0 || offset + length >= text().length()) return; - if (TextEditor::TextEditorWidget *baseTextEditorWidget = qobject_cast(plainTextEdit())) { + int startLine = getLineInDocument(textDocument(), offset); + int endLine = getLineInDocument(textDocument(), offset + length); - TextEditor::TextDocument *baseTextEditorDocument = baseTextEditorWidget->textDocument(); - QTextDocument *textDocument = baseTextEditorWidget->document(); - - int startLine = -1; - int endLine = -1; - int column; - - baseTextEditorWidget->convertPosition(offset, &startLine, &column); //get line - baseTextEditorWidget->convertPosition(offset + length, &endLine, &column); //get line - - QTextDocument *doc = baseTextEditorDocument->document(); - QTextCursor tc(doc); - tc.beginEditBlock(); - - if (startLine > 0) { - TextEditor::TabSettings tabSettings = baseTextEditorDocument->tabSettings(); - for (int i = startLine; i <= endLine; i++) { - QTextBlock start = textDocument->findBlockByNumber(i); - - if (start.isValid()) { - QmlJSEditor::Internal::Indenter indenter; - indenter.indentBlock(textDocument, start, QChar::Null, tabSettings); - } - } - } - - tc.endEditBlock(); - } + if (startLine > -1 && endLine > -1) + indentLines(startLine, endLine); } int BaseTextEditModifier::indentDepth() const diff --git a/src/plugins/qmldesigner/designercore/model/componenttextmodifier.cpp b/src/plugins/qmldesigner/designercore/model/componenttextmodifier.cpp index a0f9ae96813..ebdc6210f26 100644 --- a/src/plugins/qmldesigner/designercore/model/componenttextmodifier.cpp +++ b/src/plugins/qmldesigner/designercore/model/componenttextmodifier.cpp @@ -56,6 +56,10 @@ void ComponentTextModifier::move(const MoveInfo &moveInfo) void ComponentTextModifier::indent(int offset, int length) { m_originalModifier->indent(offset, length); + +void ComponentTextModifier::indentLines(int startLine, int endLine) +{ + m_originalModifier->indentLines(startLine, endLine); } int ComponentTextModifier::indentDepth() const