blob: e499aa3baccc075ea034324ce9afb657f0124554 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
// Copyright (C) 2024 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#pragma once
#include "texteditor_global.h"
#include <utils/textutils.h>
#include <QTextBlock>
#include <QTextCursor>
#include <QTextDocument>
namespace TextEditor {
class TextEditorWidget;
class BaseHoverHandler;
class TEXTEDITOR_EXPORT TextSuggestion
{
public:
class TEXTEDITOR_EXPORT Data
{
public:
Utils::Text::Range range;
Utils::Text::Position position;
QString text;
};
TextSuggestion(const Data &suggestion, QTextDocument *sourceDocument);
virtual ~TextSuggestion();
// Returns true if the suggestion was applied completely, false if it was only partially applied.
virtual bool apply();
// Returns true if the suggestion was applied completely, false if it was only partially applied.
virtual bool applyWord(TextEditorWidget *widget);
virtual bool applyLine(TextEditorWidget *widget);
virtual bool filterSuggestions(TextEditorWidget *widget);
int currentPosition() const { return m_currentPosition; }
void setCurrentPosition(int position) { m_currentPosition = position; }
QTextDocument *replacementDocument() { return &m_replacementDocument; }
QTextDocument *sourceDocument() { return m_sourceDocument; }
private:
enum Part {Word, Line};
bool applyPart(Part part, TextEditor::TextEditorWidget *widget);
Data m_suggestion;
QTextDocument m_replacementDocument;
QTextDocument *m_sourceDocument = nullptr;
int m_currentPosition = -1;
};
class TEXTEDITOR_EXPORT CyclicSuggestion : public TextSuggestion
{
public:
CyclicSuggestion(
const QList<Data> &suggestions, QTextDocument *sourceDocument, int currentCompletion = 0);
QList<Data> suggestions() const { return m_suggestions; }
int currentSuggestion() const { return m_currentSuggestion; }
private:
bool filterSuggestions(TextEditorWidget *widget) override;
QList<Data> m_suggestions;
int m_currentSuggestion = 0;
};
BaseHoverHandler &suggestionHoverHandler();
} // namespace TextEditor
|