1// SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd.
2//
3// SPDX-License-Identifier: GPL-3.0-or-later
4
5#include "runpropertywidget.h"
6#include "environmentwidget.h"
7#include "common/common.h"
8#include "runconfigpane.h"
9#include "configutil.h"
10#include "targetsmanager.h"
11
12#include <QListWidget>
13#include <QSplitter>
14#include <QComboBox>
15#include <QVBoxLayout>
16#include <QGroupBox>
17#include <QPushButton>
18#include <QStyleFactory>
19#include <QStackedWidget>
20
21using namespace config;
22
23class RunPropertyWidgetPrivate
24{
25 friend class RunPropertyWidget;
26
27 QComboBox *exeComboBox{nullptr};
28 RunConfigPane *runConfigPane{nullptr};
29
30 QVector<RunParam> paramsShadow;
31 QStandardItem *item{nullptr};
32 dpfservice::ProjectInfo projectInfo;
33};
34
35RunPropertyWidget::RunPropertyWidget(const dpfservice::ProjectInfo &projectInfo, QStandardItem *item, QWidget *parent)
36 : PageWidget(parent)
37 , d(new RunPropertyWidgetPrivate())
38{
39 d->projectInfo = projectInfo;
40 d->item = item;
41 setupUi();
42}
43
44RunPropertyWidget::~RunPropertyWidget()
45{
46 if (d)
47 delete d;
48}
49
50void RunPropertyWidget::setupUi()
51{
52 ConfigureWidget *runCfgWidget = new ConfigureWidget(this);
53
54 QWidget *titleWidget = new QWidget(runCfgWidget);
55 QHBoxLayout *runCfgLayout = new QHBoxLayout(titleWidget);
56 QLabel *runCfgLabel = new QLabel(tr("Run configuration:"));
57 d->exeComboBox = new QComboBox();
58 d->exeComboBox->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
59 QObject::connect(d->exeComboBox, QOverload<int>::of(&QComboBox::currentIndexChanged), [=](int index){
60 if (index >= 0 && index < d->paramsShadow.count()) {
61 d->runConfigPane->bindValues(&d->paramsShadow[index]);
62 }
63 });
64 runCfgLayout->addWidget(runCfgLabel, 0, Qt::AlignLeft);
65 runCfgLayout->addWidget(d->exeComboBox, 0, Qt::AlignLeft);
66 runCfgLayout->addStretch(10);
67 runCfgLayout->setMargin(0);
68
69 d->runConfigPane = new RunConfigPane(this);
70 runCfgWidget->addWidget(titleWidget);
71 runCfgWidget->addWidget(d->runConfigPane);
72
73 QVBoxLayout *vLayout = new QVBoxLayout(this);
74 vLayout->addWidget(runCfgWidget);
75}
76
77void RunPropertyWidget::updateData()
78{
79 d->exeComboBox->clear();
80
81 ConfigureParam *param = ConfigUtil::instance()->getConfigureParamPointer();
82 for (auto iter = param->buildConfigures.begin(); iter != param->buildConfigures.end(); ++iter) {
83 if (param->tempSelType == iter->type) {
84 d->paramsShadow = iter->runConfigure.params;
85 auto iterExe = d->paramsShadow.begin();
86 int index = 0;
87 for (; iterExe != d->paramsShadow.end(); ++iterExe, index++) {
88 d->exeComboBox->insertItem(index, iterExe->targetName);
89 if (iter->runConfigure.defaultTargetName == iterExe->targetName) {
90 d->exeComboBox->setCurrentIndex(index);
91 d->runConfigPane->bindValues(iterExe);
92 }
93 }
94 break;
95 }
96 }
97}
98
99void RunPropertyWidget::readConfig()
100{
101 updateData();
102}
103
104void RunPropertyWidget::saveConfig()
105{
106 ConfigureParam *param = ConfigUtil::instance()->getConfigureParamPointer();
107 auto iter = param->buildConfigures.begin();
108 for (; iter != param->buildConfigures.end(); ++iter) {
109 if (param->defaultType == iter->type) {
110 iter->runConfigure.params = d->paramsShadow;
111 iter->runConfigure.defaultTargetName = d->exeComboBox->currentText();
112 }
113 }
114
115 QString filePath = ConfigUtil::instance()->getConfigPath(param->workspace);
116 ConfigUtil::instance()->saveConfig(filePath, *param);
117
118 ConfigUtil::instance()->updateProjectInfo(d->projectInfo, param);
119 dpfservice::ProjectInfo::set(d->item, d->projectInfo);
120}
121