TextEditor: introduce text suggestion interface

And also a copilot suggestion implementing that interface that allows
reverting all changes done to a suggestion as well as applying it.

Change-Id: I236c1fc5e5844d19ac606672af54e273e9c42e1c
Reviewed-by: Marcus Tillmanns <marcus.tillmanns@qt.io>
This commit is contained in:
David Schulz
2023-03-27 07:28:48 +02:00
parent 1ee46580ac
commit 8a1e34f084
10 changed files with 190 additions and 147 deletions

View File

@@ -373,16 +373,13 @@ QAction *TextDocument::createDiffAgainstCurrentFileAction(
return diffAction;
}
void TextDocument::insertSuggestion(const QString &text, const QTextCursor &cursor)
void TextDocument::insertSuggestion(std::unique_ptr<TextSuggestion> &&suggestion)
{
QTextCursor cursor(&d->m_document);
cursor.setPosition(suggestion->position());
const QTextBlock block = cursor.block();
const QString blockText = block.text();
QString replacement = blockText.left(cursor.positionInBlock()) + text;
if (!text.contains('\n'))
replacement.append(blockText.mid(cursor.positionInBlock()));
TextDocumentLayout::userData(block)->setReplacement(replacement);
TextDocumentLayout::userData(block)->setReplacementPosition(cursor.positionInBlock());
TextDocumentLayout::updateReplacementFormats(block, fontSettings());
TextDocumentLayout::userData(block)->insertSuggestion(std::move(suggestion));
TextDocumentLayout::updateSuggestionFormats(block, fontSettings());
updateLayout();
}
@@ -434,7 +431,7 @@ void TextDocument::applyFontSettings()
d->m_fontSettingsNeedsApply = false;
QTextBlock block = document()->firstBlock();
while (block.isValid()) {
TextDocumentLayout::updateReplacementFormats(block, fontSettings());
TextDocumentLayout::updateSuggestionFormats(block, fontSettings());
block = block.next();
}
updateLayout();