1// SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd.
2//
3// SPDX-License-Identifier: GPL-3.0-or-later
4
5#ifndef SCINTILLAEDITEXTERN_H
6#define SCINTILLAEDITEXTERN_H
7
8#include "ScintillaEdit.h"
9#include "style/stylelsp.h"
10#include "style/stylesci.h"
11#include <QString>
12
13class ScintillaEditExternPrivate;
14class ScintillaEditExtern : public ScintillaEdit
15{
16 Q_OBJECT
17 ScintillaEditExternPrivate *const d;
18public:
19 explicit ScintillaEditExtern(QWidget *parent = nullptr);
20 virtual ~ScintillaEditExtern();
21
22 virtual QString supportLanguage(){return "";} // 当前编辑器支持的语言类型
23 static QString fileLanguage(const QString &path); // 获取注册文件中语言支持
24 virtual void setFile(const QString &filePath);
25 virtual QString file() const;
26 virtual void setProjectKey(const newlsp::ProjectKey &key);
27 virtual newlsp::ProjectKey projectKey() const;
28 /**
29 * @brief language get value from projectKey
30 * extension: shuold used to mimetype, not from outside setting
31 * @return if unset return default ""
32 */
33 virtual QString language() const;
34 /**
35 * @brief workspace get value from projectKey
36 * @return if unset return default ""
37 */
38 virtual QString workspace() const; // from projectKey,
39
40 void addDebugPoint(int line);
41 void removeDebugPoint(int line);
42 void debugPointAllDelete();
43 void jumpToLine(int line);
44 void jumpToRange(Scintilla::Position start, Scintilla::Position end);
45 void runningToLine(int line);
46 void runningEnd();
47 void saveText();
48 bool isLeave();
49 void replaceRange(Scintilla::Position start, Scintilla::Position end, const QString &text);
50 QPair<long int, long int> findText(long int start, long int end, const QString &text);
51 void findText(const QString &srcText, bool reverse);
52 void findText(const QString &srcText, long int startPos, long int endPos);
53 void replaceAll(const QString &srcText, const QString &destText);
54 void setLineBackground(int line, const QColor &color);
55 void delLineBackground(int line);
56 void cleanLineBackground();
57 void setAnnotation(int line, const QString &title, const AnnotationInfo &info);
58 void cleanAnnotation(const QString &title);
59 void updateFile();
60 void saveAsText();
61 bool isSaveText();
62 void cleanIsSaveText();
63 void find(const QString &srcText, int operateType);
64 void replace(const QString &srcText, const QString &destText, int operateType);
65
66signals:
67 void hovered(Scintilla::Position position);
68 void hoverCleaned(Scintilla::Position position);
69 void definitionHover(Scintilla::Position position);
70 void definitionHoverCleaned(Scintilla::Position position);
71 void textInserted(Scintilla::Position position,
72 Scintilla::Position length, Scintilla::Position linesAdded,
73 const QByteArray &text, Scintilla::Position line);
74 void textDeleted(Scintilla::Position position,
75 Scintilla::Position length, Scintilla::Position linesAdded,
76 const QByteArray &text, Scintilla::Position line);
77 void completed(Scintilla::Position position);
78 void completeCleaned();
79 void indicClicked(Scintilla::Position position);
80 void indicReleased(Scintilla::Position position);
81 void saved(const QString &file);
82 void replaceed(const QString &file, Scintilla::Position start,
83 Scintilla::Position end, const QString &text);
84 void selectionMenu(QContextMenuEvent *event);
85 void fileChanged(const QString &file);
86 void fileClosed(const QString &file);
87 void fileSaved(const QString &file);
88
89private slots:
90 void sciModified(Scintilla::ModificationFlags type, Scintilla::Position position,
91 Scintilla::Position length, Scintilla::Position linesAdded,
92 const QByteArray &text, Scintilla::Position line,
93 Scintilla::FoldLevel foldNow, Scintilla::FoldLevel foldPrev);
94 void sciNotify(Scintilla::NotificationData *data);
95 void sciUpdateUi(Scintilla::Update update);
96 void sciDwellStart(int x, int y);
97 void sciDwellEnd(int x, int y);
98 void sciUpdateAnnotation();
99
100protected:
101 virtual void keyReleaseEvent(QKeyEvent *event) override;
102 virtual void keyPressEvent(QKeyEvent *event) override;
103 virtual void enterEvent(QEvent *event) override;
104 virtual void leaveEvent(QEvent *event) override;
105 virtual void focusInEvent(QFocusEvent *event) override;
106 virtual void focusOutEvent(QFocusEvent *event) override;
107 virtual void contextMenuEvent(QContextMenuEvent *event) override;
108 virtual void sciMarginClicked(Scintilla::Position position, Scintilla::KeyMod modifiers, int margin);
109};
110
111#endif // SCINTILLAEDITEXTERN_H
112