summaryrefslogtreecommitdiff
path: root/src/plugins/diffeditor/diffeditorwidget.cpp
diff options
context:
space:
mode:
authorjkobus <jaroslaw.kobus@digia.com>2013-04-26 11:50:10 +0200
committerDavid Schulz <david.schulz@digia.com>2013-05-07 10:55:56 +0200
commit20625d549834c33118b64872b1ab2230fbcfd40f (patch)
tree4aaa83b82a2e26c2566ebd41fc42ba677e4f836e /src/plugins/diffeditor/diffeditorwidget.cpp
parent3f0c8737962855b5b72218ecf8535bbea19b130b (diff)
downloadqt-creator-20625d549834c33118b64872b1ab2230fbcfd40f.tar.gz
Implement jumping to original file on double click
Change-Id: I25f2624df65826b93604ff7df2485162691498d0 Reviewed-by: David Schulz <david.schulz@digia.com>
Diffstat (limited to 'src/plugins/diffeditor/diffeditorwidget.cpp')
-rw-r--r--src/plugins/diffeditor/diffeditorwidget.cpp49
1 files changed, 42 insertions, 7 deletions
diff --git a/src/plugins/diffeditor/diffeditorwidget.cpp b/src/plugins/diffeditor/diffeditorwidget.cpp
index e1e7c0a068..bf6630d6c9 100644
--- a/src/plugins/diffeditor/diffeditorwidget.cpp
+++ b/src/plugins/diffeditor/diffeditorwidget.cpp
@@ -86,7 +86,7 @@ public:
QMap<int, int> skippedLines() const { return m_skippedLines; }
- void setLineNumber(int blockNumber, const QString &lineNumber);
+ void setLineNumber(int blockNumber, int lineNumber);
void setFileName(int blockNumber, const QString &fileName) { m_fileNames[blockNumber] = fileName; setSeparator(blockNumber, true); }
void setSkippedLines(int blockNumber, int skippedLines) { m_skippedLines[blockNumber] = skippedLines; setSeparator(blockNumber, true); }
void setSeparator(int blockNumber, bool separator) { m_separators[blockNumber] = separator; }
@@ -107,14 +107,16 @@ protected:
const QTextBlock &block,
QPointF offset,
const QRect &clip);
+ void mouseDoubleClickEvent(QMouseEvent *e);
virtual void paintEvent(QPaintEvent *e);
virtual void scrollContentsBy(int dx, int dy);
private:
void paintCollapsedBlockPopup(QPainter &painter, const QRect &clipRect);
void paintSeparator(QPainter &painter, const QString &text, const QTextBlock &block, int top);
+ void jumpToOriginalFile(const QTextCursor &cursor);
- QMap<int, QString> m_lineNumbers;
+ QMap<int, int> m_lineNumbers;
int m_lineNumberDigits;
// block number, fileName
QMap<int, QString> m_fileNames;
@@ -135,7 +137,9 @@ DiffViewEditorWidget::DiffViewEditorWidget(QWidget *parent)
QString DiffViewEditorWidget::lineNumber(int blockNumber) const
{
- return m_lineNumbers.value(blockNumber);
+ if (m_lineNumbers.contains(blockNumber))
+ return QString::number(m_lineNumbers.value(blockNumber));
+ return QString();
}
int DiffViewEditorWidget::lineNumberDigits() const
@@ -189,10 +193,11 @@ QString DiffViewEditorWidget::plainTextFromSelection(const QTextCursor &cursor)
return convertToPlainText(text);
}
-void DiffViewEditorWidget::setLineNumber(int blockNumber, const QString &lineNumber)
+void DiffViewEditorWidget::setLineNumber(int blockNumber, int lineNumber)
{
+ const QString lineNumberString = QString::number(lineNumber);
m_lineNumbers.insert(blockNumber, lineNumber);
- m_lineNumberDigits = qMax(m_lineNumberDigits, lineNumber.count());
+ m_lineNumberDigits = qMax(m_lineNumberDigits, lineNumberString.count());
}
void DiffViewEditorWidget::clearAllData()
@@ -237,6 +242,36 @@ void DiffViewEditorWidget::paintSeparator(QPainter &painter, const QString &text
painter.restore();
}
+void DiffViewEditorWidget::mouseDoubleClickEvent(QMouseEvent *e)
+{
+ if (e->button() == Qt::LeftButton && !(e->modifiers() & Qt::ShiftModifier)) {
+ QTextCursor cursor = cursorForPosition(e->pos());
+ jumpToOriginalFile(cursor);
+ }
+ SnippetEditorWidget::mouseDoubleClickEvent(e);
+}
+
+void DiffViewEditorWidget::jumpToOriginalFile(const QTextCursor &cursor)
+{
+ if (m_fileNames.isEmpty())
+ return;
+
+ const int blockNumber = cursor.blockNumber();
+ const int position = cursor.positionInBlock();
+ if (!m_lineNumbers.contains(blockNumber))
+ return;
+
+ const int lineNr = m_lineNumbers.value(blockNumber);
+ QMap<int, QString>::const_iterator it = m_fileNames.upperBound(blockNumber);
+ if (it != m_fileNames.constBegin())
+ --it;
+ const QString fileName = it.value();
+
+ Core::IEditor *ed = Core::EditorManager::openEditor(fileName, Core::Id(), Core::EditorManager::ModeSwitch);
+ if (TextEditor::ITextEditor *editor = qobject_cast<TextEditor::ITextEditor *>(ed))
+ editor->gotoLine(lineNr, position);
+}
+
void DiffViewEditorWidget::paintEvent(QPaintEvent *e)
{
m_inPaintEvent = true;
@@ -914,7 +949,7 @@ void DiffEditorWidget::showDiff()
if (leftLineData.textLineType == TextLineData::TextLine) {
leftText += leftLineData.text;
leftLineNumber++;
- m_leftEditor->setLineNumber(blockNumber, QString::number(leftLineNumber));
+ m_leftEditor->setLineNumber(blockNumber, leftLineNumber);
} else if (leftLineData.textLineType == TextLineData::Separator) {
m_leftEditor->setSeparator(blockNumber, true);
}
@@ -922,7 +957,7 @@ void DiffEditorWidget::showDiff()
if (rightLineData.textLineType == TextLineData::TextLine) {
rightText += rightLineData.text;
rightLineNumber++;
- m_rightEditor->setLineNumber(blockNumber, QString::number(rightLineNumber));
+ m_rightEditor->setLineNumber(blockNumber, rightLineNumber);
} else if (rightLineData.textLineType == TextLineData::Separator) {
m_rightEditor->setSeparator(blockNumber, true);
}