diff options
author | Jarek Kobus <jaroslaw.kobus@qt.io> | 2023-02-11 23:21:58 +0100 |
---|---|---|
committer | Jarek Kobus <jaroslaw.kobus@qt.io> | 2023-03-09 11:53:18 +0000 |
commit | 5ff073df19b872b8db601f31e1124c6048a89a3c (patch) | |
tree | b3f1dec556a5e99a266b8829d559955bad8995e5 /src/plugins/diffeditor/unifieddiffeditorwidget.cpp | |
parent | a8214665fe45f61668df380f045150258487a55a (diff) | |
download | qt-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.cpp | 42 |
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"); } |