| 1 | // SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd. | 
|---|
| 2 | // | 
|---|
| 3 | // SPDX-License-Identifier: GPL-3.0-or-later | 
|---|
| 4 |  | 
|---|
| 5 | #include "codeeditor.h" | 
|---|
| 6 | #include "codelens/codelens.h" | 
|---|
| 7 | #include "textedittabwidget/textedittabwidget.h" | 
|---|
| 8 | #include "textedittabwidget/language/cpp/texteditcpp.h" | 
|---|
| 9 | #include "textedittabwidget/language/cmake/texteditcmake.h" | 
|---|
| 10 | #include "textedittabwidget/language/java/texteditjava.h" | 
|---|
| 11 | #include "textedittabwidget/language/python/texteditpython.h" | 
|---|
| 12 | #include "textedittabwidget/language/js/texteditjs.h" | 
|---|
| 13 | #include "textedittabwidget/texteditsplitter.h" | 
|---|
| 14 | #include "mainframe/naveditmainwindow.h" | 
|---|
| 15 | #include "mainframe/texteditkeeper.h" | 
|---|
| 16 | #include "transceiver/codeeditorreceiver.h" | 
|---|
| 17 |  | 
|---|
| 18 | #include "base/abstractmenu.h" | 
|---|
| 19 | #include "base/abstractaction.h" | 
|---|
| 20 | #include "base/abstractcentral.h" | 
|---|
| 21 | #include "base/abstractwidget.h" | 
|---|
| 22 |  | 
|---|
| 23 | #include "services/window/windowservice.h" | 
|---|
| 24 | #include "services/language/languageservice.h" | 
|---|
| 25 | #include "common/widget/outputpane.h" | 
|---|
| 26 |  | 
|---|
| 27 | #include <QAction> | 
|---|
| 28 | #include <QSplitter> | 
|---|
| 29 |  | 
|---|
| 30 | using namespace dpfservice; | 
|---|
| 31 |  | 
|---|
| 32 | const QString SAVE_ALL_DOCUMENTS = CodeEditor::tr( "Save All Documents"); | 
|---|
| 33 | const QString CLOSE_ALL_DOCUMENTS = CodeEditor::tr( "Close All Documents"); | 
|---|
| 34 | const QString PRINT = CodeEditor::tr( "Print"); | 
|---|
| 35 |  | 
|---|
| 36 | void CodeEditor::initialize() | 
|---|
| 37 | { | 
|---|
| 38 | qInfo() << __FUNCTION__; | 
|---|
| 39 | TextEditKeeper::impl<TextEdit>( ""); | 
|---|
| 40 | TextEditKeeper::impl<TextEditPython>(); | 
|---|
| 41 | TextEditKeeper::impl<TextEditCpp>(); | 
|---|
| 42 | TextEditKeeper::impl<TextEditCmake>(); | 
|---|
| 43 | TextEditKeeper::impl<TextEditJava>(); | 
|---|
| 44 | TextEditKeeper::impl<TextEditJS>(); | 
|---|
| 45 |  | 
|---|
| 46 | QString errStr; | 
|---|
| 47 | auto &ctx = dpfInstance.serviceContext(); | 
|---|
| 48 | if (!ctx.load(dpfservice::LanguageService::name(), &errStr)) { | 
|---|
| 49 | qCritical() << errStr; | 
|---|
| 50 | abort(); | 
|---|
| 51 | } | 
|---|
| 52 | } | 
|---|
| 53 |  | 
|---|
| 54 | bool CodeEditor::start() | 
|---|
| 55 | { | 
|---|
| 56 | qInfo() << __FUNCTION__; | 
|---|
| 57 | auto &ctx = dpfInstance.serviceContext(); | 
|---|
| 58 | WindowService *windowService = ctx.service<WindowService>(WindowService::name()); | 
|---|
| 59 |  | 
|---|
| 60 | if (windowService) { | 
|---|
| 61 | NavEditMainWindow *navEditWindow = NavEditMainWindow::instance(); | 
|---|
| 62 | TextEditSplitter *editManager = TextEditSplitter::instance(); | 
|---|
| 63 | navEditWindow->setWidgetEdit(new AbstractCentral(editManager)); | 
|---|
| 64 | windowService->addCentralNavigation(MWNA_EDIT, new AbstractCentral(navEditWindow)); | 
|---|
| 65 |  | 
|---|
| 66 | using namespace std::placeholders; | 
|---|
| 67 | if (!windowService->addWidgetWorkspace) { | 
|---|
| 68 | windowService->addWidgetWorkspace = std::bind(&NavEditMainWindow::addWidgetWorkspace, navEditWindow, _1, _2); | 
|---|
| 69 | } | 
|---|
| 70 |  | 
|---|
| 71 | if (!windowService->addContextWidget) { | 
|---|
| 72 | windowService->addContextWidget = std::bind(&NavEditMainWindow::addContextWidget, navEditWindow, _1, _2, _3); | 
|---|
| 73 | } | 
|---|
| 74 |  | 
|---|
| 75 | if (!windowService->removeContextWidget) { | 
|---|
| 76 | windowService->removeContextWidget = std::bind(&NavEditMainWindow::removeContextWidget, navEditWindow, _1); | 
|---|
| 77 | } | 
|---|
| 78 |  | 
|---|
| 79 | if (!windowService->setWidgetEdit) { | 
|---|
| 80 | windowService->setWidgetEdit = std::bind(&NavEditMainWindow::setWidgetEdit, navEditWindow, _1); | 
|---|
| 81 | } | 
|---|
| 82 |  | 
|---|
| 83 | windowService->addContextWidget(QTabWidget::tr( "Code &Lens"), new AbstractWidget(CodeLens::instance()), "Lens"); | 
|---|
| 84 |  | 
|---|
| 85 | if (!windowService->setWidgetWatch) { | 
|---|
| 86 | windowService->setWidgetWatch = std::bind(&NavEditMainWindow::setWidgetWatch, navEditWindow, _1); | 
|---|
| 87 | } | 
|---|
| 88 |  | 
|---|
| 89 | if (!windowService->addFindToolBar) { | 
|---|
| 90 | windowService->addFindToolBar = std::bind(&NavEditMainWindow::addFindToolBar, navEditWindow, _1); | 
|---|
| 91 | } | 
|---|
| 92 |  | 
|---|
| 93 | if (!windowService->showFindToolBar) { | 
|---|
| 94 | windowService->showFindToolBar = std::bind(&NavEditMainWindow::showFindToolBar, navEditWindow); | 
|---|
| 95 | } | 
|---|
| 96 |  | 
|---|
| 97 | auto sep = new QAction(); | 
|---|
| 98 | sep->setSeparator(true); | 
|---|
| 99 | windowService->addAction(MWM_FILE, new AbstractAction(sep)); | 
|---|
| 100 |  | 
|---|
| 101 | windowService->addContextWidget(tr( "&Application Output"), new AbstractWidget(OutputPane::instance()), "Application"); | 
|---|
| 102 | } | 
|---|
| 103 |  | 
|---|
| 104 | return true; | 
|---|
| 105 | } | 
|---|
| 106 |  | 
|---|
| 107 | dpf::Plugin::ShutdownFlag CodeEditor::stop() | 
|---|
| 108 | { | 
|---|
| 109 | qInfo() << __FUNCTION__; | 
|---|
| 110 | return Sync; | 
|---|
| 111 | } | 
|---|
| 112 |  | 
|---|
| 113 |  | 
|---|