Implement jumping to original file on double click

Change-Id: I25f2624df65826b93604ff7df2485162691498d0
Reviewed-by: David Schulz <david.schulz@digia.com>
This commit is contained in:
jkobus
2013-04-26 11:50:10 +02:00
committed by David Schulz
parent 3f0c873796
commit 20625d5498

View File

@@ -86,7 +86,7 @@ public:
QMap<int, int> skippedLines() const { return m_skippedLines; } 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 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 setSkippedLines(int blockNumber, int skippedLines) { m_skippedLines[blockNumber] = skippedLines; setSeparator(blockNumber, true); }
void setSeparator(int blockNumber, bool separator) { m_separators[blockNumber] = separator; } void setSeparator(int blockNumber, bool separator) { m_separators[blockNumber] = separator; }
@@ -107,14 +107,16 @@ protected:
const QTextBlock &block, const QTextBlock &block,
QPointF offset, QPointF offset,
const QRect &clip); const QRect &clip);
void mouseDoubleClickEvent(QMouseEvent *e);
virtual void paintEvent(QPaintEvent *e); virtual void paintEvent(QPaintEvent *e);
virtual void scrollContentsBy(int dx, int dy); virtual void scrollContentsBy(int dx, int dy);
private: private:
void paintCollapsedBlockPopup(QPainter &painter, const QRect &clipRect); void paintCollapsedBlockPopup(QPainter &painter, const QRect &clipRect);
void paintSeparator(QPainter &painter, const QString &text, const QTextBlock &block, int top); 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; int m_lineNumberDigits;
// block number, fileName // block number, fileName
QMap<int, QString> m_fileNames; QMap<int, QString> m_fileNames;
@@ -135,7 +137,9 @@ DiffViewEditorWidget::DiffViewEditorWidget(QWidget *parent)
QString DiffViewEditorWidget::lineNumber(int blockNumber) const 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 int DiffViewEditorWidget::lineNumberDigits() const
@@ -189,10 +193,11 @@ QString DiffViewEditorWidget::plainTextFromSelection(const QTextCursor &cursor)
return convertToPlainText(text); 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_lineNumbers.insert(blockNumber, lineNumber);
m_lineNumberDigits = qMax(m_lineNumberDigits, lineNumber.count()); m_lineNumberDigits = qMax(m_lineNumberDigits, lineNumberString.count());
} }
void DiffViewEditorWidget::clearAllData() void DiffViewEditorWidget::clearAllData()
@@ -237,6 +242,36 @@ void DiffViewEditorWidget::paintSeparator(QPainter &painter, const QString &text
painter.restore(); 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) void DiffViewEditorWidget::paintEvent(QPaintEvent *e)
{ {
m_inPaintEvent = true; m_inPaintEvent = true;
@@ -914,7 +949,7 @@ void DiffEditorWidget::showDiff()
if (leftLineData.textLineType == TextLineData::TextLine) { if (leftLineData.textLineType == TextLineData::TextLine) {
leftText += leftLineData.text; leftText += leftLineData.text;
leftLineNumber++; leftLineNumber++;
m_leftEditor->setLineNumber(blockNumber, QString::number(leftLineNumber)); m_leftEditor->setLineNumber(blockNumber, leftLineNumber);
} else if (leftLineData.textLineType == TextLineData::Separator) { } else if (leftLineData.textLineType == TextLineData::Separator) {
m_leftEditor->setSeparator(blockNumber, true); m_leftEditor->setSeparator(blockNumber, true);
} }
@@ -922,7 +957,7 @@ void DiffEditorWidget::showDiff()
if (rightLineData.textLineType == TextLineData::TextLine) { if (rightLineData.textLineType == TextLineData::TextLine) {
rightText += rightLineData.text; rightText += rightLineData.text;
rightLineNumber++; rightLineNumber++;
m_rightEditor->setLineNumber(blockNumber, QString::number(rightLineNumber)); m_rightEditor->setLineNumber(blockNumber, rightLineNumber);
} else if (rightLineData.textLineType == TextLineData::Separator) { } else if (rightLineData.textLineType == TextLineData::Separator) {
m_rightEditor->setSeparator(blockNumber, true); m_rightEditor->setSeparator(blockNumber, true);
} }