diff options
author | Eike Ziller <eike.ziller@qt.io> | 2018-02-23 10:56:52 +0100 |
---|---|---|
committer | Eike Ziller <eike.ziller@qt.io> | 2018-02-23 10:56:52 +0100 |
commit | 7c3cfa166d6b54c792f1c452a162bd7842becd52 (patch) | |
tree | 404f58894cfebcf6fb62e9eab60b3fb33a3f6f44 /src/plugins/diffeditor | |
parent | 31a55b02477fa0c6b9b9fca7e26ebc6951c3be30 (diff) | |
parent | 09a7247bfc08e5d8e027493909c2acb448a0bd8e (diff) | |
download | qt-creator-7c3cfa166d6b54c792f1c452a162bd7842becd52.tar.gz |
Merge remote-tracking branch 'origin/4.6'
Conflicts:
src/plugins/coreplugin/helpmanager.cpp
Change-Id: I2feb60ec0afb2f22f75dc137a01c3fa217b299d8
Diffstat (limited to 'src/plugins/diffeditor')
-rw-r--r-- | src/plugins/diffeditor/diffeditor.cpp | 4 | ||||
-rw-r--r-- | src/plugins/diffeditor/diffeditor.h | 2 | ||||
-rw-r--r-- | src/plugins/diffeditor/diffeditorcontroller.cpp | 29 | ||||
-rw-r--r-- | src/plugins/diffeditor/diffeditorcontroller.h | 11 | ||||
-rw-r--r-- | src/plugins/diffeditor/diffeditordocument.cpp | 2 | ||||
-rw-r--r-- | src/plugins/diffeditor/diffeditordocument.h | 1 | ||||
-rw-r--r-- | src/plugins/diffeditor/diffeditorwidgetcontroller.cpp | 85 | ||||
-rw-r--r-- | src/plugins/diffeditor/diffeditorwidgetcontroller.h | 20 | ||||
-rw-r--r-- | src/plugins/diffeditor/sidebysidediffeditorwidget.cpp | 39 | ||||
-rw-r--r-- | src/plugins/diffeditor/sidebysidediffeditorwidget.h | 4 | ||||
-rw-r--r-- | src/plugins/diffeditor/unifieddiffeditorwidget.cpp | 9 | ||||
-rw-r--r-- | src/plugins/diffeditor/unifieddiffeditorwidget.h | 2 |
12 files changed, 115 insertions, 93 deletions
diff --git a/src/plugins/diffeditor/diffeditor.cpp b/src/plugins/diffeditor/diffeditor.cpp index 0fbb63f27b..c054622389 100644 --- a/src/plugins/diffeditor/diffeditor.cpp +++ b/src/plugins/diffeditor/diffeditor.cpp @@ -289,12 +289,12 @@ DiffEditor::DiffEditor() connect(m_viewSwitcherAction, &QAction::triggered, this, [this]() { showDiffView(nextView()); }); } -void DiffEditor::setDocument(QSharedPointer<DiffEditorDocument>(doc)) +void DiffEditor::setDocument(QSharedPointer<DiffEditorDocument> doc) { QTC_ASSERT(m_document.isNull(), return); QTC_ASSERT(doc, return); - m_document = QSharedPointer<DiffEditorDocument>(doc); + m_document = doc; connect(m_descriptionWidget, &DescriptionEditorWidget::requestBranchList, m_document.data(), &DiffEditorDocument::requestMoreInformation); diff --git a/src/plugins/diffeditor/diffeditor.h b/src/plugins/diffeditor/diffeditor.h index 4522a786a3..53032827be 100644 --- a/src/plugins/diffeditor/diffeditor.h +++ b/src/plugins/diffeditor/diffeditor.h @@ -25,8 +25,6 @@ #pragma once -#include "diffeditorcontroller.h" - #include <coreplugin/editormanager/ieditor.h> #include <coreplugin/idocument.h> #include <utils/guard.h> diff --git a/src/plugins/diffeditor/diffeditorcontroller.cpp b/src/plugins/diffeditor/diffeditorcontroller.cpp index c64da4562d..bb2738b985 100644 --- a/src/plugins/diffeditor/diffeditorcontroller.cpp +++ b/src/plugins/diffeditor/diffeditorcontroller.cpp @@ -71,9 +71,10 @@ QString DiffEditorController::revisionFromDescription() const return m_document->description().mid(7, 12); } -QString DiffEditorController::makePatch(PatchOptions options) const +QString DiffEditorController::makePatch(int fileIndex, int chunkIndex, + PatchOptions options) const { - return m_document->makePatch(m_diffFileIndex, m_chunkIndex, + return m_document->makePatch(fileIndex, chunkIndex, options & Revert, options & AddPrefix); } @@ -152,11 +153,27 @@ void DiffEditorController::reloadFinished(bool success) m_isReloading = false; } -void DiffEditorController::requestChunkActions(QMenu *menu, int diffFileIndex, int chunkIndex) +void DiffEditorController::requestChunkActions(QMenu *menu, int fileIndex, int chunkIndex) { - m_diffFileIndex = diffFileIndex; - m_chunkIndex = chunkIndex; - emit chunkActionsRequested(menu, diffFileIndex >= 0 && chunkIndex >= 0); + emit chunkActionsRequested(menu, fileIndex, chunkIndex); +} + +bool DiffEditorController::chunkExists(int fileIndex, int chunkIndex) const +{ + if (!m_document) + return false; + + if (fileIndex < 0 || chunkIndex < 0) + return false; + + if (fileIndex >= m_document->diffFiles().count()) + return false; + + const FileData fileData = m_document->diffFiles().at(fileIndex); + if (chunkIndex >= fileData.chunks.count()) + return false; + + return true; } } // namespace DiffEditor diff --git a/src/plugins/diffeditor/diffeditorcontroller.h b/src/plugins/diffeditor/diffeditorcontroller.h index ebe1151ce1..e5d5ca7418 100644 --- a/src/plugins/diffeditor/diffeditorcontroller.h +++ b/src/plugins/diffeditor/diffeditorcontroller.h @@ -59,16 +59,18 @@ public: AddPrefix = 2 }; Q_DECLARE_FLAGS(PatchOptions, PatchOption) - QString makePatch(PatchOptions options) const; + QString makePatch(int fileIndex, int chunkIndex, PatchOptions options) const; static Core::IDocument *findOrCreateDocument(const QString &vcsId, const QString &displayName); static DiffEditorController *controller(Core::IDocument *document); void branchesReceived(const QString &branches); + void requestChunkActions(QMenu *menu, int fileIndex, int chunkIndex); + bool chunkExists(int fileIndex, int chunkIndex) const; signals: - void chunkActionsRequested(QMenu *menu, bool isValid); + void chunkActionsRequested(QMenu *menu, int fileIndex, int chunkIndex); void requestInformationForCommit(const QString &revision); protected: @@ -87,15 +89,14 @@ protected: private: void requestMoreInformation(); - void requestChunkActions(QMenu *menu, int diffFileIndex, int chunkIndex); Internal::DiffEditorDocument *const m_document; bool m_isReloading = false; - int m_diffFileIndex = -1; - int m_chunkIndex = -1; friend class Internal::DiffEditorDocument; }; +Q_DECLARE_OPERATORS_FOR_FLAGS(DiffEditorController::PatchOptions) + } // namespace DiffEditor diff --git a/src/plugins/diffeditor/diffeditordocument.cpp b/src/plugins/diffeditor/diffeditordocument.cpp index c1896f969b..0845f3ef03 100644 --- a/src/plugins/diffeditor/diffeditordocument.cpp +++ b/src/plugins/diffeditor/diffeditordocument.cpp @@ -71,8 +71,6 @@ void DiffEditorDocument::setController(DiffEditorController *controller) m_controller = controller; if (m_controller) { - connect(this, &DiffEditorDocument::chunkActionsRequested, - m_controller, &DiffEditorController::requestChunkActions); connect(this, &DiffEditorDocument::requestMoreInformation, m_controller, &DiffEditorController::requestMoreInformation); } diff --git a/src/plugins/diffeditor/diffeditordocument.h b/src/plugins/diffeditor/diffeditordocument.h index db0d3f04a3..2a5293dfaf 100644 --- a/src/plugins/diffeditor/diffeditordocument.h +++ b/src/plugins/diffeditor/diffeditordocument.h @@ -90,7 +90,6 @@ signals: void temporaryStateChanged(); void documentChanged(); void descriptionChanged(); - void chunkActionsRequested(QMenu *menu, int diffFileIndex, int chunkIndex); void requestMoreInformation(); private: diff --git a/src/plugins/diffeditor/diffeditorwidgetcontroller.cpp b/src/plugins/diffeditor/diffeditorwidgetcontroller.cpp index 66977ec065..c4a826bfe9 100644 --- a/src/plugins/diffeditor/diffeditorwidgetcontroller.cpp +++ b/src/plugins/diffeditor/diffeditorwidgetcontroller.cpp @@ -25,6 +25,7 @@ #include "diffeditorwidgetcontroller.h" #include "diffeditorconstants.h" +#include "diffeditorcontroller.h" #include "diffeditordocument.h" #include <coreplugin/documentmanager.h> @@ -122,11 +123,14 @@ void DiffEditorWidgetController::hideProgress() m_progressIndicator->hide(); } -void DiffEditorWidgetController::patch(bool revert) +void DiffEditorWidgetController::patch(bool revert, int fileIndex, int chunkIndex) { if (!m_document) return; + if (!chunkExists(fileIndex, chunkIndex)) + return; + const QString title = revert ? tr("Revert Chunk") : tr("Apply Chunk"); const QString question = revert ? tr("Would you like to revert the chunk?") @@ -138,7 +142,7 @@ void DiffEditorWidgetController::patch(bool revert) return; } - const FileData fileData = m_contextFileData.at(m_contextMenuFileIndex); + const FileData fileData = m_contextFileData.at(fileIndex); const QString fileName = revert ? fileData.rightFileInfo.fileName : fileData.leftFileInfo.fileName; @@ -154,7 +158,7 @@ void DiffEditorWidgetController::patch(bool revert) if (patchBehaviour == DiffFileInfo::PatchFile) { const int strip = m_document->baseDirectory().isEmpty() ? -1 : 0; - const QString patch = m_document->makePatch(m_contextMenuFileIndex, m_contextMenuChunkIndex, revert); + const QString patch = m_document->makePatch(fileIndex, chunkIndex, revert); if (patch.isEmpty()) return; @@ -179,8 +183,8 @@ void DiffEditorWidgetController::patch(bool revert) const QString contentsCopyFileName = contentsCopy.fileName(); const QString contentsCopyDir = QFileInfo(contentsCopyFileName).absolutePath(); - const QString patch = m_document->makePatch(m_contextMenuFileIndex, - m_contextMenuChunkIndex, revert, false, QFileInfo(contentsCopyFileName).fileName()); + const QString patch = m_document->makePatch(fileIndex, + chunkIndex, revert, false, QFileInfo(contentsCopyFileName).fileName()); if (patch.isEmpty()) return; @@ -218,64 +222,59 @@ void DiffEditorWidgetController::setFontSettings(const FontSettings &fontSetting m_rightCharFormat = fontSettings.toTextCharFormat(C_DIFF_DEST_CHAR); } -void DiffEditorWidgetController::addCodePasterAction(QMenu *menu) +void DiffEditorWidgetController::addCodePasterAction(QMenu *menu, int fileIndex, int chunkIndex) { if (ExtensionSystem::PluginManager::getObject<CodePaster::Service>()) { // optional code pasting service QAction *sendChunkToCodePasterAction = menu->addAction(tr("Send Chunk to CodePaster...")); - connect(sendChunkToCodePasterAction, &QAction::triggered, - this, &DiffEditorWidgetController::slotSendChunkToCodePaster); + connect(sendChunkToCodePasterAction, &QAction::triggered, [this, fileIndex, chunkIndex]() { + sendChunkToCodePaster(fileIndex, chunkIndex); + }); } } -bool DiffEditorWidgetController::setAndVerifyIndexes(QMenu *menu, - int diffFileIndex, int chunkIndex) +bool DiffEditorWidgetController::chunkExists(int fileIndex, int chunkIndex) const { if (!m_document) return false; - m_contextMenuFileIndex = diffFileIndex; - m_contextMenuChunkIndex = chunkIndex; - - if (m_contextMenuFileIndex < 0 || m_contextMenuChunkIndex < 0) - return false; - - if (m_contextMenuFileIndex >= m_contextFileData.count()) - return false; - - const FileData fileData = m_contextFileData.at(m_contextMenuFileIndex); - if (m_contextMenuChunkIndex >= fileData.chunks.count()) - return false; - - m_document->chunkActionsRequested(menu, diffFileIndex, chunkIndex); + if (DiffEditorController *controller = m_document->controller()) + return controller->chunkExists(fileIndex, chunkIndex); - return true; + return false; } -bool DiffEditorWidgetController::fileNamesAreDifferent() const +bool DiffEditorWidgetController::fileNamesAreDifferent(int fileIndex) const { - const FileData fileData = m_contextFileData.at(m_contextMenuFileIndex); + const FileData fileData = m_contextFileData.at(fileIndex); return fileData.leftFileInfo.fileName != fileData.rightFileInfo.fileName; } -void DiffEditorWidgetController::addApplyAction(QMenu *menu, int diffFileIndex, - int chunkIndex) +void DiffEditorWidgetController::addApplyAction(QMenu *menu, int fileIndex, int chunkIndex) { QAction *applyAction = menu->addAction(tr("Apply Chunk...")); - connect(applyAction, &QAction::triggered, this, &DiffEditorWidgetController::slotApplyChunk); - applyAction->setEnabled(setAndVerifyIndexes(menu, diffFileIndex, chunkIndex) - && fileNamesAreDifferent()); + connect(applyAction, &QAction::triggered, [this, fileIndex, chunkIndex]() { + patch(false, fileIndex, chunkIndex); + }); + applyAction->setEnabled(chunkExists(fileIndex, chunkIndex) && fileNamesAreDifferent(fileIndex)); } -void DiffEditorWidgetController::addRevertAction(QMenu *menu, int diffFileIndex, - int chunkIndex) +void DiffEditorWidgetController::addRevertAction(QMenu *menu, int fileIndex, int chunkIndex) { QAction *revertAction = menu->addAction(tr("Revert Chunk...")); - connect(revertAction, &QAction::triggered, this, &DiffEditorWidgetController::slotRevertChunk); - revertAction->setEnabled(setAndVerifyIndexes(menu, diffFileIndex, chunkIndex)); + connect(revertAction, &QAction::triggered, [this, fileIndex, chunkIndex]() { + patch(true, fileIndex, chunkIndex); + }); + revertAction->setEnabled(chunkExists(fileIndex, chunkIndex)); } -void DiffEditorWidgetController::slotSendChunkToCodePaster() +void DiffEditorWidgetController::addExtraActions(QMenu *menu, int fileIndex, int chunkIndex) +{ + if (DiffEditorController *controller = m_document->controller()) + controller->requestChunkActions(menu, fileIndex, chunkIndex); +} + +void DiffEditorWidgetController::sendChunkToCodePaster(int fileIndex, int chunkIndex) { if (!m_document) return; @@ -284,7 +283,7 @@ void DiffEditorWidgetController::slotSendChunkToCodePaster() auto pasteService = ExtensionSystem::PluginManager::getObject<CodePaster::Service>(); QTC_ASSERT(pasteService, return); - const QString patch = m_document->makePatch(m_contextMenuFileIndex, m_contextMenuChunkIndex, false); + const QString patch = m_document->makePatch(fileIndex, chunkIndex, false); if (patch.isEmpty()) return; @@ -292,15 +291,5 @@ void DiffEditorWidgetController::slotSendChunkToCodePaster() pasteService->postText(patch, Constants::DIFF_EDITOR_MIMETYPE); } -void DiffEditorWidgetController::slotApplyChunk() -{ - patch(false); -} - -void DiffEditorWidgetController::slotRevertChunk() -{ - patch(true); -} - } // namespace Internal } // namespace DiffEditor diff --git a/src/plugins/diffeditor/diffeditorwidgetcontroller.h b/src/plugins/diffeditor/diffeditorwidgetcontroller.h index f5b605936c..c0c1be9548 100644 --- a/src/plugins/diffeditor/diffeditorwidgetcontroller.h +++ b/src/plugins/diffeditor/diffeditorwidgetcontroller.h @@ -52,13 +52,13 @@ public: void setDocument(DiffEditorDocument *document); DiffEditorDocument *document() const; - void patch(bool revert); void jumpToOriginalFile(const QString &fileName, int lineNumber, int columnNumber); void setFontSettings(const TextEditor::FontSettings &fontSettings); - void addCodePasterAction(QMenu *menu); - void addApplyAction(QMenu *menu, int diffFileIndex, int chunkIndex); - void addRevertAction(QMenu *menu, int diffFileIndex, int chunkIndex); + void addCodePasterAction(QMenu *menu, int fileIndex, int chunkIndex); + void addApplyAction(QMenu *menu, int fileIndex, int chunkIndex); + void addRevertAction(QMenu *menu, int fileIndex, int chunkIndex); + void addExtraActions(QMenu *menu, int fileIndex, int chunkIndex); bool m_ignoreCurrentIndexChange = false; QList<FileData> m_contextFileData; // ultimate data to be shown @@ -71,11 +71,10 @@ public: QTextCharFormat m_rightCharFormat; private: - void slotSendChunkToCodePaster(); - void slotApplyChunk(); - void slotRevertChunk(); - bool setAndVerifyIndexes(QMenu *menu, int diffFileIndex, int chunkIndex); - bool fileNamesAreDifferent() const; + void patch(bool revert, int fileIndex, int chunkIndex); + void sendChunkToCodePaster(int fileIndex, int chunkIndex); + bool chunkExists(int fileIndex, int chunkIndex) const; + bool fileNamesAreDifferent(int fileIndex) const; void scheduleShowProgress(); void showProgress(); @@ -85,9 +84,6 @@ private: DiffEditorDocument *m_document = nullptr; - int m_contextMenuFileIndex = -1; - int m_contextMenuChunkIndex = -1; - Utils::ProgressIndicator *m_progressIndicator = nullptr; QTimer m_timer; }; diff --git a/src/plugins/diffeditor/sidebysidediffeditorwidget.cpp b/src/plugins/diffeditor/sidebysidediffeditorwidget.cpp index f42acfe8da..81942a9a66 100644 --- a/src/plugins/diffeditor/sidebysidediffeditorwidget.cpp +++ b/src/plugins/diffeditor/sidebysidediffeditorwidget.cpp @@ -1059,59 +1059,79 @@ void SideBySideDiffEditorWidget::slotRightJumpToOriginalFileRequested( } void SideBySideDiffEditorWidget::slotLeftContextMenuRequested(QMenu *menu, - int diffFileIndex, + int fileIndex, int chunkIndex) { menu->addSeparator(); - m_controller.addCodePasterAction(menu); - m_controller.addApplyAction(menu, diffFileIndex, chunkIndex); + m_controller.addCodePasterAction(menu, fileIndex, chunkIndex); + m_controller.addApplyAction(menu, fileIndex, chunkIndex); + m_controller.addExtraActions(menu, fileIndex, chunkIndex); } void SideBySideDiffEditorWidget::slotRightContextMenuRequested(QMenu *menu, - int diffFileIndex, + int fileIndex, int chunkIndex) { menu->addSeparator(); - m_controller.addCodePasterAction(menu); - m_controller.addRevertAction(menu, diffFileIndex, chunkIndex); + m_controller.addCodePasterAction(menu, fileIndex, chunkIndex); + m_controller.addRevertAction(menu, fileIndex, chunkIndex); + m_controller.addExtraActions(menu, fileIndex, chunkIndex); } void SideBySideDiffEditorWidget::leftVSliderChanged() { + if (m_controller.m_ignoreCurrentIndexChange) + return; + m_rightEditor->verticalScrollBar()->setValue(m_leftEditor->verticalScrollBar()->value()); } void SideBySideDiffEditorWidget::rightVSliderChanged() { + if (m_controller.m_ignoreCurrentIndexChange) + return; + m_leftEditor->verticalScrollBar()->setValue(m_rightEditor->verticalScrollBar()->value()); } void SideBySideDiffEditorWidget::leftHSliderChanged() { + if (m_controller.m_ignoreCurrentIndexChange) + return; + if (m_horizontalSync) m_rightEditor->horizontalScrollBar()->setValue(m_leftEditor->horizontalScrollBar()->value()); } void SideBySideDiffEditorWidget::rightHSliderChanged() { + if (m_controller.m_ignoreCurrentIndexChange) + return; + if (m_horizontalSync) m_leftEditor->horizontalScrollBar()->setValue(m_rightEditor->horizontalScrollBar()->value()); } void SideBySideDiffEditorWidget::leftCursorPositionChanged() { + if (m_controller.m_ignoreCurrentIndexChange) + return; + + handlePositionChange(m_leftEditor, m_rightEditor); leftVSliderChanged(); leftHSliderChanged(); - handlePositionChange(m_leftEditor, m_rightEditor); } void SideBySideDiffEditorWidget::rightCursorPositionChanged() { + if (m_controller.m_ignoreCurrentIndexChange) + return; + + handlePositionChange(m_rightEditor, m_leftEditor); rightVSliderChanged(); rightHSliderChanged(); - handlePositionChange(m_rightEditor, m_leftEditor); } void SideBySideDiffEditorWidget::handlePositionChange(SideDiffEditorWidget *source, SideDiffEditorWidget *dest) @@ -1129,6 +1149,8 @@ void SideBySideDiffEditorWidget::handlePositionChange(SideDiffEditorWidget *sour void SideBySideDiffEditorWidget::syncCursor(SideDiffEditorWidget *source, SideDiffEditorWidget *dest) { + const int oldHSliderPos = dest->horizontalScrollBar()->value(); + const QTextCursor sourceCursor = source->textCursor(); const int sourceLine = sourceCursor.blockNumber(); const int sourceColumn = sourceCursor.positionInBlock(); @@ -1139,6 +1161,7 @@ void SideBySideDiffEditorWidget::syncCursor(SideDiffEditorWidget *source, SideDi destCursor.setPosition(destPosition); dest->setTextCursor(destCursor); + dest->horizontalScrollBar()->setValue(oldHSliderPos); } } // namespace Internal diff --git a/src/plugins/diffeditor/sidebysidediffeditorwidget.h b/src/plugins/diffeditor/sidebysidediffeditorwidget.h index ba5c8ef550..c315cec975 100644 --- a/src/plugins/diffeditor/sidebysidediffeditorwidget.h +++ b/src/plugins/diffeditor/sidebysidediffeditorwidget.h @@ -85,9 +85,9 @@ private: int lineNumber, int columnNumber); void slotRightJumpToOriginalFileRequested(int diffFileIndex, int lineNumber, int columnNumber); - void slotLeftContextMenuRequested(QMenu *menu, int diffFileIndex, + void slotLeftContextMenuRequested(QMenu *menu, int fileIndex, int chunkIndex); - void slotRightContextMenuRequested(QMenu *menu, int diffFileIndex, + void slotRightContextMenuRequested(QMenu *menu, int fileIndex, int chunkIndex); void leftVSliderChanged(); void rightVSliderChanged(); diff --git a/src/plugins/diffeditor/unifieddiffeditorwidget.cpp b/src/plugins/diffeditor/unifieddiffeditorwidget.cpp index dbea4cbfb9..54ca275a58 100644 --- a/src/plugins/diffeditor/unifieddiffeditorwidget.cpp +++ b/src/plugins/diffeditor/unifieddiffeditorwidget.cpp @@ -190,14 +190,15 @@ void UnifiedDiffEditorWidget::contextMenuEvent(QContextMenuEvent *e) } void UnifiedDiffEditorWidget::addContextMenuActions(QMenu *menu, - int diffFileIndex, + int fileIndex, int chunkIndex) { menu->addSeparator(); - m_controller.addCodePasterAction(menu); - m_controller.addApplyAction(menu, diffFileIndex, chunkIndex); - m_controller.addRevertAction(menu, diffFileIndex, chunkIndex); + m_controller.addCodePasterAction(menu, fileIndex, chunkIndex); + m_controller.addApplyAction(menu, fileIndex, chunkIndex); + m_controller.addRevertAction(menu, fileIndex, chunkIndex); + m_controller.addExtraActions(menu, fileIndex, chunkIndex); } void UnifiedDiffEditorWidget::clear(const QString &message) diff --git a/src/plugins/diffeditor/unifieddiffeditorwidget.h b/src/plugins/diffeditor/unifieddiffeditorwidget.h index d3206a8ee2..33ca371277 100644 --- a/src/plugins/diffeditor/unifieddiffeditorwidget.h +++ b/src/plugins/diffeditor/unifieddiffeditorwidget.h @@ -96,7 +96,7 @@ private: int chunkIndexForBlockNumber(int blockNumber) const; void jumpToOriginalFile(const QTextCursor &cursor); void addContextMenuActions(QMenu *menu, - int diffFileIndex, + int fileIndex, int chunkIndex); // block number, visual line number. |