From 99435d5f0e2f6993df22965b38564cd73e3409f1 Mon Sep 17 00:00:00 2001 From: mae <qt-info@nokia.com> Date: Wed, 9 Sep 2009 16:37:09 +0200 Subject: [PATCH] Make "Edit/Advanced/Clean_Whitespace work on the current selection (if there is one) --- src/plugins/texteditor/basetextdocument.cpp | 22 +++++++++++++-------- src/plugins/texteditor/basetextdocument.h | 2 +- src/plugins/texteditor/basetexteditor.cpp | 2 +- 3 files changed, 16 insertions(+), 10 deletions(-) diff --git a/src/plugins/texteditor/basetextdocument.cpp b/src/plugins/texteditor/basetextdocument.cpp index b2b0e75eeea..6da82ccdf59 100644 --- a/src/plugins/texteditor/basetextdocument.cpp +++ b/src/plugins/texteditor/basetextdocument.cpp @@ -301,13 +301,15 @@ void BaseTextDocument::setSyntaxHighlighter(QSyntaxHighlighter *highlighter) -void BaseTextDocument::cleanWhitespace() +void BaseTextDocument::cleanWhitespace(const QTextCursor &cursor) { - QTextCursor cursor(m_document); - cursor.beginEditBlock(); - cleanWhitespace(cursor, true, true); - ensureFinalNewLine(cursor); - cursor.endEditBlock(); + bool hasSelection = cursor.hasSelection(); + QTextCursor copyCursor = cursor; + copyCursor.beginEditBlock(); + cleanWhitespace(copyCursor, true, true); + if (!hasSelection) + ensureFinalNewLine(copyCursor); + copyCursor.endEditBlock(); } void BaseTextDocument::cleanWhitespace(QTextCursor& cursor, bool cleanIndentation, bool inEntireDocument) @@ -315,8 +317,12 @@ void BaseTextDocument::cleanWhitespace(QTextCursor& cursor, bool cleanIndentatio TextEditDocumentLayout *documentLayout = qobject_cast<TextEditDocumentLayout*>(m_document->documentLayout()); - QTextBlock block = m_document->firstBlock(); - while (block.isValid()) { + QTextBlock block = m_document->findBlock(cursor.selectionStart()); + QTextBlock end; + if (cursor.hasSelection()) + end = m_document->findBlock(cursor.selectionEnd()-1).next(); + + while (block.isValid() && block != end) { if (inEntireDocument || block.revision() > documentLayout->lastSaveRevision) { diff --git a/src/plugins/texteditor/basetextdocument.h b/src/plugins/texteditor/basetextdocument.h index 24dabd7a0aa..eaf37c91caf 100644 --- a/src/plugins/texteditor/basetextdocument.h +++ b/src/plugins/texteditor/basetextdocument.h @@ -110,7 +110,7 @@ public: void reload(QTextCodec *codec); - void cleanWhitespace(); + void cleanWhitespace(const QTextCursor &cursor); signals: void titleChanged(QString title); diff --git a/src/plugins/texteditor/basetexteditor.cpp b/src/plugins/texteditor/basetexteditor.cpp index a675ea4e8bc..cce27c4c21b 100644 --- a/src/plugins/texteditor/basetexteditor.cpp +++ b/src/plugins/texteditor/basetexteditor.cpp @@ -833,7 +833,7 @@ void BaseTextEditor::moveLineUpDown(bool up) void BaseTextEditor::cleanWhitespace() { - d->m_document->cleanWhitespace(); + d->m_document->cleanWhitespace(textCursor()); } void BaseTextEditor::keyPressEvent(QKeyEvent *e) -- GitLab