diff --git a/src/plugins/qmldesigner/core/include/componenttextmodifier.h b/src/plugins/qmldesigner/core/include/componenttextmodifier.h index 723425531e6614d30fcf362c1d1f952a2f6249c1..b164fa2c22d23c5287c75837df113e081873bbe3 100644 --- a/src/plugins/qmldesigner/core/include/componenttextmodifier.h +++ b/src/plugins/qmldesigner/core/include/componenttextmodifier.h @@ -43,6 +43,8 @@ public: virtual void replace(int offset, int length, const QString& replacement); virtual void move(const MoveInfo &moveInfo); + virtual void indent(int offset, int length); + virtual void startGroup(); virtual void flushGroup(); virtual void commitGroup(); diff --git a/src/plugins/qmldesigner/core/include/plaintexteditmodifier.h b/src/plugins/qmldesigner/core/include/plaintexteditmodifier.h index 29a33b57250602b73a27a520978b9fe55d40b8e1..a7090f9fdad27d6f12e4fc9313b4652a1884fd87 100644 --- a/src/plugins/qmldesigner/core/include/plaintexteditmodifier.h +++ b/src/plugins/qmldesigner/core/include/plaintexteditmodifier.h @@ -64,6 +64,8 @@ public: virtual void replace(int offset, int length, const QString &replacement); virtual void move(const MoveInfo &moveInfo); + virtual void indent(int offset, int length); + virtual void startGroup(); virtual void flushGroup(); virtual void commitGroup(); diff --git a/src/plugins/qmldesigner/core/include/textmodifier.h b/src/plugins/qmldesigner/core/include/textmodifier.h index 79092e3836883eb6657c8c5a357f3950637c7daf..0931d9b8ebb043601c46e12a4b4ae793bb6afa8e 100644 --- a/src/plugins/qmldesigner/core/include/textmodifier.h +++ b/src/plugins/qmldesigner/core/include/textmodifier.h @@ -68,6 +68,8 @@ 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 startGroup() = 0; virtual void flushGroup() = 0; virtual void commitGroup() = 0; diff --git a/src/plugins/qmldesigner/core/model/componenttextmodifier.cpp b/src/plugins/qmldesigner/core/model/componenttextmodifier.cpp index 98a78bd95571e1254d2ab90070765f56dfa6c00f..cfd1f5da20b629d867bf4b2b16bc2a0d1a2b00b7 100644 --- a/src/plugins/qmldesigner/core/model/componenttextmodifier.cpp +++ b/src/plugins/qmldesigner/core/model/componenttextmodifier.cpp @@ -58,6 +58,11 @@ void ComponentTextModifier::move(const MoveInfo &moveInfo) m_originalModifier->move(moveInfo); } +void ComponentTextModifier::indent(int offset, int length) +{ + m_originalModifier->indent(offset, length); +} + void ComponentTextModifier::startGroup() { m_originalModifier->startGroup(); diff --git a/src/plugins/qmldesigner/core/model/modeltotextmerger.cpp b/src/plugins/qmldesigner/core/model/modeltotextmerger.cpp index 09ba7b31b31adf6f840ac913d15c858a422b4359..d7e89a09ea0cecc1ef7a6d38181a01685549c81a 100644 --- a/src/plugins/qmldesigner/core/model/modeltotextmerger.cpp +++ b/src/plugins/qmldesigner/core/model/modeltotextmerger.cpp @@ -287,15 +287,16 @@ void ModelToTextMerger::applyChanges() } } -void ModelToTextMerger::reindent(const QMap<int, int> &/*dirtyAreas*/) const +void ModelToTextMerger::reindent(const QMap<int, int> &dirtyAreas) const { -// QList<int> offsets = dirtyAreas.keys(); -// qSort(offsets); -// -// foreach (const int offset, offsets) { -// const int length = dirtyAreas[offset]; -// xxxx -// } + QList<int> offsets = dirtyAreas.keys(); + qSort(offsets); + TextModifier *textModifier = m_rewriterView->textModifier(); + + foreach (const int offset, offsets) { + const int length = dirtyAreas[offset]; + textModifier->indent(offset, length); + } } void ModelToTextMerger::schedule(RewriteAction *action) diff --git a/src/plugins/qmldesigner/core/model/plaintexteditmodifier.cpp b/src/plugins/qmldesigner/core/model/plaintexteditmodifier.cpp index 76ff4e510c4f158f51026b26daddee393f2eb8f0..5ed763a388d07b74b05b123fe55ef985e18e235b 100644 --- a/src/plugins/qmldesigner/core/model/plaintexteditmodifier.cpp +++ b/src/plugins/qmldesigner/core/model/plaintexteditmodifier.cpp @@ -27,14 +27,15 @@ ** **************************************************************************/ -#include <QtCore/QDebug> +#include "plaintexteditmodifier.h" + +#include <texteditor/basetexteditor.h> +#include <utils/changeset.h> #include <QtGui/QPlainTextEdit> #include <QtGui/QUndoStack> -#include <utils/changeset.h> - -#include "plaintexteditmodifier.h" +#include <QtCore/QDebug> using namespace Utils; using namespace QmlDesigner; @@ -112,6 +113,27 @@ void PlainTextEditModifier::move(const MoveInfo &moveInfo) } } +void PlainTextEditModifier::indent(int offset, int length) +{ + if (length == 0 || offset < 0 || offset + length >= text().length()) + return; + +// qDebug() << "PlainTextEditModifier::indent(" << offset << "," << length << ")"; + if (TextEditor::BaseTextEditor *bte = dynamic_cast<TextEditor::BaseTextEditor*>(m_textEdit)) { +// qDebug() << "**** Doing indentation"; + // find the applicable block: + QTextDocument *doc = bte->document(); + QTextCursor tc(doc); + tc.beginEditBlock(); + tc.setPosition(offset); + tc.setPosition(offset + length, QTextCursor::KeepAnchor); + bte->indentInsertedText(tc); + tc.endEditBlock(); + } else { +// qDebug() << "**** Skipping indentation"; + } +} + void PlainTextEditModifier::startGroup() { if (!m_changeSet)