forked from qt-creator/qt-creator
DiffEditor: Don't use QFutureInterfaceBase::get()
It's available only since Qt 6.3.
Amends 5ff073df19
Change-Id: I38c8c3b0bc3c94612dee15614f00e83ebc86db04
Reviewed-by: Orgad Shaneh <orgads@gmail.com>
This commit is contained in:
@@ -244,8 +244,8 @@ QString SideDiffEditorWidget::plainTextFromSelection(const QTextCursor &cursor)
|
||||
return TextDocument::convertToPlainText(text);
|
||||
}
|
||||
|
||||
SideBySideDiffOutput SideDiffData::diffOutput(QFutureInterfaceBase &fi, int progressMin,
|
||||
int progressMax, const DiffEditorInput &input)
|
||||
static SideBySideDiffOutput diffOutput(QPromise<SideBySideShowResults> &promise, int progressMin,
|
||||
int progressMax, const DiffEditorInput &input)
|
||||
{
|
||||
SideBySideDiffOutput output;
|
||||
|
||||
@@ -365,8 +365,8 @@ SideBySideDiffOutput SideDiffData::diffOutput(QFutureInterfaceBase &fi, int prog
|
||||
diffText[RightSide].replace('\r', ' ');
|
||||
output.side[LeftSide].diffText += diffText[LeftSide];
|
||||
output.side[RightSide].diffText += diffText[RightSide];
|
||||
fi.setProgressValue(MathUtils::interpolateLinear(++i, 0, count, progressMin, progressMax));
|
||||
if (fi.isCanceled())
|
||||
promise.setProgressValue(MathUtils::interpolateLinear(++i, 0, count, progressMin, progressMax));
|
||||
if (promise.isCanceled())
|
||||
return {};
|
||||
}
|
||||
output.side[LeftSide].selections = SelectableTextEditorWidget::polishedSelections(
|
||||
@@ -868,7 +868,7 @@ void SideBySideDiffEditorWidget::restoreState()
|
||||
|
||||
void SideBySideDiffEditorWidget::showDiff()
|
||||
{
|
||||
m_asyncTask.reset(new AsyncTask<ShowResults>());
|
||||
m_asyncTask.reset(new AsyncTask<SideBySideShowResults>());
|
||||
m_asyncTask->setFutureSynchronizer(DiffEditorPlugin::futureSynchronizer());
|
||||
m_controller.setBusyShowing(true);
|
||||
|
||||
@@ -877,7 +877,7 @@ void SideBySideDiffEditorWidget::showDiff()
|
||||
for (SideDiffEditorWidget *editor : m_editor)
|
||||
editor->clearAll(Tr::tr("Retrieving data failed."));
|
||||
} else {
|
||||
const ShowResults results = m_asyncTask->result();
|
||||
const SideBySideShowResults results = m_asyncTask->result();
|
||||
m_editor[LeftSide]->setDiffData(results[LeftSide].diffData);
|
||||
m_editor[RightSide]->setDiffData(results[RightSide].diffData);
|
||||
TextDocumentPtr leftDoc(results[LeftSide].textDocument);
|
||||
@@ -913,24 +913,23 @@ void SideBySideDiffEditorWidget::showDiff()
|
||||
|
||||
const DiffEditorInput input(&m_controller);
|
||||
|
||||
auto getDocument = [input](QPromise<ShowResults> &promise) {
|
||||
auto getDocument = [input](QPromise<SideBySideShowResults> &promise) {
|
||||
const int firstPartMax = 20; // diffOutput is about 4 times quicker than filling document
|
||||
const int leftPartMax = 60;
|
||||
const int rightPartMax = 100;
|
||||
promise.setProgressRange(0, rightPartMax);
|
||||
promise.setProgressValue(0);
|
||||
QFutureInterfaceBase fi = QFutureInterfaceBase::get(promise.future());
|
||||
const SideBySideDiffOutput output = SideDiffData::diffOutput(fi, 0, firstPartMax, input);
|
||||
const SideBySideDiffOutput output = diffOutput(promise, 0, firstPartMax, input);
|
||||
if (promise.isCanceled())
|
||||
return;
|
||||
|
||||
const ShowResult leftResult{TextDocumentPtr(new TextDocument("DiffEditor.SideDiffEditor")),
|
||||
const SideBySideShowResult leftResult{TextDocumentPtr(new TextDocument("DiffEditor.SideDiffEditor")),
|
||||
output.side[LeftSide].diffData, output.side[LeftSide].selections};
|
||||
const ShowResult rightResult{TextDocumentPtr(new TextDocument("DiffEditor.SideDiffEditor")),
|
||||
const SideBySideShowResult rightResult{TextDocumentPtr(new TextDocument("DiffEditor.SideDiffEditor")),
|
||||
output.side[RightSide].diffData, output.side[RightSide].selections};
|
||||
const ShowResults result{leftResult, rightResult};
|
||||
const SideBySideShowResults result{leftResult, rightResult};
|
||||
|
||||
auto propagateDocument = [&output, &promise](DiffSide side, const ShowResult &result,
|
||||
auto propagateDocument = [&output, &promise](DiffSide side, const SideBySideShowResult &result,
|
||||
int progressMin, int progressMax) {
|
||||
// No need to store the change history
|
||||
result.textDocument->document()->setUndoRedoEnabled(false);
|
||||
|
||||
@@ -40,9 +40,6 @@ class SideBySideDiffOutput;
|
||||
class SideDiffData
|
||||
{
|
||||
public:
|
||||
static SideBySideDiffOutput diffOutput(QFutureInterfaceBase &fi, int progressMin,
|
||||
int progressMax, const DiffEditorInput &input);
|
||||
|
||||
DiffChunkInfo m_chunkInfo;
|
||||
// block number, fileInfo. Set for file lines only.
|
||||
QMap<int, DiffFileInfo> m_fileInfo;
|
||||
@@ -60,7 +57,6 @@ public:
|
||||
int blockNumberForFileIndex(int fileIndex) const;
|
||||
int fileIndexForBlockNumber(int blockNumber) const;
|
||||
|
||||
private:
|
||||
void setLineNumber(int blockNumber, int lineNumber);
|
||||
void setFileInfo(int blockNumber, const DiffFileInfo &fileInfo);
|
||||
void setSkippedLines(int blockNumber, int skippedLines, const QString &contextInfo = {}) {
|
||||
@@ -88,6 +84,16 @@ public:
|
||||
QHash<int, int> foldingIndent;
|
||||
};
|
||||
|
||||
class SideBySideShowResult
|
||||
{
|
||||
public:
|
||||
QSharedPointer<TextEditor::TextDocument> textDocument{};
|
||||
SideDiffData diffData;
|
||||
DiffSelections selections;
|
||||
};
|
||||
|
||||
using SideBySideShowResults = std::array<SideBySideShowResult, SideCount>;
|
||||
|
||||
class SideBySideDiffEditorWidget : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
@@ -135,15 +141,7 @@ private:
|
||||
|
||||
bool m_horizontalSync = false;
|
||||
|
||||
struct ShowResult
|
||||
{
|
||||
QSharedPointer<TextEditor::TextDocument> textDocument{};
|
||||
SideDiffData diffData;
|
||||
DiffSelections selections;
|
||||
};
|
||||
using ShowResults = std::array<ShowResult, SideCount>;
|
||||
|
||||
std::unique_ptr<Utils::AsyncTask<ShowResults>> m_asyncTask;
|
||||
std::unique_ptr<Utils::AsyncTask<SideBySideShowResults>> m_asyncTask;
|
||||
};
|
||||
|
||||
} // namespace Internal
|
||||
|
||||
@@ -65,6 +65,14 @@ DiffEditorDocument *UnifiedDiffEditorWidget::diffDocument() const
|
||||
return m_controller.document();
|
||||
}
|
||||
|
||||
void UnifiedDiffEditorWidget::setDiff(const QList<FileData> &diffFileList)
|
||||
{
|
||||
const GuardLocker locker(m_controller.m_ignoreChanges);
|
||||
clear(Tr::tr("Waiting for data..."));
|
||||
m_controller.m_contextFileData = diffFileList;
|
||||
showDiff();
|
||||
}
|
||||
|
||||
void UnifiedDiffEditorWidget::saveState()
|
||||
{
|
||||
if (!m_state.isNull())
|
||||
@@ -257,14 +265,6 @@ void UnifiedDiffData::setLineNumber(DiffSide side, int blockNumber, int lineNumb
|
||||
m_lineNumberDigits[side] = qMax(m_lineNumberDigits[side], lineNumberString.count());
|
||||
}
|
||||
|
||||
void UnifiedDiffEditorWidget::setDiff(const QList<FileData> &diffFileList)
|
||||
{
|
||||
const GuardLocker locker(m_controller.m_ignoreChanges);
|
||||
clear(Tr::tr("Waiting for data..."));
|
||||
m_controller.m_contextFileData = diffFileList;
|
||||
showDiff();
|
||||
}
|
||||
|
||||
QString UnifiedDiffData::setChunk(const DiffEditorInput &input, const ChunkData &chunkData,
|
||||
bool lastChunk, int *blockNumber, DiffSelections *selections)
|
||||
{
|
||||
@@ -388,8 +388,8 @@ QString UnifiedDiffData::setChunk(const DiffEditorInput &input, const ChunkData
|
||||
return diffText;
|
||||
}
|
||||
|
||||
UnifiedDiffOutput UnifiedDiffData::diffOutput(QFutureInterfaceBase &fi, int progressMin,
|
||||
int progressMax, const DiffEditorInput &input)
|
||||
static UnifiedDiffOutput diffOutput(QPromise<UnifiedShowResult> &promise, int progressMin,
|
||||
int progressMax, const DiffEditorInput &input)
|
||||
{
|
||||
UnifiedDiffOutput output;
|
||||
|
||||
@@ -434,8 +434,8 @@ UnifiedDiffOutput UnifiedDiffData::diffOutput(QFutureInterfaceBase &fi, int prog
|
||||
output.diffData.m_chunkInfo.setChunkIndex(oldBlock, blockNumber - oldBlock, j);
|
||||
}
|
||||
}
|
||||
fi.setProgressValue(MathUtils::interpolateLinear(++i, 0, count, progressMin, progressMax));
|
||||
if (fi.isCanceled())
|
||||
promise.setProgressValue(MathUtils::interpolateLinear(++i, 0, count, progressMin, progressMax));
|
||||
if (promise.isCanceled())
|
||||
return {};
|
||||
}
|
||||
|
||||
@@ -451,14 +451,14 @@ void UnifiedDiffEditorWidget::showDiff()
|
||||
return;
|
||||
}
|
||||
|
||||
m_asyncTask.reset(new AsyncTask<ShowResult>());
|
||||
m_asyncTask.reset(new AsyncTask<UnifiedShowResult>());
|
||||
m_asyncTask->setFutureSynchronizer(DiffEditorPlugin::futureSynchronizer());
|
||||
m_controller.setBusyShowing(true);
|
||||
connect(m_asyncTask.get(), &AsyncTaskBase::done, this, [this] {
|
||||
if (m_asyncTask->isCanceled() || !m_asyncTask->isResultAvailable()) {
|
||||
setPlainText(Tr::tr("Retrieving data failed."));
|
||||
} else {
|
||||
const ShowResult result = m_asyncTask->result();
|
||||
const UnifiedShowResult result = m_asyncTask->result();
|
||||
m_data = result.diffData;
|
||||
TextDocumentPtr doc(result.textDocument);
|
||||
{
|
||||
@@ -478,17 +478,16 @@ void UnifiedDiffEditorWidget::showDiff()
|
||||
|
||||
const DiffEditorInput input(&m_controller);
|
||||
|
||||
auto getDocument = [input](QPromise<ShowResult> &promise) {
|
||||
auto getDocument = [input](QPromise<UnifiedShowResult> &promise) {
|
||||
const int progressMax = 100;
|
||||
const int firstPartMax = 20; // diffOutput is about 4 times quicker than filling document
|
||||
promise.setProgressRange(0, progressMax);
|
||||
promise.setProgressValue(0);
|
||||
QFutureInterfaceBase fi = QFutureInterfaceBase::get(promise.future());
|
||||
const UnifiedDiffOutput output = UnifiedDiffData::diffOutput(fi, 0, firstPartMax, input);
|
||||
const UnifiedDiffOutput output = diffOutput(promise, 0, firstPartMax, input);
|
||||
if (promise.isCanceled())
|
||||
return;
|
||||
|
||||
const ShowResult result = {TextDocumentPtr(new TextDocument("DiffEditor.UnifiedDiffEditor")),
|
||||
const UnifiedShowResult result = {TextDocumentPtr(new TextDocument("DiffEditor.UnifiedDiffEditor")),
|
||||
output.diffData, output.selections};
|
||||
// No need to store the change history
|
||||
result.textDocument->document()->setUndoRedoEnabled(false);
|
||||
|
||||
@@ -33,9 +33,6 @@ class UnifiedDiffOutput;
|
||||
class UnifiedDiffData
|
||||
{
|
||||
public:
|
||||
static UnifiedDiffOutput diffOutput(QFutureInterfaceBase &fi, int progressMin, int progressMax,
|
||||
const DiffEditorInput &input);
|
||||
|
||||
DiffChunkInfo m_chunkInfo;
|
||||
// block number, visual line number.
|
||||
QMap<int, DiffFileInfoArray> m_fileInfo;
|
||||
@@ -47,10 +44,10 @@ public:
|
||||
int blockNumberForFileIndex(int fileIndex) const;
|
||||
int fileIndexForBlockNumber(int blockNumber) const;
|
||||
|
||||
private:
|
||||
void setLineNumber(DiffSide side, int blockNumber, int lineNumber, int rowNumberInChunk);
|
||||
QString setChunk(const DiffEditorInput &input, const ChunkData &chunkData,
|
||||
bool lastChunk, int *blockNumber, DiffSelections *selections);
|
||||
private:
|
||||
void setLineNumber(DiffSide side, int blockNumber, int lineNumber, int rowNumberInChunk);
|
||||
};
|
||||
|
||||
class UnifiedDiffOutput
|
||||
@@ -65,6 +62,14 @@ public:
|
||||
DiffSelections selections;
|
||||
};
|
||||
|
||||
class UnifiedShowResult
|
||||
{
|
||||
public:
|
||||
QSharedPointer<TextEditor::TextDocument> textDocument;
|
||||
UnifiedDiffData diffData;
|
||||
DiffSelections selections;
|
||||
};
|
||||
|
||||
class UnifiedDiffEditorWidget final : public SelectableTextEditorWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
@@ -107,14 +112,7 @@ private:
|
||||
DiffEditorWidgetController m_controller;
|
||||
QByteArray m_state;
|
||||
|
||||
struct ShowResult
|
||||
{
|
||||
QSharedPointer<TextEditor::TextDocument> textDocument;
|
||||
UnifiedDiffData diffData;
|
||||
DiffSelections selections;
|
||||
};
|
||||
|
||||
std::unique_ptr<Utils::AsyncTask<ShowResult>> m_asyncTask;
|
||||
std::unique_ptr<Utils::AsyncTask<UnifiedShowResult>> m_asyncTask;
|
||||
};
|
||||
|
||||
} // namespace Internal
|
||||
|
||||
Reference in New Issue
Block a user