forked from qt-creator/qt-creator
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:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user