From 7e095c4349bee60d0ace90f90a0e10142a656675 Mon Sep 17 00:00:00 2001 From: arcan1s Date: Mon, 3 Nov 2014 06:33:39 +0300 Subject: [PATCH] implement script function --- sources/awesome-widget/awesome-widget.h | 2 + sources/awesome-widget/configuration.cpp | 91 +++++- sources/awesome-widget/deconfig.ui | 374 ++++++++++++----------- sources/ext-sysmon/extscript.cpp | 13 + sources/ext-sysmon/extscript.h | 1 + 5 files changed, 292 insertions(+), 189 deletions(-) diff --git a/sources/awesome-widget/awesome-widget.h b/sources/awesome-widget/awesome-widget.h index 6d25309..8d6ab51 100644 --- a/sources/awesome-widget/awesome-widget.h +++ b/sources/awesome-widget/awesome-widget.h @@ -78,7 +78,9 @@ private slots: void reinit(); void replyRecieved(QNetworkReply *reply); // configuration interface + void addCustomScript(); void addNewPkgCommand(QTableWidgetItem *item); + void contextMenuCustomCommand(const QPoint pos); void contextMenuPkgCommand(const QPoint pos); void editCustomCommand(const int row, const int column); void editFanItem(QListWidgetItem *item); diff --git a/sources/awesome-widget/configuration.cpp b/sources/awesome-widget/configuration.cpp index 3a25923..a660750 100644 --- a/sources/awesome-widget/configuration.cpp +++ b/sources/awesome-widget/configuration.cpp @@ -22,6 +22,7 @@ #include #include #include +#include #include #include #include @@ -390,7 +391,12 @@ void AwesomeWidget::createConfigurationInterface(KConfigDialog *parent) output->setCheckState(Qt::Unchecked); uiDEConfig.tableWidget_customCommand->setItem(i, 2, output); uiDEConfig.tableWidget_customCommand->setItem(i, 3, new QTableWidgetItem(externalScripts[i]->getPrefix())); - uiDEConfig.tableWidget_customCommand->setItem(i, 4, new QTableWidgetItem(QString::number(externalScripts[i]->getRedirect()))); + QComboBox *redirect = new QComboBox(); + redirect->addItem(QString("out2err")); + redirect->addItem(QString("nothing")); + redirect->addItem(QString("err2out")); + redirect->setCurrentIndex(externalScripts[i]->getRedirect() + 1); + uiDEConfig.tableWidget_customCommand->setCellWidget(i, 4, redirect); } externalScripts.clear(); uiDEConfig.lineEdit_desktopCmd->setText(deSettings[QString("DESKTOPCMD")]); @@ -472,6 +478,8 @@ void AwesomeWidget::createConfigurationInterface(KConfigDialog *parent) this, SLOT(editTempItem(QListWidgetItem *))); connect(uiDEConfig.tableWidget_customCommand, SIGNAL(cellDoubleClicked(int, int)), this, SLOT(editCustomCommand(int, int))); + connect(uiDEConfig.tableWidget_customCommand, SIGNAL(customContextMenuRequested(QPoint)), + this, SLOT(contextMenuCustomCommand(QPoint))); connect(uiDEConfig.tableWidget_pkgCommand, SIGNAL(itemChanged(QTableWidgetItem *)), this, SLOT(addNewPkgCommand(QTableWidgetItem *))); connect(uiDEConfig.tableWidget_pkgCommand, SIGNAL(customContextMenuRequested(QPoint)), @@ -584,7 +592,8 @@ void AwesomeWidget::configAccepted() else script->setHasOutput(false); script->setPrefix(uiDEConfig.tableWidget_customCommand->item(i, 3)->text()); - script->setRedirect((ExtScript::Redirect)uiDEConfig.tableWidget_customCommand->item(i, 4)->text().toInt()); + int redirect = ((QComboBox *)uiDEConfig.tableWidget_customCommand->cellWidget(i, 4))->currentIndex() - 1; + script->setRedirect((ExtScript::Redirect)redirect); script->writeConfiguration(); delete script; } @@ -732,6 +741,57 @@ void AwesomeWidget::configChanged() } +void AwesomeWidget::addCustomScript() +{ + if (debug) qDebug() << PDEBUG; + + QString name = QInputDialog::getText(0, i18n("Enter script name"), + i18n("Name")); + if (name.isEmpty()) return; + QString localDir = KGlobal::dirs()->locateLocal("data", "plasma_engine_extsysmon/scripts"); + + QString fileName = QDir(localDir).absoluteFilePath(name); + if (debug) qDebug() << PDEBUG << ":" << "Script" << fileName; + QFile configFile(fileName); + if (!configFile.open(QIODevice::WriteOnly)) return; + configFile.write("#!/bin/bash\n"); + configFile.close(); + configFile.setPermissions(QFile::ReadOwner | QFile::WriteOwner | QFile::ExeOwner | + QFile::ReadGroup | QFile::ExeGroup | + QFile::ReadOther | QFile::ExeOther); + QDesktopServices::openUrl(QUrl(fileName)); + + fileName = QDir(localDir).absoluteFilePath(name + QString(".conf")); + if (debug) qDebug() << PDEBUG << ":" << "Configuration" << fileName; + configFile.setFileName(fileName); + if (!configFile.open(QIODevice::WriteOnly)) return; + configFile.write("ACTIVE=false\n"); + configFile.write("INTERVAL=1\n"); + configFile.write("OUTPUT=true\n"); + configFile.write("PREFIX=\n"); + configFile.write("REDIRECT=0\n"); + configFile.close(); + + int i = uiDEConfig.tableWidget_customCommand->rowCount(); + uiDEConfig.tableWidget_customCommand->insertRow(i); + QTableWidgetItem *nameItem = new QTableWidgetItem(name); + nameItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsUserCheckable | Qt::ItemIsDragEnabled | Qt::ItemIsDropEnabled | Qt::ItemIsEnabled); + nameItem->setCheckState(Qt::Unchecked); + uiDEConfig.tableWidget_customCommand->setItem(i, 0, nameItem); + uiDEConfig.tableWidget_customCommand->setItem(i, 1, new QTableWidgetItem(QString::number(1))); + QTableWidgetItem *output = new QTableWidgetItem(); + output->setCheckState(Qt::Checked); + uiDEConfig.tableWidget_customCommand->setItem(i, 2, output); + uiDEConfig.tableWidget_customCommand->setItem(i, 3, new QTableWidgetItem(QString(""))); + QComboBox *redirect = new QComboBox(); + redirect->addItem(QString("out2err")); + redirect->addItem(QString("nothing")); + redirect->addItem(QString("err2out")); + redirect->setCurrentIndex(1); + uiDEConfig.tableWidget_customCommand->setCellWidget(i, 4, redirect); +} + + void AwesomeWidget::addNewPkgCommand(QTableWidgetItem *item) { if (debug) qDebug() << PDEBUG; @@ -747,6 +807,31 @@ void AwesomeWidget::addNewPkgCommand(QTableWidgetItem *item) } +void AwesomeWidget::contextMenuCustomCommand(const QPoint pos) +{ + if (debug) qDebug() << PDEBUG; + if (uiDEConfig.tableWidget_customCommand->currentItem() == 0) return; + + QMenu menu(uiDEConfig.tableWidget_customCommand); + QAction *edit = menu.addAction(QIcon::fromTheme("document-edit"), i18n("Edit")); + QAction *create = menu.addAction(QIcon::fromTheme("document-new"), i18n("Create")); + QAction *remove = menu.addAction(QIcon::fromTheme("edit-delete"), i18n("Remove")); + QAction *action = menu.exec(uiDEConfig.tableWidget_customCommand->viewport()->mapToGlobal(pos)); + if (action == edit) { + editCustomCommand(uiDEConfig.tableWidget_customCommand->currentRow(), 0); + } else if (action == create) { + addCustomScript(); + } else if (action == remove) { + int row = uiDEConfig.tableWidget_customCommand->currentRow(); + QStringList dirs = KGlobal::dirs()->findDirs("data", "plasma_engine_extsysmon/scripts"); + ExtScript *script = new ExtScript(uiDEConfig.tableWidget_customCommand->item(row, 0)->text(), dirs, debug); + script->tryDelete(); + delete script; + uiDEConfig.tableWidget_customCommand->removeRow(row); + } +} + + void AwesomeWidget::contextMenuPkgCommand(const QPoint pos) { if (debug) qDebug() << PDEBUG; @@ -766,7 +851,7 @@ void AwesomeWidget::editCustomCommand(const int row, const int column) Q_UNUSED(column); if (debug) qDebug() << PDEBUG; - QString name = uiDEConfig.tableWidget_customCommand->itemAt(row, 0)->text(); + QString name = uiDEConfig.tableWidget_customCommand->item(row, 0)->text(); QString localDir = KStandardDirs::locateLocal("data", "plasma_engine_extsysmon/scripts"); QStringList dirs = KGlobal::dirs()->findDirs("data", "plasma_engine_extsysmon/scripts"); for (int i=0; i0 0 700 - 588 + 586 @@ -43,10 +43,87 @@ 0 0 684 - 572 + 570 + + + + + + + 200 + 0 + + + + hddtemp cmd + + + + + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + + + + + 200 + 0 + + + + GPU device + + + + + + + + 0 + 0 + + + + + 100 + 0 + + + + + auto + + + + + disable + + + + + nvidia + + + + + ati + + + + + + @@ -80,6 +157,49 @@ + + + + + + + 200 + 0 + + + + Music player + + + + + + + + 0 + 0 + + + + + 100 + 0 + + + + + mpris + + + + + mpd + + + + + + @@ -135,10 +255,10 @@ - - + + - + 200 @@ -146,78 +266,12 @@ - GPU device + Desktop check cmd - - - - 0 - 0 - - - - - 100 - 0 - - - - - auto - - - - - disable - - - - - nvidia - - - - - ati - - - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - - - 200 - 0 - - - - hddtemp cmd - - - - - + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter @@ -225,49 +279,6 @@ - - - - - - - 200 - 0 - - - - Music player - - - - - - - - 0 - 0 - - - - - 100 - 0 - - - - - mpris - - - - - mpd - - - - - - @@ -292,10 +303,23 @@ - - + + + + Qt::Vertical + + + + 20 + 40 + + + + + + - + 200 @@ -303,19 +327,60 @@ - Desktop check cmd + ACPI path - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + "/sys/class/power_supply/" by default + + + + Qt::CustomContextMenu + + + QAbstractItemView::SingleSelection + + + true + + + false + + + + Name + + + + + Interval + + + + + Output + + + + + Prefix + + + + + Redirect + + + + @@ -440,69 +505,6 @@ del - remove item - - - - Editable -del - remove item - - - true - - - false - - - - Name - - - - - Interval - - - - - Output - - - - - Prefix - - - - - Redirect - - - - - - - - - - - 200 - 0 - - - - ACPI path - - - - - - - "/sys/class/power_supply/" by default - - - - - diff --git a/sources/ext-sysmon/extscript.cpp b/sources/ext-sysmon/extscript.cpp index b7181d1..cd49d98 100644 --- a/sources/ext-sysmon/extscript.cpp +++ b/sources/ext-sysmon/extscript.cpp @@ -233,6 +233,19 @@ ExtScript::ScriptData ExtScript::run(const int time) } +void ExtScript::tryDelete() +{ + if (debug) qDebug() << PDEBUG; + + for (int i=0; i