diff --git a/sources/awesome-widget/CMakeLists.txt b/sources/awesome-widget/CMakeLists.txt index 43a3256..52254eb 100644 --- a/sources/awesome-widget/CMakeLists.txt +++ b/sources/awesome-widget/CMakeLists.txt @@ -15,13 +15,15 @@ include_directories (${CMAKE_SOURCE_DIR} ${KDE4_INCLUDES} ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR}/../ - ${PROJECT_TRDPARTY_DIR}) + ${PROJECT_TRDPARTY_DIR} + ../ext-sysmon) # set sources file (GLOB SUBPROJECT_DESKTOP_IN *.desktop) file (RELATIVE_PATH SUBPROJECT_DESKTOP ${CMAKE_SOURCE_DIR} ${SUBPROJECT_DESKTOP_IN}) file (GLOB_RECURSE SUBPROJECT_SOURCE *.cpp ${PROJECT_TRDPARTY_DIR}/task/*.cpp - ${PROJECT_TRDPARTY_DIR}/fontdialog/*.cpp) + ${PROJECT_TRDPARTY_DIR}/fontdialog/*.cpp + ../ext-sysmon/extscript.cpp) set (TASK_HEADER ${PROJECT_TRDPARTY_DIR}/task/task.h) file (GLOB SUBPROJECT_UI *.ui ${PROJECT_TRDPARTY_DIR}/about/*.ui) file (GLOB SUBPROJECT_NOTIFY *.notifyrc) diff --git a/sources/awesome-widget/awesome-widget.h b/sources/awesome-widget/awesome-widget.h index a0d3d97..caa1dc2 100644 --- a/sources/awesome-widget/awesome-widget.h +++ b/sources/awesome-widget/awesome-widget.h @@ -32,6 +32,7 @@ class CustomLabel; +class ExtScript; class QGraphicsGridLayout; class QGraphicsScene; class QNetworkReply; @@ -77,9 +78,7 @@ private slots: void reinit(); void replyRecieved(QNetworkReply *reply); // configuration interface - void addNewCustomCommand(QTableWidgetItem *item); void addNewPkgCommand(QTableWidgetItem *item); - void contextMenuCustomCommand(const QPoint pos); void contextMenuPkgCommand(const QPoint pos); void editFanItem(QListWidgetItem *item); void editHddItem(QListWidgetItem *item); @@ -101,6 +100,7 @@ private: void createActions(); QStringList findKeys(); QStringList getKeys(); + QList initScripts(); // ui QGraphicsGridLayout *mainLayout = nullptr; CustomLabel *textLabel = nullptr; diff --git a/sources/awesome-widget/configuration.cpp b/sources/awesome-widget/configuration.cpp index 4b4292f..86efa9c 100644 --- a/sources/awesome-widget/configuration.cpp +++ b/sources/awesome-widget/configuration.cpp @@ -25,6 +25,7 @@ #include #include +#include #include #include #include @@ -37,7 +38,6 @@ QMap AwesomeWidget::readDataEngineConfiguration() QMap rawConfig; rawConfig[QString("ACPIPATH")] = QString("/sys/class/power_supply/"); - rawConfig[QString("CUSTOM")] = QString("wget -qO- http://ifconfig.me/ip"); rawConfig[QString("DESKTOPCMD")] = QString("qdbus org.kde.kwin /KWin currentDesktop"); rawConfig[QString("GPUDEV")] = QString("auto"); rawConfig[QString("HDDDEV")] = QString("all"); @@ -103,10 +103,9 @@ QMap AwesomeWidget::updateDataEngineConfiguration(const QMap deSettings = readDataEngineConfiguration(); uiDEConfig.lineEdit_acpi->setText(deSettings[QString("ACPIPATH")]); uiDEConfig.tableWidget_customCommand->clear(); - uiDEConfig.tableWidget_customCommand->setRowCount(deSettings[QString("CUSTOM")].split(QString("@@")).count() + 1); + QList externalScripts = initScripts(); + uiDEConfig.tableWidget_customCommand->setRowCount(externalScripts.count()); headerList.clear(); - headerList.append(i18n("Custom command")); + headerList.append(i18n("Name")); + headerList.append(i18n("Interval")); + headerList.append(i18n("Output")); + headerList.append(i18n("Prefix")); + headerList.append(i18n("Redirect")); uiDEConfig.tableWidget_customCommand->setHorizontalHeaderLabels(headerList); uiDEConfig.tableWidget_customCommand->horizontalHeader()->setResizeMode(QHeaderView::Stretch); - for (int i=0; isetItem(i, 0, new QTableWidgetItem(deSettings[QString("CUSTOM")].split(QString("@@"))[i])); + for (int i=0; igetName()); + name->setFlags(Qt::ItemIsSelectable | Qt::ItemIsUserCheckable | Qt::ItemIsDragEnabled | Qt::ItemIsDropEnabled | Qt::ItemIsEnabled); + if (externalScripts[i]->isActive()) + name->setCheckState(Qt::Checked); + else + name->setCheckState(Qt::Unchecked); + uiDEConfig.tableWidget_customCommand->setItem(i, 0, name); + uiDEConfig.tableWidget_customCommand->setItem(i, 1, new QTableWidgetItem(QString::number(externalScripts[i]->getInterval()))); + QTableWidgetItem *output = new QTableWidgetItem(); + if (externalScripts[i]->hasOutput()) + output->setCheckState(Qt::Checked); + else + 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()))); + } + externalScripts.clear(); uiDEConfig.lineEdit_desktopCmd->setText(deSettings[QString("DESKTOPCMD")]); uiDEConfig.comboBox_gpudev->setCurrentIndex( uiDEConfig.comboBox_gpudev->findText(deSettings[QString("GPUDEV")], Qt::MatchFixedString)); @@ -448,10 +469,6 @@ void AwesomeWidget::createConfigurationInterface(KConfigDialog *parent) this, SLOT(editMountItem(QListWidgetItem *))); connect(uiAdvancedConfig.listWidget_tempDevice, SIGNAL(itemActivated(QListWidgetItem *)), this, SLOT(editTempItem(QListWidgetItem *))); - connect(uiDEConfig.tableWidget_customCommand, SIGNAL(itemChanged(QTableWidgetItem *)), - this, SLOT(addNewCustomCommand(QTableWidgetItem *))); - 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)), @@ -551,11 +568,23 @@ void AwesomeWidget::configAccepted() // dataengine QMap deSettings; deSettings[QString("ACPIPATH")] = uiDEConfig.lineEdit_acpi->text(); - items.clear(); - for (int i=0; irowCount(); i++) - if (uiDEConfig.tableWidget_customCommand->item(i, 0) != 0) - items.append(uiDEConfig.tableWidget_customCommand->item(i, 0)->text()); - deSettings[QString("CUSTOM")] = items.join(QString("@@")); + QStringList dirs = KGlobal::dirs()->findDirs("data", "plasma_engine_extsysmon/scripts"); + for (int i=0; irowCount(); i++) { + ExtScript *script = new ExtScript(uiDEConfig.tableWidget_customCommand->item(i, 0)->text(), dirs); + if (uiDEConfig.tableWidget_customCommand->item(i, 0)->checkState() == Qt::Checked) + script->setActive(true); + else + script->setActive(false); + script->setInterval(uiDEConfig.tableWidget_customCommand->item(i, 1)->text().toInt()); + if (uiDEConfig.tableWidget_customCommand->item(i, 2)->checkState() == Qt::Checked) + script->setHasOutput(true); + 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()); + script->writeConfiguration(); + delete script; + } deSettings[QString("DESKTOPCMD")] = uiDEConfig.lineEdit_desktopCmd->text(); deSettings[QString("GPUDEV")] = uiDEConfig.comboBox_gpudev->currentText(); deSettings[QString("HDDDEV")] = uiDEConfig.comboBox_hdddev->currentText(); @@ -680,7 +709,7 @@ void AwesomeWidget::configChanged() if (acpiDevices[i].contains(batRegexp)) counts[QString("bat")]++; counts[QString("cpu")] = getNumberCpus(); - counts[QString("custom")] = deSettings[QString("CUSTOM")].split(QString("@@")).count(); + counts[QString("custom")] = initScripts().count(); counts[QString("disk")] = configuration[QString("disk")].split(QString("@@")).count(); counts[QString("fan")] = configuration[QString("fanDevice")].split(QString("@@")).count(); counts[QString("hddtemp")] = configuration[QString("hdd")].split(QString("@@")).count(); @@ -700,16 +729,6 @@ void AwesomeWidget::configChanged() } -void AwesomeWidget::addNewCustomCommand(QTableWidgetItem *item) -{ - if (debug) qDebug() << PDEBUG; - - if (item->row() == (uiDEConfig.tableWidget_customCommand->rowCount() - 1)) - uiDEConfig.tableWidget_customCommand->insertRow( - uiDEConfig.tableWidget_customCommand->rowCount()); -} - - void AwesomeWidget::addNewPkgCommand(QTableWidgetItem *item) { if (debug) qDebug() << PDEBUG; @@ -725,20 +744,6 @@ 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 *remove = menu.addAction(QIcon::fromTheme("edit-delete"), i18n("Remove")); - QAction *action = menu.exec(uiDEConfig.tableWidget_customCommand->viewport()->mapToGlobal(pos)); - if (action == remove) - uiDEConfig.tableWidget_customCommand->removeRow( - uiDEConfig.tableWidget_customCommand->currentRow()); -} - - void AwesomeWidget::contextMenuPkgCommand(const QPoint pos) { if (debug) qDebug() << PDEBUG; @@ -793,6 +798,33 @@ void AwesomeWidget::editTempItem(QListWidgetItem *item) } +QList AwesomeWidget::initScripts() +{ + if (debug) qDebug() << PDEBUG; + + QList externalScripts; + // create directory at $HOME + QString localDir = KStandardDirs::locateLocal("data", "plasma_engine_extsysmon/scripts"); + if (KStandardDirs::makeDir(localDir)) + if (debug) qDebug() << PDEBUG << ":" << "Created directory" << localDir; + + QStringList dirs = KGlobal::dirs()->findDirs("data", "plasma_engine_extsysmon/scripts"); + QStringList names; + for (int i=0; i0 0 700 - 592 + 590 @@ -43,7 +43,7 @@ 0 0 684 - 576 + 574 @@ -442,9 +442,6 @@ del - remove item - - Qt::CustomContextMenu - Editable del - remove item @@ -457,7 +454,27 @@ del - remove item - Custom command + Name + + + + + Active + + + + + Interval + + + + + Prefix + + + + + Redirect diff --git a/sources/ext-sysmon/extscript.cpp b/sources/ext-sysmon/extscript.cpp index 39604da..95dfd25 100644 --- a/sources/ext-sysmon/extscript.cpp +++ b/sources/ext-sysmon/extscript.cpp @@ -233,6 +233,23 @@ ExtScript::ScriptData ExtScript::run(const int time) } +void ExtScript::writeConfiguration() +{ + if (debug) qDebug() << PDEBUG; + + QString fileName = dirs[0] + QDir::separator() + name + QString(".conf"); + if (debug) qDebug() << PDEBUG << ":" << "Configuration file" << fileName; + QFile configFile(fileName); + if (!configFile.open(QIODevice::WriteOnly)) return; + QMap config = toExternalConfiguration(); + for (int i=0; i settings) { if (settings.contains(QString("ACTIVE"))) diff --git a/sources/ext-sysmon/extscript.h b/sources/ext-sysmon/extscript.h index 8c563f0..e0d03a5 100644 --- a/sources/ext-sysmon/extscript.h +++ b/sources/ext-sysmon/extscript.h @@ -58,6 +58,7 @@ public: public slots: void readConfiguration(); ScriptData run(const int time); + void writeConfiguration(); private: // configuration