| 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 |  | 
|---|
| 13 | class ScintillaEditExternPrivate; | 
|---|
| 14 | class ScintillaEditExtern : public ScintillaEdit | 
|---|
| 15 | { | 
|---|
| 16 | Q_OBJECT | 
|---|
| 17 | ScintillaEditExternPrivate *const d; | 
|---|
| 18 | public: | 
|---|
| 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 |  | 
|---|
| 66 | signals: | 
|---|
| 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 (QContextMenuEvent *event); | 
|---|
| 85 | void fileChanged(const QString &file); | 
|---|
| 86 | void fileClosed(const QString &file); | 
|---|
| 87 | void fileSaved(const QString &file); | 
|---|
| 88 |  | 
|---|
| 89 | private 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 |  | 
|---|
| 100 | protected: | 
|---|
| 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 (QContextMenuEvent *event) override; | 
|---|
| 108 | virtual void sciMarginClicked(Scintilla::Position position, Scintilla::KeyMod modifiers, int margin); | 
|---|
| 109 | }; | 
|---|
| 110 |  | 
|---|
| 111 | #endif // SCINTILLAEDITEXTERN_H | 
|---|
| 112 |  | 
|---|