1// SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd.
2//
3// SPDX-License-Identifier: GPL-3.0-or-later
4
5#include "optioncore.h"
6#include "mainframe/optiondefaultkeeper.h"
7#include "mainframe/optiongeneralgenerator.h"
8
9#include "common/common.h"
10#include "base/abstractwidget.h"
11#include "base/abstractaction.h"
12#include "base/abstractcentral.h"
13#include "services/window/windowservice.h"
14#include "services/project/projectservice.h"
15#include "services/option/optionservice.h"
16
17#include "framework/listener/listener.h"
18
19using namespace dpfservice;
20void OptionCore::initialize()
21{
22 auto &ctx = dpfInstance.serviceContext();
23 QString errStr;
24 if (!ctx.load(OptionService::name(), &errStr)) {
25 qCritical() << errStr;
26 abort();
27 }
28}
29
30bool OptionCore::start()
31{
32 toolchains::generatGlobalFile();
33
34 auto optionDialog = OptionDefaultKeeper::getOptionDialog();
35 if (!optionDialog) {
36 qCritical() << "Failed, can't init option dialog!";
37 abort();
38 }
39
40 optionDialog->setModal(true);
41
42 auto &ctx = dpfInstance.serviceContext();
43 WindowService *windowService = ctx.service<WindowService>(WindowService::name());
44 OptionService *optionService = ctx.service<OptionService>(OptionService::name());
45 if (optionService) {
46 optionService->implGenerator<OptionGeneralGenerator>(OptionGeneralGenerator::kitName());
47 auto generator = optionService->createGenerator<OptionGeneralGenerator>(OptionGeneralGenerator::kitName());
48 if (generator) {
49 auto pageWidget = dynamic_cast<PageWidget*>(generator->optionWidget());
50 if (pageWidget) {
51 optionDialog->insertOptionPanel(OptionGeneralGenerator::kitName(), pageWidget);
52 }
53 }
54 }
55
56 if (windowService && windowService->addAction && windowService->addToolBarActionItem) {
57 auto actionOptions = new QAction(MWMTA_OPTIONS);
58 ActionManager::getInstance()->registerAction(actionOptions,
59 "Tools.Options",
60 MWMTA_OPTIONS,
61 QKeySequence(Qt::Modifier::CTRL |
62 Qt::Modifier::SHIFT |
63 Qt::Key::Key_H),
64 ":/optioncore/images/setting.png");
65 windowService->addAction(MWM_TOOLS, new AbstractAction(actionOptions));
66 windowService->addToolBarActionItem("Options", actionOptions, "Option.End");
67
68 QObject::connect(actionOptions, &QAction::triggered,
69 optionDialog, &QDialog::show);
70 }
71
72 DPF_USE_NAMESPACE
73 QObject::connect(&Listener::instance(), &Listener::pluginsStarted, [=](){
74 if (optionDialog) {
75 auto list = optionService->supportGeneratorName<OptionGenerator>();
76 for (auto name : list) {
77 if (0 == name.compare(OptionGeneralGenerator::kitName()))
78 continue;
79 auto generator = optionService->createGenerator<OptionGenerator>(name);
80 if (generator) {
81 PageWidget *optionWidget = dynamic_cast<PageWidget*>(generator->optionWidget());
82 if (optionWidget) {
83 optionDialog->insertOptionPanel(name, optionWidget);
84 optionWidget->readConfig();
85 optionWidget->saveConfig();
86 }
87 }
88 }
89 }
90 });
91
92 return true;
93}
94
95dpf::Plugin::ShutdownFlag OptionCore::stop()
96{
97 delete OptionDefaultKeeper::getOptionDialog();
98 return Sync;
99}
100