implement script feature to the widget

This commit is contained in:
arcan1s 2014-10-31 07:20:14 +03:00
parent 6a41fa2b8a
commit 1748829901
6 changed files with 122 additions and 53 deletions

View File

@ -15,13 +15,15 @@ include_directories (${CMAKE_SOURCE_DIR}
${KDE4_INCLUDES} ${KDE4_INCLUDES}
${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR}
${CMAKE_CURRENT_BINARY_DIR}/../ ${CMAKE_CURRENT_BINARY_DIR}/../
${PROJECT_TRDPARTY_DIR}) ${PROJECT_TRDPARTY_DIR}
../ext-sysmon)
# set sources # set sources
file (GLOB SUBPROJECT_DESKTOP_IN *.desktop) file (GLOB SUBPROJECT_DESKTOP_IN *.desktop)
file (RELATIVE_PATH SUBPROJECT_DESKTOP ${CMAKE_SOURCE_DIR} ${SUBPROJECT_DESKTOP_IN}) file (RELATIVE_PATH SUBPROJECT_DESKTOP ${CMAKE_SOURCE_DIR} ${SUBPROJECT_DESKTOP_IN})
file (GLOB_RECURSE SUBPROJECT_SOURCE *.cpp ${PROJECT_TRDPARTY_DIR}/task/*.cpp 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) set (TASK_HEADER ${PROJECT_TRDPARTY_DIR}/task/task.h)
file (GLOB SUBPROJECT_UI *.ui ${PROJECT_TRDPARTY_DIR}/about/*.ui) file (GLOB SUBPROJECT_UI *.ui ${PROJECT_TRDPARTY_DIR}/about/*.ui)
file (GLOB SUBPROJECT_NOTIFY *.notifyrc) file (GLOB SUBPROJECT_NOTIFY *.notifyrc)

View File

@ -32,6 +32,7 @@
class CustomLabel; class CustomLabel;
class ExtScript;
class QGraphicsGridLayout; class QGraphicsGridLayout;
class QGraphicsScene; class QGraphicsScene;
class QNetworkReply; class QNetworkReply;
@ -77,9 +78,7 @@ private slots:
void reinit(); void reinit();
void replyRecieved(QNetworkReply *reply); void replyRecieved(QNetworkReply *reply);
// configuration interface // configuration interface
void addNewCustomCommand(QTableWidgetItem *item);
void addNewPkgCommand(QTableWidgetItem *item); void addNewPkgCommand(QTableWidgetItem *item);
void contextMenuCustomCommand(const QPoint pos);
void contextMenuPkgCommand(const QPoint pos); void contextMenuPkgCommand(const QPoint pos);
void editFanItem(QListWidgetItem *item); void editFanItem(QListWidgetItem *item);
void editHddItem(QListWidgetItem *item); void editHddItem(QListWidgetItem *item);
@ -101,6 +100,7 @@ private:
void createActions(); void createActions();
QStringList findKeys(); QStringList findKeys();
QStringList getKeys(); QStringList getKeys();
QList<ExtScript *> initScripts();
// ui // ui
QGraphicsGridLayout *mainLayout = nullptr; QGraphicsGridLayout *mainLayout = nullptr;
CustomLabel *textLabel = nullptr; CustomLabel *textLabel = nullptr;

View File

@ -25,6 +25,7 @@
#include <QNetworkInterface> #include <QNetworkInterface>
#include <QTextCodec> #include <QTextCodec>
#include <extscript.h>
#include <fontdialog/fontdialog.h> #include <fontdialog/fontdialog.h>
#include <pdebug/pdebug.h> #include <pdebug/pdebug.h>
#include <task/taskadds.h> #include <task/taskadds.h>
@ -37,7 +38,6 @@ QMap<QString, QString> AwesomeWidget::readDataEngineConfiguration()
QMap<QString, QString> rawConfig; QMap<QString, QString> rawConfig;
rawConfig[QString("ACPIPATH")] = QString("/sys/class/power_supply/"); 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("DESKTOPCMD")] = QString("qdbus org.kde.kwin /KWin currentDesktop");
rawConfig[QString("GPUDEV")] = QString("auto"); rawConfig[QString("GPUDEV")] = QString("auto");
rawConfig[QString("HDDDEV")] = QString("all"); rawConfig[QString("HDDDEV")] = QString("all");
@ -103,10 +103,9 @@ QMap<QString, QString> AwesomeWidget::updateDataEngineConfiguration(const QMap<Q
key = rawConfig.keys()[i]; key = rawConfig.keys()[i];
value = rawConfig[key]; value = rawConfig[key];
key.remove(QChar(' ')); key.remove(QChar(' '));
if ((key != QString("CUSTOM")) && if ((key != QString("DESKTOPCMD")) &&
(key != QString("DESKTOPCMD")) && (key != QString("HDDTEMPCMD")) &&
(key != QString("HDDTEMPCMD")) && (key != QString("PKGCMD")))
(key != QString("PKGCMD")))
value.remove(QChar(' ')); value.remove(QChar(' '));
config[key] = value; config[key] = value;
} }
@ -364,13 +363,35 @@ void AwesomeWidget::createConfigurationInterface(KConfigDialog *parent)
QMap<QString, QString> deSettings = readDataEngineConfiguration(); QMap<QString, QString> deSettings = readDataEngineConfiguration();
uiDEConfig.lineEdit_acpi->setText(deSettings[QString("ACPIPATH")]); uiDEConfig.lineEdit_acpi->setText(deSettings[QString("ACPIPATH")]);
uiDEConfig.tableWidget_customCommand->clear(); uiDEConfig.tableWidget_customCommand->clear();
uiDEConfig.tableWidget_customCommand->setRowCount(deSettings[QString("CUSTOM")].split(QString("@@")).count() + 1); QList<ExtScript *> externalScripts = initScripts();
uiDEConfig.tableWidget_customCommand->setRowCount(externalScripts.count());
headerList.clear(); 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->setHorizontalHeaderLabels(headerList);
uiDEConfig.tableWidget_customCommand->horizontalHeader()->setResizeMode(QHeaderView::Stretch); uiDEConfig.tableWidget_customCommand->horizontalHeader()->setResizeMode(QHeaderView::Stretch);
for (int i=0; i<deSettings[QString("CUSTOM")].split(QString("@@")).count(); i++) for (int i=0; i<externalScripts.count(); i++) {
uiDEConfig.tableWidget_customCommand->setItem(i, 0, new QTableWidgetItem(deSettings[QString("CUSTOM")].split(QString("@@"))[i])); QTableWidgetItem *name = new QTableWidgetItem(externalScripts[i]->getName());
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.lineEdit_desktopCmd->setText(deSettings[QString("DESKTOPCMD")]);
uiDEConfig.comboBox_gpudev->setCurrentIndex( uiDEConfig.comboBox_gpudev->setCurrentIndex(
uiDEConfig.comboBox_gpudev->findText(deSettings[QString("GPUDEV")], Qt::MatchFixedString)); uiDEConfig.comboBox_gpudev->findText(deSettings[QString("GPUDEV")], Qt::MatchFixedString));
@ -448,10 +469,6 @@ void AwesomeWidget::createConfigurationInterface(KConfigDialog *parent)
this, SLOT(editMountItem(QListWidgetItem *))); this, SLOT(editMountItem(QListWidgetItem *)));
connect(uiAdvancedConfig.listWidget_tempDevice, SIGNAL(itemActivated(QListWidgetItem *)), connect(uiAdvancedConfig.listWidget_tempDevice, SIGNAL(itemActivated(QListWidgetItem *)),
this, SLOT(editTempItem(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 *)), connect(uiDEConfig.tableWidget_pkgCommand, SIGNAL(itemChanged(QTableWidgetItem *)),
this, SLOT(addNewPkgCommand(QTableWidgetItem *))); this, SLOT(addNewPkgCommand(QTableWidgetItem *)));
connect(uiDEConfig.tableWidget_pkgCommand, SIGNAL(customContextMenuRequested(QPoint)), connect(uiDEConfig.tableWidget_pkgCommand, SIGNAL(customContextMenuRequested(QPoint)),
@ -551,11 +568,23 @@ void AwesomeWidget::configAccepted()
// dataengine // dataengine
QMap<QString, QString> deSettings; QMap<QString, QString> deSettings;
deSettings[QString("ACPIPATH")] = uiDEConfig.lineEdit_acpi->text(); deSettings[QString("ACPIPATH")] = uiDEConfig.lineEdit_acpi->text();
items.clear(); QStringList dirs = KGlobal::dirs()->findDirs("data", "plasma_engine_extsysmon/scripts");
for (int i=0; i<uiDEConfig.tableWidget_customCommand->rowCount(); i++) for (int i=0; i<uiDEConfig.tableWidget_customCommand->rowCount(); i++) {
if (uiDEConfig.tableWidget_customCommand->item(i, 0) != 0) ExtScript *script = new ExtScript(uiDEConfig.tableWidget_customCommand->item(i, 0)->text(), dirs);
items.append(uiDEConfig.tableWidget_customCommand->item(i, 0)->text()); if (uiDEConfig.tableWidget_customCommand->item(i, 0)->checkState() == Qt::Checked)
deSettings[QString("CUSTOM")] = items.join(QString("@@")); 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("DESKTOPCMD")] = uiDEConfig.lineEdit_desktopCmd->text();
deSettings[QString("GPUDEV")] = uiDEConfig.comboBox_gpudev->currentText(); deSettings[QString("GPUDEV")] = uiDEConfig.comboBox_gpudev->currentText();
deSettings[QString("HDDDEV")] = uiDEConfig.comboBox_hdddev->currentText(); deSettings[QString("HDDDEV")] = uiDEConfig.comboBox_hdddev->currentText();
@ -680,7 +709,7 @@ void AwesomeWidget::configChanged()
if (acpiDevices[i].contains(batRegexp)) if (acpiDevices[i].contains(batRegexp))
counts[QString("bat")]++; counts[QString("bat")]++;
counts[QString("cpu")] = getNumberCpus(); 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("disk")] = configuration[QString("disk")].split(QString("@@")).count();
counts[QString("fan")] = configuration[QString("fanDevice")].split(QString("@@")).count(); counts[QString("fan")] = configuration[QString("fanDevice")].split(QString("@@")).count();
counts[QString("hddtemp")] = configuration[QString("hdd")].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) void AwesomeWidget::addNewPkgCommand(QTableWidgetItem *item)
{ {
if (debug) qDebug() << PDEBUG; 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) void AwesomeWidget::contextMenuPkgCommand(const QPoint pos)
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
@ -793,6 +798,33 @@ void AwesomeWidget::editTempItem(QListWidgetItem *item)
} }
QList<ExtScript *> AwesomeWidget::initScripts()
{
if (debug) qDebug() << PDEBUG;
QList<ExtScript *> 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; i<dirs.count(); i++) {
QStringList files = QDir(dirs[i]).entryList(QDir::Files, QDir::Name);
for (int j=0; j<files.count(); j++) {
if (files[j].endsWith(QString(".conf"))) continue;
if (names.contains(files[j])) continue;
if (debug) qDebug() << PDEBUG << ":" << "Found file" << files[j] << "in" << dirs[i];
names.append(files[j]);
externalScripts.append(new ExtScript(files[j], dirs, debug));
}
}
return externalScripts;
}
void AwesomeWidget::setFontFormating() void AwesomeWidget::setFontFormating()
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;

View File

@ -7,7 +7,7 @@
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>700</width> <width>700</width>
<height>592</height> <height>590</height>
</rect> </rect>
</property> </property>
<property name="sizePolicy"> <property name="sizePolicy">
@ -43,7 +43,7 @@
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>684</width> <width>684</width>
<height>576</height> <height>574</height>
</rect> </rect>
</property> </property>
<layout class="QGridLayout" name="gridLayout"> <layout class="QGridLayout" name="gridLayout">
@ -442,9 +442,6 @@ del - remove item</string>
</item> </item>
<item row="1" column="0"> <item row="1" column="0">
<widget class="QTableWidget" name="tableWidget_customCommand"> <widget class="QTableWidget" name="tableWidget_customCommand">
<property name="contextMenuPolicy">
<enum>Qt::CustomContextMenu</enum>
</property>
<property name="toolTip"> <property name="toolTip">
<string>Editable <string>Editable
del - remove item</string> del - remove item</string>
@ -457,7 +454,27 @@ del - remove item</string>
</attribute> </attribute>
<column> <column>
<property name="text"> <property name="text">
<string>Custom command</string> <string>Name</string>
</property>
</column>
<column>
<property name="text">
<string>Active</string>
</property>
</column>
<column>
<property name="text">
<string>Interval</string>
</property>
</column>
<column>
<property name="text">
<string>Prefix</string>
</property>
</column>
<column>
<property name="text">
<string>Redirect</string>
</property> </property>
</column> </column>
</widget> </widget>

View File

@ -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<QString, QString> config = toExternalConfiguration();
for (int i=0; i<config.keys().count(); i++) {
QByteArray string = (config.keys()[i] + QString("=") + config[config.keys()[i]] + QString("\n")).toUtf8();
configFile.write(string);
}
configFile.close();
}
void ExtScript::fromExternalConfiguration(const QMap<QString, QString> settings) void ExtScript::fromExternalConfiguration(const QMap<QString, QString> settings)
{ {
if (settings.contains(QString("ACTIVE"))) if (settings.contains(QString("ACTIVE")))

View File

@ -58,6 +58,7 @@ public:
public slots: public slots:
void readConfiguration(); void readConfiguration();
ScriptData run(const int time); ScriptData run(const int time);
void writeConfiguration();
private: private:
// configuration // configuration