From 8f8ee59d2c95f123aa54914ccae9570f9fb52210 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thorbj=C3=B8rn=20Lindeijer?= <thorbjorn.lindeijer@nokia.com> Date: Thu, 21 Jan 2010 15:14:35 +0100 Subject: [PATCH] Made Join Lines work with a multi-line selection --- src/plugins/texteditor/basetexteditor.cpp | 41 ++++++++++++++--------- 1 file changed, 26 insertions(+), 15 deletions(-) diff --git a/src/plugins/texteditor/basetexteditor.cpp b/src/plugins/texteditor/basetexteditor.cpp index 6a7b725e592..a74e40cbe85 100644 --- a/src/plugins/texteditor/basetexteditor.cpp +++ b/src/plugins/texteditor/basetexteditor.cpp @@ -879,25 +879,36 @@ void BaseTextEditor::copyLineUpDown(bool up) void BaseTextEditor::joinLines() { - QTextCursor move = textCursor(); - move.beginEditBlock(); + QTextCursor cursor = textCursor(); + QTextCursor start = cursor; + QTextCursor end = cursor; - move.movePosition(QTextCursor::NextBlock); - move.movePosition(QTextCursor::StartOfBlock); - move.movePosition(QTextCursor::EndOfBlock, QTextCursor::KeepAnchor); - QString cutLine = move.selectedText(); + start.setPosition(cursor.selectionStart()); + end.setPosition(cursor.selectionEnd() - 1); - // Collapse leading whitespaces to one or insert whitespace - cutLine.replace(QRegExp("^\\s*"), " "); - move.movePosition(QTextCursor::Right, QTextCursor::KeepAnchor); - move.removeSelectedText(); + int lineCount = qMax(1, end.blockNumber() - start.blockNumber()); + + cursor.beginEditBlock(); + cursor.setPosition(cursor.selectionStart()); + while (lineCount--) { + cursor.movePosition(QTextCursor::NextBlock); + cursor.movePosition(QTextCursor::StartOfBlock); + cursor.movePosition(QTextCursor::EndOfBlock, QTextCursor::KeepAnchor); + QString cutLine = cursor.selectedText(); + + // Collapse leading whitespaces to one or insert whitespace + cutLine.replace(QRegExp("^\\s*"), " "); + cursor.movePosition(QTextCursor::Right, QTextCursor::KeepAnchor); + cursor.removeSelectedText(); - move.movePosition(QTextCursor::PreviousBlock); - move.movePosition(QTextCursor::EndOfBlock); + cursor.movePosition(QTextCursor::PreviousBlock); + cursor.movePosition(QTextCursor::EndOfBlock); - move.insertText(cutLine); - move.endEditBlock(); - setTextCursor(move); + cursor.insertText(cutLine); + } + cursor.endEditBlock(); + + setTextCursor(cursor); } void BaseTextEditor::moveLineUp() -- GitLab