mirror of
				https://github.com/arcan1s/awesome-widgets.git
				synced 2025-10-31 05:13:40 +00:00 
			
		
		
		
	implement script feature to the widget
This commit is contained in:
		| @ -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) | ||||
|  | ||||
| @ -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<ExtScript *> initScripts(); | ||||
|     // ui | ||||
|     QGraphicsGridLayout *mainLayout = nullptr; | ||||
|     CustomLabel *textLabel = nullptr; | ||||
|  | ||||
| @ -25,6 +25,7 @@ | ||||
| #include <QNetworkInterface> | ||||
| #include <QTextCodec> | ||||
|  | ||||
| #include <extscript.h> | ||||
| #include <fontdialog/fontdialog.h> | ||||
| #include <pdebug/pdebug.h> | ||||
| #include <task/taskadds.h> | ||||
| @ -37,7 +38,6 @@ QMap<QString, QString> AwesomeWidget::readDataEngineConfiguration() | ||||
|  | ||||
|     QMap<QString, QString> 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<QString, QString> AwesomeWidget::updateDataEngineConfiguration(const QMap<Q | ||||
|         key = rawConfig.keys()[i]; | ||||
|         value = rawConfig[key]; | ||||
|         key.remove(QChar(' ')); | ||||
|         if ((key != QString("CUSTOM")) && | ||||
|                 (key != QString("DESKTOPCMD")) && | ||||
|                 (key != QString("HDDTEMPCMD")) && | ||||
|                 (key != QString("PKGCMD"))) | ||||
|         if ((key != QString("DESKTOPCMD")) && | ||||
|             (key != QString("HDDTEMPCMD")) && | ||||
|             (key != QString("PKGCMD"))) | ||||
|             value.remove(QChar(' ')); | ||||
|         config[key] = value; | ||||
|     } | ||||
| @ -364,13 +363,35 @@ void AwesomeWidget::createConfigurationInterface(KConfigDialog *parent) | ||||
|     QMap<QString, QString> 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<ExtScript *> 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; i<deSettings[QString("CUSTOM")].split(QString("@@")).count(); i++) | ||||
|         uiDEConfig.tableWidget_customCommand->setItem(i, 0, new QTableWidgetItem(deSettings[QString("CUSTOM")].split(QString("@@"))[i])); | ||||
|     for (int i=0; i<externalScripts.count(); 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.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<QString, QString> deSettings; | ||||
|     deSettings[QString("ACPIPATH")] = uiDEConfig.lineEdit_acpi->text(); | ||||
|     items.clear(); | ||||
|     for (int i=0; i<uiDEConfig.tableWidget_customCommand->rowCount(); 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; i<uiDEConfig.tableWidget_customCommand->rowCount(); 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<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() | ||||
| { | ||||
|     if (debug) qDebug() << PDEBUG; | ||||
|  | ||||
| @ -7,7 +7,7 @@ | ||||
|     <x>0</x> | ||||
|     <y>0</y> | ||||
|     <width>700</width> | ||||
|     <height>592</height> | ||||
|     <height>590</height> | ||||
|    </rect> | ||||
|   </property> | ||||
|   <property name="sizePolicy"> | ||||
| @ -43,7 +43,7 @@ | ||||
|         <x>0</x> | ||||
|         <y>0</y> | ||||
|         <width>684</width> | ||||
|         <height>576</height> | ||||
|         <height>574</height> | ||||
|        </rect> | ||||
|       </property> | ||||
|       <layout class="QGridLayout" name="gridLayout"> | ||||
| @ -442,9 +442,6 @@ del - remove item</string> | ||||
|        </item> | ||||
|        <item row="1" column="0"> | ||||
|         <widget class="QTableWidget" name="tableWidget_customCommand"> | ||||
|          <property name="contextMenuPolicy"> | ||||
|           <enum>Qt::CustomContextMenu</enum> | ||||
|          </property> | ||||
|          <property name="toolTip"> | ||||
|           <string>Editable | ||||
| del - remove item</string> | ||||
| @ -457,7 +454,27 @@ del - remove item</string> | ||||
|          </attribute> | ||||
|          <column> | ||||
|           <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> | ||||
|          </column> | ||||
|         </widget> | ||||
|  | ||||
| @ -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) | ||||
| { | ||||
|     if (settings.contains(QString("ACTIVE"))) | ||||
|  | ||||
| @ -58,6 +58,7 @@ public: | ||||
| public slots: | ||||
|     void readConfiguration(); | ||||
|     ScriptData run(const int time); | ||||
|     void writeConfiguration(); | ||||
|  | ||||
| private: | ||||
|     // configuration | ||||
|  | ||||
		Reference in New Issue
	
	Block a user