summaryrefslogtreecommitdiff
path: root/src/plugins/diffeditor/unifieddiffeditorwidget.cpp
diff options
context:
space:
mode:
authorJarek Kobus <jaroslaw.kobus@qt.io>2023-02-11 23:21:58 +0100
committerJarek Kobus <jaroslaw.kobus@qt.io>2023-03-09 11:53:18 +0000
commit5ff073df19b872b8db601f31e1124c6048a89a3c (patch)
treeb3f1dec556a5e99a266b8829d559955bad8995e5 /src/plugins/diffeditor/unifieddiffeditorwidget.cpp
parenta8214665fe45f61668df380f045150258487a55a (diff)
downloadqt-creator-5ff073df19b872b8db601f31e1124c6048a89a3c.tar.gz
DiffEditor: Use QtConcurrent invocation for async tasks
Change-Id: I06640837ffee830e60e8dd2a566f9388f8444010 Reviewed-by: Orgad Shaneh <orgads@gmail.com>
Diffstat (limited to 'src/plugins/diffeditor/unifieddiffeditorwidget.cpp')
-rw-r--r--src/plugins/diffeditor/unifieddiffeditorwidget.cpp42
1 files changed, 18 insertions, 24 deletions
diff --git a/src/plugins/diffeditor/unifieddiffeditorwidget.cpp b/src/plugins/diffeditor/unifieddiffeditorwidget.cpp
index b937b919f7..82ba5e51fa 100644
--- a/src/plugins/diffeditor/unifieddiffeditorwidget.cpp
+++ b/src/plugins/diffeditor/unifieddiffeditorwidget.cpp
@@ -8,23 +8,20 @@
#include "diffeditorplugin.h"
#include "diffeditortr.h"
-#include <QMenu>
-#include <QPainter>
-#include <QScrollBar>
-#include <QTextBlock>
-
#include <coreplugin/icore.h>
#include <coreplugin/progressmanager/progressmanager.h>
#include <texteditor/fontsettings.h>
#include <texteditor/textdocument.h>
-#include <texteditor/textdocumentlayout.h>
#include <texteditor/texteditorsettings.h>
#include <utils/asynctask.h>
#include <utils/mathutils.h>
#include <utils/qtcassert.h>
-#include <utils/tooltip/tooltip.h>
+
+#include <QMenu>
+#include <QScrollBar>
+#include <QTextBlock>
using namespace Core;
using namespace TextEditor;
@@ -48,10 +45,10 @@ UnifiedDiffEditorWidget::UnifiedDiffEditorWidget(QWidget *parent)
connect(this, &QPlainTextEdit::cursorPositionChanged,
this, &UnifiedDiffEditorWidget::slotCursorPositionChangedInEditor);
- auto context = new Core::IContext(this);
+ auto context = new IContext(this);
context->setWidget(this);
- context->setContext(Core::Context(Constants::UNIFIED_VIEW_ID));
- Core::ICore::addContextObject(context);
+ context->setContext(Context(Constants::UNIFIED_VIEW_ID));
+ ICore::addContextObject(context);
}
UnifiedDiffEditorWidget::~UnifiedDiffEditorWidget() = default;
@@ -391,7 +388,7 @@ QString UnifiedDiffData::setChunk(const DiffEditorInput &input, const ChunkData
return diffText;
}
-UnifiedDiffOutput UnifiedDiffData::diffOutput(QFutureInterface<void> &fi, int progressMin,
+UnifiedDiffOutput UnifiedDiffData::diffOutput(QFutureInterfaceBase &fi, int progressMin,
int progressMax, const DiffEditorInput &input)
{
UnifiedDiffOutput output;
@@ -481,18 +478,14 @@ void UnifiedDiffEditorWidget::showDiff()
const DiffEditorInput input(&m_controller);
- auto getDocument = [input](QFutureInterface<ShowResult> &futureInterface) {
- auto cleanup = qScopeGuard([&futureInterface] {
- if (futureInterface.isCanceled())
- futureInterface.reportCanceled();
- });
+ auto getDocument = [input](QPromise<ShowResult> &promise) {
const int progressMax = 100;
const int firstPartMax = 20; // diffOutput is about 4 times quicker than filling document
- futureInterface.setProgressRange(0, progressMax);
- futureInterface.setProgressValue(0);
- QFutureInterface<void> fi = futureInterface;
+ promise.setProgressRange(0, progressMax);
+ promise.setProgressValue(0);
+ QFutureInterfaceBase fi = QFutureInterfaceBase::get(promise.future());
const UnifiedDiffOutput output = UnifiedDiffData::diffOutput(fi, 0, firstPartMax, input);
- if (futureInterface.isCanceled())
+ if (promise.isCanceled())
return;
const ShowResult result = {TextDocumentPtr(new TextDocument("DiffEditor.UnifiedDiffEditor")),
@@ -512,8 +505,9 @@ void UnifiedDiffEditorWidget::showDiff()
const QString package = output.diffText.mid(currentPos, packageSize);
cursor.insertText(package);
currentPos += package.size();
- fi.setProgressValue(MathUtils::interpolateLinear(currentPos, 0, diffSize, firstPartMax, progressMax));
- if (futureInterface.isCanceled())
+ promise.setProgressValue(MathUtils::interpolateLinear(currentPos, 0, diffSize,
+ firstPartMax, progressMax));
+ if (promise.isCanceled())
return;
}
@@ -525,10 +519,10 @@ void UnifiedDiffEditorWidget::showDiff()
// to caller's thread. We push it to no thread (make object to have no thread affinity),
// and later, in the caller's thread, we pull it back to the caller's thread.
result.textDocument->moveToThread(nullptr);
- futureInterface.reportResult(result);
+ promise.addResult(result);
};
- m_asyncTask->setAsyncCallData(getDocument);
+ m_asyncTask->setConcurrentCallData(getDocument);
m_asyncTask->start();
ProgressManager::addTask(m_asyncTask->future(), Tr::tr("Rendering diff"), "DiffEditor");
}