File indexing completed on 2024-04-21 14:45:38
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 }