aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/diffeditor
diff options
context:
space:
mode:
authorhjk <hjk@qt.io>2020-02-06 11:52:59 +0100
committerhjk <hjk@qt.io>2020-02-06 11:21:59 +0000
commitb22768e980ef3e5275d98d1ed46d900aaadde904 (patch)
treed6f521d06cce333b2a211d2bb6863d1e08f21b3d /src/plugins/diffeditor
parent0737291d541e98c4a5ed0d4a058cc64a4227a141 (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.cpp8
-rw-r--r--src/plugins/diffeditor/diffeditorcontroller.h9
-rw-r--r--src/plugins/diffeditor/diffeditorplugin.cpp26
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()