diff options
6 files changed, 46 insertions, 12 deletions
diff --git a/src/plugins/qmldesigner/core/include/componenttextmodifier.h b/src/plugins/qmldesigner/core/include/componenttextmodifier.h index 723425531e..b164fa2c22 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 29a33b5725..a7090f9fda 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 79092e3836..0931d9b8eb 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 98a78bd955..cfd1f5da20 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 09ba7b31b3..d7e89a09ea 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 76ff4e510c..5ed763a388 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) |