summaryrefslogtreecommitdiff
path: root/src/plugins/diffeditor/diffeditorwidget.cpp
diff options
context:
space:
mode:
authorjkobus <jaroslaw.kobus@digia.com>2013-04-23 09:09:20 +0200
committerDavid Schulz <david.schulz@digia.com>2013-04-24 13:17:53 +0200
commitce0efbda466e88d79bd4e6418587d1724fcf4cb7 (patch)
tree4da2b0723ef728e6b82d97ba8b9673045025b729 /src/plugins/diffeditor/diffeditorwidget.cpp
parentf512deb52a1f098dba8a4fddf939cf668f7a1a23 (diff)
downloadqt-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.cpp36
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);