diff options
author | jkobus <jaroslaw.kobus@digia.com> | 2013-04-23 09:09:20 +0200 |
---|---|---|
committer | David Schulz <david.schulz@digia.com> | 2013-04-24 13:17:53 +0200 |
commit | ce0efbda466e88d79bd4e6418587d1724fcf4cb7 (patch) | |
tree | 4da2b0723ef728e6b82d97ba8b9673045025b729 /src/plugins/diffeditor/diffeditorwidget.cpp | |
parent | f512deb52a1f098dba8a4fddf939cf668f7a1a23 (diff) | |
download | qt-creator-ce0efbda466e88d79bd4e6418587d1724fcf4cb7.tar.gz |
Omit separator lines when copying selected text
In addition rename int start -> startPosition and int end -> endPosition
to avoid a name clash with QTextBlock start inside
BaseTextEditorWidget::createMimeDataFromSelection().
Change-Id: I7f54e4046913b5d5d9ddd3c07fd2747b4ca6f3fb
Reviewed-by: hjk <hjk121@nokiamail.com>
Reviewed-by: David Schulz <david.schulz@digia.com>
Diffstat (limited to 'src/plugins/diffeditor/diffeditorwidget.cpp')
-rw-r--r-- | src/plugins/diffeditor/diffeditorwidget.cpp | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/src/plugins/diffeditor/diffeditorwidget.cpp b/src/plugins/diffeditor/diffeditorwidget.cpp index a4a9adc8be..346fc69c85 100644 --- a/src/plugins/diffeditor/diffeditorwidget.cpp +++ b/src/plugins/diffeditor/diffeditorwidget.cpp @@ -97,6 +97,7 @@ protected: virtual int lineNumberDigits() const; virtual bool selectionVisible(int blockNumber) const; virtual bool replacementVisible(int blockNumber) const; + QString plainTextFromSelection(const QTextCursor &cursor) const; virtual void paintEvent(QPaintEvent *e); virtual void scrollContentsBy(int dx, int dy); @@ -137,6 +138,41 @@ bool DiffViewEditorWidget::replacementVisible(int blockNumber) const return m_skippedLines.value(blockNumber); } +QString DiffViewEditorWidget::plainTextFromSelection(const QTextCursor &cursor) const +{ + const int startPosition = cursor.selectionStart(); + const int endPosition = cursor.selectionEnd(); + if (startPosition == endPosition) + return QString(); // no selection + + QTextBlock startBlock = document()->findBlock(startPosition); + QTextBlock endBlock = document()->findBlock(endPosition); + QTextBlock block = startBlock; + QString text; + bool textInserted = false; + while (block.isValid() && block.blockNumber() <= endBlock.blockNumber()) { + if (selectionVisible(block.blockNumber())) { + if (block == startBlock) { + if (block == endBlock) + text = cursor.selectedText(); // just one line text + else + text = block.text().mid(startPosition - block.position()); + } else { + if (textInserted) + text += QLatin1Char('\n'); + if (block == endBlock) + text += block.text().left(endPosition - block.position()); + else + text += block.text(); + } + textInserted = true; + } + block = block.next(); + } + + return convertToPlainText(text); +} + void DiffViewEditorWidget::setLineNumber(int blockNumber, const QString &lineNumber) { m_lineNumbers.insert(blockNumber, lineNumber); |