From f269031b5e147106eb1cea54c2ee390cb072bebe Mon Sep 17 00:00:00 2001 From: mae <qt-info@nokia.com> Date: Wed, 9 Sep 2009 13:55:11 +0200 Subject: [PATCH] Make indentation/tabbing more developer friendly: - when doing backspace, preserve the previous indentation litterally - when having auto-indentation turned off, simply repeat the previous indentation litterally instead of jumping to 0 --- src/plugins/texteditor/basetexteditor.cpp | 22 ++++++++++++---------- src/plugins/texteditor/tabsettings.cpp | 6 ++++++ src/plugins/texteditor/tabsettings.h | 1 + 3 files changed, 19 insertions(+), 10 deletions(-) diff --git a/src/plugins/texteditor/basetexteditor.cpp b/src/plugins/texteditor/basetexteditor.cpp index 59c55fcb2d4..a675ea4e8bc 100644 --- a/src/plugins/texteditor/basetexteditor.cpp +++ b/src/plugins/texteditor/basetexteditor.cpp @@ -887,13 +887,18 @@ void BaseTextEditor::keyPressEvent(QKeyEvent *e) QTextCursor cursor = textCursor(); if (d->m_inBlockSelectionMode) cursor.clearSelection(); - if (d->m_document->tabSettings().m_autoIndent) { + const TabSettings &ts = d->m_document->tabSettings(); + if (ts.m_autoIndent) { cursor.beginEditBlock(); cursor.insertBlock(); indent(document(), cursor, QChar::Null); cursor.endEditBlock(); } else { + cursor.beginEditBlock(); + QString previousBlockText = cursor.block().text(); cursor.insertBlock(); + cursor.insertText(ts.indentationString(previousBlockText)); + cursor.endEditBlock(); } e->accept(); setTextCursor(cursor); @@ -3189,17 +3194,14 @@ void BaseTextEditor::handleBackspaceKey() continue; previousIndent = tabSettings.columnAt(previousNonEmptyBlockText, tabSettings.firstNonSpace(previousNonEmptyBlockText)); - if (previousIndent < indent) + if (previousIndent < indent) { + cursor.beginEditBlock(); + cursor.setPosition(currentBlock.position(), QTextCursor::KeepAnchor); + cursor.insertText(tabSettings.indentationString(previousNonEmptyBlockText)); + cursor.endEditBlock(); break; + } } - - if (previousIndent >= indent) - previousIndent = 0; - - cursor.beginEditBlock(); - cursor.setPosition(currentBlock.position(), QTextCursor::KeepAnchor); - cursor.insertText(tabSettings.indentationString(0, previousIndent)); - cursor.endEditBlock(); } void BaseTextEditor::wheelEvent(QWheelEvent *e) diff --git a/src/plugins/texteditor/tabsettings.cpp b/src/plugins/texteditor/tabsettings.cpp index e0225ce8bcd..1c20ab7b904 100644 --- a/src/plugins/texteditor/tabsettings.cpp +++ b/src/plugins/texteditor/tabsettings.cpp @@ -110,6 +110,12 @@ int TabSettings::firstNonSpace(const QString &text) const return i; } +QString TabSettings::indentationString(const QString &text) const +{ + return text.left(firstNonSpace(text)); +} + + int TabSettings::trailingWhitespaces(const QString &text) const { int i = 0; diff --git a/src/plugins/texteditor/tabsettings.h b/src/plugins/texteditor/tabsettings.h index ec2c3dfe8ea..2fbede49502 100644 --- a/src/plugins/texteditor/tabsettings.h +++ b/src/plugins/texteditor/tabsettings.h @@ -63,6 +63,7 @@ struct TEXTEDITOR_EXPORT TabSettings int spacesLeftFromPosition(const QString &text, int position) const; int indentedColumn(int column, bool doIndent = true) const; QString indentationString(int startColumn, int targetColumn) const; + QString indentationString(const QString &text) const; void indentLine(QTextBlock block, int newIndent) const; -- GitLab