QmlDesigner: refactor indent feature

* add indentLines() method
* refactor indent to use indentLines()

Change-Id: Ie36c7ab6217c31e9e3913a4dd5da2196364200c8
Reviewed-by: Thomas Hartmann <Thomas.Hartmann@theqtcompany.com>
This commit is contained in:
Tim Jenssen
2016-10-19 13:54:20 +02:00
parent 81bdb9cdf9
commit 29c58eabed
6 changed files with 41 additions and 31 deletions

View File

@@ -41,6 +41,7 @@ class QMLDESIGNERCORE_EXPORT BaseTextEditModifier: public PlainTextEditModifier
public: public:
BaseTextEditModifier(TextEditor::TextEditorWidget *textEdit); BaseTextEditModifier(TextEditor::TextEditorWidget *textEdit);
void indentLines(int startLine, int endLine) override;
void indent(int offset, int length) override; void indent(int offset, int length) override;
int indentDepth() const override; int indentDepth() const override;

View File

@@ -39,6 +39,7 @@ public:
void replace(int offset, int length, const QString& replacement) override; void replace(int offset, int length, const QString& replacement) override;
void move(const MoveInfo &moveInfo) override; void move(const MoveInfo &moveInfo) override;
void indent(int offset, int length) override; void indent(int offset, int length) override;
void indentLines(int startLine, int endLine) override;
int indentDepth() const override; int indentDepth() const override;

View File

@@ -58,6 +58,7 @@ public:
void replace(int offset, int length, const QString &replacement) override; void replace(int offset, int length, const QString &replacement) override;
void move(const MoveInfo &moveInfo) override; void move(const MoveInfo &moveInfo) override;
void indent(int offset, int length) override = 0; void indent(int offset, int length) override = 0;
void indentLines(int startLine, int endLine) override = 0;
int indentDepth() const override = 0; int indentDepth() const override = 0;
@@ -102,10 +103,12 @@ public:
: PlainTextEditModifier(textEdit) : 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; } { return 0; }
}; };

View File

@@ -64,6 +64,7 @@ public:
virtual void replace(int offset, int length, const QString& replacement) = 0; virtual void replace(int offset, int length, const QString& replacement) = 0;
virtual void move(const MoveInfo &moveInfo) = 0; virtual void move(const MoveInfo &moveInfo) = 0;
virtual void indent(int offset, int length) = 0; virtual void indent(int offset, int length) = 0;
virtual void indentLines(int startLine, int endLine) = 0;
virtual int indentDepth() const = 0; virtual int indentDepth() const = 0;

View File

@@ -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<TextEditor::TextEditorWidget*>(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) void BaseTextEditModifier::indent(int offset, int length)
{ {
if (length == 0 || offset < 0 || offset + length >= text().length()) if (length == 0 || offset < 0 || offset + length >= text().length())
return; return;
if (TextEditor::TextEditorWidget *baseTextEditorWidget = qobject_cast<TextEditor::TextEditorWidget*>(plainTextEdit())) { int startLine = getLineInDocument(textDocument(), offset);
int endLine = getLineInDocument(textDocument(), offset + length);
TextEditor::TextDocument *baseTextEditorDocument = baseTextEditorWidget->textDocument(); if (startLine > -1 && endLine > -1)
QTextDocument *textDocument = baseTextEditorWidget->document(); indentLines(startLine, endLine);
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();
}
} }
int BaseTextEditModifier::indentDepth() const int BaseTextEditModifier::indentDepth() const

View File

@@ -56,6 +56,10 @@ void ComponentTextModifier::move(const MoveInfo &moveInfo)
void ComponentTextModifier::indent(int offset, int length) void ComponentTextModifier::indent(int offset, int length)
{ {
m_originalModifier->indent(offset, length); m_originalModifier->indent(offset, length);
void ComponentTextModifier::indentLines(int startLine, int endLine)
{
m_originalModifier->indentLines(startLine, endLine);
} }
int ComponentTextModifier::indentDepth() const int ComponentTextModifier::indentDepth() const