DiffEditorController: Make it possible to setup task tree

Instead of reloader function. Use task tree for ShowController.
Make diff processing a part of task tree.

Change-Id: I732d0a14eaf8de7ce0d1be891fb4700b22ea24b7
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: Orgad Shaneh <orgads@gmail.com>
This commit is contained in:
Jarek Kobus
2022-12-12 14:40:56 +01:00
parent 041c59e90f
commit eef9cb458b
7 changed files with 207 additions and 123 deletions

View File

@@ -8,6 +8,7 @@
#include <coreplugin/editormanager/editormanager.h>
#include <coreplugin/editormanager/ieditor.h>
#include <coreplugin/icore.h>
#include <coreplugin/progressmanager/taskprogress.h>
#include <utils/qtcassert.h>
@@ -122,12 +123,22 @@ void DiffEditorController::requestReload()
{
m_isReloading = true;
m_document->beginReload();
QTC_ASSERT(m_reloader, reloadFinished(false); return);
m_reloader();
if (m_reloader) {
m_reloader();
return;
}
m_taskTree.reset(new TaskTree(reloadRecipe()));
connect(m_taskTree.get(), &TaskTree::done, this, [this] { reloadFinished(true); });
connect(m_taskTree.get(), &TaskTree::errorOccurred, this, [this] { reloadFinished(false); });
auto progress = new TaskProgress(m_taskTree.get());
progress->setDisplayName(displayName());
m_taskTree->start();
}
void DiffEditorController::reloadFinished(bool success)
{
if (m_taskTree)
m_taskTree.release()->deleteLater();
m_document->endReload(success);
m_isReloading = false;
}

View File

@@ -7,6 +7,7 @@
#include "diffutils.h"
#include <utils/filepath.h>
#include <utils/tasktree.h>
#include <QObject>
@@ -57,6 +58,9 @@ signals:
const ChunkSelection &selection);
protected:
void setDisplayName(const QString &name) { m_displayName = name; }
QString displayName() const { return m_displayName; }
// reloadFinished() should be called inside the reloader (for synchronous reload)
// or later (for asynchronous reload)
void setReloader(const std::function<void ()> &reloader);
@@ -72,7 +76,10 @@ protected:
private:
Internal::DiffEditorDocument *const m_document;
bool m_isReloading = false;
QString m_displayName;
std::function<void()> m_reloader;
std::unique_ptr<Utils::TaskTree> m_taskTree;
virtual Utils::Tasking::Group reloadRecipe() { return {}; } // TODO: make pure abstract
friend class Internal::DiffEditorDocument;
};