aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/texteditor/textdocumentlayout.h
diff options
context:
space:
mode:
authorDavid Schulz <david.schulz@qt.io>2023-03-27 07:28:48 +0200
committerDavid Schulz <david.schulz@qt.io>2023-03-29 07:43:19 +0000
commit8a1e34f084f24f45d61e0011a2b6486aadc34218 (patch)
tree0f5b0b5d52df71a23a75e453b0f1fbf804bae2c6 /src/plugins/texteditor/textdocumentlayout.h
parent1ee46580ac8afda64e63b3dd816b4acbfad5dfaa (diff)
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>
Diffstat (limited to 'src/plugins/texteditor/textdocumentlayout.h')
-rw-r--r--src/plugins/texteditor/textdocumentlayout.h40
1 files changed, 27 insertions, 13 deletions
diff --git a/src/plugins/texteditor/textdocumentlayout.h b/src/plugins/texteditor/textdocumentlayout.h
index 97fa5992ab..e02615b106 100644
--- a/src/plugins/texteditor/textdocumentlayout.h
+++ b/src/plugins/texteditor/textdocumentlayout.h
@@ -42,6 +42,24 @@ public:
virtual ~CodeFormatterData();
};
+class TEXTEDITOR_EXPORT TextSuggestion
+{
+public:
+ TextSuggestion();
+ virtual bool apply() = 0;
+ virtual void reset() = 0;
+ virtual int position() = 0;
+
+ int currentPosition() const { return m_currentPosition; }
+ void setCurrentPosition(int position) { m_currentPosition = position; }
+
+ QTextDocument *document() { return &m_replacementDocument; }
+
+private:
+ QTextDocument m_replacementDocument;
+ int m_currentPosition = -1;
+};
+
class TEXTEDITOR_EXPORT TextBlockUserData : public QTextBlockUserData
{
public:
@@ -126,11 +144,9 @@ public:
QByteArray expectedRawStringSuffix() { return m_expectedRawStringSuffix; }
void setExpectedRawStringSuffix(const QByteArray &suffix) { m_expectedRawStringSuffix = suffix; }
- void setReplacement(const QString &replacement);
- void setReplacementPosition(int replacementPosition);
- void clearReplacement();
- QTextDocument *replacement() const { return m_replacement.get(); }
- int replacementPosition() const { return m_replacementPosition; }
+ void insertSuggestion(std::unique_ptr<TextSuggestion> &&suggestion);
+ TextSuggestion *suggestion() const;
+ void clearSuggestion();
private:
TextMarks m_marks;
@@ -146,7 +162,7 @@ private:
KSyntaxHighlighting::State m_syntaxState;
QByteArray m_expectedRawStringSuffix; // A bit C++-specific, but let's be pragmatic.
std::unique_ptr<QTextDocument> m_replacement;
- int m_replacementPosition = -1;
+ std::unique_ptr<TextSuggestion> m_suggestion;
};
@@ -180,14 +196,12 @@ public:
static void setFolded(const QTextBlock &block, bool folded);
static void setExpectedRawStringSuffix(const QTextBlock &block, const QByteArray &suffix);
static QByteArray expectedRawStringSuffix(const QTextBlock &block);
- static void updateReplacementFormats(const QTextBlock &block,
+ static TextSuggestion *suggestion(const QTextBlock &block);
+ static void updateSuggestionFormats(const QTextBlock &block,
const FontSettings &fontSettings);
- static QString replacement(const QTextBlock &block);
- static QTextDocument *replacementDocument(const QTextBlock &block);
- static int replacementPosition(const QTextBlock &block);
- static bool updateReplacement(const QTextBlock &block,
- int position,
- const FontSettings &fontSettings);
+ static bool updateSuggestion(const QTextBlock &block,
+ int position,
+ const FontSettings &fontSettings);
class TEXTEDITOR_EXPORT FoldValidator
{