diff options
author | hjk <hjk@qt.io> | 2020-02-06 11:52:59 +0100 |
---|---|---|
committer | hjk <hjk@qt.io> | 2020-02-06 11:21:59 +0000 |
commit | b22768e980ef3e5275d98d1ed46d900aaadde904 (patch) | |
tree | d6f521d06cce333b2a211d2bb6863d1e08f21b3d /src/plugins/diffeditor | |
parent | 0737291d541e98c4a5ed0d4a058cc64a4227a141 (diff) |
Diff/Vcs: Use a function object for reloading
Helps with slimming down the user code side.
Change-Id: I4b0aac76c0d1516eb05bff9c18594e64f8b41a7a
Reviewed-by: Orgad Shaneh <orgads@gmail.com>
Diffstat (limited to 'src/plugins/diffeditor')
-rw-r--r-- | src/plugins/diffeditor/diffeditorcontroller.cpp | 8 | ||||
-rw-r--r-- | src/plugins/diffeditor/diffeditorcontroller.h | 9 | ||||
-rw-r--r-- | src/plugins/diffeditor/diffeditorplugin.cpp | 26 |
3 files changed, 22 insertions, 21 deletions
diff --git a/src/plugins/diffeditor/diffeditorcontroller.cpp b/src/plugins/diffeditor/diffeditorcontroller.cpp index 7ca1a4694b..0c0c51dbd3 100644 --- a/src/plugins/diffeditor/diffeditorcontroller.cpp +++ b/src/plugins/diffeditor/diffeditorcontroller.cpp @@ -123,6 +123,11 @@ void DiffEditorController::forceContextLineCount(int lines) m_document->forceContextLineCount(lines); } +void DiffEditorController::setReloader(const std::function<void ()> &reloader) +{ + m_reloader = reloader; +} + Core::IDocument *DiffEditorController::document() const { return m_document; @@ -135,7 +140,8 @@ void DiffEditorController::requestReload() { m_isReloading = true; m_document->beginReload(); - reload(); + QTC_ASSERT(m_reloader, reloadFinished(false); return); + m_reloader(); } void DiffEditorController::reloadFinished(bool success) diff --git a/src/plugins/diffeditor/diffeditorcontroller.h b/src/plugins/diffeditor/diffeditorcontroller.h index ef8f209254..b97a0f5665 100644 --- a/src/plugins/diffeditor/diffeditorcontroller.h +++ b/src/plugins/diffeditor/diffeditorcontroller.h @@ -72,15 +72,15 @@ public: bool chunkExists(int fileIndex, int chunkIndex) const; Core::IDocument *document() const; + // reloadFinished() should be called inside the reloader (for synchronous reload) + // or later (for asynchronous reload) + void setReloader(const std::function<void ()> &reloader); + signals: void chunkActionsRequested(QMenu *menu, int fileIndex, int chunkIndex, const ChunkSelection &selection); protected: - // reloadFinished() should be called - // inside reload() (for synchronous reload) - // or later (for asynchronous reload) - virtual void reload() = 0; void reloadFinished(bool success); void setDiffFiles(const QList<FileData> &diffFileList, @@ -93,6 +93,7 @@ protected: private: Internal::DiffEditorDocument *const m_document; bool m_isReloading = false; + std::function<void()> m_reloader; friend class Internal::DiffEditorDocument; }; diff --git a/src/plugins/diffeditor/diffeditorplugin.cpp b/src/plugins/diffeditor/diffeditorplugin.cpp index ff405524e3..c3898a5296 100644 --- a/src/plugins/diffeditor/diffeditorplugin.cpp +++ b/src/plugins/diffeditor/diffeditorplugin.cpp @@ -130,11 +130,11 @@ class DiffFilesController : public DiffEditorController Q_OBJECT public: DiffFilesController(IDocument *document); - ~DiffFilesController() override; + ~DiffFilesController() override { cancelReload(); } protected: - void reload() final; virtual QList<ReloadInput> reloadInputList() const = 0; + private: void reloaded(); void cancelReload(); @@ -147,22 +147,16 @@ DiffFilesController::DiffFilesController(IDocument *document) { connect(&m_futureWatcher, &QFutureWatcher<FileData>::finished, this, &DiffFilesController::reloaded); -} - -DiffFilesController::~DiffFilesController() -{ - cancelReload(); -} -void DiffFilesController::reload() -{ - cancelReload(); - m_futureWatcher.setFuture(Utils::map(reloadInputList(), - DiffFile(ignoreWhitespace(), - contextLineCount()))); + setReloader([this] { + cancelReload(); + m_futureWatcher.setFuture(Utils::map(reloadInputList(), + DiffFile(ignoreWhitespace(), + contextLineCount()))); - Core::ProgressManager::addTask(m_futureWatcher.future(), - tr("Calculating diff"), "DiffEditor"); + Core::ProgressManager::addTask(m_futureWatcher.future(), + tr("Calculating diff"), "DiffEditor"); + }); } void DiffFilesController::reloaded() |