| 1 | // SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd. |
| 2 | // |
| 3 | // SPDX-License-Identifier: GPL-3.0-or-later |
| 4 | |
| 5 | #include "codeeditorreceiver.h" |
| 6 | |
| 7 | #include "common/common.h" |
| 8 | #include "services/project/projectservice.h" |
| 9 | #include "services/window/windowelement.h" |
| 10 | |
| 11 | #include "mainframe/texteditkeeper.h" |
| 12 | |
| 13 | CodeEditorReceiver::CodeEditorReceiver(QObject *parent) |
| 14 | : dpf::EventHandler (parent) |
| 15 | , dpf::AutoEventHandlerRegister<CodeEditorReceiver> () |
| 16 | { |
| 17 | |
| 18 | } |
| 19 | |
| 20 | dpf::EventHandler::Type CodeEditorReceiver::type() |
| 21 | { |
| 22 | return dpf::EventHandler::Type::Sync; |
| 23 | } |
| 24 | |
| 25 | QStringList CodeEditorReceiver::topics() |
| 26 | { |
| 27 | return {editor.topic, actionanalyse.topic, project.topic}; |
| 28 | } |
| 29 | |
| 30 | void CodeEditorReceiver::eventProcess(const dpf::Event &event) |
| 31 | { |
| 32 | if (event.data() == project.activedProject.name) { |
| 33 | QVariant proInfoVar = event.property(project.activedProject.pKeys[0]); |
| 34 | TextEditKeeper::saveProjectInfo(qvariant_cast<dpfservice::ProjectInfo>(proInfoVar)); |
| 35 | } else if (event.data() == project.deletedProject.name) { |
| 36 | QVariant proInfoVar = event.property(project.deletedProject.pKeys[0]); |
| 37 | TextEditKeeper::removeProjectInfo(qvariant_cast<dpfservice::ProjectInfo>(proInfoVar)); |
| 38 | } else if (event.data() == project.createdProject.name) { |
| 39 | QVariant proInfoVar = event.property(project.createdProject.pKeys[0]); |
| 40 | TextEditKeeper::saveProjectInfo(qvariant_cast<dpfservice::ProjectInfo>(proInfoVar)); |
| 41 | }else if (event.data() == editor.cleanRunning.name) { |
| 42 | return EditorCallProxy::instance()->toRunClean(); |
| 43 | } else if (event.data() == editor.openFile.name) { |
| 44 | navigation.doSwitch(dpfservice::MWNA_EDIT); |
| 45 | using namespace support_file; |
| 46 | QString filePath = event.property(editor.openFile.pKeys[0]).toString(); |
| 47 | QString language = Language::idAlias(Language::id(filePath)); |
| 48 | QString workspace = QDir::homePath(); |
| 49 | editor.openFileWithKey(workspace, language, filePath); |
| 50 | } else if (event.data() == editor.openFileWithKey.name) { |
| 51 | navigation.doSwitch(dpfservice::MWNA_EDIT); |
| 52 | using namespace support_file; |
| 53 | QString workspace = event.property(editor.openFileWithKey.pKeys[0]).toString(); |
| 54 | QString language = event.property(editor.openFileWithKey.pKeys[1]).toString(); |
| 55 | QString filePath = event.property(editor.openFileWithKey.pKeys[2]).toString(); |
| 56 | if (workspace.isEmpty()) |
| 57 | workspace = QDir::homePath(); |
| 58 | if (language.isEmpty()) |
| 59 | language = Language::idAlias(Language::id(filePath)); |
| 60 | newlsp::ProjectKey proKey; |
| 61 | proKey.language = language.toStdString(); |
| 62 | proKey.workspace = workspace.toStdString(); |
| 63 | EditorCallProxy::instance()->toOpenFileWithKey(proKey, filePath); |
| 64 | } else if (event.data() == editor.searchText.name) { |
| 65 | QString srcText = event.property(editor.searchText.pKeys[0]).toString(); |
| 66 | int findType = event.property(editor.searchText.pKeys[1]).toInt(); |
| 67 | return EditorCallProxy::instance()->toSearchText(srcText, findType); |
| 68 | } else if (event.data() == editor.replaceText.name) { |
| 69 | QString srcText = event.property(editor.replaceText.pKeys[0]).toString(); |
| 70 | QString targetText = event.property(editor.replaceText.pKeys[1]).toString(); |
| 71 | int replaceType = event.property(editor.replaceText.pKeys[2]).toInt(); |
| 72 | return EditorCallProxy::instance()->toReplaceText(srcText, targetText, replaceType); |
| 73 | } else if (event.data() == editor.jumpToLine.name) { |
| 74 | QString workspace = TextEditKeeper::projectInfo().workspaceFolder(); |
| 75 | if (workspace.isEmpty()) { |
| 76 | workspace = QDir::homePath(); |
| 77 | } |
| 78 | QString filePath = event.property(editor.jumpToLine.pKeys[0]).toString(); |
| 79 | using namespace support_file; |
| 80 | QString language = Language::idAlias(Language::id(filePath)); |
| 81 | newlsp::ProjectKey proKey; |
| 82 | proKey.language = language.toStdString(); |
| 83 | proKey.workspace = workspace.toStdString(); |
| 84 | int line = event.property(editor.jumpToLine.pKeys[1]).toInt(); |
| 85 | return EditorCallProxy::instance()->toJumpFileLineWithKey(proKey, filePath, line); |
| 86 | } else if (event.data() == actionanalyse.analyseDone.name) { |
| 87 | QString workspace = event.property(actionanalyse.analyseDone.pKeys[0]).toString(); |
| 88 | QString language = event.property(actionanalyse.analyseDone.pKeys[1]).toString(); |
| 89 | QString storage = event.property(actionanalyse.analyseDone.pKeys[2]).toString(); |
| 90 | AnalysedData analyseData = qvariant_cast<AnalysedData>(event.property(actionanalyse.analyseDone.pKeys[3])); |
| 91 | TextEditKeeper::setAnalysedWorkspace(workspace); |
| 92 | TextEditKeeper::setAnalysedLanguage(language); |
| 93 | TextEditKeeper::setAnalysedStorage(storage); |
| 94 | TextEditKeeper::setAnalysedData(analyseData); |
| 95 | } else if (event.data() == actionanalyse.enabled.name) { |
| 96 | bool enabled = event.property(actionanalyse.enabled.pKeys[0]).toBool(); |
| 97 | if (enabled) { |
| 98 | QString workspace = TextEditKeeper::getAnalysedWorkspace(); |
| 99 | QString language = TextEditKeeper::getAnalysedLanguage(); |
| 100 | QString storage = TextEditKeeper::getAnalysedStorage();; |
| 101 | if (workspace.isEmpty() || language.isEmpty() || storage.isEmpty()) { |
| 102 | dpfservice::ProjectInfo projectInfo = TextEditKeeper::projectInfo(); |
| 103 | workspace = FileOperation::checkCreateDir(FileOperation::checkCreateDir(projectInfo.workspaceFolder(), ".unioncode" ), "symbol" ); |
| 104 | language = projectInfo.language(); |
| 105 | storage = workspace; |
| 106 | } |
| 107 | if (!workspace.isEmpty() && !language.isEmpty() && !storage.isEmpty()) |
| 108 | actionanalyse.analyse(workspace, language, storage); |
| 109 | return; |
| 110 | } else { |
| 111 | TextEditKeeper::cleanAnalysedData(); |
| 112 | EditorCallProxy::instance()->toCleanAllAnnotation(TextEditKeeper::userActionAnalyseTitle()); |
| 113 | } |
| 114 | } else if (event.data() == editor.setAnnotation.name) { |
| 115 | QString filePath = event.property(editor.setAnnotation.pKeys[0]).toString(); |
| 116 | int line = event.property(editor.setAnnotation.pKeys[1]).toInt(); |
| 117 | QString title = event.property(editor.setAnnotation.pKeys[2]).toString(); |
| 118 | AnnotationInfo annInfo = qvariant_cast<AnnotationInfo>(event.property(editor.setAnnotation.pKeys[3])); |
| 119 | EditorCallProxy::instance()->toSetAnnotation(filePath, line, title, annInfo); |
| 120 | } else if (event.data() == editor.cleanAnnotation.name) { |
| 121 | QString filePath = event.property(editor.cleanAnnotation.pKeys[0]).toString(); |
| 122 | QString title = event.property(editor.cleanAnnotation.pKeys[1]).toString(); |
| 123 | EditorCallProxy::instance()->toCleanAnnotation(filePath, title); |
| 124 | } else if (event.data() == editor.setLineBackground.name) { |
| 125 | QString filePath = event.property(editor.setLineBackground.pKeys[0]).toString(); |
| 126 | int line = event.property(editor.setLineBackground.pKeys[1]).toInt(); |
| 127 | QColor color = qvariant_cast<QColor>(event.property(editor.setLineBackground.pKeys[2])); |
| 128 | EditorCallProxy::instance()->toSetLineBackground(filePath, line, color); |
| 129 | } else if (event.data() == editor.delLineBackground.name) { |
| 130 | QString filePath = event.property(editor.delLineBackground.pKeys[0]).toString(); |
| 131 | int line = event.property(editor.delLineBackground.pKeys[1]).toInt(); |
| 132 | EditorCallProxy::instance()->toDelLineBackground(filePath, line); |
| 133 | } else if (event.data() == editor.cleanLineBackground.name) { |
| 134 | QString filePath = event.property(editor.cleanLineBackground.pKeys[0]).toString(); |
| 135 | EditorCallProxy::instance()->toCleanLineBackground(filePath); |
| 136 | } else if (event.data() == editor.runningToLine.name) { |
| 137 | auto proInfo = TextEditKeeper::projectInfo(); |
| 138 | QString workspace = proInfo.workspaceFolder(); |
| 139 | if (workspace.isEmpty()) { |
| 140 | workspace = QDir::homePath(); |
| 141 | } |
| 142 | QString language = proInfo.language(); |
| 143 | QString filePath = event.property(editor.runningToLine.pKeys[0]).toString(); |
| 144 | if (language.isEmpty()) { |
| 145 | using namespace support_file; |
| 146 | QString language = Language::idAlias(Language::id(filePath)); |
| 147 | } |
| 148 | newlsp::ProjectKey proKey; |
| 149 | proKey.language = language.toStdString(); |
| 150 | proKey.workspace = workspace.toStdString(); |
| 151 | int line = event.property(editor.runningToLine.pKeys[1]).toInt(); |
| 152 | EditorCallProxy::instance()->toRunFileLineWithKey(proKey, filePath, line); |
| 153 | } else if (event.data() == editor.jumpToLineWithKey.name){ |
| 154 | QString workspace = event.property(editor.jumpToLineWithKey.pKeys[0]).toString(); |
| 155 | QString language = event.property(editor.jumpToLineWithKey.pKeys[1]).toString(); |
| 156 | newlsp::ProjectKey proKey; |
| 157 | proKey.language = language.toStdString(); |
| 158 | proKey.workspace = workspace.toStdString(); |
| 159 | QString filePath = event.property(editor.jumpToLineWithKey.pKeys[2]).toString(); |
| 160 | int line = event.property(editor.jumpToLineWithKey.pKeys[3]).toInt(); |
| 161 | EditorCallProxy::instance()->toJumpFileLineWithKey(proKey, filePath, line); |
| 162 | } else if (event.data() == editor.switchContext.name) { |
| 163 | QString titleName = event.property(editor.switchContext.pKeys[0]).toString(); |
| 164 | EditorCallProxy::instance()->toSwitchContext(titleName); |
| 165 | } else if (event.data() == editor.switchWorkspace.name) { |
| 166 | QString titleName = event.property(editor.switchWorkspace.pKeys[0]).toString(); |
| 167 | EditorCallProxy::instance()->toSwitchWorkspace(titleName); |
| 168 | } else if (event.data() == editor.setModifiedAutoReload.name) { |
| 169 | QString filePath = event.property(editor.setModifiedAutoReload.pKeys[0]).toString(); |
| 170 | bool flag = event.property(editor.setModifiedAutoReload.pKeys[1]).toBool(); |
| 171 | EditorCallProxy::instance()->toSetModifiedAutoReload(filePath, flag); |
| 172 | } else if (event.data() == editor.addDebugPoint.name) { |
| 173 | QString filePath = event.property(editor.addDebugPoint.pKeys[0]).toString(); |
| 174 | int line = event.property(editor.addDebugPoint.pKeys[1]).toInt() - 1; |
| 175 | EditorCallProxy::instance()->toAddDebugPoint(filePath, line); |
| 176 | } else if (event.data() == editor.removeDebugPoint.name) { |
| 177 | QString filePath = event.property(editor.removeDebugPoint.pKeys[0]).toString(); |
| 178 | int line = event.property(editor.removeDebugPoint.pKeys[1]).toInt() - 1; |
| 179 | EditorCallProxy::instance()->toRemoveDebugPoint(filePath, line); |
| 180 | } |
| 181 | } |
| 182 | |
| 183 | EditorCallProxy::EditorCallProxy() |
| 184 | { |
| 185 | |
| 186 | } |
| 187 | |
| 188 | EditorCallProxy *EditorCallProxy::instance() |
| 189 | { |
| 190 | static EditorCallProxy proxy; |
| 191 | return &proxy; |
| 192 | } |
| 193 | |