blob: cf967f66fd1acf16658d1429ba19c2a04ccc598a (
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
|
/*
* Copyright (c) 2020-2022, the SerenityOS developers.
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
#include <LibCodeComprehension/Types.h>
#include <LibGUI/Forward.h>
#include <LibGUI/Label.h>
#include <LibGUI/TableView.h>
#include <LibGUI/TextEditor.h>
#include <LibGUI/Window.h>
#include <LibIPC/Decoder.h>
namespace GUI {
class AutocompleteProvider {
AK_MAKE_NONCOPYABLE(AutocompleteProvider);
AK_MAKE_NONMOVABLE(AutocompleteProvider);
public:
virtual ~AutocompleteProvider() = default;
virtual void provide_completions(Function<void(Vector<CodeComprehension::AutocompleteResultEntry>)>) = 0;
void attach(TextEditor& editor)
{
VERIFY(!m_editor);
m_editor = editor;
}
void detach() { m_editor.clear(); }
protected:
AutocompleteProvider() = default;
WeakPtr<TextEditor> m_editor;
};
class AutocompleteBox final {
public:
explicit AutocompleteBox(TextEditor&);
~AutocompleteBox() = default;
void update_suggestions(Vector<CodeComprehension::AutocompleteResultEntry>&& suggestions);
bool is_visible() const;
void show(Gfx::IntPoint suggestion_box_location);
void close();
bool has_suggestions() { return m_suggestion_view->model()->row_count() > 0; }
void next_suggestion();
void previous_suggestion();
CodeComprehension::AutocompleteResultEntry::HideAutocompleteAfterApplying apply_suggestion();
private:
WeakPtr<TextEditor> m_editor;
RefPtr<GUI::Window> m_popup_window;
RefPtr<GUI::TableView> m_suggestion_view;
RefPtr<GUI::Label> m_no_suggestions_view;
};
}
|