| 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 | |