diff options
author | jkobus <jaroslaw.kobus@digia.com> | 2013-04-26 11:50:10 +0200 |
---|---|---|
committer | David Schulz <david.schulz@digia.com> | 2013-05-07 10:55:56 +0200 |
commit | 20625d549834c33118b64872b1ab2230fbcfd40f (patch) | |
tree | 4aaa83b82a2e26c2566ebd41fc42ba677e4f836e /src/plugins/diffeditor/diffeditorwidget.cpp | |
parent | 3f0c8737962855b5b72218ecf8535bbea19b130b (diff) | |
download | qt-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.cpp | 49 |
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); } |