File indexing completed on 2024-04-14 03:42:15

0001 /*
0002     SPDX-FileCopyrightText: 2022 Jasem Mutlaq <mutlaqja@ikarustech.com>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #include "profilescript.h"
0008 
0009 #include <QHBoxLayout>
0010 #include <QComboBox>
0011 #include <QPushButton>
0012 #include <QLineEdit>
0013 #include <QSpinBox>
0014 #include <QFileDialog>
0015 
0016 #include <KLocalizedString>
0017 
0018 ProfileScript::ProfileScript(QWidget *parent) : QWidget(parent)
0019 {
0020     QHBoxLayout *mainLayout = new QHBoxLayout(this);
0021 
0022     m_DriverCombo = new QComboBox(this);
0023     m_DriverCombo->setEditable(true);
0024 #if QT_VERSION < QT_VERSION_CHECK(5, 14, 0)
0025     connect(m_DriverCombo, static_cast<void (QComboBox::*)(const QString &)>(&QComboBox::activated),
0026             this, [this](const QString & value)
0027     {
0028         m_Driver = value;
0029     });
0030 #else
0031     connect(m_DriverCombo, &QComboBox::textActivated, this, [this](const QString & value)
0032     {
0033         m_Driver = value;
0034     });
0035 #endif
0036 
0037     m_PreDelaySpin = new QSpinBox(this);
0038     m_PreDelaySpin->setToolTip(i18n("Delay this many seconds before executing pre driver script."));
0039     m_PreDelaySpin->setRange(0, 300);
0040     m_PreDelaySpin->setSingleStep(5);
0041     connect(m_PreDelaySpin, &QSpinBox::editingFinished, this, [this]()
0042     {
0043         m_PreDelay = m_PreDelaySpin->value();
0044     });
0045 
0046     m_PostDelaySpin = new QSpinBox(this);
0047     m_PostDelaySpin->setToolTip(i18n("Delay this many seconds after driver startup before executing post driver script."));
0048     m_PostDelaySpin->setRange(0, 300);
0049     m_PostDelaySpin->setSingleStep(5);
0050     connect(m_PostDelaySpin, &QSpinBox::editingFinished, this, [this]()
0051     {
0052         m_PostDelay = m_PostDelaySpin->value();
0053     });
0054 
0055     m_PreScriptEdit = new QLineEdit(this);
0056     m_PreScriptEdit->setMinimumWidth(100);
0057     m_PreScriptEdit->setToolTip(i18n("Select script to execute before starting the driver"));
0058     m_PreScriptEdit->setClearButtonEnabled(true);
0059     connect(m_PreScriptEdit, &QLineEdit::editingFinished, this, [this]()
0060     {
0061         m_PreScript = m_PreScriptEdit->text();
0062     });
0063 
0064     m_PostScriptEdit = new QLineEdit(this);
0065     m_PostScriptEdit->setMinimumWidth(100);
0066     m_PostScriptEdit->setToolTip(i18n("Select script to execute after starting the driver"));
0067     m_PostScriptEdit->setClearButtonEnabled(true);
0068     connect(m_PostScriptEdit, &QLineEdit::editingFinished, this, [this]()
0069     {
0070         m_PostScript = m_PostScriptEdit->text();
0071     });
0072 
0073     m_PreScriptB = new QPushButton(this);
0074     m_PreScriptB->setIcon(QIcon::fromTheme("document-open"));
0075     connect(m_PreScriptB, &QPushButton::clicked, this, &ProfileScript::selectPreScript);
0076 
0077     m_PostScriptB = new QPushButton(this);
0078     m_PostScriptB->setIcon(QIcon::fromTheme("document-open"));
0079     connect(m_PostScriptB, &QPushButton::clicked, this, &ProfileScript::selectPostScript);
0080 
0081     m_RemoveB = new QPushButton(this);
0082     m_RemoveB->setIcon(QIcon::fromTheme("list-remove"));
0083     connect(m_RemoveB, &QPushButton::clicked, this, &ProfileScript::removedRequested);
0084 
0085     // Add widgets to layout
0086     mainLayout->addWidget(m_PreDelaySpin);
0087     mainLayout->addWidget(m_PreScriptEdit);
0088     mainLayout->addWidget(m_PreScriptB);
0089     mainLayout->addWidget(m_DriverCombo);
0090     mainLayout->addWidget(m_PostDelaySpin);
0091     mainLayout->addWidget(m_PostScriptEdit);
0092     mainLayout->addWidget(m_PostScriptB);
0093     mainLayout->addWidget(m_RemoveB);
0094 }
0095 
0096 void ProfileScript::syncGUI()
0097 {
0098     m_PreDelaySpin->setValue(m_PreDelay);
0099     m_PreScriptEdit->setText(m_PreScript);
0100     m_DriverCombo->setCurrentText(m_Driver);
0101     m_PostDelaySpin->setValue(m_PostDelay);
0102     m_PostScriptEdit->setText(m_PostScript);
0103 }
0104 
0105 void ProfileScript::setDriverList(const QStringList &value)
0106 {
0107     m_DriverCombo->clear();
0108     m_DriverCombo->addItems(value);
0109     if (m_Driver.isEmpty())
0110         m_Driver = value.first();
0111 }
0112 
0113 void ProfileScript::selectPreScript()
0114 {
0115     m_PreScript = QFileDialog::getOpenFileName(this, i18nc("@title:window", "Select Pre Driver Startup Script"));
0116     m_PreScriptEdit->setText(m_PreScript);
0117 }
0118 
0119 void ProfileScript::selectPostScript()
0120 {
0121     m_PostScript = QFileDialog::getOpenFileName(this, i18nc("@title:window", "Select Post Driver Startup Script"));
0122     m_PostScriptEdit->setText(m_PostScript);
0123 }
0124 
0125 QJsonObject ProfileScript::toJSON() const
0126 {
0127     QJsonObject settings =
0128     {
0129         {"Driver", m_Driver},
0130         {"PreDelay", static_cast<int>(m_PreDelay)},
0131         {"PreScript", m_PreScript},
0132         {"PostDelay", static_cast<int>(m_PostDelay)},
0133         {"PostScript", m_PostScript},
0134     };
0135 
0136     return settings;
0137 }