Kstars

profilescript.cpp
1/*
2 SPDX-FileCopyrightText: 2022 Jasem Mutlaq <mutlaqja@ikarustech.com>
3
4 SPDX-License-Identifier: GPL-2.0-or-later
5*/
6
7#include "profilescript.h"
8
9#include <QHBoxLayout>
10#include <QComboBox>
11#include <QPushButton>
12#include <QLineEdit>
13#include <QSpinBox>
14#include <QFileDialog>
15
16#include <KLocalizedString>
17
18ProfileScript::ProfileScript(QWidget *parent) : QWidget(parent)
19{
20 QHBoxLayout *mainLayout = new QHBoxLayout(this);
21
22 m_DriverCombo = new QComboBox(this);
23 m_DriverCombo->setEditable(true);
24#if QT_VERSION < QT_VERSION_CHECK(5, 14, 0)
25 connect(m_DriverCombo, static_cast<void (QComboBox::*)(const QString &)>(&QComboBox::activated),
26 this, [this](const QString & value)
27 {
28 m_Driver = value;
29 });
30#else
31 connect(m_DriverCombo, &QComboBox::textActivated, this, [this](const QString & value)
32 {
33 m_Driver = value;
34 });
35#endif
36
37 m_PreDelaySpin = new QSpinBox(this);
38 m_PreDelaySpin->setToolTip(i18n("Delay this many seconds before executing pre driver script."));
39 m_PreDelaySpin->setRange(0, 300);
40 m_PreDelaySpin->setSingleStep(5);
41 connect(m_PreDelaySpin, &QSpinBox::editingFinished, this, [this]()
42 {
43 m_PreDelay = m_PreDelaySpin->value();
44 });
45
46 m_PostDelaySpin = new QSpinBox(this);
47 m_PostDelaySpin->setToolTip(i18n("Delay this many seconds after driver startup before executing post driver script."));
48 m_PostDelaySpin->setRange(0, 300);
49 m_PostDelaySpin->setSingleStep(5);
50 connect(m_PostDelaySpin, &QSpinBox::editingFinished, this, [this]()
51 {
52 m_PostDelay = m_PostDelaySpin->value();
53 });
54
55 m_StoppingDelaySpin = new QSpinBox(this);
56 m_StoppingDelaySpin->setToolTip(i18n("Delay this many seconds after executing stopping driver script before stopping driver."));
57 m_StoppingDelaySpin->setRange(0, 300);
58 m_StoppingDelaySpin->setSingleStep(5);
59 connect(m_StoppingDelaySpin, &QSpinBox::editingFinished, this, [this]()
60 {
61 m_StoppingDelay = m_StoppingDelaySpin->value();
62 });
63
64 m_StoppedDelaySpin = new QSpinBox(this);
65 m_StoppedDelaySpin->setToolTip(i18n("Delay this many seconds after driver stopped before executing stopped driver script."));
66 m_StoppedDelaySpin->setRange(0, 300);
67 m_StoppedDelaySpin->setSingleStep(5);
68 connect(m_StoppedDelaySpin, &QSpinBox::editingFinished, this, [this]()
69 {
70 m_StoppedDelay = m_StoppedDelaySpin->value();
71 });
72
73 m_PreScriptEdit = new QLineEdit(this);
74 m_PreScriptEdit->setMinimumWidth(100);
75 m_PreScriptEdit->setToolTip(i18n("Select script to execute before starting the driver"));
76 m_PreScriptEdit->setClearButtonEnabled(true);
77 connect(m_PreScriptEdit, &QLineEdit::editingFinished, this, [this]()
78 {
79 m_PreScript = m_PreScriptEdit->text();
80 });
81
82 m_PostScriptEdit = new QLineEdit(this);
83 m_PostScriptEdit->setMinimumWidth(100);
84 m_PostScriptEdit->setToolTip(i18n("Select script to execute after starting the driver"));
85 m_PostScriptEdit->setClearButtonEnabled(true);
86 connect(m_PostScriptEdit, &QLineEdit::editingFinished, this, [this]()
87 {
88 m_PostScript = m_PostScriptEdit->text();
89 });
90
91 m_StoppingScriptEdit = new QLineEdit(this);
92 m_StoppingScriptEdit->setMinimumWidth(100);
93 m_StoppingScriptEdit->setToolTip(i18n("Select script to execute before stopping the driver"));
94 m_StoppingScriptEdit->setClearButtonEnabled(true);
95 connect(m_StoppingScriptEdit, &QLineEdit::editingFinished, this, [this]()
96 {
97 m_StoppingScript = m_StoppingScriptEdit->text();
98 });
99
100 m_StoppedScriptEdit = new QLineEdit(this);
101 m_StoppedScriptEdit->setMinimumWidth(100);
102 m_StoppedScriptEdit->setToolTip(i18n("Select script to execute after stopping the driver"));
103 m_StoppedScriptEdit->setClearButtonEnabled(true);
104 connect(m_StoppedScriptEdit, &QLineEdit::editingFinished, this, [this]()
105 {
106 m_StoppedScript = m_StoppedScriptEdit->text();
107 });
108
109 m_PreScriptB = new QPushButton(this);
110 m_PreScriptB->setIcon(QIcon::fromTheme("document-open"));
111 connect(m_PreScriptB, &QPushButton::clicked, this, &ProfileScript::selectPreScript);
112
113 m_PostScriptB = new QPushButton(this);
114 m_PostScriptB->setIcon(QIcon::fromTheme("document-open"));
115 connect(m_PostScriptB, &QPushButton::clicked, this, &ProfileScript::selectPostScript);
116
117 m_StoppingScriptB = new QPushButton(this);
118 m_StoppingScriptB->setIcon(QIcon::fromTheme("document-open"));
119 connect(m_StoppingScriptB, &QPushButton::clicked, this, &ProfileScript::selectStoppingScript);
120
121 m_StoppedScriptB = new QPushButton(this);
122 m_StoppedScriptB->setIcon(QIcon::fromTheme("document-open"));
123 connect(m_StoppedScriptB, &QPushButton::clicked, this, &ProfileScript::selectStoppedScript);
124
125 m_RemoveB = new QPushButton(this);
126 m_RemoveB->setIcon(QIcon::fromTheme("list-remove"));
127 connect(m_RemoveB, &QPushButton::clicked, this, &ProfileScript::removedRequested);
128
129 // Add widgets to layout
130 mainLayout->addWidget(m_DriverCombo);
131 mainLayout->addWidget(m_PreDelaySpin);
132 mainLayout->addWidget(m_PreScriptEdit);
133 mainLayout->addWidget(m_PreScriptB);
134 mainLayout->addWidget(m_PostDelaySpin);
135 mainLayout->addWidget(m_PostScriptEdit);
136 mainLayout->addWidget(m_PostScriptB);
137 mainLayout->addWidget(m_StoppingDelaySpin);
138 mainLayout->addWidget(m_StoppingScriptEdit);
139 mainLayout->addWidget(m_StoppingScriptB);
140 mainLayout->addWidget(m_StoppedDelaySpin);
141 mainLayout->addWidget(m_StoppedScriptEdit);
142 mainLayout->addWidget(m_StoppedScriptB);
143 mainLayout->addWidget(m_RemoveB);
144}
145
146void ProfileScript::syncGUI()
147{
148 m_DriverCombo->setCurrentText(m_Driver);
149 m_PreDelaySpin->setValue(m_PreDelay);
150 m_PreScriptEdit->setText(m_PreScript);
151 m_PostDelaySpin->setValue(m_PostDelay);
152 m_PostScriptEdit->setText(m_PostScript);
153 m_StoppingDelaySpin->setValue(m_StoppingDelay);
154 m_StoppingScriptEdit->setText(m_StoppingScript);
155 m_StoppedDelaySpin->setValue(m_StoppedDelay);
156 m_StoppedScriptEdit->setText(m_StoppedScript);
157}
158
159void ProfileScript::setDriverList(const QStringList &value)
160{
161 m_DriverCombo->clear();
162 m_DriverCombo->addItems(value);
163 if (m_Driver.isEmpty())
164 m_Driver = value.first();
165}
166
167void ProfileScript::selectPreScript()
168{
169 m_PreScript = QFileDialog::getOpenFileName(this, i18nc("@title:window", "Select Pre Driver Startup Script"));
170 m_PreScriptEdit->setText(m_PreScript);
171}
172
173void ProfileScript::selectPostScript()
174{
175 m_PostScript = QFileDialog::getOpenFileName(this, i18nc("@title:window", "Select Post Driver Startup Script"));
176 m_PostScriptEdit->setText(m_PostScript);
177}
178
179void ProfileScript::selectStoppingScript()
180{
181 m_StoppingScript = QFileDialog::getOpenFileName(this, i18nc("@title:window", "Select Pre Driver Stop Script"));
182 m_StoppingScriptEdit->setText(m_StoppingScript);
183}
184
185void ProfileScript::selectStoppedScript()
186{
187 m_StoppedScript = QFileDialog::getOpenFileName(this, i18nc("@title:window", "Select Post Driver Stop Script"));
188 m_StoppedScriptEdit->setText(m_StoppedScript);
189}
190
191QJsonObject ProfileScript::toJSON() const
192{
193 QJsonObject settings =
194 {
195 {"Driver", m_Driver},
196 {"PreDelay", static_cast<int>(m_PreDelay)},
197 {"PreScript", m_PreScript},
198 {"PostDelay", static_cast<int>(m_PostDelay)},
199 {"PostScript", m_PostScript},
200 {"StoppingDelay", static_cast<int>(m_StoppingDelay)},
201 {"StoppingScript", m_StoppingScript},
202 {"StoppedDelay", static_cast<int>(m_StoppedDelay)},
203 {"StoppedScript", m_StoppedScript},
204 };
205
206 return settings;
207}
QString i18nc(const char *context, const char *text, const TYPE &arg...)
QString i18n(const char *text, const TYPE &arg...)
void clicked(bool checked)
void editingFinished()
void addWidget(QWidget *widget, int stretch, Qt::Alignment alignment)
void activated(int index)
void textActivated(const QString &text)
QString getOpenFileName(QWidget *parent, const QString &caption, const QString &dir, const QString &filter, QString *selectedFilter, Options options)
QIcon fromTheme(const QString &name)
void editingFinished()
T & first()
QFuture< ArgsType< Signal > > connect(Sender *sender, Signal signal)
This file is part of the KDE documentation.
Documentation copyright © 1996-2025 The KDE developers.
Generated on Fri Apr 25 2025 11:58:36 by doxygen 1.13.2 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.