From 5fd3a4a21ac0f1513528304ddd74c5b891651076 Mon Sep 17 00:00:00 2001 From: Evgenii Alekseev Date: Thu, 7 Mar 2024 12:09:46 +0200 Subject: [PATCH 01/10] update to plasma 6 support --- sources/awesome-widget/plugin/CMakeLists.txt | 2 +- sources/awesomewidgets/CMakeLists.txt | 4 ++-- sources/libraries.cmake | 23 ++++++++++---------- 3 files changed, 15 insertions(+), 14 deletions(-) diff --git a/sources/awesome-widget/plugin/CMakeLists.txt b/sources/awesome-widget/plugin/CMakeLists.txt index 4d90d57..0011a9f 100644 --- a/sources/awesome-widget/plugin/CMakeLists.txt +++ b/sources/awesome-widget/plugin/CMakeLists.txt @@ -14,7 +14,7 @@ file(GLOB SUBPROJECT_SOURCE *.cpp ${PROJECT_TRDPARTY_DIR}/fontdialog/*.cpp ${CMA file(GLOB SUBPROJECT_UI *.ui) file(GLOB SUBPROJECT_NOTIFY *.notifyrc) -qt5_wrap_ui(SUBPROJECT_UI_HEADER ${SUBPROJECT_UI}) +qt6_wrap_ui(SUBPROJECT_UI_HEADER ${SUBPROJECT_UI}) add_library(${PLUGIN_NAME} SHARED ${SUBPROJECT_SOURCE} ${SUBPROJECT_UI_HEADER}) target_link_libraries(${PLUGIN_NAME} ${PROJECT_LIBRARY} ${Qt_LIBRARIES} ${Kf5_LIBRARIES}) diff --git a/sources/awesomewidgets/CMakeLists.txt b/sources/awesomewidgets/CMakeLists.txt index c8b6ef2..5d991ab 100644 --- a/sources/awesomewidgets/CMakeLists.txt +++ b/sources/awesomewidgets/CMakeLists.txt @@ -28,7 +28,7 @@ file(RELATIVE_PATH SUBPROJECT_WEATHER_JSON ${CMAKE_SOURCE_DIR} ${SUBPROJECT_WEAT # prepare configure_file(${SUBPROJECT_WEATHER_JSON_IN} ${CMAKE_CURRENT_BINARY_DIR}/${SUBPROJECT_WEATHER_JSON}) -qt5_wrap_ui(SUBPROJECT_UI_HEADER ${SUBPROJECT_UI}) +qt6_wrap_ui(SUBPROJECT_UI_HEADER ${SUBPROJECT_UI}) add_library(${SUBPROJECT} STATIC ${SUBPROJECT_SOURCE} ${SUBPROJECT_HEADER} ${SUBPROJECT_UI_HEADER}) target_link_libraries(${SUBPROJECT} ${Qt_LIBRARIES} ${Kf5_LIBRARIES}) @@ -41,5 +41,5 @@ install(DIRECTORY ${SUBPROJECT_SCRIPTS} DESTINATION ${DATA_INSTALL_DIR}/${PROJEC install(DIRECTORY ${SUBPROJECT_REQUESTS} DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME}) install(DIRECTORY ${SUBPROJECT_UPGRADE} DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME}) install(DIRECTORY ${SUBPROJECT_WEATHER} DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME}) -install(FILES ${SUBPROJECT_INI} DESTINATION ${CONFIG_INSTALL_DIR}) +install(FILES ${SUBPROJECT_INI} DESTINATION ${KDE_INSTALL_FULL_CONFDIR}) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${SUBPROJECT_WEATHER_JSON} DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME}/weather) diff --git a/sources/libraries.cmake b/sources/libraries.cmake index 4046f95..d4ed2b4 100644 --- a/sources/libraries.cmake +++ b/sources/libraries.cmake @@ -2,28 +2,29 @@ find_package(Gettext REQUIRED) # main qt libraries -find_package(Qt5 5.6.0 REQUIRED COMPONENTS Core DBus Network Qml Test Widgets) +find_package(Qt6 6.6.0 REQUIRED COMPONENTS Core DBus Network Qml Test Widgets) add_definitions( - ${Qt5Core_DEFINITIONS} ${Qt5DBus_DEFINITIONS} ${Qt5Network_DEFINITIONS} - ${Qt5Qml_DEFINITIONS} ${Qt5Widgets_DEFINITIONS} + ${Qt6Core_DEFINITIONS} ${Qt6DBus_DEFINITIONS} ${Qt6Network_DEFINITIONS} + ${Qt6Qml_DEFINITIONS} ${Qt6Widgets_DEFINITIONS} ) set(Qt_INCLUDE - ${Qt5Core_INCLUDE_DIRS} ${Qt5DBus_INCLUDE_DIRS} ${Qt5Network_INCLUDE_DIRS} - ${Qt5Qml_INCLUDE_DIRS} ${Qt5Widgets_INCLUDE_DIRS} + ${Qt6Core_INCLUDE_DIRS} ${Qt6DBus_INCLUDE_DIRS} ${Qt6Network_INCLUDE_DIRS} + ${Qt6Qml_INCLUDE_DIRS} ${Qt6Widgets_INCLUDE_DIRS} ) set(Qt_LIBRARIES - ${Qt5Core_LIBRARIES} ${Qt5DBus_LIBRARIES} ${Qt5Network_LIBRARIES} - ${Qt5Qml_LIBRARIES} ${Qt5Widgets_LIBRARIES} + ${Qt6Core_LIBRARIES} ${Qt6DBus_LIBRARIES} ${Qt6Network_LIBRARIES} + ${Qt6Qml_LIBRARIES} ${Qt6Widgets_LIBRARIES} ) -# kf5 libraries +# kf6 libraries find_package(ECM 0.0.11 REQUIRED NO_MODULE) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${ECM_MODULE_PATH} ${ECM_KDE_MODULE_DIR}) -find_package(KF5 REQUIRED COMPONENTS I18n Notifications Plasma Service WindowSystem) +find_package(KF6 REQUIRED COMPONENTS I18n Notifications Service WindowSystem) find_package(LibTaskManager REQUIRED) +find_package(Plasma REQUIRED) include(KDEInstallDirs) include(KDECMakeSettings) include(KDECompilerSettings) -set(Kf5_INCLUDE ${I18n_INCLUDE_DIR} ${Notifications_INCLUDE_DIR} ${Plasma_INCLUDE_DIR}) -set(Kf5_LIBRARIES KF5::I18n KF5::Notifications KF5::Plasma KF5::WindowSystem PW::LibTaskManager) +set(Kf6_INCLUDE ${I18n_INCLUDE_DIR} ${Notifications_INCLUDE_DIR} ${Plasma_INCLUDE_DIR}) +set(Kf6_LIBRARIES KF6::I18n KF6::Notifications KF6::WindowSystem PW::LibTaskManager) From 0fcfb7d7e467dcb87374412813b0d8a67b56875f Mon Sep 17 00:00:00 2001 From: Evgenii Alekseev Date: Thu, 7 Mar 2024 17:57:05 +0200 Subject: [PATCH 02/10] port library --- sources/awesome-widget/metadata.json | 29 ++++++++++++++ .../awesome-widget/package/contents/ui/qmldir | 40 +++++++++---------- sources/awesome-widget/plugin/CMakeLists.txt | 6 +-- .../plugin/awdataenginemapper.cpp | 20 +++++----- sources/awesome-widget/plugin/awkeycache.cpp | 9 +++-- .../awesome-widget/plugin/awkeyoperations.cpp | 26 ++++++------ sources/awesome-widget/plugin/awkeys.cpp | 2 +- .../plugin/awpatternfunctions.cpp | 8 ++-- sources/awesomewidgets/CMakeLists.txt | 6 +-- sources/awesomewidgets/abstractextitem.cpp | 2 +- sources/awesomewidgets/awabstractformatter.h | 2 + sources/awesomewidgets/awjsonformatter.cpp | 6 +-- sources/awesomewidgets/awlistformatter.cpp | 2 +- sources/awesomewidgets/awlistformatter.h | 2 +- sources/awesomewidgets/extnetworkrequest.cpp | 4 +- sources/awesomewidgets/extscript.cpp | 5 +-- sources/awesomewidgets/extupgrade.cpp | 5 +-- sources/awesomewidgets/owmweatherprovider.cpp | 2 +- .../awesomewidgets/stooqquotesprovider.cpp | 3 +- sources/desktop-panel/metadata.json | 29 ++++++++++++++ .../desktop-panel/package/contents/ui/qmldir | 40 +++++++++---------- sources/desktop-panel/plugin/CMakeLists.txt | 6 +-- sources/desktop-panel/plugin/dpadds.cpp | 2 +- sources/extsysmon/CMakeLists.txt | 10 ++--- sources/extsysmon/extsysmon.cpp | 3 +- sources/extsysmon/extsysmon.h | 2 +- .../plasma-dataengine-extsysmon.json | 20 ++++++++++ sources/extsysmonsources/CMakeLists.txt | 4 +- .../abstractextsysmonsource.h | 7 ++-- sources/extsysmonsources/gpuloadsource.cpp | 5 +-- sources/extsysmonsources/gputempsource.cpp | 5 +-- sources/extsysmonsources/hddtempsource.cpp | 7 ++-- sources/extsysmonsources/networksource.cpp | 5 +-- sources/extsysmonsources/playersource.cpp | 9 ++--- sources/extsysmonsources/processessource.cpp | 2 +- sources/libraries.cmake | 3 +- sources/test/CMakeLists.txt | 6 +-- sources/test/testawpatternfunctions.cpp | 3 +- 38 files changed, 208 insertions(+), 139 deletions(-) create mode 100644 sources/awesome-widget/metadata.json create mode 100644 sources/desktop-panel/metadata.json create mode 100644 sources/extsysmon/plasma-dataengine-extsysmon.json diff --git a/sources/awesome-widget/metadata.json b/sources/awesome-widget/metadata.json new file mode 100644 index 0000000..0f83643 --- /dev/null +++ b/sources/awesome-widget/metadata.json @@ -0,0 +1,29 @@ +{ + "KPlugin": { + "Authors": [ + { + "Email": "esalexeev@gmail.com", + "Name": "Evgeniy Alekseev aka arcanis" + } + ], + "Category": "System Information", + "Description": "A minimalistic Plasmoid", + "Description[en]": "A minimalistic Plasmoid", + "Description[es]": "Un script Plasmoïde minimaliste", + "Description[pt_BR]": "Um script Plasmoid", + "Description[ru]": "Минималистичный плазмоид", + "Description[uk]": "Мінімалістичний плазмоїд", + "EnabledByDefault": true, + "Icon": "utilities-system-monitor", + "Id": "org.kde.plasma.awesomewidget", + "License": "GPLv3", + "Name": "Awesome Widget", + "ServiceTypes": [ + "Plasma/Applet" + ], + "Version": "@PROJECT_VERSION@", + "Website": "https://arcanis.me/projects/awesome-widgets/" + }, + "X-Plasma-API": "declarativeappletscript", + "X-Plasma-MainScript": "ui/main.qml" +} diff --git a/sources/awesome-widget/package/contents/ui/qmldir b/sources/awesome-widget/package/contents/ui/qmldir index 2f19ff4..637924c 100644 --- a/sources/awesome-widget/package/contents/ui/qmldir +++ b/sources/awesome-widget/package/contents/ui/qmldir @@ -3,25 +3,25 @@ # common QML constants -singleton General 1.0 file:///usr/share/awesomewidgets/qml/General.qml +singleton General 1.0 file:///usr//awesomewidgets/qml/General.qml # custom QML UI classes -AboutTab file:///usr/share/awesomewidgets/qml/AboutTab.qml -AWExtensions file:///usr/share/awesomewidgets/qml/AWExtensions.qml -AWInfoLabel file:///usr/share/awesomewidgets/qml/AWInfoLabel.qml -AWTagSelector file:///usr/share/awesomewidgets/qml/AWTagSelector.qml -AWTextEditor file:///usr/share/awesomewidgets/qml/AWTextEditor.qml -BugReport file:///usr/share/awesomewidgets/qml/BugReport.qml -ButtonSelector file:///usr/share/awesomewidgets/qml/ButtonSelector.qml -CheckBoxSelector file:///usr/share/awesomewidgets/qml/CheckBoxSelector.qml -ColorSelector file:///usr/share/awesomewidgets/qml/ColorSelector.qml -ComboBoxSelector file:///usr/share/awesomewidgets/qml/ComboBoxSelector.qml -ExportDialog file:///usr/share/awesomewidgets/qml/ExportDialog.qml -FontSelector file:///usr/share/awesomewidgets/qml/FontSelector.qml -HtmlDefaultFunctionsBar file:///usr/share/awesomewidgets/qml/HtmlDefaultFunctionsBar.qml -HtmlEditorButton file:///usr/share/awesomewidgets/qml/HtmlEditorButton.qml -HtmlEditorColor file:///usr/share/awesomewidgets/qml/HtmlEditorColor.qml -HtmlEditorFont file:///usr/share/awesomewidgets/qml/HtmlEditorFont.qml -ImportDialog file:///usr/share/awesomewidgets/qml/ImportDialog.qml -IntegerSelector file:///usr/share/awesomewidgets/qml/IntegerSelector.qml -LineSelector file:///usr/share/awesomewidgets/qml/LineSelector.qml +AboutTab file:///usr//awesomewidgets/qml/AboutTab.qml +AWExtensions file:///usr//awesomewidgets/qml/AWExtensions.qml +AWInfoLabel file:///usr//awesomewidgets/qml/AWInfoLabel.qml +AWTagSelector file:///usr//awesomewidgets/qml/AWTagSelector.qml +AWTextEditor file:///usr//awesomewidgets/qml/AWTextEditor.qml +BugReport file:///usr//awesomewidgets/qml/BugReport.qml +ButtonSelector file:///usr//awesomewidgets/qml/ButtonSelector.qml +CheckBoxSelector file:///usr//awesomewidgets/qml/CheckBoxSelector.qml +ColorSelector file:///usr//awesomewidgets/qml/ColorSelector.qml +ComboBoxSelector file:///usr//awesomewidgets/qml/ComboBoxSelector.qml +ExportDialog file:///usr//awesomewidgets/qml/ExportDialog.qml +FontSelector file:///usr//awesomewidgets/qml/FontSelector.qml +HtmlDefaultFunctionsBar file:///usr//awesomewidgets/qml/HtmlDefaultFunctionsBar.qml +HtmlEditorButton file:///usr//awesomewidgets/qml/HtmlEditorButton.qml +HtmlEditorColor file:///usr//awesomewidgets/qml/HtmlEditorColor.qml +HtmlEditorFont file:///usr//awesomewidgets/qml/HtmlEditorFont.qml +ImportDialog file:///usr//awesomewidgets/qml/ImportDialog.qml +IntegerSelector file:///usr//awesomewidgets/qml/IntegerSelector.qml +LineSelector file:///usr//awesomewidgets/qml/LineSelector.qml diff --git a/sources/awesome-widget/plugin/CMakeLists.txt b/sources/awesome-widget/plugin/CMakeLists.txt index 0011a9f..2fb27b5 100644 --- a/sources/awesome-widget/plugin/CMakeLists.txt +++ b/sources/awesome-widget/plugin/CMakeLists.txt @@ -7,7 +7,7 @@ include_directories( ${CMAKE_CURRENT_SOURCE_DIR}/../../${PROJECT_LIBRARY}/ ${PROJECT_TRDPARTY_DIR} ${Qt_INCLUDE} - ${Kf5_INCLUDE} + ${Kf6_INCLUDE} ) file(GLOB SUBPROJECT_SOURCE *.cpp ${PROJECT_TRDPARTY_DIR}/fontdialog/*.cpp ${CMAKE_SOURCE_DIR}/*.cpp) @@ -16,8 +16,8 @@ file(GLOB SUBPROJECT_NOTIFY *.notifyrc) qt6_wrap_ui(SUBPROJECT_UI_HEADER ${SUBPROJECT_UI}) add_library(${PLUGIN_NAME} SHARED ${SUBPROJECT_SOURCE} ${SUBPROJECT_UI_HEADER}) -target_link_libraries(${PLUGIN_NAME} ${PROJECT_LIBRARY} ${Qt_LIBRARIES} ${Kf5_LIBRARIES}) +target_link_libraries(${PLUGIN_NAME} ${PROJECT_LIBRARY} ${Qt_LIBRARIES} ${Kf6_LIBRARIES}) install(TARGETS ${PLUGIN_NAME} DESTINATION ${QML_INSTALL_DIR}/org/kde/plasma/private/awesomewidget) install(FILES qmldir DESTINATION ${QML_INSTALL_DIR}/org/kde/plasma/private/awesomewidget) -install(FILES ${SUBPROJECT_NOTIFY} DESTINATION ${KNOTIFYRC_INSTALL_DIR}) +install(FILES ${SUBPROJECT_NOTIFY} DESTINATION ${KDE_INSTALL_KNOTIFYRCDIR}) diff --git a/sources/awesome-widget/plugin/awdataenginemapper.cpp b/sources/awesome-widget/plugin/awdataenginemapper.cpp index 9c2a9bd..d2fa3c3 100644 --- a/sources/awesome-widget/plugin/awdataenginemapper.cpp +++ b/sources/awesome-widget/plugin/awdataenginemapper.cpp @@ -17,7 +17,7 @@ #include "awdataenginemapper.h" -#include +#include #include "awdebug.h" #include "awformatterhelper.h" @@ -81,15 +81,15 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const QSt qCDebug(LOG_AW) << "Source" << _source << "with units" << _units; // regular expressions - QRegExp cpuRegExp = QRegExp("cpu/cpu.*/TotalLoad"); - QRegExp cpuclRegExp = QRegExp("cpu/cpu.*/clock"); - QRegExp hddrRegExp = QRegExp("disk/.*/Rate/rblk"); - QRegExp hddwRegExp = QRegExp("disk/.*/Rate/wblk"); - QRegExp mountFillRegExp = QRegExp("partitions/.*/filllevel"); - QRegExp mountFreeRegExp = QRegExp("partitions/.*/freespace"); - QRegExp mountUsedRegExp = QRegExp("partitions/.*/usedspace"); - QRegExp netRegExp = QRegExp("network/interfaces/.*/(receiver|transmitter)/data$"); - QRegExp netTotalRegExp = QRegExp("network/interfaces/.*/(receiver|transmitter)/dataTotal$"); + auto cpuRegExp = QRegularExpression("cpu/cpu.*/TotalLoad"); + auto cpuclRegExp = QRegularExpression("cpu/cpu.*/clock"); + auto hddrRegExp = QRegularExpression("disk/.*/Rate/rblk"); + auto hddwRegExp = QRegularExpression("disk/.*/Rate/wblk"); + auto mountFillRegExp = QRegularExpression("partitions/.*/filllevel"); + auto mountFreeRegExp = QRegularExpression("partitions/.*/freespace"); + auto mountUsedRegExp = QRegularExpression("partitions/.*/usedspace"); + auto netRegExp = QRegularExpression("network/interfaces/.*/(receiver|transmitter)/data$"); + auto netTotalRegExp = QRegularExpression("network/interfaces/.*/(receiver|transmitter)/dataTotal$"); if (_source == "battery/ac") { // AC diff --git a/sources/awesome-widget/plugin/awkeycache.cpp b/sources/awesome-widget/plugin/awkeycache.cpp index d618cc2..f0985ca 100644 --- a/sources/awesome-widget/plugin/awkeycache.cpp +++ b/sources/awesome-widget/plugin/awkeycache.cpp @@ -20,6 +20,7 @@ #include #include +#include #include #include @@ -42,7 +43,7 @@ bool AWKeyCache::addKeyToCache(const QString &_type, const QString &_key) if (_type == "hdd") { QStringList allDevices = QDir("/dev").entryList(QDir::System, QDir::Name); - QStringList devices = allDevices.filter(QRegExp("^[hms]d[a-z]$")); + QStringList devices = allDevices.filter(QRegularExpression("^[hms]d[a-z]$")); for (auto &dev : devices) { QString device = QString("/dev/%1").arg(dev); if (cachedValues.contains(device)) @@ -93,7 +94,7 @@ QStringList AWKeyCache::getRequiredKeys(const QStringList &_keys, const QStringL // insert depending keys, refer to AWKeys::calculateValues() // hddtotmb* - for (auto &key : _allKeys.filter(QRegExp("^hddtotmb"))) { + for (auto &key : _allKeys.filter(QRegularExpression("^hddtotmb"))) { if (!used.contains(key)) continue; key.remove("hddtotmb"); @@ -101,7 +102,7 @@ QStringList AWKeyCache::getRequiredKeys(const QStringList &_keys, const QStringL used << QString("hddfreemb%1").arg(index) << QString("hddmb%1").arg(index); } // hddtotgb* - for (auto &key : _allKeys.filter(QRegExp("^hddtotgb"))) { + for (auto &key : _allKeys.filter(QRegularExpression("^hddtotgb"))) { if (!used.contains(key)) continue; key.remove("hddtotgb"); @@ -138,7 +139,7 @@ QStringList AWKeyCache::getRequiredKeys(const QStringList &_keys, const QStringL for (auto &key : netKeys) { if (!used.contains(key)) continue; - QStringList filt = _allKeys.filter(QRegExp(QString("^%1[0-9]{1,}").arg(key))); + QStringList filt = _allKeys.filter(QRegularExpression(QString("^%1[0-9]{1,}").arg(key))); for (auto &filtered : filt) used << filtered; } diff --git a/sources/awesome-widget/plugin/awkeyoperations.cpp b/sources/awesome-widget/plugin/awkeyoperations.cpp index b7ec39a..6f8819e 100644 --- a/sources/awesome-widget/plugin/awkeyoperations.cpp +++ b/sources/awesome-widget/plugin/awkeyoperations.cpp @@ -18,7 +18,7 @@ #include "awkeyoperations.h" #include -#include +#include #include #include "awcustomkeyshelper.h" @@ -206,7 +206,7 @@ QString AWKeyOperations::infoByKey(const QString &_key) const qCDebug(LOG_AW) << "Requested key" << _key; QString stripped = _key; - stripped.remove(QRegExp("\\d+")); + stripped.remove(QRegularExpression("\\d+")); QString output; if (_key.startsWith("bar")) { @@ -217,31 +217,31 @@ QString AWKeyOperations::infoByKey(const QString &_key) const AbstractExtItem *item = m_extScripts->itemByTag(_key, stripped); if (item) output = item->uniq(); - } else if (_key.contains(QRegExp("^hdd[rw]"))) { + } else if (_key.contains(QRegularExpression("^hdd[rw]"))) { QString index = _key; - index.remove(QRegExp("hdd[rw]")); + index.remove(QRegularExpression("hdd[rw]")); output = m_devices["disk"][index.toInt()]; - } else if (_key.contains(QRegExp("^hdd([0-9]|mb|gb|freemb|freegb|totmb|totgb)"))) { + } else if (_key.contains(QRegularExpression("^hdd([0-9]|mb|gb|freemb|freegb|totmb|totgb)"))) { QString index = _key; - index.remove(QRegExp("^hdd(|mb|gb|freemb|freegb|totmb|totgb)")); + index.remove(QRegularExpression("^hdd(|mb|gb|freemb|freegb|totmb|totgb)")); output = m_devices["mount"][index.toInt()]; } else if (_key.startsWith("hddtemp")) { QString index = _key; index.remove("hddtemp"); output = m_devices["hdd"][index.toInt()]; - } else if (_key.contains(QRegExp("^(down|up)[0-9]"))) { + } else if (_key.contains(QRegularExpression("^(down|up)[0-9]"))) { QString index = _key; - index.remove(QRegExp("^(down|up)")); + index.remove(QRegularExpression("^(down|up)")); output = m_devices["net"][index.toInt()]; } else if (_key.startsWith("pkgcount")) { AbstractExtItem *item = m_extUpgrade->itemByTag(_key, stripped); if (item) output = item->uniq(); - } else if (_key.contains(QRegExp("(^|perc)(ask|bid|price)(chg|)"))) { + } else if (_key.contains(QRegularExpression("(^|perc)(ask|bid|price)(chg|)"))) { AbstractExtItem *item = m_extQuotes->itemByTag(_key, stripped); if (item) output = item->uniq(); - } else if (_key.contains(QRegExp("(weather|weatherId|humidity|pressure|temperature)"))) { + } else if (_key.contains(QRegularExpression("(weather|weatherId|humidity|pressure|temperature)"))) { AbstractExtItem *item = m_extWeather->itemByTag(_key, stripped); if (item) output = item->uniq(); @@ -280,7 +280,7 @@ void AWKeyOperations::editItem(const QString &_type) qCDebug(LOG_AW) << "Item type" << _type; if (_type == "graphicalitem") { - QStringList keys = dictKeys().filter(QRegExp("^(cpu(?!cl).*|gpu$|mem$|swap$|hdd[0-9].*|bat.*)")); + QStringList keys = dictKeys().filter(QRegularExpression("^(cpu(?!cl).*|gpu$|mem$|swap$|hdd[0-9].*|bat.*)")); keys.sort(); m_graphicalItems->setConfigArgs(keys); return m_graphicalItems->editItems(); @@ -302,8 +302,8 @@ void AWKeyOperations::addDevice(const QString &_source) { qCDebug(LOG_AW) << "Source" << _source; - QRegExp diskRegexp = QRegExp("disk/(?:md|sd|hd)[a-z|0-9]_.*/Rate/(?:rblk)"); - QRegExp mountRegexp = QRegExp("partitions/.*/filllevel"); + auto diskRegexp = QRegularExpression("disk/(?:md|sd|hd)[a-z|0-9]_.*/Rate/(?:rblk)"); + auto mountRegexp = QRegularExpression("partitions/.*/filllevel"); if (_source.contains(diskRegexp)) { QString device = _source; diff --git a/sources/awesome-widget/plugin/awkeys.cpp b/sources/awesome-widget/plugin/awkeys.cpp index 922f8b6..1582ab6 100644 --- a/sources/awesome-widget/plugin/awkeys.cpp +++ b/sources/awesome-widget/plugin/awkeys.cpp @@ -148,7 +148,7 @@ QStringList AWKeys::dictKeys(const bool _sorted, const QString &_regexp) const if (_sorted) allKeys.sort(); - return allKeys.filter(QRegExp(_regexp)); + return allKeys.filter(QRegularExpression(_regexp)); } diff --git a/sources/awesome-widget/plugin/awpatternfunctions.cpp b/sources/awesome-widget/plugin/awpatternfunctions.cpp index 51695ef..d93c16a 100644 --- a/sources/awesome-widget/plugin/awpatternfunctions.cpp +++ b/sources/awesome-widget/plugin/awpatternfunctions.cpp @@ -130,7 +130,7 @@ QString AWPatternFunctions::insertAllKeys(QString _code, const QStringList &_key QList found = AWPatternFunctions::findFunctionCalls("aw_all", _code); for (auto &function : found) { QString separator = function.args.isEmpty() ? "," : function.args.at(0); - QStringList required = _keys.filter(QRegExp(function.body)); + QStringList required = _keys.filter(QRegularExpression(function.body)); std::for_each(required.begin(), required.end(), [](QString &value) { value = QString("%1: $%1").arg(value); }); _code.replace(function.what, required.join(separator)); @@ -146,7 +146,7 @@ QString AWPatternFunctions::insertKeyCount(QString _code, const QStringList &_ke QList found = AWPatternFunctions::findFunctionCalls("aw_count", _code); for (auto &function : found) { - int count = _keys.filter(QRegExp(function.body)).count(); + int count = _keys.filter(QRegularExpression(function.body)).count(); _code.replace(function.what, QString::number(count)); } @@ -162,7 +162,7 @@ QString AWPatternFunctions::insertKeyNames(QString _code, const QStringList &_ke QList found = AWPatternFunctions::findFunctionCalls("aw_names", _code); for (auto &function : found) { QString separator = function.args.isEmpty() ? "," : function.args.at(0); - QStringList required = _keys.filter(QRegExp(function.body)); + QStringList required = _keys.filter(QRegularExpression(function.body)); _code.replace(function.what, required.join(separator)); } @@ -178,7 +178,7 @@ QString AWPatternFunctions::insertKeys(QString _code, const QStringList &_keys) QList found = AWPatternFunctions::findFunctionCalls("aw_keys", _code); for (auto &function : found) { QString separator = function.args.isEmpty() ? "," : function.args.at(0); - QStringList required = _keys.filter(QRegExp(function.body)); + QStringList required = _keys.filter(QRegularExpression(function.body)); std::for_each(required.begin(), required.end(), [](QString &value) { value = QString("$%1").arg(value); }); _code.replace(function.what, required.join(separator)); diff --git a/sources/awesomewidgets/CMakeLists.txt b/sources/awesomewidgets/CMakeLists.txt index 5d991ab..881ec58 100644 --- a/sources/awesomewidgets/CMakeLists.txt +++ b/sources/awesomewidgets/CMakeLists.txt @@ -7,7 +7,7 @@ include_directories( ${CMAKE_BINARY_DIR} ${PROJECT_TRDPARTY_DIR} ${Qt_INCLUDE} - ${Kf5_INCLUDE} + ${Kf6_INCLUDE} ) file(GLOB SUBPROJECT_SOURCE *.cpp ${PROJECT_TRDPARTY_DIR}/qreplytimeout/*.cpp ${CMAKE_SOURCE_DIR}/*.cpp) @@ -30,7 +30,7 @@ configure_file(${SUBPROJECT_WEATHER_JSON_IN} ${CMAKE_CURRENT_BINARY_DIR}/${SUBPR qt6_wrap_ui(SUBPROJECT_UI_HEADER ${SUBPROJECT_UI}) add_library(${SUBPROJECT} STATIC ${SUBPROJECT_SOURCE} ${SUBPROJECT_HEADER} ${SUBPROJECT_UI_HEADER}) -target_link_libraries(${SUBPROJECT} ${Qt_LIBRARIES} ${Kf5_LIBRARIES}) +target_link_libraries(${SUBPROJECT} ${Qt_LIBRARIES} ${Kf6_LIBRARIES}) # install install(DIRECTORY ${SUBPROJECT_CONFIGS} DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME}) @@ -41,5 +41,5 @@ install(DIRECTORY ${SUBPROJECT_SCRIPTS} DESTINATION ${DATA_INSTALL_DIR}/${PROJEC install(DIRECTORY ${SUBPROJECT_REQUESTS} DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME}) install(DIRECTORY ${SUBPROJECT_UPGRADE} DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME}) install(DIRECTORY ${SUBPROJECT_WEATHER} DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME}) -install(FILES ${SUBPROJECT_INI} DESTINATION ${KDE_INSTALL_FULL_CONFDIR}) +install(FILES ${SUBPROJECT_INI} DESTINATION ${KDE_INSTALL_CONFDIR}) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${SUBPROJECT_WEATHER_JSON} DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME}/weather) diff --git a/sources/awesomewidgets/abstractextitem.cpp b/sources/awesomewidgets/abstractextitem.cpp index ab6ad2f..247650c 100644 --- a/sources/awesomewidgets/abstractextitem.cpp +++ b/sources/awesomewidgets/abstractextitem.cpp @@ -99,7 +99,7 @@ QString AbstractExtItem::writtableConfig() const { QString path = m_fileName; QString name = QFileInfo(path).fileName(); - path.remove(path.count() - name.count() - 1, name.count() + 1); + path.remove(path.length() - name.length() - 1, name.length() + 1); QString dir = QFileInfo(path).fileName(); return QString("%1/awesomewidgets/%2/%3") diff --git a/sources/awesomewidgets/awabstractformatter.h b/sources/awesomewidgets/awabstractformatter.h index 4da1bfc..99785c2 100644 --- a/sources/awesomewidgets/awabstractformatter.h +++ b/sources/awesomewidgets/awabstractformatter.h @@ -18,6 +18,8 @@ #ifndef AWABSTRACTFORMATTER_H #define AWABSTRACTFORMATTER_H +#include + #include "abstractextitem.h" diff --git a/sources/awesomewidgets/awjsonformatter.cpp b/sources/awesomewidgets/awjsonformatter.cpp index e0b1366..27f3413 100644 --- a/sources/awesomewidgets/awjsonformatter.cpp +++ b/sources/awesomewidgets/awjsonformatter.cpp @@ -53,7 +53,7 @@ QString AWJsonFormatter::convert(const QVariant &_value) const qCDebug(LOG_LIB) << "Convert value" << _value; // check if _value is string and parse first if required - QJsonDocument json = _value.type() == QVariant::String ? QJsonDocument::fromJson(_value.toString().toUtf8()) + QJsonDocument json = _value.userType() == QMetaType::QString ? QJsonDocument::fromJson(_value.toString().toUtf8()) : QJsonDocument::fromVariant(_value); QVariant converted = json.toVariant(); for (auto &element : m_splittedPath) @@ -147,9 +147,9 @@ QVariant AWJsonFormatter::getFromJson(const QVariant &_value, const QVariant &_e { qCDebug(LOG_LIB) << "Looking for element" << _element << "in" << _value; - if (_element.type() == QVariant::String) { + if (_element.userType() == QMetaType::QString) { return getFromMap(_value, _element.toString()); - } else if (_element.type() == QVariant::Int) { + } else if (_element.userType() == QMetaType::Int) { return getFromList(_value, _element.toInt()); } else { qCWarning(LOG_LIB) << "Unknown type" << _element.typeName(); diff --git a/sources/awesomewidgets/awlistformatter.cpp b/sources/awesomewidgets/awlistformatter.cpp index de15406..10d0e91 100644 --- a/sources/awesomewidgets/awlistformatter.cpp +++ b/sources/awesomewidgets/awlistformatter.cpp @@ -97,7 +97,7 @@ void AWListFormatter::setFilter(const QString &_filter) qCDebug(LOG_LIB) << "Filter" << _filter; m_filter = _filter; - m_regex = QRegExp(m_filter); + m_regex = QRegularExpression(m_filter); } diff --git a/sources/awesomewidgets/awlistformatter.h b/sources/awesomewidgets/awlistformatter.h index 665e54b..1732303 100644 --- a/sources/awesomewidgets/awlistformatter.h +++ b/sources/awesomewidgets/awlistformatter.h @@ -58,7 +58,7 @@ private: QString m_filter = ""; QString m_separator = ""; bool m_sorted = false; - QRegExp m_regex; + QRegularExpression m_regex; }; diff --git a/sources/awesomewidgets/extnetworkrequest.cpp b/sources/awesomewidgets/extnetworkrequest.cpp index c218b43..f496c16 100644 --- a/sources/awesomewidgets/extnetworkrequest.cpp +++ b/sources/awesomewidgets/extnetworkrequest.cpp @@ -20,9 +20,7 @@ #include -#include #include -#include #include @@ -174,7 +172,7 @@ void ExtNetworkRequest::networkReplyReceived(QNetworkReply *_reply) } m_isRunning = false; - m_values[tag("response")] = QTextCodec::codecForMib(106)->toUnicode(_reply->readAll()).trimmed(); + m_values[tag("response")] = QString::fromUtf8(_reply->readAll()).trimmed(); emit(dataReceived(m_values)); } diff --git a/sources/awesomewidgets/extscript.cpp b/sources/awesomewidgets/extscript.cpp index 007822f..27cfec8 100644 --- a/sources/awesomewidgets/extscript.cpp +++ b/sources/awesomewidgets/extscript.cpp @@ -24,7 +24,6 @@ #include #include #include -#include #include "awdebug.h" @@ -325,9 +324,9 @@ void ExtScript::startProcess() void ExtScript::updateValue() { qCInfo(LOG_LIB) << "Cmd returns" << m_process->exitCode(); - QString qdebug = QTextCodec::codecForMib(106)->toUnicode(m_process->readAllStandardError()).trimmed(); + QString qdebug = QString::fromUtf8(m_process->readAllStandardError()).trimmed(); qCInfo(LOG_LIB) << "Error" << qdebug; - QString qoutput = QTextCodec::codecForMib(106)->toUnicode(m_process->readAllStandardOutput()).trimmed(); + QString qoutput = QString::fromUtf8(m_process->readAllStandardOutput()).trimmed(); qCInfo(LOG_LIB) << "Output" << qoutput; QString strValue; diff --git a/sources/awesomewidgets/extupgrade.cpp b/sources/awesomewidgets/extupgrade.cpp index 433ec14..7f81025 100644 --- a/sources/awesomewidgets/extupgrade.cpp +++ b/sources/awesomewidgets/extupgrade.cpp @@ -21,7 +21,6 @@ #include #include -#include #include "awdebug.h" @@ -214,10 +213,10 @@ void ExtUpgrade::updateValue() qCInfo(LOG_LIB) << "Cmd returns" << m_process->exitCode(); qCInfo(LOG_LIB) << "Error" << m_process->readAllStandardError(); - QString qoutput = QTextCodec::codecForMib(106)->toUnicode(m_process->readAllStandardOutput()).trimmed(); + QString qoutput = QString::fromUtf8(m_process->readAllStandardOutput()).trimmed(); m_values[tag("pkgcount")] = [this](const QString &output) { return filter().isEmpty() ? output.split('\n', Qt::SkipEmptyParts).count() - null() - : output.split('\n', Qt::SkipEmptyParts).filter(QRegExp(filter())).count(); + : output.split('\n', Qt::SkipEmptyParts).filter(QRegularExpression(filter())).count(); }(qoutput); emit(dataReceived(m_values)); diff --git a/sources/awesomewidgets/owmweatherprovider.cpp b/sources/awesomewidgets/owmweatherprovider.cpp index 91a849d..70d9126 100644 --- a/sources/awesomewidgets/owmweatherprovider.cpp +++ b/sources/awesomewidgets/owmweatherprovider.cpp @@ -99,7 +99,7 @@ QVariantHash OWMWeatherProvider::parseSingleJson(const QVariantMap &_json) const } // timestamp - output[tag("timestamp")] = QDateTime::fromTime_t(_json["dt"].toUInt()).toUTC(); + output[tag("timestamp")] = QDateTime::fromSecsSinceEpoch(_json["dt"].toUInt()).toUTC(); return output; } diff --git a/sources/awesomewidgets/stooqquotesprovider.cpp b/sources/awesomewidgets/stooqquotesprovider.cpp index 591d927..036adbf 100644 --- a/sources/awesomewidgets/stooqquotesprovider.cpp +++ b/sources/awesomewidgets/stooqquotesprovider.cpp @@ -17,7 +17,6 @@ #include "stooqquotesprovider.h" -#include #include #include "awdebug.h" @@ -55,7 +54,7 @@ QVariantHash StooqQuotesProvider::parse(const QByteArray &_source, const QVarian QVariantHash values; - QStringList sourceValues = QTextCodec::codecForMib(106)->toUnicode(_source).trimmed().split(','); + QStringList sourceValues = QString::fromUtf8(_source).trimmed().split(','); if (sourceValues.count() != 2) { qCWarning(LOG_LIB) << "Parse error" << sourceValues; return values; diff --git a/sources/desktop-panel/metadata.json b/sources/desktop-panel/metadata.json new file mode 100644 index 0000000..efd12be --- /dev/null +++ b/sources/desktop-panel/metadata.json @@ -0,0 +1,29 @@ +{ + "KPlugin": { + "Authors": [ + { + "Email": "esalexeev@gmail.com", + "Name": "Evgeniy Alekseev aka arcanis" + } + ], + "Category": "System Information", + "Description": "A minimalistic Plasmoid", + "Description[en]": "A minimalistic Plasmoid", + "Description[es]": "Un script Plasmoïde minimaliste", + "Description[pt_BR]": "Um script Plasmoid", + "Description[ru]": "Минималистичный плазмоид", + "Description[uk]": "Мінімалістичний плазмоїд", + "EnabledByDefault": true, + "Icon": "utilities-system-monitor", + "Id": "org.kde.plasma.desktoppanel", + "License": "GPLv3", + "Name": "Desktop Panel", + "ServiceTypes": [ + "Plasma/Applet" + ], + "Version": "@PROJECT_VERSION@", + "Website": "https://arcanis.me/projects/awesome-widgets/" + }, + "X-Plasma-API": "declarativeappletscript", + "X-Plasma-MainScript": "ui/main.qml" +} diff --git a/sources/desktop-panel/package/contents/ui/qmldir b/sources/desktop-panel/package/contents/ui/qmldir index 2f19ff4..637924c 100644 --- a/sources/desktop-panel/package/contents/ui/qmldir +++ b/sources/desktop-panel/package/contents/ui/qmldir @@ -3,25 +3,25 @@ # common QML constants -singleton General 1.0 file:///usr/share/awesomewidgets/qml/General.qml +singleton General 1.0 file:///usr//awesomewidgets/qml/General.qml # custom QML UI classes -AboutTab file:///usr/share/awesomewidgets/qml/AboutTab.qml -AWExtensions file:///usr/share/awesomewidgets/qml/AWExtensions.qml -AWInfoLabel file:///usr/share/awesomewidgets/qml/AWInfoLabel.qml -AWTagSelector file:///usr/share/awesomewidgets/qml/AWTagSelector.qml -AWTextEditor file:///usr/share/awesomewidgets/qml/AWTextEditor.qml -BugReport file:///usr/share/awesomewidgets/qml/BugReport.qml -ButtonSelector file:///usr/share/awesomewidgets/qml/ButtonSelector.qml -CheckBoxSelector file:///usr/share/awesomewidgets/qml/CheckBoxSelector.qml -ColorSelector file:///usr/share/awesomewidgets/qml/ColorSelector.qml -ComboBoxSelector file:///usr/share/awesomewidgets/qml/ComboBoxSelector.qml -ExportDialog file:///usr/share/awesomewidgets/qml/ExportDialog.qml -FontSelector file:///usr/share/awesomewidgets/qml/FontSelector.qml -HtmlDefaultFunctionsBar file:///usr/share/awesomewidgets/qml/HtmlDefaultFunctionsBar.qml -HtmlEditorButton file:///usr/share/awesomewidgets/qml/HtmlEditorButton.qml -HtmlEditorColor file:///usr/share/awesomewidgets/qml/HtmlEditorColor.qml -HtmlEditorFont file:///usr/share/awesomewidgets/qml/HtmlEditorFont.qml -ImportDialog file:///usr/share/awesomewidgets/qml/ImportDialog.qml -IntegerSelector file:///usr/share/awesomewidgets/qml/IntegerSelector.qml -LineSelector file:///usr/share/awesomewidgets/qml/LineSelector.qml +AboutTab file:///usr//awesomewidgets/qml/AboutTab.qml +AWExtensions file:///usr//awesomewidgets/qml/AWExtensions.qml +AWInfoLabel file:///usr//awesomewidgets/qml/AWInfoLabel.qml +AWTagSelector file:///usr//awesomewidgets/qml/AWTagSelector.qml +AWTextEditor file:///usr//awesomewidgets/qml/AWTextEditor.qml +BugReport file:///usr//awesomewidgets/qml/BugReport.qml +ButtonSelector file:///usr//awesomewidgets/qml/ButtonSelector.qml +CheckBoxSelector file:///usr//awesomewidgets/qml/CheckBoxSelector.qml +ColorSelector file:///usr//awesomewidgets/qml/ColorSelector.qml +ComboBoxSelector file:///usr//awesomewidgets/qml/ComboBoxSelector.qml +ExportDialog file:///usr//awesomewidgets/qml/ExportDialog.qml +FontSelector file:///usr//awesomewidgets/qml/FontSelector.qml +HtmlDefaultFunctionsBar file:///usr//awesomewidgets/qml/HtmlDefaultFunctionsBar.qml +HtmlEditorButton file:///usr//awesomewidgets/qml/HtmlEditorButton.qml +HtmlEditorColor file:///usr//awesomewidgets/qml/HtmlEditorColor.qml +HtmlEditorFont file:///usr//awesomewidgets/qml/HtmlEditorFont.qml +ImportDialog file:///usr//awesomewidgets/qml/ImportDialog.qml +IntegerSelector file:///usr//awesomewidgets/qml/IntegerSelector.qml +LineSelector file:///usr//awesomewidgets/qml/LineSelector.qml diff --git a/sources/desktop-panel/plugin/CMakeLists.txt b/sources/desktop-panel/plugin/CMakeLists.txt index 34d3aad..25cf51f 100644 --- a/sources/desktop-panel/plugin/CMakeLists.txt +++ b/sources/desktop-panel/plugin/CMakeLists.txt @@ -6,15 +6,15 @@ include_directories( ${CMAKE_BINARY_DIR} ${PROJECT_TRDPARTY_DIR} ${Qt_INCLUDE} - ${Kf5_INCLUDE} + ${Kf6_INCLUDE} ) file(GLOB SUBPROJECT_SOURCE *.cpp ${PROJECT_TRDPARTY_DIR}/fontdialog/*.cpp ${CMAKE_SOURCE_DIR}/*.cpp) file(GLOB SUBPROJECT_NOTIFY *.notifyrc) add_library(${PLUGIN_NAME} SHARED ${SUBPROJECT_SOURCE}) -target_link_libraries(${PLUGIN_NAME} ${Qt_LIBRARIES} ${Kf5_LIBRARIES}) +target_link_libraries(${PLUGIN_NAME} ${Qt_LIBRARIES} ${Kf6_LIBRARIES}) install(TARGETS ${PLUGIN_NAME} DESTINATION ${QML_INSTALL_DIR}/org/kde/plasma/private/desktoppanel) install(FILES qmldir DESTINATION ${QML_INSTALL_DIR}/org/kde/plasma/private/desktoppanel) -install(FILES ${SUBPROJECT_NOTIFY} DESTINATION ${KNOTIFYRC_INSTALL_DIR}) +install(FILES ${SUBPROJECT_NOTIFY} DESTINATION ${KDE_INSTALL_KNOTIFYRCDIR}) diff --git a/sources/desktop-panel/plugin/dpadds.cpp b/sources/desktop-panel/plugin/dpadds.cpp index 2815425..e3632ef 100644 --- a/sources/desktop-panel/plugin/dpadds.cpp +++ b/sources/desktop-panel/plugin/dpadds.cpp @@ -92,7 +92,7 @@ QStringList DPAdds::dictKeys(const bool _sorted, const QString &_regexp) if (_sorted) allKeys.sort(); - return allKeys.filter(QRegExp(_regexp)); + return allKeys.filter(QRegularExpression(_regexp)); } diff --git a/sources/extsysmon/CMakeLists.txt b/sources/extsysmon/CMakeLists.txt index f078f0b..e7162d6 100644 --- a/sources/extsysmon/CMakeLists.txt +++ b/sources/extsysmon/CMakeLists.txt @@ -9,7 +9,7 @@ include_directories( ${CMAKE_CURRENT_SOURCE_DIR}/../${PROJECT_MONITORSOURCES}/ ${PROJECT_TRDPARTY_DIR} ${Qt_INCLUDE} - ${Kf5_INCLUDE} + ${Kf6_INCLUDE} ) file(GLOB SUBPROJECT_DESKTOP_IN *.desktop) @@ -25,11 +25,9 @@ configure_file(${SUBPROJECT_DESKTOP_IN} ${CMAKE_CURRENT_BINARY_DIR}/${SUBPROJECT add_library(${SUBPROJECT} MODULE ${SUBPROJECT_SOURCE} ${SUBPROJECT_HEADER}) target_link_libraries(${SUBPROJECT} ${PROJECT_LIBRARY} ${PROJECT_MONITORSOURCES} - ${Qt_LIBRARIES} ${Kf5_LIBRARIES}) -kcoreaddons_desktop_to_json(${SUBPROJECT} ${CMAKE_CURRENT_BINARY_DIR}/${SUBPROJECT_DESKTOP} - SERVICE_TYPES plasma-dataengine.desktop) + ${Qt_LIBRARIES} ${Kf6_LIBRARIES}) # install install(TARGETS ${SUBPROJECT} DESTINATION ${PLUGIN_INSTALL_DIR}/plasma/dataengine) -install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${SUBPROJECT_DESKTOP} DESTINATION ${SERVICES_INSTALL_DIR}) -install(FILES ${SUBPROJECT_CONF} DESTINATION ${CONFIG_INSTALL_DIR}) +#install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${SUBPROJECT_DESKTOP} DESTINATION ${SERVICES_INSTALL_DIR}) +install(FILES ${SUBPROJECT_CONF} DESTINATION ${KDE_INSTALL_CONFDIR}) diff --git a/sources/extsysmon/extsysmon.cpp b/sources/extsysmon/extsysmon.cpp index 68b5e02..e745b44 100644 --- a/sources/extsysmon/extsysmon.cpp +++ b/sources/extsysmon/extsysmon.cpp @@ -18,6 +18,7 @@ #include "extsysmon.h" #include +#include #include #include @@ -127,7 +128,7 @@ QHash ExtendedSysMon::updateConfiguration(QHash +#include class ExtSysMonAggregator; diff --git a/sources/extsysmon/plasma-dataengine-extsysmon.json b/sources/extsysmon/plasma-dataengine-extsysmon.json new file mode 100644 index 0000000..9e5441e --- /dev/null +++ b/sources/extsysmon/plasma-dataengine-extsysmon.json @@ -0,0 +1,20 @@ +{ + "KPlugin": { + "Authors": [ + { + "Email": "esalexeev@gmail.com", + "Name": "Evgeniy Alekseev aka arcanis" + } + ], + "Category": "System Information", + "Description": "Adds some additional functions to System DataEngine", + "Icon": "utilities-system-monitor", + "Id": "extsysmon", + "License": "GPL3", + "Name": "Extended SystemMonitor", + "ServiceTypes": [ + "Plasma/DataEngine" + ], + "Version": "@PROJECT_VERSION@" + } +} diff --git a/sources/extsysmonsources/CMakeLists.txt b/sources/extsysmonsources/CMakeLists.txt index b5940f7..b3fd1c7 100644 --- a/sources/extsysmonsources/CMakeLists.txt +++ b/sources/extsysmonsources/CMakeLists.txt @@ -8,11 +8,11 @@ include_directories( ${CMAKE_CURRENT_SOURCE_DIR}/../${PROJECT_LIBRARY}/ ${PROJECT_TRDPARTY_DIR} ${Qt_INCLUDE} - ${Kf5_INCLUDE} + ${Kf6_INCLUDE} ) file(GLOB SUBPROJECT_SOURCE *.cpp) file(GLOB SUBPROJECT_HEADER *.h) add_library(${SUBPROJECT} STATIC ${SUBPROJECT_SOURCE} ${SUBPROJECT_HEADER}) -target_link_libraries(${SUBPROJECT} ${PROJECT_LIBRARY} ${Qt_LIBRARIES} ${Kf5_LIBRARIES}) +target_link_libraries(${SUBPROJECT} ${PROJECT_LIBRARY} ${Qt_LIBRARIES} ${Kf6_LIBRARIES}) diff --git a/sources/extsysmonsources/abstractextsysmonsource.h b/sources/extsysmonsources/abstractextsysmonsource.h index cfe1366..72e6467 100644 --- a/sources/extsysmonsources/abstractextsysmonsource.h +++ b/sources/extsysmonsources/abstractextsysmonsource.h @@ -19,7 +19,7 @@ #define ABSTRACTEXTSYSMONSOURCE_H #include -#include +#include #include @@ -38,9 +38,8 @@ public: // used by extensions static int index(const QString &_source) { - QRegExp rx("\\d+"); - rx.indexIn(_source); - return rx.cap().toInt(); + QRegularExpression rx("\\d+"); + return rx.match(_source).captured().toInt(); } signals: diff --git a/sources/extsysmonsources/gpuloadsource.cpp b/sources/extsysmonsources/gpuloadsource.cpp index 74078df..8a2fb95 100644 --- a/sources/extsysmonsources/gpuloadsource.cpp +++ b/sources/extsysmonsources/gpuloadsource.cpp @@ -20,7 +20,6 @@ #include #include -#include #include "awdebug.h" @@ -124,9 +123,9 @@ QStringList GPULoadSource::sources() const void GPULoadSource::updateValue() { qCInfo(LOG_ESS) << "Cmd returns" << m_process->exitCode(); - QString qdebug = QTextCodec::codecForMib(106)->toUnicode(m_process->readAllStandardError()).trimmed(); + QString qdebug = QString::fromUtf8(m_process->readAllStandardError()).trimmed(); qCInfo(LOG_ESS) << "Error" << qdebug; - QString qoutput = QTextCodec::codecForMib(106)->toUnicode(m_process->readAllStandardOutput()).trimmed(); + QString qoutput = QString::fromUtf8(m_process->readAllStandardOutput()).trimmed(); qCInfo(LOG_ESS) << "Output" << qoutput; if (m_device == "nvidia") { diff --git a/sources/extsysmonsources/gputempsource.cpp b/sources/extsysmonsources/gputempsource.cpp index de13ff4..021a1d5 100644 --- a/sources/extsysmonsources/gputempsource.cpp +++ b/sources/extsysmonsources/gputempsource.cpp @@ -20,7 +20,6 @@ #include #include -#include #include "awdebug.h" @@ -103,9 +102,9 @@ QStringList GPUTemperatureSource::sources() const void GPUTemperatureSource::updateValue() { qCInfo(LOG_ESS) << "Cmd returns" << m_process->exitCode(); - QString qdebug = QTextCodec::codecForMib(106)->toUnicode(m_process->readAllStandardError()).trimmed(); + QString qdebug = QString::fromUtf8(m_process->readAllStandardError()).trimmed(); qCInfo(LOG_ESS) << "Error" << qdebug; - QString qoutput = QTextCodec::codecForMib(106)->toUnicode(m_process->readAllStandardOutput()).trimmed(); + QString qoutput = QString::fromUtf8(m_process->readAllStandardOutput()).trimmed(); qCInfo(LOG_ESS) << "Output" << qoutput; if (m_device == "nvidia") { diff --git a/sources/extsysmonsources/hddtempsource.cpp b/sources/extsysmonsources/hddtempsource.cpp index 322ffd1..6e4402f 100644 --- a/sources/extsysmonsources/hddtempsource.cpp +++ b/sources/extsysmonsources/hddtempsource.cpp @@ -20,7 +20,6 @@ #include #include -#include #include "awdebug.h" @@ -61,7 +60,7 @@ HDDTemperatureSource::~HDDTemperatureSource() QStringList HDDTemperatureSource::allHdd() { QStringList allDevices = QDir("/dev").entryList(QDir::System, QDir::Name); - QStringList devices = allDevices.filter(QRegExp("^[hms]d[a-z]$")); + QStringList devices = allDevices.filter(QRegularExpression("^[hms]d[a-z]$")); for (int i = 0; i < devices.count(); i++) devices[i] = QString("/dev/%1").arg(devices.at(i)); @@ -120,9 +119,9 @@ void HDDTemperatureSource::updateValue(const QString &_device) qCDebug(LOG_ESS) << "Called with device" << _device; qCInfo(LOG_ESS) << "Cmd returns" << m_processes[_device]->exitCode(); - QString qdebug = QTextCodec::codecForMib(106)->toUnicode(m_processes[_device]->readAllStandardError()).trimmed(); + QString qdebug = QString::fromUtf8(m_processes[_device]->readAllStandardError()).trimmed(); qCInfo(LOG_ESS) << "Error" << qdebug; - QString qoutput = QTextCodec::codecForMib(106)->toUnicode(m_processes[_device]->readAllStandardOutput()).trimmed(); + QString qoutput = QString::fromUtf8(m_processes[_device]->readAllStandardOutput()).trimmed(); qCInfo(LOG_ESS) << "Output" << qoutput; // parse diff --git a/sources/extsysmonsources/networksource.cpp b/sources/extsysmonsources/networksource.cpp index e56c7b5..b2a94cb 100644 --- a/sources/extsysmonsources/networksource.cpp +++ b/sources/extsysmonsources/networksource.cpp @@ -20,7 +20,6 @@ #include #include -#include #include "awdebug.h" @@ -101,9 +100,9 @@ QStringList NetworkSource::sources() const void NetworkSource::updateSsid() { qCInfo(LOG_ESS) << "Cmd returns" << m_process->exitCode(); - QString qdebug = QTextCodec::codecForMib(106)->toUnicode(m_process->readAllStandardError()).trimmed(); + QString qdebug = QString::fromUtf8(m_process->readAllStandardError()).trimmed(); qCInfo(LOG_ESS) << "Error" << qdebug; - QString qoutput = QTextCodec::codecForMib(106)->toUnicode(m_process->readAllStandardOutput()).trimmed(); + QString qoutput = QString::fromUtf8(m_process->readAllStandardOutput()).trimmed(); qCInfo(LOG_ESS) << "Output" << qoutput; m_values["network/current/ssid"] = qoutput; diff --git a/sources/extsysmonsources/playersource.cpp b/sources/extsysmonsources/playersource.cpp index b56d07e..529de9d 100644 --- a/sources/extsysmonsources/playersource.cpp +++ b/sources/extsysmonsources/playersource.cpp @@ -23,7 +23,6 @@ #include #include #include -#include #include "awdebug.h" @@ -219,7 +218,7 @@ QString PlayerSource::buildString(const QString &_current, const QString &_value qCDebug(LOG_ESS) << "Current value" << _current << "received" << _value << "will be stripped after" << _s; int index = _value.indexOf(_current); - if ((_current.isEmpty()) || ((index + _s + 1) > _value.count())) + if ((_current.isEmpty()) || ((index + _s + 1) > _value.length())) return QString("%1").arg(_value.left(_s), -_s, QLatin1Char(' ')); else return QString("%1").arg(_value.mid(index + 1, _s), -_s, QLatin1Char(' ')); @@ -230,8 +229,8 @@ QString PlayerSource::stripString(const QString &_value, const int _s) { qCDebug(LOG_ESS) << "New value" << _value << "will be stripped after" << _s; - return _value.count() > _s ? QString("%1\u2026").arg(_value.left(_s - 1)) - : _value.leftJustified(_s, QLatin1Char(' ')); + return _value.length() > _s ? QString("%1\u2026").arg(_value.left(_s - 1)) + : _value.leftJustified(_s, QLatin1Char(' ')); } @@ -249,7 +248,7 @@ void PlayerSource::mpdSocketConnected() void PlayerSource::mpdSocketReadyRead() { - QString qoutput = QTextCodec::codecForMib(106)->toUnicode(m_mpdSocket.readAll()).trimmed(); + QString qoutput = QString::fromUtf8(m_mpdSocket.readAll()).trimmed(); qCInfo(LOG_ESS) << "Output" << qoutput; // parse diff --git a/sources/extsysmonsources/processessource.cpp b/sources/extsysmonsources/processessource.cpp index 9d434e0..35c1a67 100644 --- a/sources/extsysmonsources/processessource.cpp +++ b/sources/extsysmonsources/processessource.cpp @@ -80,7 +80,7 @@ QVariantMap ProcessesSource::initialData(const QString &_source) const void ProcessesSource::run() { QStringList allDirectories = QDir("/proc").entryList(QDir::Dirs | QDir::NoDotAndDotDot, QDir::Name); - QStringList directories = allDirectories.filter(QRegExp("(\\d+)")); + QStringList directories = allDirectories.filter(QRegularExpression("(\\d+)")); QStringList running; for (auto &dir : directories) { diff --git a/sources/libraries.cmake b/sources/libraries.cmake index d4ed2b4..59e5730 100644 --- a/sources/libraries.cmake +++ b/sources/libraries.cmake @@ -25,6 +25,5 @@ find_package(Plasma REQUIRED) include(KDEInstallDirs) include(KDECMakeSettings) include(KDECompilerSettings) -set(Kf6_INCLUDE ${I18n_INCLUDE_DIR} ${Notifications_INCLUDE_DIR} ${Plasma_INCLUDE_DIR}) +set(Kf6_INCLUDE ${KDE_INSTALL_FULL_INCLUDEDIR_KF}) set(Kf6_LIBRARIES KF6::I18n KF6::Notifications KF6::WindowSystem PW::LibTaskManager) - diff --git a/sources/test/CMakeLists.txt b/sources/test/CMakeLists.txt index d0318c2..ffe3962 100644 --- a/sources/test/CMakeLists.txt +++ b/sources/test/CMakeLists.txt @@ -13,16 +13,16 @@ include_directories( ${PROJECT_TRDPARTY_DIR} ${Qt_INCLUDE} ${Qt5Test_INCLUDE_DIRS} - ${Kf5_INCLUDE} + ${Kf6_INCLUDE} ) # library set(AWTESTLIBRARY_HEADERS awtestlibrary.h) set(AWTESTLIBRARY_SOURCES awtestlibrary.cpp) add_library(${SUBPROJECT}-awtest STATIC ${AWTESTLIBRARY_SOURCES} ${AWTESTLIBRARY_HEADERS}) -target_link_libraries(${SUBPROJECT}-awtest ${Qt_LIBRARIES} ${Qt5Test_LIBRARIES} ${Kf5_LIBRARIES}) +target_link_libraries(${SUBPROJECT}-awtest ${Qt_LIBRARIES} ${Qt5Test_LIBRARIES} ${Kf6_LIBRARIES}) set(LIBRARY_TEST_SET ${SUBPROJECT}-awtest ${PROJECT_LIBRARY} ${PROJECT_MONITORSOURCES} - ${Qt_LIBRARIES} ${Kf5_LIBRARIES} ${Qt5Test_LIBRARIES}) + ${Qt_LIBRARIES} ${Kf6_LIBRARIES} ${Qt5Test_LIBRARIES}) # modules set(TEST_MODULES diff --git a/sources/test/testawpatternfunctions.cpp b/sources/test/testawpatternfunctions.cpp index 80fc975..bb74038 100644 --- a/sources/test/testawpatternfunctions.cpp +++ b/sources/test/testawpatternfunctions.cpp @@ -18,6 +18,7 @@ #include "testawpatternfunctions.h" +#include #include #include "awpatternfunctions.h" @@ -57,7 +58,7 @@ void TestAWPatternFunctions::test_findKeys() QStringList allKeys; for (int i = 0; i < count; i++) { auto key = AWTestLibrary::randomString(1, 20); - while (allKeys.indexOf(QRegExp(QString("^%1.*").arg(key))) != -1) + while (allKeys.indexOf(QRegularExpression(QString("^%1.*").arg(key))) != -1) key = AWTestLibrary::randomString(1, 20); allKeys.append(key); } From 423597dbd961dbbb88cc5cf9e2c7d31bb8c2aac2 Mon Sep 17 00:00:00 2001 From: Evgenii Alekseev Date: Fri, 8 Mar 2024 17:32:07 +0200 Subject: [PATCH 03/10] port widget to dbus --- sensors | 284 ++++++++++++++++++ sources/3rdparty/fontdialog/fontdialog.cpp | 75 ----- sources/3rdparty/fontdialog/fontdialog.h | 5 - sources/awesome-widget/CMakeLists.txt | 2 +- sources/awesome-widget/metadata.desktop | 26 -- sources/awesome-widget/metadata.json | 7 +- .../package/contents/config/config.qml | 2 +- .../package/contents/config/main.xml | 90 +++--- .../package/contents/ui/about.qml | 2 +- .../package/contents/ui/advanced.qml | 14 +- .../package/contents/ui/appearance.qml | 8 +- .../package/contents/ui/dataengine.qml | 31 +- .../package/contents/ui/main.qml | 56 ++-- .../awesome-widget/package/contents/ui/qmldir | 40 +-- .../package/contents/ui/tooltip.qml | 104 ++++--- .../package/contents/ui/widget.qml | 4 +- .../awesome-widget/package/metadata.desktop | 26 -- sources/awesome-widget/package/metadata.json | 26 ++ sources/awesome-widget/plugin/CMakeLists.txt | 4 +- .../awesome-widget/plugin/awconfighelper.cpp | 2 - .../plugin/awdataengineaggregator.cpp | 114 +++---- .../plugin/awdataengineaggregator.h | 25 +- .../plugin/awdataenginemapper.cpp | 62 ++-- .../plugin/awdataenginemapper.h | 4 +- sources/awesome-widget/plugin/awkeys.cpp | 57 ++-- sources/awesome-widget/plugin/awkeys.h | 10 +- .../plugin/awkeysaggregator.cpp | 24 +- .../awesome-widget/plugin/awkeysaggregator.h | 4 +- .../plugin/awpatternfunctions.cpp | 4 +- .../awesome-widget/plugin/awupdatehelper.cpp | 1 + .../desktop-panel/package/contents/ui/qmldir | 40 +-- sources/libraries.cmake | 3 +- sources/qml/AWExtensions.qml | 51 ++-- sources/qml/AWInfoLabel.qml | 6 +- sources/qml/AWTagSelector.qml | 12 +- sources/qml/AWTextEditor.qml | 6 +- sources/qml/AboutTab.qml | 109 +++---- sources/qml/BugReport.qml | 68 ++--- sources/qml/ButtonSelector.qml | 11 +- sources/qml/CMakeLists.txt | 2 +- sources/qml/CheckBoxSelector.qml | 8 +- sources/qml/ColorSelector.qml | 32 +- sources/qml/ComboBoxSelector.qml | 10 +- sources/qml/ExportDialog.qml | 13 +- sources/qml/FontSelector.qml | 10 +- sources/qml/General.qml | 4 +- sources/qml/HtmlDefaultFunctionsBar.qml | 20 +- sources/qml/HtmlEditorButton.qml | 6 +- sources/qml/HtmlEditorColor.qml | 6 +- sources/qml/HtmlEditorFont.qml | 4 +- sources/qml/ImportDialog.qml | 18 +- sources/qml/IntegerSelector.qml | 14 +- sources/qml/LineSelector.qml | 8 +- sources/qml/qmldir.in | 40 +-- 54 files changed, 921 insertions(+), 693 deletions(-) create mode 100644 sensors delete mode 100644 sources/awesome-widget/metadata.desktop delete mode 100644 sources/awesome-widget/package/metadata.desktop create mode 100644 sources/awesome-widget/package/metadata.json diff --git a/sensors b/sensors new file mode 100644 index 0000000..095e48b --- /dev/null +++ b/sensors @@ -0,0 +1,284 @@ +cpu +cpu/all +cpu/all/averageFrequency +cpu/all/averageTemperature +cpu/all/coreCount +cpu/all/cpuCount +cpu/all/maximumFrequency +cpu/all/maximumTemperature +cpu/all/minimumFrequency +cpu/all/minimumTemperature +cpu/all/name +cpu/all/system +cpu/all/usage +cpu/all/user +cpu/all/wait +cpu/cpu0 +cpu/cpu0/frequency +cpu/cpu0/name +cpu/cpu0/system +cpu/cpu0/temperature +cpu/cpu0/usage +cpu/cpu0/user +cpu/cpu0/wait +cpu/cpu1 +cpu/cpu1/frequency +cpu/cpu1/name +cpu/cpu1/system +cpu/cpu1/temperature +cpu/cpu1/usage +cpu/cpu1/user +cpu/cpu1/wait +cpu/cpu10 +cpu/cpu10/frequency +cpu/cpu10/name +cpu/cpu10/system +cpu/cpu10/temperature +cpu/cpu10/usage +cpu/cpu10/user +cpu/cpu10/wait +cpu/cpu11 +cpu/cpu11/frequency +cpu/cpu11/name +cpu/cpu11/system +cpu/cpu11/temperature +cpu/cpu11/usage +cpu/cpu11/user +cpu/cpu11/wait +cpu/cpu12 +cpu/cpu12/frequency +cpu/cpu12/name +cpu/cpu12/system +cpu/cpu12/temperature +cpu/cpu12/usage +cpu/cpu12/user +cpu/cpu12/wait +cpu/cpu13 +cpu/cpu13/frequency +cpu/cpu13/name +cpu/cpu13/system +cpu/cpu13/temperature +cpu/cpu13/usage +cpu/cpu13/user +cpu/cpu13/wait +cpu/cpu14 +cpu/cpu14/frequency +cpu/cpu14/name +cpu/cpu14/system +cpu/cpu14/temperature +cpu/cpu14/usage +cpu/cpu14/user +cpu/cpu14/wait +cpu/cpu15 +cpu/cpu15/frequency +cpu/cpu15/name +cpu/cpu15/system +cpu/cpu15/temperature +cpu/cpu15/usage +cpu/cpu15/user +cpu/cpu15/wait +cpu/cpu16 +cpu/cpu16/frequency +cpu/cpu16/name +cpu/cpu16/system +cpu/cpu16/temperature +cpu/cpu16/usage +cpu/cpu16/user +cpu/cpu16/wait +cpu/cpu17 +cpu/cpu17/frequency +cpu/cpu17/name +cpu/cpu17/system +cpu/cpu17/temperature +cpu/cpu17/usage +cpu/cpu17/user +cpu/cpu17/wait +cpu/cpu18 +cpu/cpu18/frequency +cpu/cpu18/name +cpu/cpu18/system +cpu/cpu18/temperature +cpu/cpu18/usage +cpu/cpu18/user +cpu/cpu18/wait +cpu/cpu19 +cpu/cpu19/frequency +cpu/cpu19/name +cpu/cpu19/system +cpu/cpu19/temperature +cpu/cpu19/usage +cpu/cpu19/user +cpu/cpu19/wait +cpu/cpu2 +cpu/cpu2/frequency +cpu/cpu2/name +cpu/cpu2/system +cpu/cpu2/temperature +cpu/cpu2/usage +cpu/cpu2/user +cpu/cpu2/wait +cpu/cpu3 +cpu/cpu3/frequency +cpu/cpu3/name +cpu/cpu3/system +cpu/cpu3/temperature +cpu/cpu3/usage +cpu/cpu3/user +cpu/cpu3/wait +cpu/cpu4 +cpu/cpu4/frequency +cpu/cpu4/name +cpu/cpu4/system +cpu/cpu4/temperature +cpu/cpu4/usage +cpu/cpu4/user +cpu/cpu4/wait +cpu/cpu5 +cpu/cpu5/frequency +cpu/cpu5/name +cpu/cpu5/system +cpu/cpu5/temperature +cpu/cpu5/usage +cpu/cpu5/user +cpu/cpu5/wait +cpu/cpu6 +cpu/cpu6/frequency +cpu/cpu6/name +cpu/cpu6/system +cpu/cpu6/temperature +cpu/cpu6/usage +cpu/cpu6/user +cpu/cpu6/wait +cpu/cpu7 +cpu/cpu7/frequency +cpu/cpu7/name +cpu/cpu7/system +cpu/cpu7/temperature +cpu/cpu7/usage +cpu/cpu7/user +cpu/cpu7/wait +cpu/cpu8 +cpu/cpu8/frequency +cpu/cpu8/name +cpu/cpu8/system +cpu/cpu8/temperature +cpu/cpu8/usage +cpu/cpu8/user +cpu/cpu8/wait +cpu/cpu9 +cpu/cpu9/frequency +cpu/cpu9/name +cpu/cpu9/system +cpu/cpu9/temperature +cpu/cpu9/usage +cpu/cpu9/user +cpu/cpu9/wait +cpu/loadaverages +cpu/loadaverages/loadaverage1 +cpu/loadaverages/loadaverage15 +cpu/loadaverages/loadaverage5 +disk +disk/52e29d18-ad4d-47ad-98c4-a09ab0914a85 +disk/52e29d18-ad4d-47ad-98c4-a09ab0914a85/free +disk/52e29d18-ad4d-47ad-98c4-a09ab0914a85/freePercent +disk/52e29d18-ad4d-47ad-98c4-a09ab0914a85/name +disk/52e29d18-ad4d-47ad-98c4-a09ab0914a85/read +disk/52e29d18-ad4d-47ad-98c4-a09ab0914a85/total +disk/52e29d18-ad4d-47ad-98c4-a09ab0914a85/used +disk/52e29d18-ad4d-47ad-98c4-a09ab0914a85/usedPercent +disk/52e29d18-ad4d-47ad-98c4-a09ab0914a85/write +disk/all +disk/all/free +disk/all/freePercent +disk/all/read +disk/all/total +disk/all/used +disk/all/usedPercent +disk/all/write +disk/d10dd7bf-e382-4e44-83d7-9af6c6df7258 +disk/d10dd7bf-e382-4e44-83d7-9af6c6df7258/free +disk/d10dd7bf-e382-4e44-83d7-9af6c6df7258/freePercent +disk/d10dd7bf-e382-4e44-83d7-9af6c6df7258/name +disk/d10dd7bf-e382-4e44-83d7-9af6c6df7258/read +disk/d10dd7bf-e382-4e44-83d7-9af6c6df7258/total +disk/d10dd7bf-e382-4e44-83d7-9af6c6df7258/used +disk/d10dd7bf-e382-4e44-83d7-9af6c6df7258/usedPercent +disk/d10dd7bf-e382-4e44-83d7-9af6c6df7258/write +disk/nvme0n1 +disk/nvme0n1/name +disk/nvme0n1/read +disk/nvme0n1/total +disk/nvme0n1/write +gpu +lmsensors +lmsensors/BAT0-acpi-0 +lmsensors/BAT0-acpi-0/in0 +lmsensors/acpitz-acpi-0 +lmsensors/acpitz-acpi-0/temp1 +lmsensors/iwlwifi_1-virtual-0 +lmsensors/iwlwifi_1-virtual-0/temp1 +lmsensors/nvme-pci-0400 +lmsensors/nvme-pci-0400/temp1 +lmsensors/thinkpad-isa-0000 +lmsensors/thinkpad-isa-0000/fan1 +lmsensors/thinkpad-isa-0000/fan2 +lmsensors/thinkpad-isa-0000/temp1 +lmsensors/thinkpad-isa-0000/temp2 +lmsensors/thinkpad-isa-0000/temp3 +lmsensors/thinkpad-isa-0000/temp4 +lmsensors/thinkpad-isa-0000/temp5 +lmsensors/thinkpad-isa-0000/temp6 +lmsensors/thinkpad-isa-0000/temp7 +lmsensors/thinkpad-isa-0000/temp8 +lmsensors/ucsi_source_psy_USBC000:001-isa-0000 +lmsensors/ucsi_source_psy_USBC000:001-isa-0000/curr1 +lmsensors/ucsi_source_psy_USBC000:001-isa-0000/in0 +lmsensors/ucsi_source_psy_USBC000:002-isa-0000 +lmsensors/ucsi_source_psy_USBC000:002-isa-0000/curr1 +lmsensors/ucsi_source_psy_USBC000:002-isa-0000/in0 +memory +memory/physical +memory/physical/application +memory/physical/applicationPercent +memory/physical/buffer +memory/physical/bufferPercent +memory/physical/cache +memory/physical/cachePercent +memory/physical/free +memory/physical/freePercent +memory/physical/total +memory/physical/used +memory/physical/usedPercent +memory/swap +memory/swap/free +memory/swap/freePercent +memory/swap/total +memory/swap/used +memory/swap/usedPercent +os +os/kernel +os/kernel/name +os/kernel/prettyName +os/kernel/version +os/plasma +os/plasma/kfVersion +os/plasma/plasmaVersion +os/plasma/qtVersion +os/plasma/windowsystem +os/system +os/system/hostname +os/system/logo +os/system/name +os/system/prettyName +os/system/uptime +os/system/url +os/system/version +power +power/4870 +power/4870/capacity +power/4870/charge +power/4870/chargePercentage +power/4870/chargeRate +power/4870/design +power/4870/health +power/4870/name diff --git a/sources/3rdparty/fontdialog/fontdialog.cpp b/sources/3rdparty/fontdialog/fontdialog.cpp index a659347..2cfb6cf 100644 --- a/sources/3rdparty/fontdialog/fontdialog.cpp +++ b/sources/3rdparty/fontdialog/fontdialog.cpp @@ -39,81 +39,6 @@ void CFont::setCurrentColor(const QColor color) } -int CFont::html2QFont(const int htmlWeight) -{ - int weight = 16; - switch(htmlWeight) { - case 100: - weight = 16; - break; - case 200: - case 300: - weight = 25; - break; - case 400: - weight = 50; - break; - case 500: - case 600: - weight = 63; - break; - case 700: - case 800: - weight = 75; - break; - case 900: - weight = 87; - break; - default: - break; - } - - return weight; -} - - -int CFont::qFont2html(const int weight) -{ - int htmlWeight = 400; - switch(weight) { - case 16: - htmlWeight = 100; - break; - case 25: - htmlWeight = 300; - break; - case 50: - htmlWeight = 400; - break; - case 63: - htmlWeight = 600; - break; - case 75: - htmlWeight = 800; - break; - case 87: - htmlWeight = 900; - break; - default: - break; - } - - return htmlWeight; -} - - -int CFont::htmlWeight() -{ - return CFont::qFont2html(weight()); -} - - -void CFont::setHtmlWeight(const int htmlWeight) -{ - setWeight(CFont::html2QFont(htmlWeight)); -} - - CFont CFont::fromQFont(const QFont font, const QColor color) { return CFont(font.family(), font.pointSize(), font.weight(), font.italic(), color); diff --git a/sources/3rdparty/fontdialog/fontdialog.h b/sources/3rdparty/fontdialog/fontdialog.h index 3a16d4b..6302e33 100644 --- a/sources/3rdparty/fontdialog/fontdialog.h +++ b/sources/3rdparty/fontdialog/fontdialog.h @@ -34,11 +34,6 @@ public: // color properties QColor color(); void setCurrentColor(const QColor color); - // html weight properties - static int html2QFont(const int htmlWeight); - static int qFont2html(const int weight); - int htmlWeight(); - void setHtmlWeight(const int htmlWeight); // conversion to QFont static CFont fromQFont(const QFont font, const QColor color = QColor(QString("#000000"))); diff --git a/sources/awesome-widget/CMakeLists.txt b/sources/awesome-widget/CMakeLists.txt index fced7ab..7fd254c 100644 --- a/sources/awesome-widget/CMakeLists.txt +++ b/sources/awesome-widget/CMakeLists.txt @@ -1,7 +1,7 @@ set(SUBPROJECT plasma_applet_awesome-widget) message(STATUS "Subproject ${SUBPROJECT}") -configure_file(metadata.desktop ${CMAKE_CURRENT_SOURCE_DIR}/package/metadata.desktop) +configure_file(metadata.json ${CMAKE_CURRENT_SOURCE_DIR}/package/metadata.json) add_subdirectory(plugin) plasma_install_package(package org.kde.plasma.awesomewidget) diff --git a/sources/awesome-widget/metadata.desktop b/sources/awesome-widget/metadata.desktop deleted file mode 100644 index 9b30552..0000000 --- a/sources/awesome-widget/metadata.desktop +++ /dev/null @@ -1,26 +0,0 @@ -[Desktop Entry] -Encoding=UTF-8 -Name=Awesome Widget -Comment=A minimalistic Plasmoid -Comment[en]=A minimalistic Plasmoid -Comment[es]=Un plasmoide minimalista -Comment[es]=Un script Plasmoïde minimaliste -Comment[pt_BR]=Um script Plasmoid -Comment[ru]=Минималистичный плазмоид -Comment[uk]=Мінімалістичний плазмоїд -X-KDE-ServiceTypes=Plasma/Applet -Type=Service -Icon=utilities-system-monitor - -X-KDE-ServiceTypes=Plasma/Applet -X-Plasma-API=declarativeappletscript -X-Plasma-MainScript=ui/main.qml - -X-KDE-PluginInfo-Author=Evgeniy Alekseev aka arcanis -X-KDE-PluginInfo-Email=esalexeev@gmail.com -X-KDE-PluginInfo-Name=org.kde.plasma.awesomewidget -X-KDE-PluginInfo-Version=@PROJECT_VERSION@ -X-KDE-PluginInfo-Website=https://arcanis.me/projects/awesome-widgets/ -X-KDE-PluginInfo-Category=System Information -X-KDE-PluginInfo-License=GPLv3 -X-KDE-PluginInfo-EnabledByDefault=true diff --git a/sources/awesome-widget/metadata.json b/sources/awesome-widget/metadata.json index 0f83643..d59bfa1 100644 --- a/sources/awesome-widget/metadata.json +++ b/sources/awesome-widget/metadata.json @@ -1,4 +1,5 @@ { + "KPackageStructure": "Plasma/Applet", "KPlugin": { "Authors": [ { @@ -18,12 +19,8 @@ "Id": "org.kde.plasma.awesomewidget", "License": "GPLv3", "Name": "Awesome Widget", - "ServiceTypes": [ - "Plasma/Applet" - ], "Version": "@PROJECT_VERSION@", "Website": "https://arcanis.me/projects/awesome-widgets/" }, - "X-Plasma-API": "declarativeappletscript", - "X-Plasma-MainScript": "ui/main.qml" + "X-Plasma-API-Minimum-Version": "6.0" } diff --git a/sources/awesome-widget/package/contents/config/config.qml b/sources/awesome-widget/package/contents/config/config.qml index ad08409..fd6a9c8 100644 --- a/sources/awesome-widget/package/contents/config/config.qml +++ b/sources/awesome-widget/package/contents/config/config.qml @@ -15,7 +15,7 @@ * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * ***************************************************************************/ -import QtQuick 2.0 +import QtQuick 2.15 import org.kde.plasma.configuration 2.0 diff --git a/sources/awesome-widget/package/contents/config/main.xml b/sources/awesome-widget/package/contents/config/main.xml index 063a99e..b5d715e 100644 --- a/sources/awesome-widget/package/contents/config/main.xml +++ b/sources/awesome-widget/package/contents/config/main.xml @@ -7,150 +7,150 @@ - + [cpu: $cpu%] [mem: $mem%] [swap: $swap%] [$netdev: $down/$upKB/s] - + true - + true - + false - + false - + true - + true - + true - + 0 - + 0 - + 1000 - + 0 - + Celsius - + $hh:$mm - + $dd,$hh,$mm - + (*) - + ( ) - + 100 - + false - + - + 100 - + true - + #ffffff - + true - + #ff0000 - + true - + #00ff00 - + true - + #0000ff - + true - + #ffff00 - + true - + #00ffff - + #ff00ff - + true - + #008800 - + #880000 - + center - + Terminus - + 12 - + #000000 - + normal - + normal - + normal - + #000000 diff --git a/sources/awesome-widget/package/contents/ui/about.qml b/sources/awesome-widget/package/contents/ui/about.qml index 15ec0de..5b5d9a2 100644 --- a/sources/awesome-widget/package/contents/ui/about.qml +++ b/sources/awesome-widget/package/contents/ui/about.qml @@ -15,7 +15,7 @@ * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * ***************************************************************************/ -import QtQuick 2.0 +import QtQuick 2.15 import org.kde.plasma.private.awesomewidget 1.0 diff --git a/sources/awesome-widget/package/contents/ui/advanced.qml b/sources/awesome-widget/package/contents/ui/advanced.qml index a4d29a8..7f77862 100644 --- a/sources/awesome-widget/package/contents/ui/advanced.qml +++ b/sources/awesome-widget/package/contents/ui/advanced.qml @@ -15,8 +15,8 @@ * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * ***************************************************************************/ -import QtQuick 2.0 -import QtQuick.Controls 1.3 as QtControls +import QtQuick 2.15 +import QtQuick.Controls import org.kde.plasma.private.awesomewidget 1.0 @@ -165,7 +165,7 @@ Item { ] text: i18n("Temperature units") value: plasmoid.configuration.tempUnits - onValueEdited: cfg_tempUnits = newValue + onValueEdited: newValue => cfg_tempUnits = newValue } LineSelector { @@ -192,13 +192,11 @@ Item { value: plasmoid.configuration.acOffline } - QtControls.GroupBox { - height: implicitHeight + GroupBox { width: parent.width title: i18n("Actions") Column { - height: implicitHeight width: parent.width ButtonSelector { value: i18n("Drop key cache") @@ -226,13 +224,11 @@ Item { } } - QtControls.GroupBox { - height: implicitHeight + GroupBox { width: parent.width title: i18n("Telemetry") Column { - height: implicitHeight width: parent.width CheckBoxSelector { id: telemetryRemote diff --git a/sources/awesome-widget/package/contents/ui/appearance.qml b/sources/awesome-widget/package/contents/ui/appearance.qml index f4c9b2e..de895e0 100644 --- a/sources/awesome-widget/package/contents/ui/appearance.qml +++ b/sources/awesome-widget/package/contents/ui/appearance.qml @@ -15,7 +15,7 @@ * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * ***************************************************************************/ -import QtQuick 2.0 +import QtQuick 2.15 import org.kde.plasma.private.awesomewidget 1.0 import "." @@ -75,7 +75,7 @@ Item { model: General.fontWeightModel text: i18n("Font weight") value: plasmoid.configuration.fontWeight - onValueEdited: cfg_fontWeight = newValue + onValueEdited: newValue => cfg_fontWeight = newValue } ComboBoxSelector { @@ -83,7 +83,7 @@ Item { model: General.fontStyleModel text: i18n("Font style") value: plasmoid.configuration.fontStyle - onValueEdited: cfg_fontStyle = newValue + onValueEdited: newValue => cfg_fontStyle = newValue } ColorSelector { @@ -97,7 +97,7 @@ Item { model: General.textStyleModel text: i18n("Style") value: plasmoid.configuration.textStyle - onValueEdited: cfg_textStyle = newValue + onValueEdited: newValue => cfg_textStyle = newValue } ColorSelector { diff --git a/sources/awesome-widget/package/contents/ui/dataengine.qml b/sources/awesome-widget/package/contents/ui/dataengine.qml index 3829673..7af7fbf 100644 --- a/sources/awesome-widget/package/contents/ui/dataengine.qml +++ b/sources/awesome-widget/package/contents/ui/dataengine.qml @@ -15,9 +15,8 @@ * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * ***************************************************************************/ -import QtQuick 2.0 -import QtQuick.Controls 1.3 as QtControls -import QtQuick.Dialogs 1.1 as QtDialogs +import QtQuick 2.15 +import QtQuick.Controls import org.kde.plasma.private.awesomewidget 1.0 @@ -48,18 +47,18 @@ Item { Column { id: pageColumn anchors.fill: parent - QtControls.GroupBox { + GroupBox { height: implicitHeight width: parent.width title: i18n("ACPI") LineSelector { text: i18n("ACPI path") value: cfg_dataengine["ACPIPATH"] - onValueEdited: cfg_dataengine["ACPIPATH"] = newValue + onValueEdited: newValue => cfg_dataengine["ACPIPATH"] = newValue } } - QtControls.GroupBox { + GroupBox { height: implicitHeight width: parent.width title: i18n("GPU") @@ -84,11 +83,11 @@ Item { ] text: i18n("GPU device") value: cfg_dataengine["GPUDEV"] - onValueEdited: cfg_dataengine["GPUDEV"] = newValue + onValueEdited: newValue => cfg_dataengine["GPUDEV"] = newValue } } - QtControls.GroupBox { + GroupBox { height: implicitHeight width: parent.width title: i18n("HDD temperature") @@ -99,18 +98,18 @@ Item { id: hdd text: i18n("HDD") value: cfg_dataengine["HDDDEV"] - onValueEdited: cfg_dataengine["HDDDEV"] = newValue + onValueEdited: newValue => cfg_dataengine["HDDDEV"] = newValue } LineSelector { text: i18n("hddtemp cmd") value: cfg_dataengine["HDDTEMPCMD"] - onValueEdited: cfg_dataengine["HDDTEMPCMD"] = newValue + onValueEdited: newValue => cfg_dataengine["HDDTEMPCMD"] = newValue } } } - QtControls.GroupBox { + GroupBox { height: implicitHeight width: parent.width title: i18n("Player") @@ -123,7 +122,7 @@ Item { stepSize: 1 text: i18n("Player data symbols") value: cfg_dataengine["PLAYERSYMBOLS"] - onValueEdited: cfg_dataengine["PLAYERSYMBOLS"] = newValue + onValueEdited: newValue => cfg_dataengine["PLAYERSYMBOLS"] = newValue } ComboBoxSelector { @@ -143,7 +142,7 @@ Item { ] text: i18n("Music player") value: cfg_dataengine["PLAYER"] - onValueEdited: cfg_dataengine["PLAYER"] = newValue + onValueEdited: newValue => cfg_dataengine["PLAYER"] = newValue } ComboBoxSelector { @@ -194,7 +193,7 @@ Item { LineSelector { text: i18n("MPD address") value: cfg_dataengine["MPDADDRESS"] - onValueEdited: cfg_dataengine["MPDADDRESS"] = newValue + onValueEdited: newValue => cfg_dataengine["MPDADDRESS"] = newValue } IntegerSelector { @@ -203,12 +202,12 @@ Item { stepSize: 1 text: i18n("MPD port") value: cfg_dataengine["MPDPORT"] - onValueEdited: cfg_dataengine["MPDPORT"] = newValue + onValueEdited: newValue => cfg_dataengine["MPDPORT"] = newValue } } } - QtControls.GroupBox { + GroupBox { height: implicitHeight width: parent.width title: i18n("Extensions") diff --git a/sources/awesome-widget/package/contents/ui/main.qml b/sources/awesome-widget/package/contents/ui/main.qml index 83422c2..04ff238 100644 --- a/sources/awesome-widget/package/contents/ui/main.qml +++ b/sources/awesome-widget/package/contents/ui/main.qml @@ -15,19 +15,18 @@ * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * ***************************************************************************/ -import QtQuick 2.4 -import QtQuick.Controls 1.3 as QtControls -import QtQuick.Dialogs 1.2 as QtDialogs -import QtQuick.Layouts 1.1 +import QtQuick 2.15 +import QtQuick.Controls +import QtQuick.Dialogs +import QtQuick.Layouts +import org.kde.plasma.core as PlasmaCore import org.kde.plasma.plasmoid 2.0 -import org.kde.plasma.core 2.0 as PlasmaCore -import org.kde.plasma.components 2.0 as PlasmaComponents import org.kde.plasma.private.awesomewidget 1.0 import "." -Item { +PlasmoidItem { id: main // backend AWKeys { @@ -74,17 +73,12 @@ Item { signal sizeUpdate - // init - Plasmoid.preferredRepresentation: Plasmoid.fullRepresentation - Plasmoid.compactRepresentation: Plasmoid.fullRepresentation - - Layout.fillWidth: plasmoid.formFactor != PlasmaCore.Planar - Layout.fillHeight: plasmoid.formFactor != PlasmaCore.Planar + Layout.fillWidth: PlasmoidItem.formFactor != PlasmaCore.Planar + Layout.fillHeight: PlasmoidItem.formFactor != PlasmaCore.Planar Layout.alignment: Qt.AlignVCenter | Qt.AlignHCenter Plasmoid.icon: "utilities-system-monitor" Plasmoid.backgroundHints: plasmoid.configuration.background ? "DefaultBackground" : "NoBackground" - Plasmoid.associatedApplication: "ksysguard" // ui @@ -119,11 +113,11 @@ Item { } } - QtDialogs.Dialog { + Dialog { id: tagSelector title: i18n("Select tag") - QtControls.ComboBox { + ComboBox { id: tagSelectorBox width: parent.width editable: true @@ -140,17 +134,29 @@ Item { } } + Plasmoid.contextualActions: [ + PlasmaCore.Action { + text: i18n("Request key") + icon.name: "utilities-system-monitor" + }, + PlasmaCore.Action { + text: i18n("Show README") + icon.name: "text-x-readme" + }, + PlasmaCore.Action { + text: i18n("Check updates") + icon.name: "system-software-update" + }, + PlasmaCore.Action { + text: i18n("Report bug") + icon.name: "tools-report-bug" + } + ] + Component.onCompleted: { if (debug) console.debug() - // actions - // it makes no sense to use this field with optimization enable - if (!plasmoid.configuration.optimize) - plasmoid.setAction("requestKey", i18n("Request key"), "utilities-system-monitor") - plasmoid.setAction("showReadme", i18n("Show README"), "text-x-readme") - plasmoid.setAction("checkUpdates", i18n("Check updates"), "system-software-update") - plasmoid.setAction("reportBug", i18n("Report bug"), "tools-report-bug") // init submodule Plasmoid.userConfiguringChanged(false) // connect data @@ -160,14 +166,14 @@ Item { if (plasmoid.configuration.checkUpdates) return awActions.checkUpdates(false) } - onNeedTextUpdate: { + onNeedTextUpdate: newText => { if (debug) console.debug() text.text = newText sizeUpdate() } - onNeedToolTipUpdate: { + onNeedToolTipUpdate: newText => { if (debug) console.debug() tooltip.text = newText diff --git a/sources/awesome-widget/package/contents/ui/qmldir b/sources/awesome-widget/package/contents/ui/qmldir index 637924c..2f19ff4 100644 --- a/sources/awesome-widget/package/contents/ui/qmldir +++ b/sources/awesome-widget/package/contents/ui/qmldir @@ -3,25 +3,25 @@ # common QML constants -singleton General 1.0 file:///usr//awesomewidgets/qml/General.qml +singleton General 1.0 file:///usr/share/awesomewidgets/qml/General.qml # custom QML UI classes -AboutTab file:///usr//awesomewidgets/qml/AboutTab.qml -AWExtensions file:///usr//awesomewidgets/qml/AWExtensions.qml -AWInfoLabel file:///usr//awesomewidgets/qml/AWInfoLabel.qml -AWTagSelector file:///usr//awesomewidgets/qml/AWTagSelector.qml -AWTextEditor file:///usr//awesomewidgets/qml/AWTextEditor.qml -BugReport file:///usr//awesomewidgets/qml/BugReport.qml -ButtonSelector file:///usr//awesomewidgets/qml/ButtonSelector.qml -CheckBoxSelector file:///usr//awesomewidgets/qml/CheckBoxSelector.qml -ColorSelector file:///usr//awesomewidgets/qml/ColorSelector.qml -ComboBoxSelector file:///usr//awesomewidgets/qml/ComboBoxSelector.qml -ExportDialog file:///usr//awesomewidgets/qml/ExportDialog.qml -FontSelector file:///usr//awesomewidgets/qml/FontSelector.qml -HtmlDefaultFunctionsBar file:///usr//awesomewidgets/qml/HtmlDefaultFunctionsBar.qml -HtmlEditorButton file:///usr//awesomewidgets/qml/HtmlEditorButton.qml -HtmlEditorColor file:///usr//awesomewidgets/qml/HtmlEditorColor.qml -HtmlEditorFont file:///usr//awesomewidgets/qml/HtmlEditorFont.qml -ImportDialog file:///usr//awesomewidgets/qml/ImportDialog.qml -IntegerSelector file:///usr//awesomewidgets/qml/IntegerSelector.qml -LineSelector file:///usr//awesomewidgets/qml/LineSelector.qml +AboutTab file:///usr/share/awesomewidgets/qml/AboutTab.qml +AWExtensions file:///usr/share/awesomewidgets/qml/AWExtensions.qml +AWInfoLabel file:///usr/share/awesomewidgets/qml/AWInfoLabel.qml +AWTagSelector file:///usr/share/awesomewidgets/qml/AWTagSelector.qml +AWTextEditor file:///usr/share/awesomewidgets/qml/AWTextEditor.qml +BugReport file:///usr/share/awesomewidgets/qml/BugReport.qml +ButtonSelector file:///usr/share/awesomewidgets/qml/ButtonSelector.qml +CheckBoxSelector file:///usr/share/awesomewidgets/qml/CheckBoxSelector.qml +ColorSelector file:///usr/share/awesomewidgets/qml/ColorSelector.qml +ComboBoxSelector file:///usr/share/awesomewidgets/qml/ComboBoxSelector.qml +ExportDialog file:///usr/share/awesomewidgets/qml/ExportDialog.qml +FontSelector file:///usr/share/awesomewidgets/qml/FontSelector.qml +HtmlDefaultFunctionsBar file:///usr/share/awesomewidgets/qml/HtmlDefaultFunctionsBar.qml +HtmlEditorButton file:///usr/share/awesomewidgets/qml/HtmlEditorButton.qml +HtmlEditorColor file:///usr/share/awesomewidgets/qml/HtmlEditorColor.qml +HtmlEditorFont file:///usr/share/awesomewidgets/qml/HtmlEditorFont.qml +ImportDialog file:///usr/share/awesomewidgets/qml/ImportDialog.qml +IntegerSelector file:///usr/share/awesomewidgets/qml/IntegerSelector.qml +LineSelector file:///usr/share/awesomewidgets/qml/LineSelector.qml diff --git a/sources/awesome-widget/package/contents/ui/tooltip.qml b/sources/awesome-widget/package/contents/ui/tooltip.qml index e7a3db1..ff1c539 100644 --- a/sources/awesome-widget/package/contents/ui/tooltip.qml +++ b/sources/awesome-widget/package/contents/ui/tooltip.qml @@ -15,8 +15,8 @@ * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * ***************************************************************************/ -import QtQuick 2.0 -import QtQuick.Controls 1.3 as QtControls +import QtQuick 2.15 +import QtQuick.Controls import org.kde.plasma.private.awesomewidget 1.0 @@ -46,7 +46,7 @@ Item { property alias cfg_memTooltipColor: memTooltipColor.value property alias cfg_swapTooltip: swapTooltip.checked property alias cfg_swapTooltipColor: swapTooltipColor.value - property alias cfg_downkbTooltip: downkbTooltip.checked + property alias cfg_downkbTooltip: networkTooltip.checked property alias cfg_downkbTooltipColor: downkbTooltipColor.value property alias cfg_upkbTooltipColor: upkbTooltipColor.value property alias cfg_batTooltip: batTooltip.checked @@ -57,7 +57,8 @@ Item { Column { id: pageColumn anchors.fill: parent - QtControls.Label { + + Label { width: parent.width horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter @@ -74,80 +75,109 @@ Item { value: plasmoid.configuration.tooltipNumber } - QtControls.GroupBox { + GroupBox { id: useTooltipBackground - height: implicitHeight width: parent.width - checkable: true - title: i18n("Background") + + property alias checked: useTooltipBackgroundLabel.checked + label: CheckBox { + id: useTooltipBackgroundLabel + text: i18n("Background") + } + ColorSelector { id: tooltipBackground + enabled: useTooltipBackgroundLabel.checked text: i18n("Background color") value: plasmoid.configuration.tooltipBackground } } - QtControls.GroupBox { + GroupBox { id: cpuTooltip - height: implicitHeight width: parent.width - checkable: true - title: i18n("CPU") + + property alias checked: cpuTooltipLabel.checked + label: CheckBox { + id: cpuTooltipLabel + text: i18n("CPU") + } + ColorSelector { id: cpuTooltipColor + enabled: cpuTooltipLabel.checked text: i18n("CPU color") value: plasmoid.configuration.cpuTooltipColor } } - QtControls.GroupBox { + GroupBox { id: cpuclTooltip - height: implicitHeight width: parent.width - checkable: true - title: i18n("CPU clock") + + property alias checked: cpuclTooltipLabel.checked + label: CheckBox { + id: cpuclTooltipLabel + text: i18n("CPU clock") + } + ColorSelector { id: cpuclTooltipColor + enabled: cpuclTooltipLabel.checked text: i18n("CPU clock color") value: plasmoid.configuration.cpuclTooltipColor } } - QtControls.GroupBox { + GroupBox { id: memTooltip - height: implicitHeight width: parent.width - checkable: true - title: i18n("Memory") + + property alias checked: memTooltipLabel.checked + label: CheckBox { + id: memTooltipLabel + text: i18n("Memory") + } + ColorSelector { id: memTooltipColor + enabled: memTooltipLabel.checked text: i18n("Memory color") value: plasmoid.configuration.memTooltipColor } } - QtControls.GroupBox { + GroupBox { id: swapTooltip - height: implicitHeight width: parent.width - checkable: true - title: i18n("Swap") + + property alias checked: swapTooltipLabel.checked + label: CheckBox { + id: swapTooltipLabel + text: i18n("Swap") + } + ColorSelector { id: swapTooltipColor + enabled: swapTooltipLabel.checked text: i18n("Swap color") value: plasmoid.configuration.swapTooltipColor } } - QtControls.GroupBox { - id: downkbTooltip - height: implicitHeight + GroupBox { + id: networkTooltip width: parent.width - checkable: true - title: i18n("Network") + + property alias checked: networkTooltipLabel.checked + label: CheckBox { + id: networkTooltipLabel + text: i18n("Network") + } + Column { - height: implicitHeight width: parent.width + enabled: networkTooltipLabel.checked ColorSelector { id: downkbTooltipColor text: i18n("Download speed color") @@ -161,15 +191,19 @@ Item { } } - QtControls.GroupBox { + GroupBox { id: batTooltip - height: implicitHeight width: parent.width - checkable: true - title: i18n("Battery") + + property alias checked: batteryTooltipLabel.checked + label: CheckBox { + id: batteryTooltipLabel + text: i18n("Battery") + } + Column { - height: implicitHeight width: parent.width + enabled: batteryTooltipLabel.checked ColorSelector { id: batTooltipColor text: i18n("Battery active color") diff --git a/sources/awesome-widget/package/contents/ui/widget.qml b/sources/awesome-widget/package/contents/ui/widget.qml index d46a827..01eba2b 100644 --- a/sources/awesome-widget/package/contents/ui/widget.qml +++ b/sources/awesome-widget/package/contents/ui/widget.qml @@ -15,7 +15,7 @@ * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * ***************************************************************************/ -import QtQuick 2.2 +import QtQuick 2.15 import org.kde.plasma.private.awesomewidget 1.0 import "." @@ -90,7 +90,7 @@ Item { awKeys.setAggregatorProperty("translate", plasmoid.configuration.translateStrings) } - onNeedTextUpdate: { + onNeedTextUpdate: newText => { if (lock) return if (debug) console.debug() diff --git a/sources/awesome-widget/package/metadata.desktop b/sources/awesome-widget/package/metadata.desktop deleted file mode 100644 index 91dbdeb..0000000 --- a/sources/awesome-widget/package/metadata.desktop +++ /dev/null @@ -1,26 +0,0 @@ -[Desktop Entry] -Encoding=UTF-8 -Name=Awesome Widget -Comment=A minimalistic Plasmoid -Comment[en]=A minimalistic Plasmoid -Comment[es]=Un plasmoide minimalista -Comment[es]=Un script Plasmoïde minimaliste -Comment[pt_BR]=Um script Plasmoid -Comment[ru]=Минималистичный плазмоид -Comment[uk]=Мінімалістичний плазмоїд -X-KDE-ServiceTypes=Plasma/Applet -Type=Service -Icon=utilities-system-monitor - -X-KDE-ServiceTypes=Plasma/Applet -X-Plasma-API=declarativeappletscript -X-Plasma-MainScript=ui/main.qml - -X-KDE-PluginInfo-Author=Evgeniy Alekseev aka arcanis -X-KDE-PluginInfo-Email=esalexeev@gmail.com -X-KDE-PluginInfo-Name=org.kde.plasma.awesomewidget -X-KDE-PluginInfo-Version=3.5.1 -X-KDE-PluginInfo-Website=https://arcanis.me/projects/awesome-widgets/ -X-KDE-PluginInfo-Category=System Information -X-KDE-PluginInfo-License=GPLv3 -X-KDE-PluginInfo-EnabledByDefault=true diff --git a/sources/awesome-widget/package/metadata.json b/sources/awesome-widget/package/metadata.json new file mode 100644 index 0000000..83ea5d6 --- /dev/null +++ b/sources/awesome-widget/package/metadata.json @@ -0,0 +1,26 @@ +{ + "KPackageStructure": "Plasma/Applet", + "KPlugin": { + "Authors": [ + { + "Email": "esalexeev@gmail.com", + "Name": "Evgeniy Alekseev aka arcanis" + } + ], + "Category": "System Information", + "Description": "A minimalistic Plasmoid", + "Description[en]": "A minimalistic Plasmoid", + "Description[es]": "Un script Plasmoïde minimaliste", + "Description[pt_BR]": "Um script Plasmoid", + "Description[ru]": "Минималистичный плазмоид", + "Description[uk]": "Мінімалістичний плазмоїд", + "EnabledByDefault": true, + "Icon": "utilities-system-monitor", + "Id": "org.kde.plasma.awesomewidget", + "License": "GPLv3", + "Name": "Awesome Widget", + "Version": "3.5.1", + "Website": "https://arcanis.me/projects/awesome-widgets/" + }, + "X-Plasma-API-Minimum-Version": "6.0" +} diff --git a/sources/awesome-widget/plugin/CMakeLists.txt b/sources/awesome-widget/plugin/CMakeLists.txt index 2fb27b5..9f79847 100644 --- a/sources/awesome-widget/plugin/CMakeLists.txt +++ b/sources/awesome-widget/plugin/CMakeLists.txt @@ -18,6 +18,6 @@ qt6_wrap_ui(SUBPROJECT_UI_HEADER ${SUBPROJECT_UI}) add_library(${PLUGIN_NAME} SHARED ${SUBPROJECT_SOURCE} ${SUBPROJECT_UI_HEADER}) target_link_libraries(${PLUGIN_NAME} ${PROJECT_LIBRARY} ${Qt_LIBRARIES} ${Kf6_LIBRARIES}) -install(TARGETS ${PLUGIN_NAME} DESTINATION ${QML_INSTALL_DIR}/org/kde/plasma/private/awesomewidget) -install(FILES qmldir DESTINATION ${QML_INSTALL_DIR}/org/kde/plasma/private/awesomewidget) +install(TARGETS ${PLUGIN_NAME} DESTINATION ${KDE_INSTALL_QMLDIR}/org/kde/plasma/private/awesomewidget) +install(FILES qmldir DESTINATION ${KDE_INSTALL_QMLDIR}/org/kde/plasma/private/awesomewidget) install(FILES ${SUBPROJECT_NOTIFY} DESTINATION ${KDE_INSTALL_KNOTIFYRCDIR}) diff --git a/sources/awesome-widget/plugin/awconfighelper.cpp b/sources/awesome-widget/plugin/awconfighelper.cpp index 7c716af..cdfedc0 100644 --- a/sources/awesome-widget/plugin/awconfighelper.cpp +++ b/sources/awesome-widget/plugin/awconfighelper.cpp @@ -21,7 +21,6 @@ #include #include #include -#include #include "awdebug.h" @@ -285,7 +284,6 @@ void AWConfigHelper::writeFile(QSettings &_settings, const QString &_key, const QFile file(_fileName); if (file.open(QIODevice::WriteOnly | QIODevice::Text)) { QTextStream out(&file); - out.setCodec("UTF-8"); out << _settings.value(_key).toString().toUtf8(); out.flush(); file.close(); diff --git a/sources/awesome-widget/plugin/awdataengineaggregator.cpp b/sources/awesome-widget/plugin/awdataengineaggregator.cpp index 431c20d..03006aa 100644 --- a/sources/awesome-widget/plugin/awdataengineaggregator.cpp +++ b/sources/awesome-widget/plugin/awdataengineaggregator.cpp @@ -17,7 +17,8 @@ #include "awdataengineaggregator.h" -#include +#include +#include #include "awdebug.h" @@ -27,20 +28,22 @@ AWDataEngineAggregator::AWDataEngineAggregator(QObject *_parent) { qCDebug(LOG_AW) << __PRETTY_FUNCTION__; - m_consumer = new Plasma::DataEngineConsumer(); - m_dataEngines["systemmonitor"] = m_consumer->dataEngine("systemmonitor"); - m_dataEngines["extsysmon"] = m_consumer->dataEngine("extsysmon"); - m_dataEngines["time"] = m_consumer->dataEngine("time"); + qDBusRegisterMetaType(); + qDBusRegisterMetaType(); + qDBusRegisterMetaType(); + qDBusRegisterMetaType>(); - // additional method required by systemmonitor structure - m_newSourceConnection - = connect(m_dataEngines["systemmonitor"], &Plasma::DataEngine::sourceAdded, [this](const QString &source) { - emit(deviceAdded(source)); - m_dataEngines["systemmonitor"]->connectSource(source, parent(), 1000); - }); + m_interface = new KSysGuard::SystemStats::DBusInterface( + KSysGuard::SystemStats::ServiceName, KSysGuard::SystemStats::ObjectPath, QDBusConnection::sessionBus(), this); - // required to define Qt::QueuedConnection for signal-slot connection - qRegisterMetaType("Plasma::DataEngine::Data"); + connect(m_interface, SIGNAL(newSensorData(KSysGuard::SensorDataList)), this, + SLOT(updateData(KSysGuard::SensorDataList))); + connect(m_interface, SIGNAL(sensorMetaDataChanged(const QHash &)), this, + SLOT(updateSensors(const QHash &))); + connect(m_interface, SIGNAL(sensorAdded(const QString &)), this, SLOT(sensorAdded(const QString &))); + connect(m_interface, SIGNAL(sensorRemoved(const QString &)), this, SLOT(sensorRemoved(const QString &))); + + loadSources(); } @@ -54,62 +57,63 @@ AWDataEngineAggregator::~AWDataEngineAggregator() void AWDataEngineAggregator::disconnectSources() { - for (auto dataEngine : m_dataEngines.values()) - for (auto &source : dataEngine->sources()) - dataEngine->disconnectSource(source, parent()); - disconnect(m_newSourceConnection); + m_interface->unsubscribe(m_sensors.keys()); } -void AWDataEngineAggregator::reconnectSources(const int _interval) +void AWDataEngineAggregator::loadSources() { - qCDebug(LOG_AW) << "Reconnect sources with interval" << _interval; + auto response = m_interface->allSensors(); + response.waitForFinished(); + + auto sensors = response.value(); + updateSensors(sensors); + for (auto &sensor : sensors.keys()) + sensorAdded(sensor); +} + + +void AWDataEngineAggregator::reconnectSources(const int interval) +{ + qCDebug(LOG_AW) << "Reconnect all sources with update interval" << interval; disconnectSources(); - - m_dataEngines["systemmonitor"]->connectAllSources(parent(), (uint)_interval); - m_dataEngines["extsysmon"]->connectAllSources(parent(), (uint)_interval); - m_dataEngines["time"]->connectSource("Local", parent(), 1000); - - m_newSourceConnection = connect( - m_dataEngines["systemmonitor"], &Plasma::DataEngine::sourceAdded, [this, _interval](const QString &source) { - emit(deviceAdded(source)); - m_dataEngines["systemmonitor"]->connectSource(source, parent(), (uint)_interval); - }); - -#ifdef BUILD_FUTURE - createQueuedConnection(); -#endif /* BUILD_FUTURE */ + m_interface->subscribe(m_sensors.keys()); } void AWDataEngineAggregator::dropSource(const QString &_source) { - qCDebug(LOG_AW) << "Source" << _source; + qCDebug(LOG_AW) << "Disconnect source" << _source; - // HACK there is no possibility to check to which dataengine source - // connected we will try to disconnect it from all engines - for (auto dataEngine : m_dataEngines.values()) - dataEngine->disconnectSource(_source, parent()); + m_interface->unsubscribe({_source}); } -void AWDataEngineAggregator::createQueuedConnection() +void AWDataEngineAggregator::sensorAdded(const QString &_sensor) { - // HACK additional method which forces QueuedConnection instead of Auto one - // for more details refer to plasma-framework source code - for (auto &dataEngine : m_dataEngines.keys()) { - // different source set for different engines - QStringList sources = dataEngine == "time" ? QStringList() << "Local" : m_dataEngines[dataEngine]->sources(); - // reconnect sources - for (auto &source : sources) { - Plasma::DataContainer *container = m_dataEngines[dataEngine]->containerForSource(source); - // disconnect old connections first - disconnect(container, SIGNAL(dataUpdated(QString, Plasma::DataEngine::Data)), parent(), - SLOT(dataUpdated(QString, Plasma::DataEngine::Data))); - // and now reconnect with Qt::QueuedConnection type - connect(container, SIGNAL(dataUpdated(QString, Plasma::DataEngine::Data)), parent(), - SLOT(dataUpdated(QString, Plasma::DataEngine::Data)), Qt::QueuedConnection); - } - } + qCDebug(LOG_AW) << "New sensor added" << _sensor; + + m_interface->subscribe({_sensor}); +} + + +void AWDataEngineAggregator::sensorRemoved(const QString &_sensor) +{ + qCDebug(LOG_AW) << "Sensor" << _sensor << "has been removed"; + + m_sensors.remove(_sensor); + m_interface->unsubscribe({_sensor}); +} + +void AWDataEngineAggregator::updateData(KSysGuard::SensorDataList _data) +{ + emit(dataUpdated(m_sensors, _data)); +} + + +void AWDataEngineAggregator::updateSensors(const QHash &_sensors) +{ + for (auto sensor = _sensors.cbegin(); sensor != _sensors.cend(); ++sensor) + m_sensors.insert(sensor.key(), sensor.value()); } diff --git a/sources/awesome-widget/plugin/awdataengineaggregator.h b/sources/awesome-widget/plugin/awdataengineaggregator.h index 580b9b8..4799268 100644 --- a/sources/awesome-widget/plugin/awdataengineaggregator.h +++ b/sources/awesome-widget/plugin/awdataengineaggregator.h @@ -19,10 +19,17 @@ #ifndef AWDATAENGINEAGGREGATOR_H #define AWDATAENGINEAGGREGATOR_H -#include -#include +#include #include +#include +#include + + +namespace KSysGuard::SystemStats +{ + class DBusInterface; +} class AWDataEngineAggregator : public QObject @@ -33,19 +40,23 @@ public: explicit AWDataEngineAggregator(QObject *_parent = nullptr); ~AWDataEngineAggregator() override; void disconnectSources(); - void reconnectSources(int _interval); + void loadSources(); + void reconnectSources(const int interval); signals: + void dataUpdated(const QHash &_sensors, const KSysGuard::SensorDataList &_data); void deviceAdded(const QString &_source); public slots: void dropSource(const QString &_source); + void sensorAdded(const QString &_sensor); + void sensorRemoved(const QString &_sensor); + void updateData(KSysGuard::SensorDataList _data); + void updateSensors(const QHash &_sensors); private: - void createQueuedConnection(); - Plasma::DataEngineConsumer *m_consumer = nullptr; - QHash m_dataEngines; - QMetaObject::Connection m_newSourceConnection; + KSysGuard::SystemStats::DBusInterface *m_interface = nullptr; + QHash m_sensors; }; diff --git a/sources/awesome-widget/plugin/awdataenginemapper.cpp b/sources/awesome-widget/plugin/awdataenginemapper.cpp index d2fa3c3..af7f645 100644 --- a/sources/awesome-widget/plugin/awdataenginemapper.cpp +++ b/sources/awesome-widget/plugin/awdataenginemapper.cpp @@ -76,20 +76,20 @@ QStringList AWDataEngineMapper::keysFromSource(const QString &_source) const // HACK units required to define should the value be calculated as temperature // or fan data -QStringList AWDataEngineMapper::registerSource(const QString &_source, const QString &_units, const QStringList &_keys) +QStringList AWDataEngineMapper::registerSource(const QString &_source, const KSysGuard::Unit _units, const QStringList &_keys) { qCDebug(LOG_AW) << "Source" << _source << "with units" << _units; // regular expressions - auto cpuRegExp = QRegularExpression("cpu/cpu.*/TotalLoad"); - auto cpuclRegExp = QRegularExpression("cpu/cpu.*/clock"); - auto hddrRegExp = QRegularExpression("disk/.*/Rate/rblk"); - auto hddwRegExp = QRegularExpression("disk/.*/Rate/wblk"); - auto mountFillRegExp = QRegularExpression("partitions/.*/filllevel"); - auto mountFreeRegExp = QRegularExpression("partitions/.*/freespace"); - auto mountUsedRegExp = QRegularExpression("partitions/.*/usedspace"); - auto netRegExp = QRegularExpression("network/interfaces/.*/(receiver|transmitter)/data$"); - auto netTotalRegExp = QRegularExpression("network/interfaces/.*/(receiver|transmitter)/dataTotal$"); + auto cpuRegExp = QRegularExpression("^cpu/cpu.*/usage$"); + auto cpuclRegExp = QRegularExpression("^cpu/cpu.*/frequency$"); + auto hddrRegExp = QRegularExpression("^disk/.*/read$"); + auto hddwRegExp = QRegularExpression("^disk/.*/write$"); + auto mountFillRegExp = QRegularExpression("^disk/.*/usedPercent$"); + auto mountFreeRegExp = QRegularExpression("^disk/.*/free$"); + auto mountUsedRegExp = QRegularExpression("^disk/.*/used$"); + auto netRegExp = QRegularExpression("^network/.*/(download|upload)$"); + auto netTotalRegExp = QRegularExpression("^network/.*/(totalDownload|totalUpload)$"); if (_source == "battery/ac") { // AC @@ -102,24 +102,24 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const QSt m_map.insert(_source, key); m_formatter[key] = _source.contains("rate") ? AWKeysAggregator::FormatterType::Float : AWKeysAggregator::FormatterType::IntegerThree; - } else if (_source == "cpu/system/TotalLoad") { + } else if (_source == "cpu/all/usage") { // cpu m_map.insert(_source, "cpu"); m_formatter["cpu"] = AWKeysAggregator::FormatterType::Float; } else if (_source.contains(cpuRegExp)) { // cpus QString key = _source; - key.remove("cpu/").remove("/TotalLoad"); + key.remove("cpu/").remove("/usage"); m_map.insert(_source, key); m_formatter[key] = AWKeysAggregator::FormatterType::Float; - } else if (_source == "cpu/system/AverageClock") { + } else if (_source == "cpu/all/averageFrequency") { // cpucl m_map.insert(_source, "cpucl"); m_formatter["cpucl"] = AWKeysAggregator::FormatterType::Integer; } else if (_source.contains(cpuclRegExp)) { // cpucls QString key = _source; - key.remove("cpu/cpu").remove("/clock"); + key.remove("cpu/cpu").remove("/frequency"); key = QString("cpucl%1").arg(key); m_map.insert(_source, key); m_formatter[key] = AWKeysAggregator::FormatterType::Integer; @@ -144,7 +144,7 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const QSt } else if (_source.contains(hddrRegExp)) { // read speed QString device = _source; - device.remove("/Rate/rblk"); + device.remove("disk/").remove("/read"); int index = m_devices["disk"].indexOf(device); if (index > -1) { QString key = QString("hddr%1").arg(index); @@ -154,7 +154,7 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const QSt } else if (_source.contains(hddwRegExp)) { // write speed QString device = _source; - device.remove("/Rate/wblk"); + device.remove("disk/").remove("/write"); int index = m_devices["disk"].indexOf(device); if (index > -1) { QString key = QString("hddw%1").arg(index); @@ -172,7 +172,7 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const QSt } else if (_source.contains(mountFillRegExp)) { // fill level QString device = _source; - device.remove("partitions").remove("/filllevel"); + device.remove("disk/").remove("/usedPercent"); int index = m_devices["mount"].indexOf(device); if (index > -1) { QString key = QString("hdd%1").arg(index); @@ -185,7 +185,7 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const QSt } else if (_source.contains(mountFreeRegExp)) { // free space QString device = _source; - device.remove("partitions").remove("/freespace"); + device.remove("disk/").remove("/free"); int index = m_devices["mount"].indexOf(device); if (index > -1) { // mb @@ -200,7 +200,7 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const QSt } else if (_source.contains(mountUsedRegExp)) { // used QString device = _source; - device.remove("partitions").remove("/usedspace"); + device.remove("disk/").remove("/used"); int index = m_devices["mount"].indexOf(device); if (index > -1) { // mb @@ -222,14 +222,14 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const QSt m_map.insert(_source, key); m_formatter[key] = AWKeysAggregator::FormatterType::Temperature; } - } else if (_source.startsWith("cpu/system/loadavg")) { + } else if (_source.startsWith("cpu/loadaverages/loadaverage")) { // load average QString time = _source; - time.remove("cpu/system/loadavg"); + time.remove("cpu/loadaverages/loadaverage"); QString key = QString("la%1").arg(time); m_map.insert(_source, key); m_formatter[key] = AWKeysAggregator::FormatterType::FloatTwoSymbols; - } else if (_source == "mem/physical/application") { + } else if (_source == "memory/physical/application") { // app memory // mb m_map.insert(_source, "memmb"); @@ -237,7 +237,7 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const QSt // gb m_map.insert(_source, "memgb"); m_formatter["memgb"] = AWKeysAggregator::FormatterType::MemGBFormat; - } else if (_source == "mem/physical/free") { + } else if (_source == "memory/physical/free") { // free memory // mb m_map.insert(_source, "memfreemb"); @@ -245,7 +245,7 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const QSt // gb m_map.insert(_source, "memfreegb"); m_formatter["memfreegb"] = AWKeysAggregator::FormatterType::MemGBFormat; - } else if (_source == "mem/physical/used") { + } else if (_source == "memory/physical/used") { // used memory // mb m_map.insert(_source, "memusedmb"); @@ -269,7 +269,7 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const QSt m_formatter[key] = AWKeysAggregator::FormatterType::NoFormat; } else if (_source.contains(netRegExp)) { // network speed - QString type = _source.contains("receiver") ? "down" : "up"; + QString type = _source.contains("download") ? "down" : "up"; int index = m_devices["net"].indexOf(_source.split('/')[2]); if (index > -1) { // kb @@ -287,7 +287,7 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const QSt } } else if (_source.contains(netTotalRegExp)) { // network data total - QString type = _source.contains("receiver") ? "down" : "up"; + QString type = _source.contains("download") ? "down" : "up"; int index = m_devices["net"].indexOf(_source.split('/')[2]); if (index > -1) { // kb @@ -329,7 +329,7 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const QSt key.remove("quotes/"); m_map.insert(_source, key); m_formatter[key] = AWKeysAggregator::FormatterType::Quotes; - } else if (_source == "mem/swap/free") { + } else if (_source == "memory/swap/free") { // free swap // mb m_map.insert(_source, "swapfreemb"); @@ -337,7 +337,7 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const QSt // gb m_map.insert(_source, "swapfreegb"); m_formatter["swapfreegb"] = AWKeysAggregator::FormatterType::MemGBFormat; - } else if (_source == "mem/swap/used") { + } else if (_source == "memory/swap/used") { // used swap // mb m_map.insert(_source, "swapmb"); @@ -349,13 +349,13 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const QSt // temperature int index = m_devices["temp"].indexOf(_source); // HACK on DE initialization there are no units key - if (_units.isEmpty()) + if (_units == KSysGuard::UnitInvalid) return QStringList({QString("temp%1").arg(index)}); if (index > -1) { QString key = QString("temp%1").arg(index); m_map.insert(_source, key); - m_formatter[key] = _units == "°C" ? AWKeysAggregator::FormatterType::Temperature - : AWKeysAggregator::FormatterType::Integer; + m_formatter[key] = _units == KSysGuard::UnitCelsius ? AWKeysAggregator::FormatterType::Temperature + : AWKeysAggregator::FormatterType::Integer; } } else if (_source == "Local") { // time diff --git a/sources/awesome-widget/plugin/awdataenginemapper.h b/sources/awesome-widget/plugin/awdataenginemapper.h index 5ee7124..aa65bfa 100644 --- a/sources/awesome-widget/plugin/awdataenginemapper.h +++ b/sources/awesome-widget/plugin/awdataenginemapper.h @@ -19,6 +19,8 @@ #ifndef AWDATAENGINEMAPPER_H #define AWDATAENGINEMAPPER_H +#include + #include #include @@ -38,7 +40,7 @@ public: [[nodiscard]] AWKeysAggregator::FormatterType formatter(const QString &_key) const; [[nodiscard]] QStringList keysFromSource(const QString &_source) const; // set methods - QStringList registerSource(const QString &_source, const QString &_units, const QStringList &_keys); + QStringList registerSource(const QString &_source, const KSysGuard::Unit _units, const QStringList &_keys); void setDevices(const QHash &_devices); private: diff --git a/sources/awesome-widget/plugin/awkeys.cpp b/sources/awesome-widget/plugin/awkeys.cpp index 1582ab6..422ccf2 100644 --- a/sources/awesome-widget/plugin/awkeys.cpp +++ b/sources/awesome-widget/plugin/awkeys.cpp @@ -58,11 +58,15 @@ AWKeys::AWKeys(QObject *_parent) // update key data if required connect(m_keyOperator, SIGNAL(updateKeys(const QStringList &)), this, SLOT(reinitKeys(const QStringList &))); connect(m_timer, SIGNAL(timeout()), this, SLOT(updateTextData())); + // transfer signal from AWDataAggregator object to QML ui connect(m_dataAggregator, SIGNAL(toolTipPainted(const QString &)), this, SIGNAL(needToolTipToBeUpdated(const QString &))); + connect(this, SIGNAL(dropSourceFromDataengine(const QString &)), m_dataEngineAggregator, SLOT(dropSource(const QString &))); + connect(m_dataEngineAggregator, SIGNAL(dataUpdated(const QHash &, const KSysGuard::SensorDataList &)), + this, SLOT(dataUpdated(const QHash &, const KSysGuard::SensorDataList &))); // transfer signal from dataengine to update source list connect(m_dataEngineAggregator, SIGNAL(deviceAdded(const QString &)), m_keyOperator, SLOT(addDevice(const QString &))); @@ -185,9 +189,9 @@ QString AWKeys::valueByKey(const QString &_key) const { qCDebug(LOG_AW) << "Requested value for key" << _key; - QString trueKey = _key.startsWith("bar") ? m_keyOperator->infoByKey(_key) : _key; + auto realKey = _key.startsWith("bar") ? m_keyOperator->infoByKey(_key) : _key; - return m_aggregator->formatter(m_values[trueKey], trueKey, true); + return m_aggregator->formatter(m_values[realKey], realKey, true); } @@ -199,10 +203,15 @@ void AWKeys::editItem(const QString &_type) } -void AWKeys::dataUpdated(const QString &_sourceName, const Plasma::DataEngine::Data &_data) +void AWKeys::dataUpdated(const QHash &_sensors, const KSysGuard::SensorDataList &_data) { - // run concurrent data update - QtConcurrent::run(m_threadPool, this, &AWKeys::setDataBySource, _sourceName, _data); + for (auto &single : _data) { + if (_sensors.contains(single.sensorProperty)) { + setDataBySource(single.sensorProperty, _sensors.value(single.sensorProperty), single); + } + // TODO use QtConcurrent::map or something like that +// QtConcurrent::run(m_threadPool, this, &AWKeys::setDataBySource, "ss", sensor); + } } @@ -239,7 +248,7 @@ void AWKeys::updateTextData() // do not do it in parallel to avoid race condition m_mutex.lock(); calculateValues(); - QString text = parsePattern(m_keyOperator->pattern()); + auto text = parsePattern(m_keyOperator->pattern()); // update tooltip values under lock m_dataAggregator->dataUpdate(m_values); m_mutex.unlock(); @@ -257,16 +266,16 @@ void AWKeys::calculateValues() for (auto &device : mountDevices) { int index = mountDevices.indexOf(device); m_values[QString("hddtotmb%1").arg(index)] - = m_values[QString("hddfreemb%1").arg(index)].toFloat() + m_values[QString("hddmb%1").arg(index)].toFloat(); + = m_values[QString("hddfreemb%1").arg(index)].toDouble() + m_values[QString("hddmb%1").arg(index)].toDouble(); m_values[QString("hddtotgb%1").arg(index)] - = m_values[QString("hddfreegb%1").arg(index)].toFloat() + m_values[QString("hddgb%1").arg(index)].toFloat(); + = m_values[QString("hddfreegb%1").arg(index)].toDouble() + m_values[QString("hddgb%1").arg(index)].toDouble(); } // memtot* - m_values["memtotmb"] = m_values["memusedmb"].toInt() + m_values["memfreemb"].toInt(); - m_values["memtotgb"] = m_values["memusedgb"].toFloat() + m_values["memfreegb"].toFloat(); + m_values["memtotmb"] = m_values["memusedmb"].toLongLong() + m_values["memfreemb"].toLongLong(); + m_values["memtotgb"] = m_values["memusedgb"].toDouble() + m_values["memfreegb"].toDouble(); // mem - m_values["mem"] = 100.0f * m_values["memmb"].toFloat() / m_values["memtotmb"].toFloat(); + m_values["mem"] = 100.0f * m_values["memmb"].toDouble() / m_values["memtotmb"].toDouble(); // up, down, upkb, downkb, upunits, downunits int netIndex = m_keyOperator->devices("net").indexOf(m_values["netdev"].toString()); @@ -282,10 +291,10 @@ void AWKeys::calculateValues() m_values["upunits"] = m_values[QString("upunits%1").arg(netIndex)]; // swaptot* - m_values["swaptotmb"] = m_values["swapmb"].toInt() + m_values["swapfreemb"].toInt(); - m_values["swaptotgb"] = m_values["swapgb"].toFloat() + m_values["swapfreegb"].toFloat(); + m_values["swaptotmb"] = m_values["swapmb"].toLongLong() + m_values["swapfreemb"].toLongLong(); + m_values["swaptotgb"] = m_values["swapgb"].toDouble() + m_values["swapfreegb"].toDouble(); // swap - m_values["swap"] = 100.0f * m_values["swapmb"].toFloat() / m_values["swaptotmb"].toFloat(); + m_values["swap"] = 100.0f * m_values["swapmb"].toDouble() / m_values["swaptotmb"].toDouble(); // user defined keys for (auto &key : m_keyOperator->userKeys()) @@ -323,7 +332,7 @@ void AWKeys::createDBusInterface() QString AWKeys::parsePattern(QString _pattern) const { // screen sign - _pattern.replace("$$", QString(0x1d)); + _pattern.replace("$$", QChar(0x1d)); // lambdas for (auto &key : m_foundLambdas) @@ -343,7 +352,7 @@ QString AWKeys::parsePattern(QString _pattern) const } // prepare strings - _pattern.replace(QString(0x1d), "$"); + _pattern.replace(QChar(0x1d), "$"); if (m_wrapNewLines) _pattern.replace("\n", "
"); @@ -351,25 +360,25 @@ QString AWKeys::parsePattern(QString _pattern) const } -void AWKeys::setDataBySource(const QString &_sourceName, const QVariantMap &_data) +void AWKeys::setDataBySource(const QString &_source, const KSysGuard::SensorInfo &_sensor, const KSysGuard::SensorData &_data) { - qCDebug(LOG_AW) << "Source" << _sourceName << "with data" << _data; + qCDebug(LOG_AW) << "Source" << _source << _sensor.name << "with data" << _data.payload; // first list init - QStringList tags = m_aggregator->keysFromSource(_sourceName); + auto tags = m_aggregator->keysFromSource(_source); if (tags.isEmpty()) - tags = m_aggregator->registerSource(_sourceName, _data["units"].toString(), m_requiredKeys); + tags = m_aggregator->registerSource(_source, _sensor.unit, m_requiredKeys); // update data or drop source if there are no matches and exit if (tags.isEmpty()) { - qCInfo(LOG_AW) << "Source" << _sourceName << "not found"; - return emit(dropSourceFromDataengine(_sourceName)); + qCInfo(LOG_AW) << "Source" << _source << "not found"; + return emit(dropSourceFromDataengine(_source)); } m_mutex.lock(); // HACK workaround for time values which are stored in the different path - std::for_each(tags.cbegin(), tags.cend(), [this, &_data, &_sourceName](const QString &tag) { - m_values[tag] = _sourceName == "Local" ? _data["DateTime"] : _data["value"]; + std::for_each(tags.cbegin(), tags.cend(), [this, &_data](const QString &tag) { + m_values[tag] = _data.payload; }); m_mutex.unlock(); } diff --git a/sources/awesome-widget/plugin/awkeys.h b/sources/awesome-widget/plugin/awkeys.h index 8ebf222..d82071d 100644 --- a/sources/awesome-widget/plugin/awkeys.h +++ b/sources/awesome-widget/plugin/awkeys.h @@ -19,11 +19,11 @@ #ifndef AWKEYS_H #define AWKEYS_H -#include - #include #include +#include + class AWDataAggregator; class AWDataEngineAggregator; @@ -56,9 +56,7 @@ public: Q_INVOKABLE void editItem(const QString &_type); public slots: - void dataUpdated(const QString &_sourceName, const Plasma::DataEngine::Data &_data); - // dummy method required by DataEngine connections - static void modelChanged(const QString &, QAbstractItemModel *){}; + void dataUpdated(const QHash &_sensors, const KSysGuard::SensorDataList &_data); signals: void dropSourceFromDataengine(const QString &_source); @@ -74,7 +72,7 @@ private: void calculateValues(); void createDBusInterface(); [[nodiscard]] QString parsePattern(QString _pattern) const; - void setDataBySource(const QString &_sourceName, const QVariantMap &_data); + void setDataBySource(const QString &_source, const KSysGuard::SensorInfo &_sensor, const KSysGuard::SensorData &_data); // objects AWDataAggregator *m_dataAggregator = nullptr; AWDataEngineAggregator *m_dataEngineAggregator = nullptr; diff --git a/sources/awesome-widget/plugin/awkeysaggregator.cpp b/sources/awesome-widget/plugin/awkeysaggregator.cpp index 6cd3309..f88a70e 100644 --- a/sources/awesome-widget/plugin/awkeysaggregator.cpp +++ b/sources/awesome-widget/plugin/awkeysaggregator.cpp @@ -64,19 +64,19 @@ QString AWKeysAggregator::formatter(const QVariant &_data, const QString &_key, // case block switch (m_mapper->formatter(_key)) { case FormatterType::Float: - output = QString("%1").arg(_data.toFloat(), 5, 'f', 1); + output = QString("%1").arg(_data.toDouble(), 5, 'f', 1); break; case FormatterType::FloatTwoSymbols: - output = QString("%1").arg(_data.toFloat(), 5, 'f', 2); + output = QString("%1").arg(_data.toDouble(), 5, 'f', 2); break; case FormatterType::Integer: - output = QString("%1").arg(_data.toFloat(), 4, 'f', 0); + output = QString("%1").arg(_data.toDouble(), 4, 'f', 0); break; case FormatterType::IntegerFive: - output = QString("%1").arg(_data.toFloat(), 5, 'f', 0); + output = QString("%1").arg(_data.toDouble(), 5, 'f', 0); break; case FormatterType::IntegerThree: - output = QString("%1").arg(_data.toFloat(), 3, 'f', 0); + output = QString("%1").arg(_data.toDouble(), 3, 'f', 0); break; case FormatterType::List: output = _data.toStringList().join(','); @@ -85,10 +85,10 @@ QString AWKeysAggregator::formatter(const QVariant &_data, const QString &_key, output = _data.toBool() ? m_acOnline : m_acOffline; break; case FormatterType::MemGBFormat: - output = QString("%1").arg(_data.toFloat() / (1024.0 * 1024.0), 5, 'f', 1); + output = QString("%1").arg(_data.toDouble() / (1024.0 * 1024.0), 5, 'f', 1); break; case FormatterType::MemMBFormat: - output = QString("%1").arg(_data.toFloat() / 1024.0, 5, 'f', 0); + output = QString("%1").arg(_data.toDouble() / 1024.0, 5, 'f', 0); break; case FormatterType::NetSmartFormat: output = [](const float value) { @@ -96,10 +96,10 @@ QString AWKeysAggregator::formatter(const QVariant &_data, const QString &_key, return QString("%1").arg(value / 1024.0, 4, 'f', 1); else return QString("%1").arg(value, 4, 'f', 0); - }(_data.toFloat()); + }(_data.toDouble()); break; case FormatterType::NetSmartUnits: - if (_data.toFloat() > 1024.0) + if (_data.toDouble() > 1024.0) output = m_translate ? i18n("MB/s") : "MB/s"; else output = m_translate ? i18n("KB/s") : "KB/s"; @@ -110,7 +110,7 @@ QString AWKeysAggregator::formatter(const QVariant &_data, const QString &_key, output = output.rightJustified(8, QLatin1Char(' '), true); break; case FormatterType::Temperature: - output = QString("%1").arg(temperature(_data.toFloat()), 5, 'f', 1); + output = QString("%1").arg(temperature(_data.toDouble()), 5, 'f', 1); break; case FormatterType::Time: output = _data.toDateTime().toString(); @@ -150,7 +150,7 @@ QString AWKeysAggregator::formatter(const QVariant &_data, const QString &_key, source.replace("$m", QString("%1").arg(minutes)); return source; }(m_mapper->formatter(_key) == FormatterType::Uptime ? "$ddd$hhh$mmm" : m_customUptime, - static_cast(_data.toFloat())); + static_cast(_data.toDouble())); break; case FormatterType::NoFormat: output = _data.toString(); @@ -234,7 +234,7 @@ void AWKeysAggregator::setTranslate(const bool _translate) } -QStringList AWKeysAggregator::registerSource(const QString &_source, const QString &_units, const QStringList &_keys) +QStringList AWKeysAggregator::registerSource(const QString &_source, const KSysGuard::Unit &_units, const QStringList &_keys) { qCDebug(LOG_AW) << "Source" << _source << "with units" << _units; diff --git a/sources/awesome-widget/plugin/awkeysaggregator.h b/sources/awesome-widget/plugin/awkeysaggregator.h index 8bc93ae..cdf48f2 100644 --- a/sources/awesome-widget/plugin/awkeysaggregator.h +++ b/sources/awesome-widget/plugin/awkeysaggregator.h @@ -19,6 +19,8 @@ #ifndef AWKEYSAGGREGATOR_H #define AWKEYSAGGREGATOR_H +#include + #include #include @@ -81,7 +83,7 @@ public: void setTranslate(bool _translate); public slots: - QStringList registerSource(const QString &_source, const QString &_units, const QStringList &_keys); + QStringList registerSource(const QString &_source, const KSysGuard::Unit &_units, const QStringList &_keys); private: [[nodiscard]] float temperature(float temp) const; diff --git a/sources/awesome-widget/plugin/awpatternfunctions.cpp b/sources/awesome-widget/plugin/awpatternfunctions.cpp index d93c16a..9a56da3 100644 --- a/sources/awesome-widget/plugin/awpatternfunctions.cpp +++ b/sources/awesome-widget/plugin/awpatternfunctions.cpp @@ -105,9 +105,9 @@ QList AWPatternFunctions::findFunctionCalls(cons metadata.args = QStringList(); } else { // replace '$,' to 0x1d - argsString.replace("$,", QString(0x1d)); + argsString.replace("$,", QChar(0x1d)); QStringList args = argsString.split(','); - std::for_each(args.begin(), args.end(), [](QString &arg) { arg.replace(QString(0x1d), ","); }); + std::for_each(args.begin(), args.end(), [](QString &arg) { arg.replace(QChar(0x1d), ","); }); metadata.args = args; } // other variables diff --git a/sources/awesome-widget/plugin/awupdatehelper.cpp b/sources/awesome-widget/plugin/awupdatehelper.cpp index 2d07752..3412c05 100644 --- a/sources/awesome-widget/plugin/awupdatehelper.cpp +++ b/sources/awesome-widget/plugin/awupdatehelper.cpp @@ -24,6 +24,7 @@ #include #include #include +#include #include "awdebug.h" diff --git a/sources/desktop-panel/package/contents/ui/qmldir b/sources/desktop-panel/package/contents/ui/qmldir index 637924c..2f19ff4 100644 --- a/sources/desktop-panel/package/contents/ui/qmldir +++ b/sources/desktop-panel/package/contents/ui/qmldir @@ -3,25 +3,25 @@ # common QML constants -singleton General 1.0 file:///usr//awesomewidgets/qml/General.qml +singleton General 1.0 file:///usr/share/awesomewidgets/qml/General.qml # custom QML UI classes -AboutTab file:///usr//awesomewidgets/qml/AboutTab.qml -AWExtensions file:///usr//awesomewidgets/qml/AWExtensions.qml -AWInfoLabel file:///usr//awesomewidgets/qml/AWInfoLabel.qml -AWTagSelector file:///usr//awesomewidgets/qml/AWTagSelector.qml -AWTextEditor file:///usr//awesomewidgets/qml/AWTextEditor.qml -BugReport file:///usr//awesomewidgets/qml/BugReport.qml -ButtonSelector file:///usr//awesomewidgets/qml/ButtonSelector.qml -CheckBoxSelector file:///usr//awesomewidgets/qml/CheckBoxSelector.qml -ColorSelector file:///usr//awesomewidgets/qml/ColorSelector.qml -ComboBoxSelector file:///usr//awesomewidgets/qml/ComboBoxSelector.qml -ExportDialog file:///usr//awesomewidgets/qml/ExportDialog.qml -FontSelector file:///usr//awesomewidgets/qml/FontSelector.qml -HtmlDefaultFunctionsBar file:///usr//awesomewidgets/qml/HtmlDefaultFunctionsBar.qml -HtmlEditorButton file:///usr//awesomewidgets/qml/HtmlEditorButton.qml -HtmlEditorColor file:///usr//awesomewidgets/qml/HtmlEditorColor.qml -HtmlEditorFont file:///usr//awesomewidgets/qml/HtmlEditorFont.qml -ImportDialog file:///usr//awesomewidgets/qml/ImportDialog.qml -IntegerSelector file:///usr//awesomewidgets/qml/IntegerSelector.qml -LineSelector file:///usr//awesomewidgets/qml/LineSelector.qml +AboutTab file:///usr/share/awesomewidgets/qml/AboutTab.qml +AWExtensions file:///usr/share/awesomewidgets/qml/AWExtensions.qml +AWInfoLabel file:///usr/share/awesomewidgets/qml/AWInfoLabel.qml +AWTagSelector file:///usr/share/awesomewidgets/qml/AWTagSelector.qml +AWTextEditor file:///usr/share/awesomewidgets/qml/AWTextEditor.qml +BugReport file:///usr/share/awesomewidgets/qml/BugReport.qml +ButtonSelector file:///usr/share/awesomewidgets/qml/ButtonSelector.qml +CheckBoxSelector file:///usr/share/awesomewidgets/qml/CheckBoxSelector.qml +ColorSelector file:///usr/share/awesomewidgets/qml/ColorSelector.qml +ComboBoxSelector file:///usr/share/awesomewidgets/qml/ComboBoxSelector.qml +ExportDialog file:///usr/share/awesomewidgets/qml/ExportDialog.qml +FontSelector file:///usr/share/awesomewidgets/qml/FontSelector.qml +HtmlDefaultFunctionsBar file:///usr/share/awesomewidgets/qml/HtmlDefaultFunctionsBar.qml +HtmlEditorButton file:///usr/share/awesomewidgets/qml/HtmlEditorButton.qml +HtmlEditorColor file:///usr/share/awesomewidgets/qml/HtmlEditorColor.qml +HtmlEditorFont file:///usr/share/awesomewidgets/qml/HtmlEditorFont.qml +ImportDialog file:///usr/share/awesomewidgets/qml/ImportDialog.qml +IntegerSelector file:///usr/share/awesomewidgets/qml/IntegerSelector.qml +LineSelector file:///usr/share/awesomewidgets/qml/LineSelector.qml diff --git a/sources/libraries.cmake b/sources/libraries.cmake index 59e5730..ca15ffe 100644 --- a/sources/libraries.cmake +++ b/sources/libraries.cmake @@ -22,8 +22,9 @@ set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${ECM_MODULE_PATH} ${ECM_KDE_MODULE_D find_package(KF6 REQUIRED COMPONENTS I18n Notifications Service WindowSystem) find_package(LibTaskManager REQUIRED) find_package(Plasma REQUIRED) +find_package(KSysGuard REQUIRED) include(KDEInstallDirs) include(KDECMakeSettings) include(KDECompilerSettings) set(Kf6_INCLUDE ${KDE_INSTALL_FULL_INCLUDEDIR_KF}) -set(Kf6_LIBRARIES KF6::I18n KF6::Notifications KF6::WindowSystem PW::LibTaskManager) +set(Kf6_LIBRARIES KF6::I18n KF6::Notifications KF6::WindowSystem KSysGuard::Sensors KSysGuard::SensorFaces KSysGuard::SystemStats PW::LibTaskManager) diff --git a/sources/qml/AWExtensions.qml b/sources/qml/AWExtensions.qml index c83fca5..8a25574 100644 --- a/sources/qml/AWExtensions.qml +++ b/sources/qml/AWExtensions.qml @@ -15,9 +15,9 @@ * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * ***************************************************************************/ -import QtQuick 2.2 -import QtQuick.Controls 1.3 as QtControls -import QtQuick.Dialogs 1.2 as QtDialogs +import QtQuick 2.15 +import QtQuick.Controls +import QtQuick.Dialogs import org.kde.plasma.private.awesomewidget 1.0 @@ -40,25 +40,25 @@ Row { signal unlock signal showMessage(string message) - QtControls.Button { + Button { width: parent.width * 3 / 15 text: i18n("Edit bars") onClicked: backend.editItem("graphicalitem") } - QtControls.Button { + Button { width: parent.width * 3 / 15 text: i18n("Formatters") onClicked: awPairConfig.showFormatterDialog(backend.dictKeys(true)) } - QtControls.Button { + Button { width: parent.width * 3 / 15 text: i18n("User keys") onClicked: awPairConfig.showKeysDialog(backend.dictKeys(true)) } - QtControls.Button { + Button { width: parent.width * 5 / 15 text: i18n("Preview") onClicked: { @@ -68,30 +68,31 @@ Row { } } - QtControls.Button { - width: parent.width / 15 - iconName: "view-history" - menu: QtControls.Menu { - id: historyConfig - Instantiator { - model: awTelemetryHandler.get("awwidgetconfig") - QtControls.MenuItem { - text: modelData - onTriggered: textArea.text = modelData - } - onObjectAdded: historyConfig.insertItem(index, object) - onObjectRemoved: historyConfig.removeItem(object) - } - } - } + // TODO migrate history + // Button { + // width: parent.width / 15 + // iconName: "view-history" + // menu: Menu { + // id: historyConfig + // Instantiator { + // model: awTelemetryHandler.get("awwidgetconfig") + // MenuItem { + // text: modelData + // onTriggered: textArea.text = modelData + // } + // onObjectAdded: historyConfig.insertItem(index, object) + // onObjectRemoved: historyConfig.removeItem(object) + // } + // } + // } - QtDialogs.MessageDialog { + MessageDialog { id: compiledText modality: Qt.NonModal title: i18n("Preview") } - onShowMessage: { + onShowMessage: message => { compiledText.text = message.split(" ").join(" ") // replaceAll lols compiledText.open() } diff --git a/sources/qml/AWInfoLabel.qml b/sources/qml/AWInfoLabel.qml index 7e8d16e..a549249 100644 --- a/sources/qml/AWInfoLabel.qml +++ b/sources/qml/AWInfoLabel.qml @@ -15,11 +15,11 @@ * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * ***************************************************************************/ -import QtQuick 2.2 -import QtQuick.Controls 1.3 as QtControls +import QtQuick 2.15 +import QtQuick.Controls -QtControls.Label { +Label { width: parent.width horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter diff --git a/sources/qml/AWTagSelector.qml b/sources/qml/AWTagSelector.qml index 52b6571..301cf28 100644 --- a/sources/qml/AWTagSelector.qml +++ b/sources/qml/AWTagSelector.qml @@ -15,8 +15,8 @@ * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * ***************************************************************************/ -import QtQuick 2.2 -import QtQuick.Controls 1.3 as QtControls +import QtQuick 2.15 +import QtQuick.Controls Row { @@ -30,7 +30,7 @@ Row { property var textArea property alias groups: tagGroups.model - QtControls.ComboBox { + ComboBox { id: tagGroups width: parent.width * 2 / 5 textRole: "label" @@ -41,12 +41,12 @@ Row { } } - QtControls.ComboBox { + ComboBox { id: tags width: parent.width * 1 / 5 } - QtControls.Button { + Button { width: parent.width * 1 / 5 text: i18n("Add") @@ -57,7 +57,7 @@ Row { } } - QtControls.Button { + Button { width: parent.width * 1 / 5 text: i18n("Show value") diff --git a/sources/qml/AWTextEditor.qml b/sources/qml/AWTextEditor.qml index 568391b..f77ab04 100644 --- a/sources/qml/AWTextEditor.qml +++ b/sources/qml/AWTextEditor.qml @@ -15,8 +15,8 @@ * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * ***************************************************************************/ -import QtQuick 2.0 -import QtQuick.Controls 1.3 as QtControls +import QtQuick 2.15 +import QtQuick.Controls Item { @@ -26,7 +26,7 @@ Item { property var backend property alias text: textArea.text - QtControls.TextArea { + TextArea { id: textArea anchors.fill: parent textFormat: TextEdit.PlainText diff --git a/sources/qml/AboutTab.qml b/sources/qml/AboutTab.qml index 0f6eae0..6a894fb 100644 --- a/sources/qml/AboutTab.qml +++ b/sources/qml/AboutTab.qml @@ -15,77 +15,79 @@ * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * ***************************************************************************/ -import QtQuick 2.0 -import QtQuick.Controls 1.3 as QtControls -import QtQuick.Layouts 1.0 as QtLayouts +import QtQuick 2.15 +import QtQuick.Controls +import QtQuick.Layouts -Column { +ColumnLayout { anchors.fill: parent property var textProvider - QtControls.TabView { - height: parent.height + TabBar { + id: bar width: parent.width + TabButton { + text: i18n("About") + } + TabButton { + text: i18n("Acknowledgment") + } + } - QtControls.Tab { - anchors.margins: 10.0 - title: i18n("About") + StackLayout { + width: parent.width + currentIndex: bar.currentIndex - QtLayouts.ColumnLayout { - QtControls.Label { - QtLayouts.Layout.fillWidth: true - horizontalAlignment: Text.AlignHCenter - text: textProvider.getAboutText("header") - } + ColumnLayout { + Label { + Layout.fillWidth: true + horizontalAlignment: Text.AlignHCenter + text: textProvider.getAboutText("header") + } - QtControls.Label { - QtLayouts.Layout.fillWidth: true - horizontalAlignment: Text.AlignHCenter - text: textProvider.getAboutText("version") - } + Label { + Layout.fillWidth: true + horizontalAlignment: Text.AlignHCenter + text: textProvider.getAboutText("version") + } - QtControls.Label { - QtLayouts.Layout.fillWidth: true - horizontalAlignment: Text.AlignJustify - text: textProvider.getAboutText("description") - } + Label { + Layout.fillWidth: true + horizontalAlignment: Text.AlignJustify + text: textProvider.getAboutText("description") + } - QtControls.Label { - QtLayouts.Layout.fillWidth: true - horizontalAlignment: Text.AlignLeft - textFormat: Text.RichText - text: textProvider.getAboutText("links") - onLinkActivated: Qt.openUrlExternally(link) - } + Label { + Layout.fillWidth: true + horizontalAlignment: Text.AlignLeft + textFormat: Text.RichText + text: textProvider.getAboutText("links") + onLinkActivated: Qt.openUrlExternally(link) + } - QtControls.Label { - QtLayouts.Layout.fillHeight: true - QtLayouts.Layout.fillWidth: true - font.capitalization: Font.SmallCaps - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignBottom - textFormat: Text.RichText - text: textProvider.getAboutText("copy") - } + Label { + Layout.fillHeight: true + Layout.fillWidth: true + font.capitalization: Font.SmallCaps + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignBottom + textFormat: Text.RichText + text: textProvider.getAboutText("copy") } } - QtControls.Tab { - anchors.margins: 10.0 - title: i18n("Acknowledgment") - - QtLayouts.ColumnLayout { - QtControls.Label { - QtLayouts.Layout.fillWidth: true + ColumnLayout { + Label { + Layout.fillWidth: true wrapMode: Text.WordWrap horizontalAlignment: Text.AlignJustify text: textProvider.getAboutText("translators") } - QtControls.Label { - QtLayouts.Layout.fillWidth: true + Label { + Layout.fillWidth: true wrapMode: Text.WordWrap horizontalAlignment: Text.AlignJustify textFormat: Text.RichText @@ -93,9 +95,9 @@ Column { onLinkActivated: Qt.openUrlExternally(link) } - QtControls.Label { - QtLayouts.Layout.fillHeight: true - QtLayouts.Layout.fillWidth: true + Label { + Layout.fillHeight: true + Layout.fillWidth: true wrapMode: Text.WordWrap horizontalAlignment: Text.AlignJustify verticalAlignment: Text.AlignTop @@ -104,6 +106,5 @@ Column { onLinkActivated: Qt.openUrlExternally(link) } } - } } } diff --git a/sources/qml/BugReport.qml b/sources/qml/BugReport.qml index 50b80d7..aebaa95 100644 --- a/sources/qml/BugReport.qml +++ b/sources/qml/BugReport.qml @@ -15,15 +15,15 @@ * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * ***************************************************************************/ -import QtQuick 2.0 -import QtQuick.Controls 1.3 as QtControls -import QtQuick.Dialogs 1.2 as QtDialogs -import QtQuick.Layouts 1.2 as QtLayouts +import QtQuick 2.15 +import QtQuick.Controls +import QtQuick.Dialogs +import QtQuick.Layouts import org.kde.plasma.private.awesomewidget 1.0 -QtDialogs.Dialog { +Dialog { id: reportDialog AWActions { id: awActions @@ -38,85 +38,85 @@ QtDialogs.Dialog { title: i18n("Report a bug") - standardButtons: QtDialogs.StandardButton.Ok | QtDialogs.StandardButton.Cancel | QtDialogs.StandardButton.Reset + standardButtons: DialogButtonBox.Ok | DialogButtonBox.Cancel | DialogButtonBox.Reset - QtLayouts.ColumnLayout { + ColumnLayout { anchors.fill: parent - QtControls.TextField { + TextField { id: title - QtLayouts.Layout.fillWidth: true + Layout.fillWidth: true placeholderText: i18n("Report subject") } - QtLayouts.ColumnLayout { - QtLayouts.Layout.fillWidth: true + ColumnLayout { + Layout.fillWidth: true - QtControls.GroupBox { - QtLayouts.Layout.fillWidth: true + GroupBox { + Layout.fillWidth: true height: parent.height / 5 title: i18n("Description") - QtControls.TextArea { + TextArea { id: description anchors.fill: parent textFormat: TextEdit.PlainText } } - QtControls.GroupBox { - QtLayouts.Layout.fillWidth: true + GroupBox { + Layout.fillWidth: true height: parent.height / 5 title: i18n("Steps to reproduce") - QtControls.TextArea { + TextArea { id: reproduce anchors.fill: parent textFormat: TextEdit.PlainText } } - QtControls.GroupBox { - QtLayouts.Layout.fillWidth: true + GroupBox { + Layout.fillWidth: true height: parent.height / 5 title: i18n("Expected result") - QtControls.TextArea { + TextArea { id: expected anchors.fill: parent textFormat: TextEdit.PlainText } } - QtControls.GroupBox { - QtLayouts.Layout.fillWidth: true - QtLayouts.Layout.alignment: Qt.AlignBottom + GroupBox { + Layout.fillWidth: true + Layout.alignment: Qt.AlignBottom title: i18n("Logs") - QtLayouts.ColumnLayout { + ColumnLayout { anchors.fill: parent - QtLayouts.Layout.fillWidth: true + Layout.fillWidth: true Row { - QtLayouts.Layout.fillWidth: true - QtControls.Label { + Layout.fillWidth: true + Label { width: parent.width * 2 / 5 horizontalAlignment: Text.AlignJustify verticalAlignment: Text.AlignVCenter wrapMode: Text.WordWrap text: i18n("Use command") } - QtControls.TextField { + TextField { width: parent.width * 3 / 5 readOnly: true text: "QT_LOGGING_RULES=*=true plasmawindowed org.kde.plasma.awesomewidget" } } - QtControls.Button { - QtLayouts.Layout.fillWidth: true + Button { + Layout.fillWidth: true text: i18n("Load log file") onClicked: logPath.open() } - QtControls.TextArea { + TextArea { id: logBody - QtLayouts.Layout.fillWidth: true - QtLayouts.Layout.alignment: Qt.AlignBottom + Layout.fillWidth: true + Layout.alignment: Qt.AlignBottom textFormat: TextEdit.PlainText } } - QtDialogs.FileDialog { + FileDialog { id: logPath title: i18n("Open log file") onAccepted: diff --git a/sources/qml/ButtonSelector.qml b/sources/qml/ButtonSelector.qml index 854bda5..8656f8f 100644 --- a/sources/qml/ButtonSelector.qml +++ b/sources/qml/ButtonSelector.qml @@ -15,28 +15,27 @@ * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * ***************************************************************************/ -import QtQuick 2.0 -import QtQuick.Controls 1.3 as QtControls +import QtQuick 2.15 +import QtQuick.Controls Row { - height: implicitHeight width: parent.width property alias text: label.text property alias value: button.text - property alias style: button.style + property alias background: button.background signal buttonActivated - QtControls.Label { + Label { id: label height: parent.height width: parent.width * 2 / 5 horizontalAlignment: Text.AlignRight verticalAlignment: Text.AlignVCenter } - QtControls.Button { + Button { id: button width: parent.width * 3 / 5 onClicked: buttonActivated() diff --git a/sources/qml/CMakeLists.txt b/sources/qml/CMakeLists.txt index 1834fef..29a6c95 100644 --- a/sources/qml/CMakeLists.txt +++ b/sources/qml/CMakeLists.txt @@ -9,4 +9,4 @@ configure_file(${SUBPROJECT_QMLDIR_IN} ${CMAKE_CURRENT_SOURCE_DIR}/../awesome-wi configure_file(${SUBPROJECT_QMLDIR_IN} ${CMAKE_CURRENT_SOURCE_DIR}/../desktop-panel/package/contents/ui/qmldir) # install -install(FILES ${SUBPROJECT_SOURCE} DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME}/qml) +install(FILES ${SUBPROJECT_SOURCE} DESTINATION ${KDE_INSTALL_FULL_DATADIR}/${PROJECT_NAME}/qml) diff --git a/sources/qml/CheckBoxSelector.qml b/sources/qml/CheckBoxSelector.qml index e9b265c..64e1dda 100644 --- a/sources/qml/CheckBoxSelector.qml +++ b/sources/qml/CheckBoxSelector.qml @@ -15,8 +15,8 @@ * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * ***************************************************************************/ -import QtQuick 2.0 -import QtQuick.Controls 1.3 as QtControls +import QtQuick 2.15 +import QtQuick.Controls Row { @@ -26,11 +26,11 @@ Row { property alias text: checkBox.text property alias checked: checkBox.checked - QtControls.Label { + Label { height: parent.heigth width: parent.width * 2 / 5 } - QtControls.CheckBox { + CheckBox { id: checkBox width: parent.width * 3 / 5 } diff --git a/sources/qml/ColorSelector.qml b/sources/qml/ColorSelector.qml index 1ecaac0..1c48ed6 100644 --- a/sources/qml/ColorSelector.qml +++ b/sources/qml/ColorSelector.qml @@ -15,32 +15,22 @@ * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * ***************************************************************************/ -import QtQuick 2.0 -import QtQuick.Controls.Styles 1.3 as QtStyles -import QtQuick.Dialogs 1.1 as QtDialogs +import QtQuick 2.15 +import QtQuick.Dialogs -Row { - height: implicitHeight - width: parent.width +ButtonSelector { + // TODO somehow doesn't work + // background: Rectangle { + // color: value + // } - property alias text: selector.text - property alias value: selector.value + onButtonActivated: colorDialog.visible = true - ButtonSelector { - id: selector - style: QtStyles.ButtonStyle { - background: Rectangle { - color: value - } - } - onButtonActivated: colorDialog.visible = true - } - - QtDialogs.ColorDialog { + ColorDialog { id: colorDialog title: i18n("Select a color") - color: value - onAccepted: value = colorDialog.color + selectedColor: value + onAccepted: value = selectedColor } } diff --git a/sources/qml/ComboBoxSelector.qml b/sources/qml/ComboBoxSelector.qml index 19929d4..824f89b 100644 --- a/sources/qml/ComboBoxSelector.qml +++ b/sources/qml/ComboBoxSelector.qml @@ -15,8 +15,8 @@ * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * ***************************************************************************/ -import QtQuick 2.0 -import QtQuick.Controls 1.3 as QtControls +import QtQuick 2.15 +import QtQuick.Controls Row { @@ -32,14 +32,14 @@ Row { signal valueEdited(string newValue) - QtControls.Label { + Label { id: label height: parent.height width: parent.width * 2 / 5 horizontalAlignment: Text.AlignRight verticalAlignment: Text.AlignVCenter } - QtControls.ComboBox { + ComboBox { id: comboBox width: parent.width * 3 / 5 textRole: 'label' @@ -47,7 +47,7 @@ Row { Component.onCompleted: { var total = comboBox.model.length for (var i = 0; i < total; i++) { - if (comboBox.model[i]["name"] == value) + if (comboBox.model[i]["name"] === value) comboBox.currentIndex = i } } diff --git a/sources/qml/ExportDialog.qml b/sources/qml/ExportDialog.qml index db136d5..63a47d0 100644 --- a/sources/qml/ExportDialog.qml +++ b/sources/qml/ExportDialog.qml @@ -15,8 +15,8 @@ * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * ***************************************************************************/ -import QtQuick 2.0 -import QtQuick.Dialogs 1.2 as QtDialogs +import QtQuick 2.15 +import QtQuick.Dialogs import org.kde.plasma.private.awesomewidget 1.0 @@ -28,16 +28,15 @@ Item { id: awConfig } - QtDialogs.MessageDialog { + MessageDialog { id: messageDialog - standardButtons: QtDialogs.StandardButton.Ok } - QtDialogs.FileDialog { + FileDialog { id: fileDialog - selectExisting: false + fileMode: FileDialog.SaveFile title: i18n("Export") - folder: awConfig.configurationDirectory() + currentFolder: awConfig.configurationDirectory() onAccepted: { var status = awConfig.exportConfiguration( configuration, diff --git a/sources/qml/FontSelector.qml b/sources/qml/FontSelector.qml index aed4731..cbf656e 100644 --- a/sources/qml/FontSelector.qml +++ b/sources/qml/FontSelector.qml @@ -15,8 +15,8 @@ * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * ***************************************************************************/ -import QtQuick 2.0 -import QtQuick.Dialogs 1.1 as QtDialogs +import QtQuick 2.15 +import QtQuick.Dialogs Row { @@ -35,15 +35,15 @@ Row { } } - QtDialogs.FontDialog { + FontDialog { id: fontDialog title: i18n("Select a font") signal setFont - onAccepted: value = fontDialog.font.family + onAccepted: value = selectedFont.family onSetFont: { - fontDialog.font = Qt.font({ + selectedFont = Qt.font({ family: value, pointSize: 12, italic: false, diff --git a/sources/qml/General.qml b/sources/qml/General.qml index 32885cf..a65ac13 100644 --- a/sources/qml/General.qml +++ b/sources/qml/General.qml @@ -16,8 +16,10 @@ ***************************************************************************/ pragma Singleton -import QtQuick 2.0 +import QtQuick 2.15 +// required by i18n functions +import org.kde.plasma.core as PlasmaCore QtObject { property variant fontWeight: { diff --git a/sources/qml/HtmlDefaultFunctionsBar.qml b/sources/qml/HtmlDefaultFunctionsBar.qml index 97cee45..8858779 100644 --- a/sources/qml/HtmlDefaultFunctionsBar.qml +++ b/sources/qml/HtmlDefaultFunctionsBar.qml @@ -15,7 +15,7 @@ * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * ***************************************************************************/ -import QtQuick 2.2 +import QtQuick 2.15 Row { @@ -41,35 +41,35 @@ Row { // new line HtmlEditorButton { width: parent.width / 15 - iconName: "format-indent-more" + icon.name: "format-indent-more" textField: textArea end: "
\n" } // font properties HtmlEditorButton { width: parent.width / 15 - iconName: "format-text-bold" + icon.name: "format-text-bold" textField: textArea start: "" end: "" } HtmlEditorButton { width: parent.width / 15 - iconName: "format-text-italic" + icon.name: "format-text-italic" textField: textArea start: "" end: "" } HtmlEditorButton { width: parent.width / 15 - iconName: "format-text-underline" + icon.name: "format-text-underline" textField: textArea start: "" end: "" } HtmlEditorButton { width: parent.width / 15 - iconName: "format-text-strikethrough" + icon.name: "format-text-strikethrough" textField: textArea start: "" end: "" @@ -78,28 +78,28 @@ Row { // indentation HtmlEditorButton { width: parent.width / 15 - iconName: "format-justify-left" + icon.name: "format-justify-left" textField: textArea start: "

" end: "

" } HtmlEditorButton { width: parent.width / 15 - iconName: "format-justify-center" + icon.name: "format-justify-center" textField: textArea start: "

" end: "

" } HtmlEditorButton { width: parent.width / 15 - iconName: "format-justify-right" + icon.name: "format-justify-right" textField: textArea start: "

" end: "

" } HtmlEditorButton { width: parent.width / 15 - iconName: "format-justify-fill" + icon.name: "format-justify-fill" textField: textArea start: "

" end: "

" diff --git a/sources/qml/HtmlEditorButton.qml b/sources/qml/HtmlEditorButton.qml index b5c17ed..d338db6 100644 --- a/sources/qml/HtmlEditorButton.qml +++ b/sources/qml/HtmlEditorButton.qml @@ -15,11 +15,11 @@ * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * ***************************************************************************/ -import QtQuick 2.2 -import QtQuick.Controls 1.3 as QtControls +import QtQuick 2.15 +import QtQuick.Controls -QtControls.Button { +Button { // parent object in which text will be replaced property var textField // start and end tags diff --git a/sources/qml/HtmlEditorColor.qml b/sources/qml/HtmlEditorColor.qml index 45365dc..71100c8 100644 --- a/sources/qml/HtmlEditorColor.qml +++ b/sources/qml/HtmlEditorColor.qml @@ -15,8 +15,8 @@ * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * ***************************************************************************/ -import QtQuick 2.2 -import QtQuick.Dialogs 1.1 as QtDialogs +import QtQuick 2.15 +import QtQuick.Dialogs HtmlEditorButton { @@ -24,7 +24,7 @@ HtmlEditorButton { clickedEvent: function() { return colorDialog.open() } - QtDialogs.ColorDialog { + ColorDialog { id: colorDialog title: i18n("Select a color") diff --git a/sources/qml/HtmlEditorFont.qml b/sources/qml/HtmlEditorFont.qml index 590a172..b91c970 100644 --- a/sources/qml/HtmlEditorFont.qml +++ b/sources/qml/HtmlEditorFont.qml @@ -15,14 +15,14 @@ * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * ***************************************************************************/ -import QtQuick 2.2 +import QtQuick 2.15 import org.kde.plasma.private.awesomewidget 1.0 HtmlEditorButton { end: "" - iconName: "font" + icon.name: "font" text: i18n("Font") // backend diff --git a/sources/qml/ImportDialog.qml b/sources/qml/ImportDialog.qml index 0ebdaad..2db79c5 100644 --- a/sources/qml/ImportDialog.qml +++ b/sources/qml/ImportDialog.qml @@ -15,9 +15,9 @@ * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * ***************************************************************************/ -import QtQuick 2.0 -import QtQuick.Controls 1.3 as QtControls -import QtQuick.Dialogs 1.2 as QtDialogs +import QtQuick 2.15 +import QtQuick.Controls +import QtQuick.Dialogs import org.kde.plasma.private.awesomewidget 1.0 @@ -29,28 +29,28 @@ Item { signal configurationReceived(var configuration) - QtDialogs.FileDialog { + FileDialog { id: fileDialog title: i18n("Import") - folder: awConfig.configurationDirectory() + currentFolder: awConfig.configurationDirectory() onAccepted: importSelection.open() } - QtDialogs.Dialog { + Dialog { id: importSelection Column { - QtControls.CheckBox { + CheckBox { id: importPlasmoid text: i18n("Import plasmoid settings") } - QtControls.CheckBox { + CheckBox { id: importExtensions text: i18n("Import extensions") } - QtControls.CheckBox { + CheckBox { id: importAdds text: i18n("Import additional files") } diff --git a/sources/qml/IntegerSelector.qml b/sources/qml/IntegerSelector.qml index dea9443..dfad501 100644 --- a/sources/qml/IntegerSelector.qml +++ b/sources/qml/IntegerSelector.qml @@ -15,8 +15,8 @@ * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * ***************************************************************************/ -import QtQuick 2.0 -import QtQuick.Controls 1.3 as QtControls +import QtQuick 2.15 +import QtQuick.Controls Row { @@ -26,22 +26,22 @@ Row { property alias text: label.text property alias value: spinBox.value - property alias maximumValue: spinBox.maximumValue - property alias minimumValue: spinBox.minimumValue + property alias maximumValue: spinBox.to + property alias minimumValue: spinBox.from property alias stepSize: spinBox.stepSize signal valueEdited(int newValue) - QtControls.Label { + Label { id: label height: parent.height width: parent.width * 2 / 5 horizontalAlignment: Text.AlignRight verticalAlignment: Text.AlignVCenter } - QtControls.SpinBox { + SpinBox { id: spinBox width: parent.width * 3 / 5 - onEditingFinished: valueEdited(spinBox.value) + onValueModified: valueEdited(spinBox.value) } } diff --git a/sources/qml/LineSelector.qml b/sources/qml/LineSelector.qml index ab21728..436bef4 100644 --- a/sources/qml/LineSelector.qml +++ b/sources/qml/LineSelector.qml @@ -15,8 +15,8 @@ * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * ***************************************************************************/ -import QtQuick 2.0 -import QtQuick.Controls 1.3 as QtControls +import QtQuick 2.15 +import QtQuick.Controls Row { @@ -28,14 +28,14 @@ Row { signal valueEdited(string newValue) - QtControls.Label { + Label { id: label height: parent.height width: parent.width * 2 / 5 horizontalAlignment: Text.AlignRight verticalAlignment: Text.AlignVCenter } - QtControls.TextField { + TextField { id: textField width: parent.width * 3 / 5 onEditingFinished: valueEdited(textField.text) diff --git a/sources/qml/qmldir.in b/sources/qml/qmldir.in index ea537a8..9930b15 100644 --- a/sources/qml/qmldir.in +++ b/sources/qml/qmldir.in @@ -3,25 +3,25 @@ # common QML constants -singleton General 1.0 file://@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/qml/General.qml +singleton General 1.0 file://@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/qml/General.qml # custom QML UI classes -AboutTab file://@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/qml/AboutTab.qml -AWExtensions file://@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/qml/AWExtensions.qml -AWInfoLabel file://@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/qml/AWInfoLabel.qml -AWTagSelector file://@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/qml/AWTagSelector.qml -AWTextEditor file://@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/qml/AWTextEditor.qml -BugReport file://@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/qml/BugReport.qml -ButtonSelector file://@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/qml/ButtonSelector.qml -CheckBoxSelector file://@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/qml/CheckBoxSelector.qml -ColorSelector file://@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/qml/ColorSelector.qml -ComboBoxSelector file://@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/qml/ComboBoxSelector.qml -ExportDialog file://@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/qml/ExportDialog.qml -FontSelector file://@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/qml/FontSelector.qml -HtmlDefaultFunctionsBar file://@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/qml/HtmlDefaultFunctionsBar.qml -HtmlEditorButton file://@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/qml/HtmlEditorButton.qml -HtmlEditorColor file://@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/qml/HtmlEditorColor.qml -HtmlEditorFont file://@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/qml/HtmlEditorFont.qml -ImportDialog file://@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/qml/ImportDialog.qml -IntegerSelector file://@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/qml/IntegerSelector.qml -LineSelector file://@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/qml/LineSelector.qml +AboutTab file://@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/qml/AboutTab.qml +AWExtensions file://@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/qml/AWExtensions.qml +AWInfoLabel file://@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/qml/AWInfoLabel.qml +AWTagSelector file://@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/qml/AWTagSelector.qml +AWTextEditor file://@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/qml/AWTextEditor.qml +BugReport file://@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/qml/BugReport.qml +ButtonSelector file://@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/qml/ButtonSelector.qml +CheckBoxSelector file://@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/qml/CheckBoxSelector.qml +ColorSelector file://@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/qml/ColorSelector.qml +ComboBoxSelector file://@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/qml/ComboBoxSelector.qml +ExportDialog file://@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/qml/ExportDialog.qml +FontSelector file://@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/qml/FontSelector.qml +HtmlDefaultFunctionsBar file://@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/qml/HtmlDefaultFunctionsBar.qml +HtmlEditorButton file://@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/qml/HtmlEditorButton.qml +HtmlEditorColor file://@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/qml/HtmlEditorColor.qml +HtmlEditorFont file://@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/qml/HtmlEditorFont.qml +ImportDialog file://@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/qml/ImportDialog.qml +IntegerSelector file://@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/qml/IntegerSelector.qml +LineSelector file://@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/qml/LineSelector.qml From 42c11a6b60df9af6fd53c788bca37d8bd05a4560 Mon Sep 17 00:00:00 2001 From: Evgenii Alekseev Date: Fri, 15 Mar 2024 18:01:03 +0200 Subject: [PATCH 04/10] port dataengin --- .../plugin/awdataengineaggregator.cpp | 2 +- .../plugin/awdataengineaggregator.h | 4 +- .../plugin/awdataenginemapper.cpp | 3 +- sources/awesome-widget/plugin/awkeys.cpp | 22 ++-- sources/awesome-widget/plugin/awkeys.h | 3 +- .../plugin/awkeysaggregator.cpp | 3 +- sources/awesomewidgets/awjsonformatter.cpp | 2 +- sources/extsysmon/CMakeLists.txt | 10 +- sources/extsysmon/extsysmon.cpp | 42 +------ sources/extsysmon/extsysmon.h | 14 +-- sources/extsysmon/extsysmonaggregator.cpp | 110 ++++++----------- sources/extsysmon/extsysmonaggregator.h | 13 +- sources/extsysmon/metadata.json | 3 + .../plasma-dataengine-extsysmon.desktop | 16 --- .../plasma-dataengine-extsysmon.json | 20 --- .../abstractextsysmonsource.h | 7 +- sources/extsysmonsources/batterysource.cpp | 115 +++++++++--------- sources/extsysmonsources/batterysource.h | 2 +- sources/extsysmonsources/customsource.cpp | 16 +-- sources/extsysmonsources/customsource.h | 2 +- sources/extsysmonsources/desktopsource.cpp | 41 +++---- sources/extsysmonsources/desktopsource.h | 2 +- sources/extsysmonsources/extsysmonsensor.cpp | 55 +++++++++ sources/extsysmonsources/extsysmonsensor.h | 41 +++++++ sources/extsysmonsources/gpuloadsource.cpp | 19 +-- sources/extsysmonsources/gpuloadsource.h | 2 +- sources/extsysmonsources/gputempsource.cpp | 18 +-- sources/extsysmonsources/gputempsource.h | 2 +- sources/extsysmonsources/hddtempsource.cpp | 20 +-- sources/extsysmonsources/hddtempsource.h | 2 +- sources/extsysmonsources/loadsource.cpp | 17 +-- sources/extsysmonsources/loadsource.h | 2 +- sources/extsysmonsources/networksource.cpp | 23 ++-- sources/extsysmonsources/networksource.h | 2 +- sources/extsysmonsources/playersource.cpp | 99 +++++++-------- sources/extsysmonsources/playersource.h | 2 +- sources/extsysmonsources/processessource.cpp | 35 +++--- sources/extsysmonsources/processessource.h | 2 +- sources/extsysmonsources/quotessource.cpp | 67 +++++----- sources/extsysmonsources/quotessource.h | 2 +- sources/extsysmonsources/requestsource.cpp | 15 +-- sources/extsysmonsources/requestsource.h | 2 +- sources/extsysmonsources/systeminfosource.cpp | 27 ++-- sources/extsysmonsources/systeminfosource.h | 2 +- sources/extsysmonsources/upgradesource.cpp | 15 +-- sources/extsysmonsources/upgradesource.h | 2 +- sources/extsysmonsources/weathersource.cpp | 63 +++++----- sources/extsysmonsources/weathersource.h | 2 +- sources/libraries.cmake | 2 +- 49 files changed, 490 insertions(+), 502 deletions(-) create mode 100644 sources/extsysmon/metadata.json delete mode 100644 sources/extsysmon/plasma-dataengine-extsysmon.desktop delete mode 100644 sources/extsysmon/plasma-dataengine-extsysmon.json create mode 100644 sources/extsysmonsources/extsysmonsensor.cpp create mode 100644 sources/extsysmonsources/extsysmonsensor.h diff --git a/sources/awesome-widget/plugin/awdataengineaggregator.cpp b/sources/awesome-widget/plugin/awdataengineaggregator.cpp index 03006aa..87b5099 100644 --- a/sources/awesome-widget/plugin/awdataengineaggregator.cpp +++ b/sources/awesome-widget/plugin/awdataengineaggregator.cpp @@ -34,7 +34,7 @@ AWDataEngineAggregator::AWDataEngineAggregator(QObject *_parent) qDBusRegisterMetaType>(); m_interface = new KSysGuard::SystemStats::DBusInterface( - KSysGuard::SystemStats::ServiceName, KSysGuard::SystemStats::ObjectPath, QDBusConnection::sessionBus(), this); + KSysGuard::SystemStats::ServiceName, KSysGuard::SystemStats::ObjectPath, QDBusConnection::sessionBus(), this); connect(m_interface, SIGNAL(newSensorData(KSysGuard::SensorDataList)), this, SLOT(updateData(KSysGuard::SensorDataList))); diff --git a/sources/awesome-widget/plugin/awdataengineaggregator.h b/sources/awesome-widget/plugin/awdataengineaggregator.h index 4799268..f3a1e49 100644 --- a/sources/awesome-widget/plugin/awdataengineaggregator.h +++ b/sources/awesome-widget/plugin/awdataengineaggregator.h @@ -21,14 +21,14 @@ #include -#include #include +#include #include namespace KSysGuard::SystemStats { - class DBusInterface; +class DBusInterface; } diff --git a/sources/awesome-widget/plugin/awdataenginemapper.cpp b/sources/awesome-widget/plugin/awdataenginemapper.cpp index af7f645..7c15e64 100644 --- a/sources/awesome-widget/plugin/awdataenginemapper.cpp +++ b/sources/awesome-widget/plugin/awdataenginemapper.cpp @@ -76,7 +76,8 @@ QStringList AWDataEngineMapper::keysFromSource(const QString &_source) const // HACK units required to define should the value be calculated as temperature // or fan data -QStringList AWDataEngineMapper::registerSource(const QString &_source, const KSysGuard::Unit _units, const QStringList &_keys) +QStringList AWDataEngineMapper::registerSource(const QString &_source, const KSysGuard::Unit _units, + const QStringList &_keys) { qCDebug(LOG_AW) << "Source" << _source << "with units" << _units; diff --git a/sources/awesome-widget/plugin/awkeys.cpp b/sources/awesome-widget/plugin/awkeys.cpp index 422ccf2..cdf3919 100644 --- a/sources/awesome-widget/plugin/awkeys.cpp +++ b/sources/awesome-widget/plugin/awkeys.cpp @@ -65,8 +65,9 @@ AWKeys::AWKeys(QObject *_parent) connect(this, SIGNAL(dropSourceFromDataengine(const QString &)), m_dataEngineAggregator, SLOT(dropSource(const QString &))); - connect(m_dataEngineAggregator, SIGNAL(dataUpdated(const QHash &, const KSysGuard::SensorDataList &)), - this, SLOT(dataUpdated(const QHash &, const KSysGuard::SensorDataList &))); + connect(m_dataEngineAggregator, + SIGNAL(dataUpdated(const QHash &, const KSysGuard::SensorDataList &)), this, + SLOT(dataUpdated(const QHash &, const KSysGuard::SensorDataList &))); // transfer signal from dataengine to update source list connect(m_dataEngineAggregator, SIGNAL(deviceAdded(const QString &)), m_keyOperator, SLOT(addDevice(const QString &))); @@ -210,7 +211,7 @@ void AWKeys::dataUpdated(const QHash &_sensors, setDataBySource(single.sensorProperty, _sensors.value(single.sensorProperty), single); } // TODO use QtConcurrent::map or something like that -// QtConcurrent::run(m_threadPool, this, &AWKeys::setDataBySource, "ss", sensor); + // QtConcurrent::run(m_threadPool, this, &AWKeys::setDataBySource, "ss", sensor); } } @@ -265,10 +266,10 @@ void AWKeys::calculateValues() QStringList mountDevices = m_keyOperator->devices("mount"); for (auto &device : mountDevices) { int index = mountDevices.indexOf(device); - m_values[QString("hddtotmb%1").arg(index)] - = m_values[QString("hddfreemb%1").arg(index)].toDouble() + m_values[QString("hddmb%1").arg(index)].toDouble(); - m_values[QString("hddtotgb%1").arg(index)] - = m_values[QString("hddfreegb%1").arg(index)].toDouble() + m_values[QString("hddgb%1").arg(index)].toDouble(); + m_values[QString("hddtotmb%1").arg(index)] = m_values[QString("hddfreemb%1").arg(index)].toDouble() + + m_values[QString("hddmb%1").arg(index)].toDouble(); + m_values[QString("hddtotgb%1").arg(index)] = m_values[QString("hddfreegb%1").arg(index)].toDouble() + + m_values[QString("hddgb%1").arg(index)].toDouble(); } // memtot* @@ -360,7 +361,8 @@ QString AWKeys::parsePattern(QString _pattern) const } -void AWKeys::setDataBySource(const QString &_source, const KSysGuard::SensorInfo &_sensor, const KSysGuard::SensorData &_data) +void AWKeys::setDataBySource(const QString &_source, const KSysGuard::SensorInfo &_sensor, + const KSysGuard::SensorData &_data) { qCDebug(LOG_AW) << "Source" << _source << _sensor.name << "with data" << _data.payload; @@ -377,8 +379,6 @@ void AWKeys::setDataBySource(const QString &_source, const KSysGuard::SensorInfo m_mutex.lock(); // HACK workaround for time values which are stored in the different path - std::for_each(tags.cbegin(), tags.cend(), [this, &_data](const QString &tag) { - m_values[tag] = _data.payload; - }); + std::for_each(tags.cbegin(), tags.cend(), [this, &_data](const QString &tag) { m_values[tag] = _data.payload; }); m_mutex.unlock(); } diff --git a/sources/awesome-widget/plugin/awkeys.h b/sources/awesome-widget/plugin/awkeys.h index d82071d..5673d78 100644 --- a/sources/awesome-widget/plugin/awkeys.h +++ b/sources/awesome-widget/plugin/awkeys.h @@ -72,7 +72,8 @@ private: void calculateValues(); void createDBusInterface(); [[nodiscard]] QString parsePattern(QString _pattern) const; - void setDataBySource(const QString &_source, const KSysGuard::SensorInfo &_sensor, const KSysGuard::SensorData &_data); + void setDataBySource(const QString &_source, const KSysGuard::SensorInfo &_sensor, + const KSysGuard::SensorData &_data); // objects AWDataAggregator *m_dataAggregator = nullptr; AWDataEngineAggregator *m_dataEngineAggregator = nullptr; diff --git a/sources/awesome-widget/plugin/awkeysaggregator.cpp b/sources/awesome-widget/plugin/awkeysaggregator.cpp index f88a70e..71607c5 100644 --- a/sources/awesome-widget/plugin/awkeysaggregator.cpp +++ b/sources/awesome-widget/plugin/awkeysaggregator.cpp @@ -234,7 +234,8 @@ void AWKeysAggregator::setTranslate(const bool _translate) } -QStringList AWKeysAggregator::registerSource(const QString &_source, const KSysGuard::Unit &_units, const QStringList &_keys) +QStringList AWKeysAggregator::registerSource(const QString &_source, const KSysGuard::Unit &_units, + const QStringList &_keys) { qCDebug(LOG_AW) << "Source" << _source << "with units" << _units; diff --git a/sources/awesomewidgets/awjsonformatter.cpp b/sources/awesomewidgets/awjsonformatter.cpp index 27f3413..e4d2d19 100644 --- a/sources/awesomewidgets/awjsonformatter.cpp +++ b/sources/awesomewidgets/awjsonformatter.cpp @@ -54,7 +54,7 @@ QString AWJsonFormatter::convert(const QVariant &_value) const // check if _value is string and parse first if required QJsonDocument json = _value.userType() == QMetaType::QString ? QJsonDocument::fromJson(_value.toString().toUtf8()) - : QJsonDocument::fromVariant(_value); + : QJsonDocument::fromVariant(_value); QVariant converted = json.toVariant(); for (auto &element : m_splittedPath) converted = getFromJson(converted, element); diff --git a/sources/extsysmon/CMakeLists.txt b/sources/extsysmon/CMakeLists.txt index e7162d6..07b1ba4 100644 --- a/sources/extsysmon/CMakeLists.txt +++ b/sources/extsysmon/CMakeLists.txt @@ -1,4 +1,4 @@ -set(SUBPROJECT plasma_dataengine_extsysmon) +set(SUBPROJECT ksystemstats_plugin_extsysmon) message(STATUS "Subproject ${SUBPROJECT}") add_definitions(-DTRANSLATION_DOMAIN=\"plasma_applet_org.kde.plasma.awesomewidget\") @@ -12,15 +12,10 @@ include_directories( ${Kf6_INCLUDE} ) -file(GLOB SUBPROJECT_DESKTOP_IN *.desktop) -file(RELATIVE_PATH SUBPROJECT_DESKTOP ${CMAKE_SOURCE_DIR} ${SUBPROJECT_DESKTOP_IN}) file(GLOB SUBPROJECT_SOURCE *.cpp ${CMAKE_SOURCE_DIR}/*.cpp) file(GLOB SUBPROJECT_HEADER *.h) file(GLOB SUBPROJECT_CONF *.conf) -# prepare -configure_file(${SUBPROJECT_DESKTOP_IN} ${CMAKE_CURRENT_BINARY_DIR}/${SUBPROJECT_DESKTOP}) - # make add_library(${SUBPROJECT} MODULE ${SUBPROJECT_SOURCE} ${SUBPROJECT_HEADER}) target_link_libraries(${SUBPROJECT} @@ -28,6 +23,5 @@ target_link_libraries(${SUBPROJECT} ${Qt_LIBRARIES} ${Kf6_LIBRARIES}) # install -install(TARGETS ${SUBPROJECT} DESTINATION ${PLUGIN_INSTALL_DIR}/plasma/dataengine) -#install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${SUBPROJECT_DESKTOP} DESTINATION ${SERVICES_INSTALL_DIR}) +install(TARGETS ${SUBPROJECT} DESTINATION ${KDE_INSTALL_PLUGINDIR}/ksystemstats) install(FILES ${SUBPROJECT_CONF} DESTINATION ${KDE_INSTALL_CONFDIR}) diff --git a/sources/extsysmon/extsysmon.cpp b/sources/extsysmon/extsysmon.cpp index e745b44..b55f54b 100644 --- a/sources/extsysmon/extsysmon.cpp +++ b/sources/extsysmon/extsysmon.cpp @@ -17,6 +17,7 @@ #include "extsysmon.h" +#include #include #include #include @@ -29,21 +30,16 @@ ExtendedSysMon::ExtendedSysMon(QObject *_parent, const QVariantList &_args) - : Plasma::DataEngine(_parent, _args) + : KSysGuard::SensorPlugin(_parent, _args) { - Q_UNUSED(_args) qSetMessagePattern(AWDebug::LOG_FORMAT); qCDebug(LOG_ESM) << __PRETTY_FUNCTION__; for (auto &metadata : AWDebug::getBuildData()) qCDebug(LOG_ESM) << metadata; - setMinimumPollingInterval(333); readConfiguration(); - // init aggregator - m_aggregator = new ExtSysMonAggregator(this, m_configuration); - for (auto &source : m_aggregator->sources()) - setData(source, m_aggregator->initialData(source)); + addContainer(new ExtSysMonAggregator("extsysmon", "extsysmon", this, m_configuration)); } @@ -53,35 +49,9 @@ ExtendedSysMon::~ExtendedSysMon() } -QStringList ExtendedSysMon::sources() const +void ExtendedSysMon::update() { - return m_aggregator->sources(); -} - - -bool ExtendedSysMon::sourceRequestEvent(const QString &_source) -{ - qCDebug(LOG_ESM) << "Source" << _source; - - return updateSourceEvent(_source); -} - - -bool ExtendedSysMon::updateSourceEvent(const QString &_source) -{ - qCDebug(LOG_ESM) << "Source" << _source; - - if (m_aggregator->hasSource(_source)) { - QVariant data = m_aggregator->data(_source); - if (data.isNull()) - return false; - setData(_source, "value", data); - } else { - qCWarning(LOG_ESM) << "Unknown source" << _source; - return false; - } - - return true; + // m_aggregator->update(); } @@ -150,6 +120,6 @@ QHash ExtendedSysMon::updateConfiguration(QHash +#include -class ExtSysMonAggregator; - -class ExtendedSysMon : public Plasma::DataEngine +class ExtendedSysMon : public KSysGuard::SensorPlugin { Q_OBJECT @@ -31,14 +29,12 @@ public: explicit ExtendedSysMon(QObject *_parent, const QVariantList &_args); ~ExtendedSysMon() override; -protected: - [[nodiscard]] QStringList sources() const override; - bool sourceRequestEvent(const QString &_source) override; - bool updateSourceEvent(const QString &_source) override; + [[nodiscard]] QString providerName() const override { return QStringLiteral("extsysmon"); } + + void update() override; private: // configuration - ExtSysMonAggregator *m_aggregator = nullptr; QHash m_configuration; // methods void readConfiguration(); diff --git a/sources/extsysmon/extsysmonaggregator.cpp b/sources/extsysmon/extsysmonaggregator.cpp index 0bd5868..0c9ebd1 100644 --- a/sources/extsysmon/extsysmonaggregator.cpp +++ b/sources/extsysmon/extsysmonaggregator.cpp @@ -21,6 +21,7 @@ #include "batterysource.h" #include "customsource.h" #include "desktopsource.h" +#include "extsysmonsensor.h" #include "gpuloadsource.h" #include "gputempsource.h" #include "hddtempsource.h" @@ -35,8 +36,9 @@ #include "weathersource.h" -ExtSysMonAggregator::ExtSysMonAggregator(QObject *_parent, const QHash &_config) - : QObject(_parent) +ExtSysMonAggregator::ExtSysMonAggregator(const QString &_id, const QString &_name, KSysGuard::SensorPlugin *_parent, + const QHash &_config) + : KSysGuard::SensorContainer(_id, _name, _parent) { qCDebug(LOG_ESM) << __PRETTY_FUNCTION__; @@ -44,111 +46,73 @@ ExtSysMonAggregator::ExtSysMonAggregator(QObject *_parent, const QHashdata(_source); -} - - -bool ExtSysMonAggregator::hasSource(const QString &_source) const -{ - qCDebug(LOG_ESM) << "Source" << _source; - - return m_map.contains(_source); -} - - -QVariantMap ExtSysMonAggregator::initialData(const QString &_source) const -{ - qCDebug(LOG_ESM) << "Source" << _source; - - return hasSource(_source) ? m_map[_source]->initialData(_source) : QVariantMap(); -} - - -QStringList ExtSysMonAggregator::sources() const -{ - return m_map.keys(); -} - - void ExtSysMonAggregator::init(const QHash &_config) { qCDebug(LOG_ESM) << "Configuration" << _config; // battery - AbstractExtSysMonSource *batteryItem = new BatterySource(this, QStringList() << _config["ACPIPATH"]); + auto batteryItem = new BatterySource(this, {_config["ACPIPATH"]}); for (auto &source : batteryItem->sources()) - m_map[source] = batteryItem; + addObject(new ExtSysMonSensor(this, source, batteryItem)); // custom - AbstractExtSysMonSource *customItem = new CustomSource(this, QStringList()); + auto customItem = new CustomSource(this, {}); for (auto &source : customItem->sources()) - m_map[source] = customItem; + addObject(new ExtSysMonSensor(this, source, customItem)); // desktop - AbstractExtSysMonSource *desktopItem = new DesktopSource(this, QStringList()); + auto desktopItem = new DesktopSource(this, {}); for (auto &source : desktopItem->sources()) - m_map[source] = desktopItem; + addObject(new ExtSysMonSensor(this, source, desktopItem)); // gpu load - AbstractExtSysMonSource *gpuLoadItem = new GPULoadSource(this, QStringList({_config["GPUDEV"]})); + auto gpuLoadItem = new GPULoadSource(this, {_config["GPUDEV"]}); for (auto &source : gpuLoadItem->sources()) - m_map[source] = gpuLoadItem; + addObject(new ExtSysMonSensor(this, source, gpuLoadItem)); // gpu temperature - AbstractExtSysMonSource *gpuTempItem = new GPUTemperatureSource(this, QStringList({_config["GPUDEV"]})); + auto gpuTempItem = new GPUTemperatureSource(this, {_config["GPUDEV"]}); for (auto &source : gpuTempItem->sources()) - m_map[source] = gpuTempItem; + addObject(new ExtSysMonSensor(this, source, gpuTempItem)); // hdd temperature - AbstractExtSysMonSource *hddTempItem - = new HDDTemperatureSource(this, QStringList({_config["HDDDEV"], _config["HDDTEMPCMD"]})); + auto hddTempItem + = new HDDTemperatureSource(this, {_config["HDDDEV"], _config["HDDTEMPCMD"]}); for (auto &source : hddTempItem->sources()) - m_map[source] = hddTempItem; + addObject(new ExtSysMonSensor(this, source, hddTempItem)); // network - AbstractExtSysMonSource *networkItem = new NetworkSource(this, QStringList()); + auto networkItem = new NetworkSource(this, QStringList()); for (auto &source : networkItem->sources()) - m_map[source] = networkItem; + addObject(new ExtSysMonSensor(this, source, networkItem)); // player - AbstractExtSysMonSource *playerItem - = new PlayerSource(this, QStringList({_config["PLAYER"], _config["MPDADDRESS"], _config["MPDPORT"], - _config["MPRIS"], _config["PLAYERSYMBOLS"]})); + auto playerItem + = new PlayerSource(this, {_config["PLAYER"], _config["MPDADDRESS"], _config["MPDPORT"], + _config["MPRIS"], _config["PLAYERSYMBOLS"]}); for (auto &source : playerItem->sources()) - m_map[source] = playerItem; + addObject(new ExtSysMonSensor(this, source, playerItem)); // processes - AbstractExtSysMonSource *processesItem = new ProcessesSource(this, QStringList()); + auto processesItem = new ProcessesSource(this, {}); for (auto &source : processesItem->sources()) - m_map[source] = processesItem; + addObject(new ExtSysMonSensor(this, source, processesItem)); // network request - AbstractExtSysMonSource *requestItem = new RequestSource(this, QStringList()); + auto requestItem = new RequestSource(this, {}); for (auto &source : requestItem->sources()) - m_map[source] = requestItem; + addObject(new ExtSysMonSensor(this, source, requestItem)); // quotes - AbstractExtSysMonSource *quotesItem = new QuotesSource(this, QStringList()); + auto quotesItem = new QuotesSource(this, {}); for (auto &source : quotesItem->sources()) - m_map[source] = quotesItem; + addObject(new ExtSysMonSensor(this, source, quotesItem)); // system - AbstractExtSysMonSource *systemItem = new SystemInfoSource(this, QStringList()); + auto systemItem = new SystemInfoSource(this, {}); for (auto &source : systemItem->sources()) - m_map[source] = systemItem; + addObject(new ExtSysMonSensor(this, source, systemItem)); // upgrade - AbstractExtSysMonSource *upgradeItem = new UpgradeSource(this, QStringList()); + auto upgradeItem = new UpgradeSource(this, {}); for (auto &source : upgradeItem->sources()) - m_map[source] = upgradeItem; + addObject(new ExtSysMonSensor(this, source, upgradeItem)); // weather - AbstractExtSysMonSource *weatherItem = new WeatherSource(this, QStringList()); + auto weatherItem = new WeatherSource(this, {}); for (auto &source : weatherItem->sources()) - m_map[source] = weatherItem; + addObject(new ExtSysMonSensor(this, source, weatherItem)); #ifdef BUILD_LOAD // additional load source - AbstractExtSysMonSource *loadItem = new LoadSource(this, QStringList()); + auto loadItem = new LoadSource(this, QStringList()); for (auto &source : loadItem->sources()) - m_map[source] = loadItem; + addObject(new ExtSysMonSensor(this, source, loadItem)); #endif /* BUILD_LOAD */ } diff --git a/sources/extsysmon/extsysmonaggregator.h b/sources/extsysmon/extsysmonaggregator.h index d47d216..36b9b86 100644 --- a/sources/extsysmon/extsysmonaggregator.h +++ b/sources/extsysmon/extsysmonaggregator.h @@ -19,25 +19,20 @@ #define EXTSYSMONAGGREGATOR_H #include +#include #include "abstractextsysmonsource.h" - -class ExtSysMonAggregator : public QObject +class ExtSysMonAggregator : public KSysGuard::SensorContainer { Q_OBJECT public: - explicit ExtSysMonAggregator(QObject *_parent, const QHash &_config); - ~ExtSysMonAggregator() override; - [[nodiscard]] QVariant data(const QString &_source) const; - [[nodiscard]] bool hasSource(const QString &_source) const; - [[nodiscard]] QVariantMap initialData(const QString &_source) const; - [[nodiscard]] QStringList sources() const; + explicit ExtSysMonAggregator(const QString &_id, const QString &_name, KSysGuard::SensorPlugin *_parent, + const QHash &_config); private: void init(const QHash &_config); - QHash m_map; }; diff --git a/sources/extsysmon/metadata.json b/sources/extsysmon/metadata.json new file mode 100644 index 0000000..94f3ae3 --- /dev/null +++ b/sources/extsysmon/metadata.json @@ -0,0 +1,3 @@ +{ + "providerName": "extsysmon" +} diff --git a/sources/extsysmon/plasma-dataengine-extsysmon.desktop b/sources/extsysmon/plasma-dataengine-extsysmon.desktop deleted file mode 100644 index 19664fb..0000000 --- a/sources/extsysmon/plasma-dataengine-extsysmon.desktop +++ /dev/null @@ -1,16 +0,0 @@ -[Desktop Entry] -Encoding=UTF-8 -Name=Extended SystemMonitor -Comment=Adds some additional functions to System DataEngine -ServiceTypes=Plasma/DataEngine -Type=Service -Icon=utilities-system-monitor - -X-KDE-Library=plasma_dataengine_extsysmon - -X-KDE-PluginInfo-Author=Evgeniy Alekseev aka arcanis -X-KDE-PluginInfo-Email=esalexeev@gmail.com -X-KDE-PluginInfo-Name=extsysmon -X-KDE-PluginInfo-Version=@PROJECT_VERSION@ -X-KDE-PluginInfo-Category=System Information -X-KDE-PluginInfo-License=GPL3 diff --git a/sources/extsysmon/plasma-dataengine-extsysmon.json b/sources/extsysmon/plasma-dataengine-extsysmon.json deleted file mode 100644 index 9e5441e..0000000 --- a/sources/extsysmon/plasma-dataengine-extsysmon.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "KPlugin": { - "Authors": [ - { - "Email": "esalexeev@gmail.com", - "Name": "Evgeniy Alekseev aka arcanis" - } - ], - "Category": "System Information", - "Description": "Adds some additional functions to System DataEngine", - "Icon": "utilities-system-monitor", - "Id": "extsysmon", - "License": "GPL3", - "Name": "Extended SystemMonitor", - "ServiceTypes": [ - "Plasma/DataEngine" - ], - "Version": "@PROJECT_VERSION@" - } -} diff --git a/sources/extsysmonsources/abstractextsysmonsource.h b/sources/extsysmonsources/abstractextsysmonsource.h index 72e6467..4e6e2f9 100644 --- a/sources/extsysmonsources/abstractextsysmonsource.h +++ b/sources/extsysmonsources/abstractextsysmonsource.h @@ -23,6 +23,11 @@ #include +namespace KSysGuard +{ +class SensorInfo; +} + class AbstractExtSysMonSource : public QObject { Q_OBJECT @@ -32,7 +37,7 @@ public: : QObject(_parent){}; ~AbstractExtSysMonSource() override = default; virtual QVariant data(const QString &_source) = 0; - [[nodiscard]] virtual QVariantMap initialData(const QString &_source) const = 0; + [[nodiscard]] virtual KSysGuard::SensorInfo *initialData(const QString &_source) const = 0; virtual void run() = 0; [[nodiscard]] virtual QStringList sources() const = 0; // used by extensions diff --git a/sources/extsysmonsources/batterysource.cpp b/sources/extsysmonsources/batterysource.cpp index a424f79..53e8552 100644 --- a/sources/extsysmonsources/batterysource.cpp +++ b/sources/extsysmonsources/batterysource.cpp @@ -18,6 +18,9 @@ #include "batterysource.h" +#include +#include + #include #include @@ -84,77 +87,75 @@ QVariant BatterySource::data(const QString &_source) } -QVariantMap BatterySource::initialData(const QString &_source) const +KSysGuard::SensorInfo *BatterySource::initialData(const QString &_source) const { qCDebug(LOG_ESS) << "Source" << _source; - QVariantMap data; + auto data = new KSysGuard::SensorInfo(); if (_source == "battery/ac") { - data["min"] = false; - data["max"] = true; - data["name"] = "Is AC online or not"; - data["type"] = "bool"; - data["units"] = ""; + data->name = "Is AC online or not"; + data->variantType = QVariant::Bool; + data->unit = KSysGuard::UnitNone; } else if (_source == "battery/bat") { - data["min"] = 0; - data["max"] = 100; - data["name"] = "Average battery usage"; - data["type"] = "integer"; - data["units"] = "%"; + data->min = 0; + data->max = 100; + data->name = "Average battery usage"; + data->variantType = QVariant::Int; + data->unit = KSysGuard::UnitPercent; } else if (_source == "battery/batleft") { - data["min"] = 0; - data["max"] = 0; - data["name"] = "Battery discharge time"; - data["type"] = "integer"; - data["units"] = "s"; + data->min = 0; + data->max = 0; + data->name = "Battery discharge time"; + data->variantType = QVariant::Int; + data->unit = KSysGuard::UnitSecond; } else if (_source == "battery/batnow") { - data["min"] = 0; - data["max"] = 0; - data["name"] = "Current battery capacity"; - data["type"] = "integer"; - data["units"] = ""; + data->min = 0; + data->max = 0; + data->name = "Current battery capacity"; + data->variantType = QVariant::Int; + data->unit = KSysGuard::UnitNone; } else if (_source == "battery/batrate") { - data["min"] = 0; - data["max"] = 0; - data["name"] = "Average battery discharge rate"; - data["type"] = "float"; - data["units"] = "1/s"; + data->min = 0; + data->max = 0; + data->name = "Average battery discharge rate"; + data->variantType = QVariant::Double; + data->unit = KSysGuard::UnitRate; } else if (_source == "battery/battotal") { - data["min"] = 0; - data["max"] = 0; - data["name"] = "Full battery capacity"; - data["type"] = "integer"; - data["units"] = ""; + data->min = 0; + data->max = 0; + data->name = "Full battery capacity"; + data->variantType = QVariant::Int; + data->unit = KSysGuard::UnitNone; } else if (_source.startsWith("battery/batleft")) { - data["min"] = 0; - data["max"] = 0; - data["name"] = QString("Battery %1 discharge time").arg(index(_source)); - data["type"] = "integer"; - data["units"] = "s"; + data->min = 0; + data->max = 0; + data->name = QString("Battery %1 discharge time").arg(index(_source)); + data->variantType = QVariant::Int; + data->unit = KSysGuard::UnitSecond; } else if (_source.startsWith("battery/batnow")) { - data["min"] = 0; - data["max"] = 0; - data["name"] = QString("Battery %1 capacity").arg(index(_source)); - data["type"] = "integer"; - data["units"] = ""; + data->min = 0; + data->max = 0; + data->name = QString("Battery %1 capacity").arg(index(_source)); + data->variantType = QVariant::Int; + data->unit = KSysGuard::UnitNone; } else if (_source.startsWith("battery/battotal")) { - data["min"] = 0; - data["max"] = 0; - data["name"] = QString("Battery %1 full capacity").arg(index(_source)); - data["type"] = "integer"; - data["units"] = ""; + data->min = 0; + data->max = 0; + data->name = QString("Battery %1 full capacity").arg(index(_source)); + data->variantType = QVariant::Int; + data->unit = KSysGuard::UnitNone; } else if (_source.startsWith("battery/batrate")) { - data["min"] = 0; - data["max"] = 0; - data["name"] = QString("Battery %1 discharge rate").arg(index(_source)); - data["type"] = "float"; - data["units"] = "1/s"; + data->min = 0; + data->max = 0; + data->name = QString("Battery %1 discharge rate").arg(index(_source)); + data->variantType = QVariant::Double; + data->unit = KSysGuard::UnitRate; } else if (_source.startsWith("battery/bat")) { - data["min"] = 0; - data["max"] = 100; - data["name"] = QString("Battery %1 usage").arg(index(_source)); - data["type"] = "integer"; - data["units"] = "%"; + data->min = 0; + data->max = 100; + data->name = QString("Battery %1 usage").arg(index(_source)); + data->variantType = QVariant::Int; + data->unit = KSysGuard::UnitPercent; } return data; diff --git a/sources/extsysmonsources/batterysource.h b/sources/extsysmonsources/batterysource.h index 23b3a34..938ed6c 100644 --- a/sources/extsysmonsources/batterysource.h +++ b/sources/extsysmonsources/batterysource.h @@ -35,7 +35,7 @@ public: ~BatterySource() override; QStringList getSources(); QVariant data(const QString &_source) override; - [[nodiscard]] QVariantMap initialData(const QString &_source) const override; + [[nodiscard]] KSysGuard::SensorInfo *initialData(const QString &_source) const override; void run() override; [[nodiscard]] QStringList sources() const override; diff --git a/sources/extsysmonsources/customsource.cpp b/sources/extsysmonsources/customsource.cpp index a4af21b..f6b689f 100644 --- a/sources/extsysmonsources/customsource.cpp +++ b/sources/extsysmonsources/customsource.cpp @@ -15,9 +15,11 @@ * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * ***************************************************************************/ - #include "customsource.h" +#include +#include + #include "awdebug.h" #include "extscript.h" @@ -49,16 +51,14 @@ QVariant CustomSource::data(const QString &_source) } -QVariantMap CustomSource::initialData(const QString &_source) const +KSysGuard::SensorInfo *CustomSource::initialData(const QString &_source) const { qCDebug(LOG_ESS) << "Source" << _source; - QVariantMap data; - data["min"] = ""; - data["max"] = ""; - data["name"] = QString("Custom command '%1' output").arg(m_extScripts->itemByTagNumber(index(_source))->uniq()); - data["type"] = "QString"; - data["units"] = ""; + auto data = new KSysGuard::SensorInfo(); + data->name = QString("Custom command '%1' output").arg(m_extScripts->itemByTagNumber(index(_source))->uniq()); + data->variantType = QVariant::String; + data->unit = KSysGuard::UnitNone; return data; } diff --git a/sources/extsysmonsources/customsource.h b/sources/extsysmonsources/customsource.h index c7e921d..4e0142d 100644 --- a/sources/extsysmonsources/customsource.h +++ b/sources/extsysmonsources/customsource.h @@ -34,7 +34,7 @@ public: explicit CustomSource(QObject *_parent, const QStringList &_args); ~CustomSource() override; QVariant data(const QString &_source) override; - [[nodiscard]] QVariantMap initialData(const QString &_source) const override; + [[nodiscard]] KSysGuard::SensorInfo *initialData(const QString &_source) const override; void run() override{}; [[nodiscard]] QStringList sources() const override; diff --git a/sources/extsysmonsources/desktopsource.cpp b/sources/extsysmonsources/desktopsource.cpp index 871dd15..a301118 100644 --- a/sources/extsysmonsources/desktopsource.cpp +++ b/sources/extsysmonsources/desktopsource.cpp @@ -15,10 +15,11 @@ * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * ***************************************************************************/ - #include "desktopsource.h" #include +#include +#include #include #include "awdebug.h" @@ -64,35 +65,29 @@ QVariant DesktopSource::data(const QString &_source) } -QVariantMap DesktopSource::initialData(const QString &_source) const +KSysGuard::SensorInfo *DesktopSource::initialData(const QString &_source) const { qCDebug(LOG_ESS) << "Source" << _source; - QVariantMap data; + auto data = new KSysGuard::SensorInfo(); if (_source == "desktop/current/name") { - data["min"] = ""; - data["max"] = ""; - data["name"] = "Current desktop name"; - data["type"] = "QString"; - data["units"] = ""; + data->name = "Current desktop name"; + data->variantType = QVariant::String; + data->unit = KSysGuard::UnitNone; } else if (_source == "desktop/current/number") { - data["min"] = 0; - data["max"] = 0; - data["name"] = "Current desktop number"; - data["type"] = "integer"; - data["units"] = ""; + data->min = 0; + data->name = "Current desktop number"; + data->variantType = QVariant::Int; + data->unit = KSysGuard::UnitNone; } else if (_source == "desktop/total/name") { - data["min"] = QStringList(); - data["max"] = QStringList(); - data["name"] = "All desktops by name"; - data["type"] = "QStringList"; - data["units"] = ""; + data->name = "All desktops by name"; + data->variantType = QVariant::StringList; + data->unit = KSysGuard::UnitNone; } else if (_source == "desktop/total/number") { - data["min"] = 0; - data["max"] = 0; - data["name"] = "Desktops count"; - data["type"] = "integer"; - data["units"] = ""; + data->min = 0; + data->name = "Desktops count"; + data->variantType = QVariant::Int; + data->unit = KSysGuard::UnitNone; } return data; diff --git a/sources/extsysmonsources/desktopsource.h b/sources/extsysmonsources/desktopsource.h index 05222ee..5867fa3 100644 --- a/sources/extsysmonsources/desktopsource.h +++ b/sources/extsysmonsources/desktopsource.h @@ -35,7 +35,7 @@ public: explicit DesktopSource(QObject *_parent, const QStringList &_args); ~DesktopSource() override; QVariant data(const QString &_source) override; - [[nodiscard]] QVariantMap initialData(const QString &_source) const override; + [[nodiscard]] KSysGuard::SensorInfo *initialData(const QString &_source) const override; void run() override{}; [[nodiscard]] QStringList sources() const override; diff --git a/sources/extsysmonsources/extsysmonsensor.cpp b/sources/extsysmonsources/extsysmonsensor.cpp new file mode 100644 index 0000000..29931f7 --- /dev/null +++ b/sources/extsysmonsources/extsysmonsensor.cpp @@ -0,0 +1,55 @@ +/*************************************************************************** + * This file is part of awesome-widgets * + * * + * awesome-widgets is free software: you can redistribute it and/or * + * modify it under the terms of the GNU General Public License as * + * published by the Free Software Foundation, either version 3 of the * + * License, or (at your option) any later version. * + * * + * awesome-widgets is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * + ***************************************************************************/ + +#include "extsysmonsensor.h" + +#include "abstractextsysmonsource.h" +#include "awdebug.h" + + +ExtSysMonSensor::ExtSysMonSensor(KSysGuard::SensorContainer *_parent, const QString &_id, + AbstractExtSysMonSource *_source) + : KSysGuard::SensorObject(_id, _parent) +{ + qCDebug(LOG_ESS) << __PRETTY_FUNCTION__; + + m_source = _source; + + for (auto &source : m_source->sources()) { + auto property = new KSysGuard::SensorProperty(source, this); + + auto info = m_source->initialData(source); + property->setName(info->name); + + property->setUnit(info->unit); + property->setVariantType(info->variantType); + + property->setMin(info->min); + property->setMax(info->max); + + m_properties[source] = property; + } +} + + +void ExtSysMonSensor::update() +{ + for (auto &source : m_properties.keys()) { + auto value = m_source->data(source); + m_properties[source]->setValue(value); + } +} diff --git a/sources/extsysmonsources/extsysmonsensor.h b/sources/extsysmonsources/extsysmonsensor.h new file mode 100644 index 0000000..f0a0908 --- /dev/null +++ b/sources/extsysmonsources/extsysmonsensor.h @@ -0,0 +1,41 @@ +/*************************************************************************** + * This file is part of awesome-widgets * + * * + * awesome-widgets is free software: you can redistribute it and/or * + * modify it under the terms of the GNU General Public License as * + * published by the Free Software Foundation, either version 3 of the * + * License, or (at your option) any later version. * + * * + * awesome-widgets is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * + ***************************************************************************/ + +#ifndef EXTSYSMONSENSOR_H +#define EXTSYSMONSENSOR_H + +#include + + +class AbstractExtSysMonSource; + +class ExtSysMonSensor : public KSysGuard::SensorObject +{ + Q_OBJECT + +public: + explicit ExtSysMonSensor(KSysGuard::SensorContainer *_parent, const QString &_id, AbstractExtSysMonSource *_source); + ~ExtSysMonSensor() override = default; + void update(); + +private: + QHash m_properties; + AbstractExtSysMonSource *m_source = nullptr; +}; + + +#endif /* EXTSYSMONSENSOR_H */ diff --git a/sources/extsysmonsources/gpuloadsource.cpp b/sources/extsysmonsources/gpuloadsource.cpp index 8a2fb95..a1bd171 100644 --- a/sources/extsysmonsources/gpuloadsource.cpp +++ b/sources/extsysmonsources/gpuloadsource.cpp @@ -14,10 +14,11 @@ * You should have received a copy of the GNU General Public License * * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * ***************************************************************************/ - - #include "gpuloadsource.h" +#include +#include + #include #include @@ -81,17 +82,17 @@ QVariant GPULoadSource::data(const QString &_source) } -QVariantMap GPULoadSource::initialData(const QString &_source) const +KSysGuard::SensorInfo *GPULoadSource::initialData(const QString &_source) const { qCDebug(LOG_ESS) << "Source" << _source; - QVariantMap data; + auto data = new KSysGuard::SensorInfo(); if (_source == "gpu/load") { - data["min"] = 0.0; - data["max"] = 100.0; - data["name"] = "GPU usage"; - data["type"] = "float"; - data["units"] = "%"; + data->min = 0.0; + data->max = 100.0; + data->name = "GPU usage"; + data->variantType = QVariant::Double; + data->unit = KSysGuard::UnitPercent; } return data; diff --git a/sources/extsysmonsources/gpuloadsource.h b/sources/extsysmonsources/gpuloadsource.h index 5787411..cb5b4ae 100644 --- a/sources/extsysmonsources/gpuloadsource.h +++ b/sources/extsysmonsources/gpuloadsource.h @@ -34,7 +34,7 @@ public: ~GPULoadSource() override; static QString autoGpu(); QVariant data(const QString &_source) override; - [[nodiscard]] QVariantMap initialData(const QString &_source) const override; + [[nodiscard]] KSysGuard::SensorInfo *initialData(const QString &_source) const override; void run() override; [[nodiscard]] QStringList sources() const override; diff --git a/sources/extsysmonsources/gputempsource.cpp b/sources/extsysmonsources/gputempsource.cpp index 021a1d5..b74fcf9 100644 --- a/sources/extsysmonsources/gputempsource.cpp +++ b/sources/extsysmonsources/gputempsource.cpp @@ -15,9 +15,11 @@ * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * ***************************************************************************/ - #include "gputempsource.h" +#include +#include + #include #include @@ -60,17 +62,17 @@ QVariant GPUTemperatureSource::data(const QString &_source) } -QVariantMap GPUTemperatureSource::initialData(const QString &_source) const +KSysGuard::SensorInfo *GPUTemperatureSource::initialData(const QString &_source) const { qCDebug(LOG_ESS) << "Source" << _source; - QVariantMap data; + auto data = new KSysGuard::SensorInfo(); if (_source == "gpu/temperature") { - data["min"] = 0.0; - data["max"] = 0.0; - data["name"] = "GPU temperature"; - data["type"] = "float"; - data["units"] = "°C"; + data->min = 0.0; + data->max = 0.0; + data->name = "GPU temperature"; + data->variantType = QVariant::Double; + data->unit = KSysGuard::UnitCelsius; } return data; diff --git a/sources/extsysmonsources/gputempsource.h b/sources/extsysmonsources/gputempsource.h index 1d88ccf..abd4c7b 100644 --- a/sources/extsysmonsources/gputempsource.h +++ b/sources/extsysmonsources/gputempsource.h @@ -33,7 +33,7 @@ public: explicit GPUTemperatureSource(QObject *_parent, const QStringList &_args); ~GPUTemperatureSource() override; QVariant data(const QString &_source) override; - [[nodiscard]] QVariantMap initialData(const QString &_source) const override; + [[nodiscard]] KSysGuard::SensorInfo *initialData(const QString &_source) const override; void run() override; [[nodiscard]] QStringList sources() const override; diff --git a/sources/extsysmonsources/hddtempsource.cpp b/sources/extsysmonsources/hddtempsource.cpp index 6e4402f..7af9620 100644 --- a/sources/extsysmonsources/hddtempsource.cpp +++ b/sources/extsysmonsources/hddtempsource.cpp @@ -18,6 +18,9 @@ #include "hddtempsource.h" +#include +#include + #include #include @@ -87,18 +90,19 @@ QVariant HDDTemperatureSource::data(const QString &_source) } -QVariantMap HDDTemperatureSource::initialData(const QString &_source) const +KSysGuard::SensorInfo *HDDTemperatureSource::initialData(const QString &_source) const { qCDebug(LOG_ESS) << "Source" << _source; - QString device = _source; + auto device = _source; device.remove("hdd/temperature"); - QVariantMap data; - data["min"] = 0.0; - data["max"] = 0.0; - data["name"] = QString("HDD '%1' temperature").arg(device); - data["type"] = "float"; - data["units"] = "°C"; + + auto data = new KSysGuard::SensorInfo(); + data->min = 0.0; + data->max = 0.0; + data->name = QString("HDD '%1' temperature").arg(device); + data->variantType = QVariant::Double; + data->unit = KSysGuard::UnitCelsius; return data; } diff --git a/sources/extsysmonsources/hddtempsource.h b/sources/extsysmonsources/hddtempsource.h index 4034ab8..a573f50 100644 --- a/sources/extsysmonsources/hddtempsource.h +++ b/sources/extsysmonsources/hddtempsource.h @@ -34,7 +34,7 @@ public: ~HDDTemperatureSource() override; static QStringList allHdd(); QVariant data(const QString &_source) override; - [[nodiscard]] QVariantMap initialData(const QString &_source) const override; + [[nodiscard]] KSysGuard::SensorInfo *initialData(const QString &_source) const override; void run() override{}; [[nodiscard]] QStringList sources() const override; diff --git a/sources/extsysmonsources/loadsource.cpp b/sources/extsysmonsources/loadsource.cpp index 958a3c0..d8f1b88 100644 --- a/sources/extsysmonsources/loadsource.cpp +++ b/sources/extsysmonsources/loadsource.cpp @@ -18,6 +18,9 @@ #include "loadsource.h" +#include +#include + #include #include "awdebug.h" @@ -45,17 +48,17 @@ QVariant LoadSource::data(const QString &_source) } -QVariantMap LoadSource::initialData(const QString &_source) const +KSysGuard::SensorInfo *LoadSource::initialData(const QString &_source) const { qCDebug(LOG_ESS) << "Source" << _source; - QVariantMap data; + auto data = new KSysGuard::SensorInfo(); if (_source.startsWith("load/load")) { - data["min"] = 0; - data["max"] = 0; - data["name"] = "Simple sources for load tests"; - data["type"] = "int"; - data["units"] = ""; + data->min = 0; + data->max = 0; + data->name = "Simple sources for load tests"; + data->variantType = QVariant::Int; + data->unit = KSysGuard::UnitNone; } return data; diff --git a/sources/extsysmonsources/loadsource.h b/sources/extsysmonsources/loadsource.h index 3566d32..bbf1f34 100644 --- a/sources/extsysmonsources/loadsource.h +++ b/sources/extsysmonsources/loadsource.h @@ -31,7 +31,7 @@ public: explicit LoadSource(QObject *_parent, const QStringList &_args); ~LoadSource() override; QVariant data(const QString &_source) override; - [[nodiscard]] QVariantMap initialData(const QString &_source) const override; + [[nodiscard]] KSysGuard::SensorInfo *initialData(const QString &_source) const override; void run() override{}; [[nodiscard]] QStringList sources() const override; }; diff --git a/sources/extsysmonsources/networksource.cpp b/sources/extsysmonsources/networksource.cpp index b2a94cb..6762cf1 100644 --- a/sources/extsysmonsources/networksource.cpp +++ b/sources/extsysmonsources/networksource.cpp @@ -18,6 +18,9 @@ #include "networksource.h" +#include +#include + #include #include @@ -57,23 +60,19 @@ QVariant NetworkSource::data(const QString &_source) } -QVariantMap NetworkSource::initialData(const QString &_source) const +KSysGuard::SensorInfo *NetworkSource::initialData(const QString &_source) const { qCDebug(LOG_ESS) << "Source" << _source; - QVariantMap data; + auto data = new KSysGuard::SensorInfo(); if (_source == "network/current/name") { - data["min"] = ""; - data["max"] = ""; - data["name"] = "Current network device name"; - data["type"] = "QString"; - data["units"] = ""; + data->name = "Current network device name"; + data->variantType = QVariant::String; + data->unit = KSysGuard::UnitNone; } else if (_source == "network/current/ssid") { - data["min"] = ""; - data["max"] = ""; - data["name"] = "Current SSID name"; - data["type"] = "QString"; - data["units"] = ""; + data->name = "Current SSID name"; + data->variantType = QVariant::String; + data->unit = KSysGuard::UnitNone; } return data; diff --git a/sources/extsysmonsources/networksource.h b/sources/extsysmonsources/networksource.h index 8e115c6..1069199 100644 --- a/sources/extsysmonsources/networksource.h +++ b/sources/extsysmonsources/networksource.h @@ -33,7 +33,7 @@ public: explicit NetworkSource(QObject *_parent, const QStringList &_args); ~NetworkSource() override; QVariant data(const QString &_source) override; - [[nodiscard]] QVariantMap initialData(const QString &_source) const override; + [[nodiscard]] KSysGuard::SensorInfo *initialData(const QString &_source) const override; void run() override; [[nodiscard]] QStringList sources() const override; diff --git a/sources/extsysmonsources/playersource.cpp b/sources/extsysmonsources/playersource.cpp index 529de9d..e23a845 100644 --- a/sources/extsysmonsources/playersource.cpp +++ b/sources/extsysmonsources/playersource.cpp @@ -18,6 +18,9 @@ #include "playersource.h" +#include +#include + #include #include #include @@ -87,77 +90,59 @@ QString PlayerSource::getAutoMpris() } -QVariantMap PlayerSource::initialData(const QString &_source) const +KSysGuard::SensorInfo *PlayerSource::initialData(const QString &_source) const { qCDebug(LOG_ESS) << "Source" << _source; - QVariantMap data; + auto data = new KSysGuard::SensorInfo(); if (_source == "player/album") { - data["min"] = ""; - data["max"] = ""; - data["name"] = "Current song album"; - data["type"] = "QString"; - data["units"] = ""; + data->name = "Current song album"; + data->variantType = QVariant::String; + data->unit = KSysGuard::UnitNone; } else if (_source == "player/salbum") { - data["min"] = ""; - data["max"] = ""; - data["name"] = QString("Current song album (%1 symbols)").arg(m_symbols); - data["type"] = "QString"; - data["units"] = ""; + data->name = QString("Current song album (%1 symbols)").arg(m_symbols); + data->variantType = QVariant::String; + data->unit = KSysGuard::UnitNone; } else if (_source == "player/dalbum") { - data["min"] = ""; - data["max"] = ""; - data["name"] = QString("Current song album (%1 symbols, dynamic)").arg(m_symbols); - data["type"] = "QString"; - data["units"] = ""; + data->name = QString("Current song album (%1 symbols, dynamic)").arg(m_symbols); + data->variantType = QVariant::String; + data->unit = KSysGuard::UnitNone; } else if (_source == "player/artist") { - data["min"] = ""; - data["max"] = ""; - data["name"] = "Current song artist"; - data["type"] = "QString"; - data["units"] = ""; + data->name = "Current song artist"; + data->variantType = QVariant::String; + data->unit = KSysGuard::UnitNone; } else if (_source == "player/sartist") { - data["min"] = ""; - data["max"] = ""; - data["name"] = QString("Current song artist (%1 symbols)").arg(m_symbols); - data["type"] = "QString"; - data["units"] = ""; + data->name = QString("Current song artist (%1 symbols)").arg(m_symbols); + data->variantType = QVariant::String; + data->unit = KSysGuard::UnitNone; } else if (_source == "player/dartist") { - data["min"] = ""; - data["max"] = ""; - data["name"] = QString("Current song artist (%1 symbols, dynamic)").arg(m_symbols); - data["type"] = "QString"; - data["units"] = ""; + data->name = QString("Current song artist (%1 symbols, dynamic)").arg(m_symbols); + data->variantType = QVariant::String; + data->unit = KSysGuard::UnitNone; } else if (_source == "player/duration") { - data["min"] = 0; - data["max"] = 0; - data["name"] = "Current song duration"; - data["type"] = "integer"; - data["units"] = "s"; + data->min = 0; + data->max = 0; + data->name = "Current song duration"; + data->variantType = QVariant::Int; + data->unit = KSysGuard::UnitSecond; } else if (_source == "player/progress") { - data["min"] = 0; - data["max"] = 0; - data["name"] = "Current song progress"; - data["type"] = "integer"; - data["units"] = "s"; + data->min = 0; + data->max = 0; + data->name = "Current song progress"; + data->variantType = QVariant::Int; + data->unit = KSysGuard::UnitSecond; } else if (_source == "player/title") { - data["min"] = ""; - data["max"] = ""; - data["name"] = "Current song title"; - data["type"] = "QString"; - data["units"] = ""; + data->name = "Current song title"; + data->variantType = QVariant::String; + data->unit = KSysGuard::UnitNone; } else if (_source == "player/stitle") { - data["min"] = ""; - data["max"] = ""; - data["name"] = QString("Current song title (%1 symbols)").arg(m_symbols); - data["type"] = "QString"; - data["units"] = ""; + data->name = QString("Current song title (%1 symbols)").arg(m_symbols); + data->variantType = QVariant::String; + data->unit = KSysGuard::UnitNone; } else if (_source == "player/dtitle") { - data["min"] = ""; - data["max"] = ""; - data["name"] = QString("Current song title (%1 symbols, dynamic)").arg(m_symbols); - data["type"] = "QString"; - data["units"] = ""; + data->name = QString("Current song title (%1 symbols, dynamic)").arg(m_symbols); + data->variantType = QVariant::String; + data->unit = KSysGuard::UnitNone; } return data; diff --git a/sources/extsysmonsources/playersource.h b/sources/extsysmonsources/playersource.h index e5a8449..6d0e8d1 100644 --- a/sources/extsysmonsources/playersource.h +++ b/sources/extsysmonsources/playersource.h @@ -38,7 +38,7 @@ public: ~PlayerSource() override; QVariant data(const QString &_source) override; static QString getAutoMpris(); - [[nodiscard]] QVariantMap initialData(const QString &_source) const override; + [[nodiscard]] KSysGuard::SensorInfo *initialData(const QString &_source) const override; void run() override; [[nodiscard]] QStringList sources() const override; // additional method to build dynamic tags diff --git a/sources/extsysmonsources/processessource.cpp b/sources/extsysmonsources/processessource.cpp index 35c1a67..a3219eb 100644 --- a/sources/extsysmonsources/processessource.cpp +++ b/sources/extsysmonsources/processessource.cpp @@ -18,6 +18,9 @@ #include "processessource.h" +#include +#include + #include #include "awdebug.h" @@ -48,29 +51,27 @@ QVariant ProcessesSource::data(const QString &_source) } -QVariantMap ProcessesSource::initialData(const QString &_source) const +KSysGuard::SensorInfo *ProcessesSource::initialData(const QString &_source) const { qCDebug(LOG_ESS) << "Source" << _source; - QVariantMap data; + auto data = new KSysGuard::SensorInfo(); if (_source == "ps/running/count") { - data["min"] = 0; - data["max"] = 0; - data["name"] = "Count of running processes"; - data["type"] = "integer"; - data["units"] = ""; + data->min = 0; + data->max = 0; + data->name = "Count of running processes"; + data->variantType = QVariant::Int; + data->unit = KSysGuard::UnitNone; } else if (_source == "ps/running/list") { - data["min"] = QStringList(); - data["max"] = QStringList(); - data["name"] = "All running processes list"; - data["type"] = "QStringList"; - data["units"] = ""; + data->name = "All running processes list"; + data->variantType = QVariant::StringList; + data->unit = KSysGuard::UnitNone; } else if (_source == "ps/total/count") { - data["min"] = 0; - data["max"] = 0; - data["name"] = "Total count of processes"; - data["type"] = "integer"; - data["units"] = ""; + data->min = 0; + data->max = 0; + data->name = "Total count of processes"; + data->variantType = QVariant::Int; + data->unit = KSysGuard::UnitNone; } return data; diff --git a/sources/extsysmonsources/processessource.h b/sources/extsysmonsources/processessource.h index 2f4cb6e..1906768 100644 --- a/sources/extsysmonsources/processessource.h +++ b/sources/extsysmonsources/processessource.h @@ -31,7 +31,7 @@ public: explicit ProcessesSource(QObject *_parent, const QStringList &_args); ~ProcessesSource() override; QVariant data(const QString &_source) override; - [[nodiscard]] QVariantMap initialData(const QString &_source) const override; + [[nodiscard]] KSysGuard::SensorInfo *initialData(const QString &_source) const override; void run() override; [[nodiscard]] QStringList sources() const override; diff --git a/sources/extsysmonsources/quotessource.cpp b/sources/extsysmonsources/quotessource.cpp index b1955e1..f386345 100644 --- a/sources/extsysmonsources/quotessource.cpp +++ b/sources/extsysmonsources/quotessource.cpp @@ -18,6 +18,9 @@ #include "quotessource.h" +#include +#include + #include "awdebug.h" #include "extquotes.h" @@ -57,48 +60,48 @@ QVariant QuotesSource::data(const QString &_source) } -QVariantMap QuotesSource::initialData(const QString &_source) const +KSysGuard::SensorInfo *QuotesSource::initialData(const QString &_source) const { qCDebug(LOG_ESS) << "Source" << _source; int ind = index(_source); - QVariantMap data; + auto data = new KSysGuard::SensorInfo; if (_source.startsWith("quotes/pricechg")) { - data["min"] = 0.0; - data["max"] = 0.0; - data["name"] = QString("Absolute prie changes for '%1'").arg(m_extQuotes->itemByTagNumber(ind)->uniq()); - data["type"] = "double"; - data["units"] = ""; + data->min = 0.0; + data->max = 0.0; + data->name = QString("Absolute price changes for '%1'").arg(m_extQuotes->itemByTagNumber(ind)->uniq()); + data->variantType = QVariant::Double; + data->unit = KSysGuard::UnitNone; } else if (_source.startsWith("quotes/price")) { - data["min"] = 0.0; - data["max"] = 0.0; - data["name"] = QString("Price for '%1'").arg(m_extQuotes->itemByTagNumber(ind)->uniq()); - data["type"] = "double"; - data["units"] = ""; + data->min = 0.0; + data->max = 0.0; + data->name = QString("Price for '%1'").arg(m_extQuotes->itemByTagNumber(ind)->uniq()); + data->variantType = QVariant::Double; + data->unit = KSysGuard::UnitNone; } else if (_source.startsWith("quotes/percpricechg")) { - data["min"] = -100.0; - data["max"] = 100.0; - data["name"] = QString("Price changes for '%1'").arg(m_extQuotes->itemByTagNumber(ind)->uniq()); - data["type"] = "double"; - data["units"] = ""; + data->min = -100.0; + data->max = 100.0; + data->name = QString("Price changes for '%1'").arg(m_extQuotes->itemByTagNumber(ind)->uniq()); + data->variantType = QVariant::Double; + data->unit = KSysGuard::UnitPercent; } else if (_source.startsWith("quotes/volumechg")) { - data["min"] = 0; - data["max"] = 0; - data["name"] = QString("Absolute volume changes for '%1'").arg(m_extQuotes->itemByTagNumber(ind)->uniq()); - data["type"] = "int"; - data["units"] = ""; + data->min = 0; + data->max = 0; + data->name = QString("Absolute volume changes for '%1'").arg(m_extQuotes->itemByTagNumber(ind)->uniq()); + data->variantType = QVariant::Int; + data->unit = KSysGuard::UnitNone; } else if (_source.startsWith("quotes/volume")) { - data["min"] = 0; - data["max"] = 0; - data["name"] = QString("Volume for '%1'").arg(m_extQuotes->itemByTagNumber(ind)->uniq()); - data["type"] = "int"; - data["units"] = ""; + data->min = 0; + data->max = 0; + data->name = QString("Volume for '%1'").arg(m_extQuotes->itemByTagNumber(ind)->uniq()); + data->variantType = QVariant::Int; + data->unit = KSysGuard::UnitNone; } else if (_source.startsWith("quotes/percvolumechg")) { - data["min"] = -100.0; - data["max"] = 100.0; - data["name"] = QString("Volume changes for '%1'").arg(m_extQuotes->itemByTagNumber(ind)->uniq()); - data["type"] = "double"; - data["units"] = ""; + data->min = -100.0; + data->max = 100.0; + data->name = QString("Volume changes for '%1'").arg(m_extQuotes->itemByTagNumber(ind)->uniq()); + data->variantType = QVariant::Double; + data->unit = KSysGuard::UnitPercent; } return data; diff --git a/sources/extsysmonsources/quotessource.h b/sources/extsysmonsources/quotessource.h index 04fbcba..79034c8 100644 --- a/sources/extsysmonsources/quotessource.h +++ b/sources/extsysmonsources/quotessource.h @@ -34,7 +34,7 @@ public: explicit QuotesSource(QObject *_parent, const QStringList &_args); ~QuotesSource() override; QVariant data(const QString &_source) override; - [[nodiscard]] QVariantMap initialData(const QString &_source) const override; + [[nodiscard]] KSysGuard::SensorInfo *initialData(const QString &_source) const override; void run() override{}; [[nodiscard]] QStringList sources() const override; diff --git a/sources/extsysmonsources/requestsource.cpp b/sources/extsysmonsources/requestsource.cpp index 628fb0d..c4a0a3e 100644 --- a/sources/extsysmonsources/requestsource.cpp +++ b/sources/extsysmonsources/requestsource.cpp @@ -18,6 +18,9 @@ #include "requestsource.h" +#include +#include + #include "awdebug.h" #include "extnetworkrequest.h" @@ -57,18 +60,16 @@ QVariant RequestSource::data(const QString &_source) } -QVariantMap RequestSource::initialData(const QString &_source) const +KSysGuard::SensorInfo *RequestSource::initialData(const QString &_source) const { qCDebug(LOG_ESS) << "Source" << _source; int ind = index(_source); - QVariantMap data; + auto data = new KSysGuard::SensorInfo(); if (_source.startsWith("network/response")) { - data["min"] = ""; - data["max"] = ""; - data["name"] = QString("Network response for %1").arg(m_extNetRequest->itemByTagNumber(ind)->uniq()); - data["type"] = "QString"; - data["units"] = ""; + data->name = QString("Network response for %1").arg(m_extNetRequest->itemByTagNumber(ind)->uniq()); + data->variantType = QVariant::String; + data->unit = KSysGuard::UnitNone; } return data; diff --git a/sources/extsysmonsources/requestsource.h b/sources/extsysmonsources/requestsource.h index 4ad16cb..6e36f50 100644 --- a/sources/extsysmonsources/requestsource.h +++ b/sources/extsysmonsources/requestsource.h @@ -34,7 +34,7 @@ public: explicit RequestSource(QObject *_parent, const QStringList &_args); ~RequestSource() override; QVariant data(const QString &_source) override; - [[nodiscard]] QVariantMap initialData(const QString &_source) const override; + [[nodiscard]] KSysGuard::SensorInfo *initialData(const QString &_source) const override; void run() override{}; [[nodiscard]] QStringList sources() const override; diff --git a/sources/extsysmonsources/systeminfosource.cpp b/sources/extsysmonsources/systeminfosource.cpp index 6849704..a089001 100644 --- a/sources/extsysmonsources/systeminfosource.cpp +++ b/sources/extsysmonsources/systeminfosource.cpp @@ -18,6 +18,9 @@ #include "systeminfosource.h" +#include +#include + #include #include #include @@ -51,23 +54,23 @@ QVariant SystemInfoSource::data(const QString &_source) } -QVariantMap SystemInfoSource::initialData(const QString &_source) const +KSysGuard::SensorInfo *SystemInfoSource::initialData(const QString &_source) const { qCDebug(LOG_ESS) << "Source" << _source; - QVariantMap data; + auto data = new KSysGuard::SensorInfo(); if (_source == "system/brightness") { - data["min"] = 0.0; - data["max"] = 100.0; - data["name"] = "Screen brightness"; - data["type"] = "float"; - data["units"] = "%"; + data->min = 0.0; + data->max = 100.0; + data->name = "Screen brightness"; + data->variantType = QVariant::Double; + data->unit = KSysGuard::UnitPercent; } else if (_source == "system/volume") { - data["min"] = 0.0; - data["max"] = 100.0; - data["name"] = "Master volume"; - data["type"] = "float"; - data["units"] = "%"; + data->min = 0.0; + data->max = 100.0; + data->name = "Master volume"; + data->variantType = QVariant::Double; + data->unit = KSysGuard::UnitPercent; } return data; diff --git a/sources/extsysmonsources/systeminfosource.h b/sources/extsysmonsources/systeminfosource.h index b700b8a..6f0aec2 100644 --- a/sources/extsysmonsources/systeminfosource.h +++ b/sources/extsysmonsources/systeminfosource.h @@ -31,7 +31,7 @@ public: explicit SystemInfoSource(QObject *_parent, const QStringList &_args); ~SystemInfoSource() override; QVariant data(const QString &_source) override; - [[nodiscard]] QVariantMap initialData(const QString &_source) const override; + [[nodiscard]] KSysGuard::SensorInfo *initialData(const QString &_source) const override; void run() override; [[nodiscard]] QStringList sources() const override; diff --git a/sources/extsysmonsources/upgradesource.cpp b/sources/extsysmonsources/upgradesource.cpp index 914d4e1..5b165ad 100644 --- a/sources/extsysmonsources/upgradesource.cpp +++ b/sources/extsysmonsources/upgradesource.cpp @@ -18,6 +18,9 @@ #include "upgradesource.h" +#include +#include + #include "awdebug.h" #include "extupgrade.h" @@ -49,16 +52,14 @@ QVariant UpgradeSource::data(const QString &_source) } -QVariantMap UpgradeSource::initialData(const QString &_source) const +KSysGuard::SensorInfo *UpgradeSource::initialData(const QString &_source) const { qCDebug(LOG_ESS) << "Source" << _source; - QVariantMap data; - data["min"] = ""; - data["max"] = ""; - data["name"] = QString("Package manager '%1' metadata").arg(m_extUpgrade->itemByTagNumber(index(_source))->uniq()); - data["type"] = "QString"; - data["units"] = ""; + auto data = new KSysGuard::SensorInfo(); + data->name = QString("Package manager '%1' metadata").arg(m_extUpgrade->itemByTagNumber(index(_source))->uniq()); + data->variantType = QVariant::String; + data->unit = KSysGuard::UnitNone; return data; } diff --git a/sources/extsysmonsources/upgradesource.h b/sources/extsysmonsources/upgradesource.h index 79a6443..1e42785 100644 --- a/sources/extsysmonsources/upgradesource.h +++ b/sources/extsysmonsources/upgradesource.h @@ -34,7 +34,7 @@ public: explicit UpgradeSource(QObject *_parent, const QStringList &_args); ~UpgradeSource() override; QVariant data(const QString &_source) override; - [[nodiscard]] QVariantMap initialData(const QString &_source) const override; + [[nodiscard]] KSysGuard::SensorInfo *initialData(const QString &_source) const override; void run() override{}; [[nodiscard]] QStringList sources() const override; diff --git a/sources/extsysmonsources/weathersource.cpp b/sources/extsysmonsources/weathersource.cpp index e3a618a..2be6194 100644 --- a/sources/extsysmonsources/weathersource.cpp +++ b/sources/extsysmonsources/weathersource.cpp @@ -18,6 +18,9 @@ #include "weathersource.h" +#include +#include + #include "awdebug.h" #include "extweather.h" @@ -57,48 +60,44 @@ QVariant WeatherSource::data(const QString &_source) } -QVariantMap WeatherSource::initialData(const QString &_source) const +KSysGuard::SensorInfo *WeatherSource::initialData(const QString &_source) const { qCDebug(LOG_ESS) << "Source" << _source; int ind = index(_source); - QVariantMap data; + auto data = new KSysGuard::SensorInfo(); if (_source.startsWith("weather/weatherId")) { - data["min"] = 0; - data["max"] = 1000; - data["name"] = QString("Numeric weather ID for '%1'").arg(m_extWeather->itemByTagNumber(ind)->uniq()); - data["type"] = "integer"; - data["units"] = ""; + data->min = 0; + data->max = 1000; + data->name = QString("Numeric weather ID for '%1'").arg(m_extWeather->itemByTagNumber(ind)->uniq()); + data->variantType = QVariant::Int; + data->unit = KSysGuard::UnitNone; } else if (_source.startsWith("weather/weather")) { - data["min"] = ""; - data["max"] = ""; - data["name"] = QString("ID string map for '%1'").arg(m_extWeather->itemByTagNumber(ind)->uniq()); - data["type"] = "QString"; - data["units"] = ""; + data->name = QString("ID string map for '%1'").arg(m_extWeather->itemByTagNumber(ind)->uniq()); + data->variantType = QVariant::String; + data->unit = KSysGuard::UnitNone; } else if (_source.startsWith("weather/humidity")) { - data["min"] = 0; - data["max"] = 100; - data["name"] = QString("Humidity for '%1'").arg(m_extWeather->itemByTagNumber(ind)->uniq()); - data["type"] = "integer"; - data["units"] = "%"; + data->min = 0; + data->max = 100; + data->name = QString("Humidity for '%1'").arg(m_extWeather->itemByTagNumber(ind)->uniq()); + data->variantType = QVariant::Int; + data->unit = KSysGuard::UnitPercent; } else if (_source.startsWith("weather/pressure")) { - data["min"] = 0; - data["max"] = 0; - data["name"] = QString("Atmospheric pressure for '%1'").arg(m_extWeather->itemByTagNumber(ind)->uniq()); - data["type"] = "integer"; - data["units"] = "mb"; + data->min = 0; + data->max = 0; + data->name = QString("Atmospheric pressure for '%1'").arg(m_extWeather->itemByTagNumber(ind)->uniq()); + data->variantType = QVariant::Int; + data->unit = KSysGuard::UnitNone; } else if (_source.startsWith("weather/temperature")) { - data["min"] = 0.0; - data["max"] = 0.0; - data["name"] = QString("Temperature for '%1'").arg(m_extWeather->itemByTagNumber(ind)->uniq()); - data["type"] = "float"; - data["units"] = "°C"; + data->min = 0.0; + data->max = 0.0; + data->name = QString("Temperature for '%1'").arg(m_extWeather->itemByTagNumber(ind)->uniq()); + data->variantType = QVariant::Double; + data->unit = KSysGuard::UnitCelsius; } else if (_source.startsWith("weather/timestamp")) { - data["min"] = ""; - data["max"] = ""; - data["name"] = QString("Timestamp for '%1'").arg(m_extWeather->itemByTagNumber(ind)->uniq()); - data["type"] = "QString"; - data["units"] = ""; + data->name = QString("Timestamp for '%1'").arg(m_extWeather->itemByTagNumber(ind)->uniq()); + data->variantType = QVariant::String; + data->unit = KSysGuard::UnitNone; } return data; diff --git a/sources/extsysmonsources/weathersource.h b/sources/extsysmonsources/weathersource.h index b75a1e5..e43cc8d 100644 --- a/sources/extsysmonsources/weathersource.h +++ b/sources/extsysmonsources/weathersource.h @@ -34,7 +34,7 @@ public: explicit WeatherSource(QObject *_parent, const QStringList &_args); ~WeatherSource() override; QVariant data(const QString &_source) override; - [[nodiscard]] QVariantMap initialData(const QString &_source) const override; + [[nodiscard]] KSysGuard::SensorInfo *initialData(const QString &_source) const override; void run() override{}; [[nodiscard]] QStringList sources() const override; diff --git a/sources/libraries.cmake b/sources/libraries.cmake index ca15ffe..c8b9695 100644 --- a/sources/libraries.cmake +++ b/sources/libraries.cmake @@ -27,4 +27,4 @@ include(KDEInstallDirs) include(KDECMakeSettings) include(KDECompilerSettings) set(Kf6_INCLUDE ${KDE_INSTALL_FULL_INCLUDEDIR_KF}) -set(Kf6_LIBRARIES KF6::I18n KF6::Notifications KF6::WindowSystem KSysGuard::Sensors KSysGuard::SensorFaces KSysGuard::SystemStats PW::LibTaskManager) +set(Kf6_LIBRARIES KF6::CoreAddons KF6::I18n KF6::Notifications KF6::WindowSystem KSysGuard::Sensors KSysGuard::SensorFaces KSysGuard::SystemStats PW::LibTaskManager) From 33a41bb6c08efa008ace4c0fc4257ad4f80bc12b Mon Sep 17 00:00:00 2001 From: Evgenii Alekseev Date: Thu, 21 Mar 2024 16:51:29 +0200 Subject: [PATCH 05/10] do not derive from qwidget --- sources/awesomewidgets/abstractextitem.cpp | 16 ++- sources/awesomewidgets/abstractextitem.h | 11 +- .../abstractextitemaggregator.cpp | 36 +++--- .../abstractextitemaggregator.h | 11 +- .../awesomewidgets/awabstractformatter.cpp | 10 +- sources/awesomewidgets/awabstractformatter.h | 4 +- .../awesomewidgets/awdatetimeformatter.cpp | 52 ++++---- sources/awesomewidgets/awdatetimeformatter.h | 13 +- sources/awesomewidgets/awfloatformatter.cpp | 64 +++++----- sources/awesomewidgets/awfloatformatter.h | 13 +- sources/awesomewidgets/awjsonformatter.cpp | 49 ++++---- sources/awesomewidgets/awjsonformatter.h | 13 +- sources/awesomewidgets/awlistformatter.cpp | 55 ++++----- sources/awesomewidgets/awlistformatter.h | 13 +- sources/awesomewidgets/awnoformatter.cpp | 48 ++++---- sources/awesomewidgets/awnoformatter.h | 13 +- sources/awesomewidgets/awscriptformatter.cpp | 63 +++++----- sources/awesomewidgets/awscriptformatter.h | 13 +- sources/awesomewidgets/awstringformatter.cpp | 55 ++++----- sources/awesomewidgets/awstringformatter.h | 13 +- sources/awesomewidgets/extnetworkrequest.cpp | 51 ++++---- sources/awesomewidgets/extnetworkrequest.h | 12 +- sources/awesomewidgets/extquotes.cpp | 54 ++++---- sources/awesomewidgets/extquotes.h | 11 +- sources/awesomewidgets/extscript.cpp | 69 ++++++----- sources/awesomewidgets/extscript.h | 12 +- sources/awesomewidgets/extupgrade.cpp | 55 +++++---- sources/awesomewidgets/extupgrade.h | 12 +- sources/awesomewidgets/extweather.cpp | 70 ++++++----- sources/awesomewidgets/extweather.h | 7 +- sources/awesomewidgets/graphicalitem.cpp | 116 +++++++++--------- sources/awesomewidgets/graphicalitem.h | 14 +-- 32 files changed, 495 insertions(+), 553 deletions(-) diff --git a/sources/awesomewidgets/abstractextitem.cpp b/sources/awesomewidgets/abstractextitem.cpp index 247650c..8d1a727 100644 --- a/sources/awesomewidgets/abstractextitem.cpp +++ b/sources/awesomewidgets/abstractextitem.cpp @@ -27,8 +27,8 @@ #include "qcronscheduler.h" -AbstractExtItem::AbstractExtItem(QWidget *_parent, const QString &_filePath) - : QDialog(_parent) +AbstractExtItem::AbstractExtItem(QObject *_parent, const QString &_filePath) + : QObject(_parent) , m_fileName(_filePath) { qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; @@ -97,15 +97,13 @@ void AbstractExtItem::startTimer() QString AbstractExtItem::writtableConfig() const { - QString path = m_fileName; - QString name = QFileInfo(path).fileName(); + auto path = m_fileName; + auto name = QFileInfo(path).fileName(); path.remove(path.length() - name.length() - 1, name.length() + 1); - QString dir = QFileInfo(path).fileName(); + auto dir = QFileInfo(path).fileName(); return QString("%1/awesomewidgets/%2/%3") - .arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)) - .arg(dir) - .arg(name); + .arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation), dir, name); } @@ -269,8 +267,8 @@ void AbstractExtItem::deinitSocket() m_socket->close(); QLocalServer::removeServer(socket()); - delete m_socket; disconnect(m_socket, SIGNAL(newConnection()), this, SLOT(newConnectionReceived())); + delete m_socket; } diff --git a/sources/awesomewidgets/abstractextitem.h b/sources/awesomewidgets/abstractextitem.h index 91fe620..d2f60f3 100644 --- a/sources/awesomewidgets/abstractextitem.h +++ b/sources/awesomewidgets/abstractextitem.h @@ -18,14 +18,14 @@ #ifndef ABSTRACTEXTITEM_H #define ABSTRACTEXTITEM_H -#include #include class QCronScheduler; class QLocalServer; +class QWidget; -class AbstractExtItem : public QDialog +class AbstractExtItem : public QObject { Q_OBJECT Q_PROPERTY(bool active READ isActive WRITE setActive) @@ -40,7 +40,7 @@ class AbstractExtItem : public QDialog Q_PROPERTY(QString uniq READ uniq) public: - explicit AbstractExtItem(QWidget *_parent = nullptr, const QString &_filePath = ""); + explicit AbstractExtItem(QObject *_parent = nullptr, const QString &_filePath = ""); ~AbstractExtItem() override; virtual void bumpApi(int _newVer); virtual AbstractExtItem *copy(const QString &_fileName, int _number) = 0; @@ -78,7 +78,7 @@ public slots: virtual void initSocket(); virtual void readConfiguration(); virtual QVariantHash run() = 0; - virtual int showConfiguration(const QVariant &_args) = 0; + virtual int showConfiguration(QWidget *_parent, const QVariant &_args) = 0; [[nodiscard]] virtual bool tryDelete() const; virtual void writeConfiguration() const; @@ -89,7 +89,8 @@ private: QCronScheduler *m_scheduler = nullptr; QString m_fileName = "/dev/null"; int m_times = 0; - virtual void translate() = 0; + // FIXME find a better way to do it + virtual void translate(void *_ui) = 0; // properties int m_apiVersion = 0; bool m_active = true; diff --git a/sources/awesomewidgets/abstractextitemaggregator.cpp b/sources/awesomewidgets/abstractextitemaggregator.cpp index b0ecea9..eb90bf4 100644 --- a/sources/awesomewidgets/abstractextitemaggregator.cpp +++ b/sources/awesomewidgets/abstractextitemaggregator.cpp @@ -34,9 +34,8 @@ AbstractExtItemAggregator::AbstractExtItemAggregator(QWidget *_parent, QString _ qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; // create directory at $HOME - QString localDir = QString("%1/awesomewidgets/%2") - .arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)) - .arg(type()); + auto localDir = QString("%1/awesomewidgets/%2") + .arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation), type()); QDir localDirectory; if (localDirectory.mkpath(localDir)) qCInfo(LOG_LIB) << "Created directory" << localDir; @@ -62,20 +61,19 @@ AbstractExtItemAggregator::~AbstractExtItemAggregator() void AbstractExtItemAggregator::copyItem() { - AbstractExtItem *source = itemFromWidget(); - QString fileName = getName(); - int number = uniqNumber(); - QString dir = QString("%1/awesomewidgets/%2") - .arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)) - .arg(m_type); + auto source = itemFromWidget(); + auto fileName = getName(); + auto number = uniqNumber(); + auto dir = QString("%1/awesomewidgets/%2") + .arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation), m_type); if ((!source) || (fileName.isEmpty())) { qCWarning(LOG_LIB) << "Nothing to copy"; return; } - QString filePath = QString("%1/%2").arg(dir).arg(fileName); + auto filePath = QString("%1/%2").arg(dir, fileName); - AbstractExtItem *newItem = source->copy(filePath, number); - if (newItem->showConfiguration(configArgs()) == 1) { + auto newItem = source->copy(filePath, number); + if (newItem->showConfiguration(this, configArgs()) == 1) { initItems(); repaintList(); } @@ -84,7 +82,7 @@ void AbstractExtItemAggregator::copyItem() void AbstractExtItemAggregator::deleteItem() { - AbstractExtItem *source = itemFromWidget(); + auto source = itemFromWidget(); if (!source) { qCWarning(LOG_LIB) << "Nothing to delete"; return; @@ -99,13 +97,13 @@ void AbstractExtItemAggregator::deleteItem() void AbstractExtItemAggregator::editItem() { - AbstractExtItem *source = itemFromWidget(); + auto source = itemFromWidget(); if (!source) { qCWarning(LOG_LIB) << "Nothing to edit"; return; } - if (source->showConfiguration(configArgs()) == 1) { + if (source->showConfiguration(this, configArgs()) == 1) { initItems(); repaintList(); } @@ -115,7 +113,7 @@ void AbstractExtItemAggregator::editItem() QString AbstractExtItemAggregator::getName() { bool ok; - QString name = QInputDialog::getText(this, i18n("Enter file name"), i18n("File name"), QLineEdit::Normal, "", &ok); + auto name = QInputDialog::getText(this, i18n("Enter file name"), i18n("File name"), QLineEdit::Normal, "", &ok); if ((!ok) || (name.isEmpty())) return ""; if (!name.endsWith(".desktop")) @@ -127,13 +125,13 @@ QString AbstractExtItemAggregator::getName() AbstractExtItem *AbstractExtItemAggregator::itemFromWidget() const { - QListWidgetItem *widgetItem = ui->listWidget->currentItem(); + auto widgetItem = ui->listWidget->currentItem(); if (!widgetItem) return nullptr; AbstractExtItem *found = nullptr; for (auto &item : items()) { - QString fileName = QFileInfo(item->fileName()).fileName(); + auto fileName = QFileInfo(item->fileName()).fileName(); if (fileName != widgetItem->text()) continue; found = item; @@ -151,7 +149,7 @@ void AbstractExtItemAggregator::repaintList() const ui->listWidget->clear(); for (auto &_item : items()) { QString fileName = QFileInfo(_item->fileName()).fileName(); - auto *item = new QListWidgetItem(fileName, ui->listWidget); + auto item = new QListWidgetItem(fileName, ui->listWidget); QStringList tooltip; tooltip.append(i18n("Name: %1", _item->name())); tooltip.append(i18n("Comment: %1", _item->comment())); diff --git a/sources/awesomewidgets/abstractextitemaggregator.h b/sources/awesomewidgets/abstractextitemaggregator.h index 7c767b8..781a657 100644 --- a/sources/awesomewidgets/abstractextitemaggregator.h +++ b/sources/awesomewidgets/abstractextitemaggregator.h @@ -45,20 +45,19 @@ public: void copyItem(); template void createItem() { - QString fileName = getName(); + auto fileName = getName(); int number = uniqNumber(); - QString dir = QString("%1/awesomewidgets/%2") - .arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)) - .arg(m_type); + auto dir = QString("%1/awesomewidgets/%2") + .arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation), m_type); if (fileName.isEmpty()) { qCWarning(LOG_LIB) << "Nothing to create"; return; } - QString filePath = QString("%1/%2").arg(dir).arg(fileName); + auto filePath = QString("%1/%2").arg(dir, fileName); T *newItem = new T(this, filePath); newItem->setNumber(number); - if (newItem->showConfiguration(configArgs()) == 1) { + if (newItem->showConfiguration(this, configArgs()) == 1) { initItems(); repaintList(); } diff --git a/sources/awesomewidgets/awabstractformatter.cpp b/sources/awesomewidgets/awabstractformatter.cpp index 5e1978c..70ace6c 100644 --- a/sources/awesomewidgets/awabstractformatter.cpp +++ b/sources/awesomewidgets/awabstractformatter.cpp @@ -22,19 +22,13 @@ #include "awdebug.h" -AWAbstractFormatter::AWAbstractFormatter(QWidget *_parent, const QString &_filePath) +AWAbstractFormatter::AWAbstractFormatter(QObject *_parent, const QString &_filePath) : AbstractExtItem(_parent, _filePath) { qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; } -AWAbstractFormatter::~AWAbstractFormatter() -{ - qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; -} - - void AWAbstractFormatter::copyDefaults(AbstractExtItem *_other) const { AbstractExtItem::copyDefaults(_other); @@ -45,7 +39,7 @@ void AWAbstractFormatter::copyDefaults(AbstractExtItem *_other) const QString AWAbstractFormatter::uniq() const { - return QString("%1(%2)").arg(name()).arg(strType()); + return QString("%1(%2)").arg(name(), strType()); } diff --git a/sources/awesomewidgets/awabstractformatter.h b/sources/awesomewidgets/awabstractformatter.h index 99785c2..95004ec 100644 --- a/sources/awesomewidgets/awabstractformatter.h +++ b/sources/awesomewidgets/awabstractformatter.h @@ -32,8 +32,8 @@ class AWAbstractFormatter : public AbstractExtItem public: enum class FormatterClass { DateTime, Float, List, Script, String, NoFormat, Json }; - explicit AWAbstractFormatter(QWidget *_parent = nullptr, const QString &_filePath = ""); - ~AWAbstractFormatter() override; + explicit AWAbstractFormatter(QObject *_parent = nullptr, const QString &_filePath = ""); + ~AWAbstractFormatter() override = default; [[nodiscard]] virtual QString convert(const QVariant &_value) const = 0; void copyDefaults(AbstractExtItem *_other) const override; [[nodiscard]] QString uniq() const override; diff --git a/sources/awesomewidgets/awdatetimeformatter.cpp b/sources/awesomewidgets/awdatetimeformatter.cpp index 03a34de..a095323 100644 --- a/sources/awesomewidgets/awdatetimeformatter.cpp +++ b/sources/awesomewidgets/awdatetimeformatter.cpp @@ -15,7 +15,6 @@ * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * ***************************************************************************/ - #include "awdatetimeformatter.h" #include "ui_awdatetimeformatter.h" @@ -27,24 +26,13 @@ #include "awdebug.h" -AWDateTimeFormatter::AWDateTimeFormatter(QWidget *_parent, const QString &_filePath) +AWDateTimeFormatter::AWDateTimeFormatter(QObject *_parent, const QString &_filePath) : AWAbstractFormatter(_parent, _filePath) - , ui(new Ui::AWDateTimeFormatter) { qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; if (!_filePath.isEmpty()) AWDateTimeFormatter::readConfiguration(); - ui->setupUi(this); - AWDateTimeFormatter::translate(); -} - - -AWDateTimeFormatter::~AWDateTimeFormatter() -{ - qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; - - delete ui; } @@ -60,7 +48,7 @@ AWDateTimeFormatter *AWDateTimeFormatter::copy(const QString &_fileName, const i { qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number; - auto *item = new AWDateTimeFormatter(dynamic_cast(parent()), _fileName); + auto item = new AWDateTimeFormatter(parent(), _fileName); AWAbstractFormatter::copyDefaults(item); item->setFormat(format()); item->setTranslateString(translateString()); @@ -114,27 +102,36 @@ void AWDateTimeFormatter::readConfiguration() } -int AWDateTimeFormatter::showConfiguration(const QVariant &_args) +int AWDateTimeFormatter::showConfiguration(QWidget *_parent, const QVariant &_args) { Q_UNUSED(_args) + auto dialog = new QDialog(_parent); + auto ui = new Ui::AWDateTimeFormatter(); + ui->setupUi(dialog); + translate(ui); + ui->lineEdit_name->setText(name()); ui->lineEdit_comment->setText(comment()); ui->label_typeValue->setText("DateTime"); ui->lineEdit_format->setText(format()); ui->checkBox_translate->setCheckState(translateString() ? Qt::Checked : Qt::Unchecked); - int ret = exec(); - if (ret != 1) - return ret; - setName(ui->lineEdit_name->text()); - setComment(ui->lineEdit_comment->text()); - setApiVersion(AW_FORMATTER_API); - setStrType(ui->label_typeValue->text()); - setFormat(ui->lineEdit_format->text()); - setTranslateString(ui->checkBox_translate->checkState() == Qt::Checked); + auto ret = dialog->exec(); + if (ret == 1) { + setName(ui->lineEdit_name->text()); + setComment(ui->lineEdit_comment->text()); + setApiVersion(AW_FORMATTER_API); + setStrType(ui->label_typeValue->text()); + setFormat(ui->lineEdit_format->text()); + setTranslateString(ui->checkBox_translate->checkState() == Qt::Checked); + + writeConfiguration(); + } + + dialog->deleteLater(); + delete ui; - writeConfiguration(); return ret; } @@ -160,9 +157,10 @@ void AWDateTimeFormatter::initLocale() m_locale = m_translate ? QLocale::system() : QLocale::c(); } - -void AWDateTimeFormatter::translate() +void AWDateTimeFormatter::translate(void *_ui) { + auto ui = reinterpret_cast(_ui); + ui->label_name->setText(i18n("Name")); ui->label_comment->setText(i18n("Comment")); ui->label_type->setText(i18n("Type")); diff --git a/sources/awesomewidgets/awdatetimeformatter.h b/sources/awesomewidgets/awdatetimeformatter.h index ef6bca2..3120204 100644 --- a/sources/awesomewidgets/awdatetimeformatter.h +++ b/sources/awesomewidgets/awdatetimeformatter.h @@ -23,11 +23,6 @@ #include "awabstractformatter.h" -namespace Ui -{ -class AWDateTimeFormatter; -} - class AWDateTimeFormatter : public AWAbstractFormatter { Q_OBJECT @@ -35,8 +30,7 @@ class AWDateTimeFormatter : public AWAbstractFormatter Q_PROPERTY(bool translateString READ translateString WRITE setTranslateString) public: - explicit AWDateTimeFormatter(QWidget *_parent = nullptr, const QString &_filePath = ""); - ~AWDateTimeFormatter() override; + explicit AWDateTimeFormatter(QObject *_parent = nullptr, const QString &_filePath = ""); [[nodiscard]] QString convert(const QVariant &_value) const override; AWDateTimeFormatter *copy(const QString &_fileName, int _number) override; // properties @@ -47,13 +41,12 @@ public: public slots: void readConfiguration() override; - int showConfiguration(const QVariant &_args) override; + int showConfiguration(QWidget *_parent, const QVariant &_args) override; void writeConfiguration() const override; private: - Ui::AWDateTimeFormatter *ui = nullptr; void initLocale(); - void translate() override; + void translate(void *_ui) override; // properties QLocale m_locale; QString m_format = ""; diff --git a/sources/awesomewidgets/awfloatformatter.cpp b/sources/awesomewidgets/awfloatformatter.cpp index a441828..968ec96 100644 --- a/sources/awesomewidgets/awfloatformatter.cpp +++ b/sources/awesomewidgets/awfloatformatter.cpp @@ -15,7 +15,6 @@ * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * ***************************************************************************/ - #include "awfloatformatter.h" #include "ui_awfloatformatter.h" @@ -26,24 +25,13 @@ #include "awdebug.h" -AWFloatFormatter::AWFloatFormatter(QWidget *_parent, const QString &_filePath) +AWFloatFormatter::AWFloatFormatter(QObject *_parent, const QString &_filePath) : AWAbstractFormatter(_parent, _filePath) - , ui(new Ui::AWFloatFormatter) { qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; if (!_filePath.isEmpty()) AWFloatFormatter::readConfiguration(); - ui->setupUi(this); - AWFloatFormatter::translate(); -} - - -AWFloatFormatter::~AWFloatFormatter() -{ - qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; - - delete ui; } @@ -51,7 +39,7 @@ QString AWFloatFormatter::convert(const QVariant &_value) const { qCDebug(LOG_LIB) << "Convert value" << _value; - QString output + auto output = QString("%1").arg(_value.toDouble() * multiplier() + summand(), count(), format(), precision(), fillChar()); if (forceWidth()) output = output.left(count()); @@ -64,7 +52,7 @@ AWFloatFormatter *AWFloatFormatter::copy(const QString &_fileName, const int _nu { qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number; - auto *item = new AWFloatFormatter(dynamic_cast(parent()), _fileName); + auto item = new AWFloatFormatter(parent(), _fileName); AWAbstractFormatter::copyDefaults(item); item->setCount(count()); item->setFormat(format()); @@ -202,10 +190,15 @@ void AWFloatFormatter::readConfiguration() } -int AWFloatFormatter::showConfiguration(const QVariant &_args) +int AWFloatFormatter::showConfiguration(QWidget *_parent, const QVariant &_args) { Q_UNUSED(_args) + auto dialog = new QDialog(_parent); + auto ui = new Ui::AWFloatFormatter(); + ui->setupUi(dialog); + translate(ui); + ui->lineEdit_name->setText(name()); ui->lineEdit_comment->setText(comment()); ui->label_typeValue->setText("Float"); @@ -217,22 +210,26 @@ int AWFloatFormatter::showConfiguration(const QVariant &_args) ui->doubleSpinBox_multiplier->setValue(multiplier()); ui->doubleSpinBox_summand->setValue(summand()); - int ret = exec(); - if (ret != 1) - return ret; - setName(ui->lineEdit_name->text()); - setComment(ui->lineEdit_comment->text()); - setApiVersion(AW_FORMATTER_API); - setStrType(ui->label_typeValue->text()); - setFormat(ui->comboBox_format->currentText().at(0).toLatin1()); - setPrecision(ui->spinBox_precision->value()); - setCount(ui->spinBox_width->value()); - setFillChar(ui->lineEdit_fill->text().at(0)); - setForceWidth(ui->checkBox_forceWidth->checkState() == Qt::Checked); - setMultiplier(ui->doubleSpinBox_multiplier->value()); - setSummand(ui->doubleSpinBox_summand->value()); + auto ret = dialog->exec(); + if (ret == 1) { + setName(ui->lineEdit_name->text()); + setComment(ui->lineEdit_comment->text()); + setApiVersion(AW_FORMATTER_API); + setStrType(ui->label_typeValue->text()); + setFormat(ui->comboBox_format->currentText().at(0).toLatin1()); + setPrecision(ui->spinBox_precision->value()); + setCount(ui->spinBox_width->value()); + setFillChar(ui->lineEdit_fill->text().at(0)); + setForceWidth(ui->checkBox_forceWidth->checkState() == Qt::Checked); + setMultiplier(ui->doubleSpinBox_multiplier->value()); + setSummand(ui->doubleSpinBox_summand->value()); + + writeConfiguration(); + } + + dialog->deleteLater(); + delete ui; - writeConfiguration(); return ret; } @@ -258,8 +255,10 @@ void AWFloatFormatter::writeConfiguration() const } -void AWFloatFormatter::translate() +void AWFloatFormatter::translate(void *_ui) { + auto ui = reinterpret_cast(_ui); + ui->label_name->setText(i18n("Name")); ui->label_comment->setText(i18n("Comment")); ui->label_type->setText(i18n("Type")); @@ -271,3 +270,4 @@ void AWFloatFormatter::translate() ui->label_multiplier->setText(i18n("Multiplier")); ui->label_summand->setText(i18n("Summand")); } + diff --git a/sources/awesomewidgets/awfloatformatter.h b/sources/awesomewidgets/awfloatformatter.h index 021d3e7..f339970 100644 --- a/sources/awesomewidgets/awfloatformatter.h +++ b/sources/awesomewidgets/awfloatformatter.h @@ -21,11 +21,6 @@ #include "awabstractformatter.h" -namespace Ui -{ -class AWFloatFormatter; -} - class AWFloatFormatter : public AWAbstractFormatter { Q_OBJECT @@ -38,8 +33,7 @@ class AWFloatFormatter : public AWAbstractFormatter Q_PROPERTY(double summand READ summand WRITE setSummand) public: - explicit AWFloatFormatter(QWidget *_parent = nullptr, const QString &_filePath = ""); - ~AWFloatFormatter() override; + explicit AWFloatFormatter(QObject *_parent = nullptr, const QString &_filePath = ""); [[nodiscard]] QString convert(const QVariant &_value) const override; AWFloatFormatter *copy(const QString &_fileName, int _number) override; // properties @@ -60,12 +54,11 @@ public: public slots: void readConfiguration() override; - int showConfiguration(const QVariant &_args) override; + int showConfiguration(QWidget *_parent, const QVariant &_args) override; void writeConfiguration() const override; private: - Ui::AWFloatFormatter *ui = nullptr; - void translate() override; + void translate(void *_ui) override; // properties int m_count = 0; QChar m_fillChar = QChar(); diff --git a/sources/awesomewidgets/awjsonformatter.cpp b/sources/awesomewidgets/awjsonformatter.cpp index e4d2d19..af05526 100644 --- a/sources/awesomewidgets/awjsonformatter.cpp +++ b/sources/awesomewidgets/awjsonformatter.cpp @@ -15,7 +15,6 @@ * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * ***************************************************************************/ - #include "awjsonformatter.h" #include "ui_awjsonformatter.h" @@ -27,24 +26,13 @@ #include "awdebug.h" -AWJsonFormatter::AWJsonFormatter(QWidget *_parent, const QString &_filePath) +AWJsonFormatter::AWJsonFormatter(QObject *_parent, const QString &_filePath) : AWAbstractFormatter(_parent, _filePath) - , ui(new Ui::AWJsonFormatter) { qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; if (!_filePath.isEmpty()) AWJsonFormatter::readConfiguration(); - ui->setupUi(this); - AWJsonFormatter::translate(); -} - - -AWJsonFormatter::~AWJsonFormatter() -{ - qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; - - delete ui; } @@ -67,7 +55,7 @@ AWJsonFormatter *AWJsonFormatter::copy(const QString &_fileName, const int _numb { qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number; - auto *item = new AWJsonFormatter(dynamic_cast(parent()), _fileName); + auto item = new AWJsonFormatter(parent(), _fileName); AWAbstractFormatter::copyDefaults(item); item->setNumber(_number); item->setPath(path()); @@ -105,25 +93,34 @@ void AWJsonFormatter::readConfiguration() } -int AWJsonFormatter::showConfiguration(const QVariant &args) +int AWJsonFormatter::showConfiguration(QWidget *_parent, const QVariant &args) { Q_UNUSED(args) + auto dialog = new QDialog(_parent); + auto ui = new Ui::AWJsonFormatter(); + ui->setupUi(dialog); + translate(ui); + ui->lineEdit_name->setText(name()); ui->lineEdit_comment->setText(comment()); ui->label_typeValue->setText("Json"); ui->lineEdit_path->setText(path()); - int ret = exec(); - if (ret != 1) - return ret; - setName(ui->lineEdit_name->text()); - setComment(ui->lineEdit_comment->text()); - setApiVersion(AW_FORMATTER_API); - setStrType(ui->label_typeValue->text()); - setPath(ui->lineEdit_path->text()); + auto ret = dialog->exec(); + if (ret == 1) { + setName(ui->lineEdit_name->text()); + setComment(ui->lineEdit_comment->text()); + setApiVersion(AW_FORMATTER_API); + setStrType(ui->label_typeValue->text()); + setPath(ui->lineEdit_path->text()); + + writeConfiguration(); + } + + dialog->deleteLater(); + delete ui; - writeConfiguration(); return ret; } @@ -187,8 +184,10 @@ void AWJsonFormatter::initPath() } -void AWJsonFormatter::translate() +void AWJsonFormatter::translate(void *_ui) { + auto ui = reinterpret_cast(_ui); + ui->label_name->setText(i18n("Name")); ui->label_comment->setText(i18n("Comment")); ui->label_type->setText(i18n("Type")); diff --git a/sources/awesomewidgets/awjsonformatter.h b/sources/awesomewidgets/awjsonformatter.h index b0dec25..d521ad6 100644 --- a/sources/awesomewidgets/awjsonformatter.h +++ b/sources/awesomewidgets/awjsonformatter.h @@ -21,19 +21,13 @@ #include "awabstractformatter.h" -namespace Ui -{ -class AWJsonFormatter; -} - class AWJsonFormatter : public AWAbstractFormatter { Q_OBJECT Q_PROPERTY(QString path READ path WRITE setPath) public: - explicit AWJsonFormatter(QWidget *_parent = nullptr, const QString &_filePath = ""); - ~AWJsonFormatter() override; + explicit AWJsonFormatter(QObject *_parent = nullptr, const QString &_filePath = ""); [[nodiscard]] QString convert(const QVariant &_value) const override; AWJsonFormatter *copy(const QString &_fileName, int _number) override; // properties @@ -42,16 +36,15 @@ public: public slots: void readConfiguration() override; - int showConfiguration(const QVariant &_args) override; + int showConfiguration(QWidget *_parent, const QVariant &_args) override; void writeConfiguration() const override; private: - Ui::AWJsonFormatter *ui = nullptr; static QVariant getFromJson(const QVariant &_value, const QVariant &_element); static QVariant getFromList(const QVariant &_value, int _index); static QVariant getFromMap(const QVariant &_value, const QString &_key); void initPath(); - void translate() override; + void translate(void *_ui) override; // properties QString m_path; QVariantList m_splittedPath; diff --git a/sources/awesomewidgets/awlistformatter.cpp b/sources/awesomewidgets/awlistformatter.cpp index 10d0e91..9109076 100644 --- a/sources/awesomewidgets/awlistformatter.cpp +++ b/sources/awesomewidgets/awlistformatter.cpp @@ -15,7 +15,6 @@ * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * ***************************************************************************/ - #include "awlistformatter.h" #include "ui_awlistformatter.h" @@ -26,24 +25,13 @@ #include "awdebug.h" -AWListFormatter::AWListFormatter(QWidget *_parent, const QString &_filePath) +AWListFormatter::AWListFormatter(QObject *_parent, const QString &_filePath) : AWAbstractFormatter(_parent, _filePath) - , ui(new Ui::AWListFormatter) { qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; if (!_filePath.isEmpty()) AWListFormatter::readConfiguration(); - ui->setupUi(this); - AWListFormatter::translate(); -} - - -AWListFormatter::~AWListFormatter() -{ - qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; - - delete ui; } @@ -51,7 +39,7 @@ QString AWListFormatter::convert(const QVariant &_value) const { qCDebug(LOG_LIB) << "Convert value" << _value; - QStringList output = _value.toStringList(); + auto output = _value.toStringList(); if (isSorted()) output.sort(); @@ -63,7 +51,7 @@ AWListFormatter *AWListFormatter::copy(const QString &_fileName, const int _numb { qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number; - auto *item = new AWListFormatter(dynamic_cast(parent()), _fileName); + auto item = new AWListFormatter(parent(), _fileName); AWAbstractFormatter::copyDefaults(item); item->setFilter(filter()); item->setSeparator(separator()); @@ -133,10 +121,15 @@ void AWListFormatter::readConfiguration() } -int AWListFormatter::showConfiguration(const QVariant &_args) +int AWListFormatter::showConfiguration(QWidget *_parent, const QVariant &_args) { Q_UNUSED(_args) + auto dialog = new QDialog(_parent); + auto ui = new Ui::AWListFormatter(); + ui->setupUi(dialog); + translate(ui); + ui->lineEdit_name->setText(name()); ui->lineEdit_comment->setText(comment()); ui->label_typeValue->setText("List"); @@ -144,18 +137,22 @@ int AWListFormatter::showConfiguration(const QVariant &_args) ui->lineEdit_separator->setText(separator()); ui->checkBox_sorted->setCheckState(isSorted() ? Qt::Checked : Qt::Unchecked); - int ret = exec(); - if (ret != 1) - return ret; - setName(ui->lineEdit_name->text()); - setComment(ui->lineEdit_comment->text()); - setApiVersion(AW_FORMATTER_API); - setStrType(ui->label_typeValue->text()); - setFilter(ui->lineEdit_filter->text()); - setSeparator(ui->lineEdit_separator->text()); - setSorted(ui->checkBox_sorted->checkState() == Qt::Checked); + auto ret = dialog->exec(); + if (ret == 1) { + setName(ui->lineEdit_name->text()); + setComment(ui->lineEdit_comment->text()); + setApiVersion(AW_FORMATTER_API); + setStrType(ui->label_typeValue->text()); + setFilter(ui->lineEdit_filter->text()); + setSeparator(ui->lineEdit_separator->text()); + setSorted(ui->checkBox_sorted->checkState() == Qt::Checked); + + writeConfiguration(); + } + + dialog->deleteLater(); + delete ui; - writeConfiguration(); return ret; } @@ -177,8 +174,10 @@ void AWListFormatter::writeConfiguration() const } -void AWListFormatter::translate() +void AWListFormatter::translate(void *_ui) { + auto ui = reinterpret_cast(_ui); + ui->label_name->setText(i18n("Name")); ui->label_comment->setText(i18n("Comment")); ui->label_type->setText(i18n("Type")); diff --git a/sources/awesomewidgets/awlistformatter.h b/sources/awesomewidgets/awlistformatter.h index 1732303..8ba78eb 100644 --- a/sources/awesomewidgets/awlistformatter.h +++ b/sources/awesomewidgets/awlistformatter.h @@ -21,11 +21,6 @@ #include "awabstractformatter.h" -namespace Ui -{ -class AWListFormatter; -} - class AWListFormatter : public AWAbstractFormatter { Q_OBJECT @@ -34,8 +29,7 @@ class AWListFormatter : public AWAbstractFormatter Q_PROPERTY(bool sorted READ isSorted WRITE setSorted) public: - explicit AWListFormatter(QWidget *_parent = nullptr, const QString &_filePath = ""); - ~AWListFormatter() override; + explicit AWListFormatter(QObject *_parent = nullptr, const QString &_filePath = ""); [[nodiscard]] QString convert(const QVariant &_value) const override; AWListFormatter *copy(const QString &_fileName, int _number) override; // properties @@ -48,12 +42,11 @@ public: public slots: void readConfiguration() override; - int showConfiguration(const QVariant &_args) override; + int showConfiguration(QWidget *_parent, const QVariant &_args) override; void writeConfiguration() const override; private: - Ui::AWListFormatter *ui = nullptr; - void translate() override; + void translate(void *_ui) override; // properties QString m_filter = ""; QString m_separator = ""; diff --git a/sources/awesomewidgets/awnoformatter.cpp b/sources/awesomewidgets/awnoformatter.cpp index 3253f1e..5ee8909 100644 --- a/sources/awesomewidgets/awnoformatter.cpp +++ b/sources/awesomewidgets/awnoformatter.cpp @@ -15,7 +15,6 @@ * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * ***************************************************************************/ - #include "awnoformatter.h" #include "ui_awnoformatter.h" @@ -24,24 +23,13 @@ #include "awdebug.h" -AWNoFormatter::AWNoFormatter(QWidget *_parent, const QString &_filePath) +AWNoFormatter::AWNoFormatter(QObject *_parent, const QString &_filePath) : AWAbstractFormatter(_parent, _filePath) - , ui(new Ui::AWNoFormatter) { qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; if (!_filePath.isEmpty()) AWNoFormatter::readConfiguration(); - ui->setupUi(this); - AWNoFormatter::translate(); -} - - -AWNoFormatter::~AWNoFormatter() -{ - qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; - - delete ui; } @@ -57,7 +45,7 @@ AWNoFormatter *AWNoFormatter::copy(const QString &_fileName, const int _number) { qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number; - auto *item = new AWNoFormatter(dynamic_cast(parent()), _fileName); + auto item = new AWNoFormatter(parent(), _fileName); AWAbstractFormatter::copyDefaults(item); item->setNumber(_number); @@ -65,30 +53,42 @@ AWNoFormatter *AWNoFormatter::copy(const QString &_fileName, const int _number) } -int AWNoFormatter::showConfiguration(const QVariant &_args) +int AWNoFormatter::showConfiguration(QWidget *_parent, const QVariant &_args) { Q_UNUSED(_args) + auto dialog = new QDialog(_parent); + auto ui = new Ui::AWNoFormatter(); + ui->setupUi(dialog); + translate(ui); + ui->lineEdit_name->setText(name()); ui->lineEdit_comment->setText(comment()); ui->label_typeValue->setText("NoFormat"); - int ret = exec(); - if (ret != 1) - return ret; - setName(ui->lineEdit_name->text()); - setComment(ui->lineEdit_comment->text()); - setApiVersion(AW_FORMATTER_API); - setStrType(ui->label_typeValue->text()); + auto ret = dialog->exec(); + if (ret == 1) { + setName(ui->lineEdit_name->text()); + setComment(ui->lineEdit_comment->text()); + setApiVersion(AW_FORMATTER_API); + setStrType(ui->label_typeValue->text()); + + writeConfiguration(); + } + + dialog->deleteLater(); + delete ui; - writeConfiguration(); return ret; } -void AWNoFormatter::translate() +void AWNoFormatter::translate(void *_ui) { + auto ui = reinterpret_cast(_ui); + ui->label_name->setText(i18n("Name")); ui->label_comment->setText(i18n("Comment")); ui->label_type->setText(i18n("Type")); } + diff --git a/sources/awesomewidgets/awnoformatter.h b/sources/awesomewidgets/awnoformatter.h index 56f7b40..78ae248 100644 --- a/sources/awesomewidgets/awnoformatter.h +++ b/sources/awesomewidgets/awnoformatter.h @@ -21,27 +21,20 @@ #include "awabstractformatter.h" -namespace Ui -{ -class AWNoFormatter; -} - class AWNoFormatter : public AWAbstractFormatter { Q_OBJECT public: - explicit AWNoFormatter(QWidget *_parent = nullptr, const QString &_filePath = ""); - ~AWNoFormatter() override; + explicit AWNoFormatter(QObject *_parent = nullptr, const QString &_filePath = ""); [[nodiscard]] QString convert(const QVariant &_value) const override; AWNoFormatter *copy(const QString &_fileName, int _number) override; public slots: - int showConfiguration(const QVariant &_args) override; + int showConfiguration(QWidget *_parent, const QVariant &_args) override; private: - Ui::AWNoFormatter *ui = nullptr; - void translate() override; + void translate(void *_ui) override; // properties }; diff --git a/sources/awesomewidgets/awscriptformatter.cpp b/sources/awesomewidgets/awscriptformatter.cpp index ea38671..ff0f55f 100644 --- a/sources/awesomewidgets/awscriptformatter.cpp +++ b/sources/awesomewidgets/awscriptformatter.cpp @@ -15,7 +15,6 @@ * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * ***************************************************************************/ - #include "awscriptformatter.h" #include "ui_awscriptformatter.h" @@ -27,24 +26,13 @@ #include "awdebug.h" -AWScriptFormatter::AWScriptFormatter(QWidget *_parent, const QString &_filePath) +AWScriptFormatter::AWScriptFormatter(QObject *_parent, const QString &_filePath) : AWAbstractFormatter(_parent, _filePath) - , ui(new Ui::AWScriptFormatter) { qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; if (!_filePath.isEmpty()) AWScriptFormatter::readConfiguration(); - ui->setupUi(this); - AWScriptFormatter::translate(); -} - - -AWScriptFormatter::~AWScriptFormatter() -{ - qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; - - delete ui; } @@ -54,9 +42,8 @@ QString AWScriptFormatter::convert(const QVariant &_value) const // init engine QJSEngine engine; - QJSValue fn = engine.evaluate(m_program); - QJSValueList args = QJSValueList() << _value.toString(); - QJSValue result = fn.call(args); + auto fn = engine.evaluate(m_program); + auto result = fn.call({_value.toString()}); if (result.isError()) { qCWarning(LOG_LIB) << "Uncaught exception at line" << result.property("lineNumber").toInt() << ":" @@ -72,7 +59,7 @@ AWScriptFormatter *AWScriptFormatter::copy(const QString &_fileName, const int _ { qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number; - auto *item = new AWScriptFormatter(dynamic_cast(parent()), _fileName); + auto item = new AWScriptFormatter(parent(), _fileName); AWAbstractFormatter::copyDefaults(item); item->setAppendCode(appendCode()); item->setCode(code()); @@ -150,10 +137,15 @@ void AWScriptFormatter::readConfiguration() } -int AWScriptFormatter::showConfiguration(const QVariant &_args) +int AWScriptFormatter::showConfiguration(QWidget *_parent, const QVariant &_args) { Q_UNUSED(_args) + auto dialog = new QDialog(_parent); + auto ui = new Ui::AWScriptFormatter(); + ui->setupUi(dialog); + translate(ui); + ui->lineEdit_name->setText(name()); ui->lineEdit_comment->setText(comment()); ui->label_typeValue->setText("Script"); @@ -161,19 +153,23 @@ int AWScriptFormatter::showConfiguration(const QVariant &_args) ui->checkBox_hasReturn->setCheckState(hasReturn() ? Qt::Checked : Qt::Unchecked); ui->textEdit_code->setPlainText(code()); - int ret = exec(); - if (ret != 1) - return ret; - setName(ui->lineEdit_name->text()); - setComment(ui->lineEdit_comment->text()); - setApiVersion(AW_FORMATTER_API); - setStrType(ui->label_typeValue->text()); - setAppendCode(ui->checkBox_appendCode->checkState() == Qt::Checked); - setHasReturn(ui->checkBox_hasReturn->checkState() == Qt::Checked); - setCode(ui->textEdit_code->toPlainText()); - initProgram(); + int ret = dialog->exec(); + if (ret == 1) { + setName(ui->lineEdit_name->text()); + setComment(ui->lineEdit_comment->text()); + setApiVersion(AW_FORMATTER_API); + setStrType(ui->label_typeValue->text()); + setAppendCode(ui->checkBox_appendCode->checkState() == Qt::Checked); + setHasReturn(ui->checkBox_hasReturn->checkState() == Qt::Checked); + setCode(ui->textEdit_code->toPlainText()); + initProgram(); + + writeConfiguration(); + } + + dialog->deleteLater(); + delete ui; - writeConfiguration(); return ret; } @@ -199,7 +195,7 @@ void AWScriptFormatter::initProgram() { // init JS code if (appendCode()) - m_program = QString("(function(value) { %1%2 })").arg(code()).arg(hasReturn() ? "" : "; return output;"); + m_program = QString("(function(value) { %1%2 })").arg(code(), hasReturn() ? "" : "; return output;"); else m_program = code(); @@ -207,8 +203,10 @@ void AWScriptFormatter::initProgram() } -void AWScriptFormatter::translate() +void AWScriptFormatter::translate(void *_ui) { + auto ui = reinterpret_cast(_ui); + ui->label_name->setText(i18n("Name")); ui->label_comment->setText(i18n("Comment")); ui->label_type->setText(i18n("Type")); @@ -216,3 +214,4 @@ void AWScriptFormatter::translate() ui->checkBox_hasReturn->setText(i18n("Has return")); ui->label_code->setText(i18n("Code")); } + diff --git a/sources/awesomewidgets/awscriptformatter.h b/sources/awesomewidgets/awscriptformatter.h index b3df69c..9e93a6d 100644 --- a/sources/awesomewidgets/awscriptformatter.h +++ b/sources/awesomewidgets/awscriptformatter.h @@ -21,11 +21,6 @@ #include "awabstractformatter.h" -namespace Ui -{ -class AWScriptFormatter; -} - class AWScriptFormatter : public AWAbstractFormatter { Q_OBJECT @@ -35,8 +30,7 @@ class AWScriptFormatter : public AWAbstractFormatter Q_PROPERTY(QString program READ program) public: - explicit AWScriptFormatter(QWidget *_parent = nullptr, const QString &_filePath = ""); - ~AWScriptFormatter() override; + explicit AWScriptFormatter(QObject *_parent = nullptr, const QString &_filePath = ""); [[nodiscard]] QString convert(const QVariant &_value) const override; AWScriptFormatter *copy(const QString &_fileName, int _number) override; // properties @@ -50,13 +44,12 @@ public: public slots: void readConfiguration() override; - int showConfiguration(const QVariant &_args) override; + int showConfiguration(QWidget *_parent, const QVariant &_args) override; void writeConfiguration() const override; private: - Ui::AWScriptFormatter *ui = nullptr; void initProgram(); - void translate() override; + void translate(void *_ui) override; // properties bool m_appendCode = true; QString m_code = ""; diff --git a/sources/awesomewidgets/awstringformatter.cpp b/sources/awesomewidgets/awstringformatter.cpp index b606931..c22b130 100644 --- a/sources/awesomewidgets/awstringformatter.cpp +++ b/sources/awesomewidgets/awstringformatter.cpp @@ -15,7 +15,6 @@ * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * ***************************************************************************/ - #include "awstringformatter.h" #include "ui_awstringformatter.h" @@ -26,24 +25,13 @@ #include "awdebug.h" -AWStringFormatter::AWStringFormatter(QWidget *_parent, const QString &_filePath) +AWStringFormatter::AWStringFormatter(QObject *_parent, const QString &_filePath) : AWAbstractFormatter(_parent, _filePath) - , ui(new Ui::AWStringFormatter) { qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; if (!_filePath.isEmpty()) AWStringFormatter::readConfiguration(); - ui->setupUi(this); - AWStringFormatter::translate(); -} - - -AWStringFormatter::~AWStringFormatter() -{ - qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; - - delete ui; } @@ -51,7 +39,7 @@ QString AWStringFormatter::convert(const QVariant &_value) const { qCDebug(LOG_LIB) << "Convert value" << _value; - QString output = QString("%1").arg(_value.toString(), count(), fillChar()); + auto output = QString("%1").arg(_value.toString(), count(), fillChar()); if (forceWidth()) output = output.left(count()); @@ -63,7 +51,7 @@ AWStringFormatter *AWStringFormatter::copy(const QString &_fileName, const int _ { qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number; - auto *item = new AWStringFormatter(dynamic_cast(parent()), _fileName); + auto item = new AWStringFormatter(parent(), _fileName); AWAbstractFormatter::copyDefaults(item); item->setCount(count()); item->setFillChar(fillChar()); @@ -132,10 +120,15 @@ void AWStringFormatter::readConfiguration() } -int AWStringFormatter::showConfiguration(const QVariant &_args) +int AWStringFormatter::showConfiguration(QWidget *_parent, const QVariant &_args) { Q_UNUSED(_args) + auto dialog = new QDialog(_parent); + auto ui = new Ui::AWStringFormatter(); + ui->setupUi(dialog); + translate(ui); + ui->lineEdit_name->setText(name()); ui->lineEdit_comment->setText(comment()); ui->label_typeValue->setText("String"); @@ -143,18 +136,22 @@ int AWStringFormatter::showConfiguration(const QVariant &_args) ui->lineEdit_fill->setText(QString(fillChar())); ui->checkBox_forceWidth->setCheckState(forceWidth() ? Qt::Checked : Qt::Unchecked); - int ret = exec(); - if (ret != 1) - return ret; - setName(ui->lineEdit_name->text()); - setComment(ui->lineEdit_comment->text()); - setApiVersion(AW_FORMATTER_API); - setStrType(ui->label_typeValue->text()); - setCount(ui->spinBox_width->value()); - setFillChar(ui->lineEdit_fill->text().at(0)); - setForceWidth(ui->checkBox_forceWidth->checkState() == Qt::Checked); + auto ret = dialog->exec(); + if (ret == 1) { + setName(ui->lineEdit_name->text()); + setComment(ui->lineEdit_comment->text()); + setApiVersion(AW_FORMATTER_API); + setStrType(ui->label_typeValue->text()); + setCount(ui->spinBox_width->value()); + setFillChar(ui->lineEdit_fill->text().at(0)); + setForceWidth(ui->checkBox_forceWidth->checkState() == Qt::Checked); + + writeConfiguration(); + } + + dialog->deleteLater(); + delete ui; - writeConfiguration(); return ret; } @@ -176,8 +173,10 @@ void AWStringFormatter::writeConfiguration() const } -void AWStringFormatter::translate() +void AWStringFormatter::translate(void *_ui) { + auto ui = reinterpret_cast(_ui); + ui->label_name->setText(i18n("Name")); ui->label_comment->setText(i18n("Comment")); ui->label_type->setText(i18n("Type")); diff --git a/sources/awesomewidgets/awstringformatter.h b/sources/awesomewidgets/awstringformatter.h index c634f6e..a39a814 100644 --- a/sources/awesomewidgets/awstringformatter.h +++ b/sources/awesomewidgets/awstringformatter.h @@ -21,11 +21,6 @@ #include "awabstractformatter.h" -namespace Ui -{ -class AWStringFormatter; -} - class AWStringFormatter : public AWAbstractFormatter { Q_OBJECT @@ -34,8 +29,7 @@ class AWStringFormatter : public AWAbstractFormatter Q_PROPERTY(bool forceWidth READ forceWidth WRITE setForceWidth) public: - explicit AWStringFormatter(QWidget *_parent = nullptr, const QString &_filePath = ""); - ~AWStringFormatter() override; + explicit AWStringFormatter(QObject *_parent = nullptr, const QString &_filePath = ""); [[nodiscard]] QString convert(const QVariant &_value) const override; AWStringFormatter *copy(const QString &_fileName, int _number) override; // properties @@ -48,12 +42,11 @@ public: public slots: void readConfiguration() override; - int showConfiguration(const QVariant &_args) override; + int showConfiguration(QWidget *_parent, const QVariant &_args) override; void writeConfiguration() const override; private: - Ui::AWStringFormatter *ui = nullptr; - void translate() override; + void translate(void *_ui) override; // properties int m_count = 0; QChar m_fillChar = QChar(); diff --git a/sources/awesomewidgets/extnetworkrequest.cpp b/sources/awesomewidgets/extnetworkrequest.cpp index f496c16..05cd703 100644 --- a/sources/awesomewidgets/extnetworkrequest.cpp +++ b/sources/awesomewidgets/extnetworkrequest.cpp @@ -27,16 +27,13 @@ #include "awdebug.h" -ExtNetworkRequest::ExtNetworkRequest(QWidget *_parent, const QString &_filePath) +ExtNetworkRequest::ExtNetworkRequest(QObject *_parent, const QString &_filePath) : AbstractExtItem(_parent, _filePath) - , ui(new Ui::ExtNetworkRequest) { qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; if (!_filePath.isEmpty()) ExtNetworkRequest::readConfiguration(); - ui->setupUi(this); - ExtNetworkRequest::translate(); m_values[tag("response")] = ""; @@ -57,7 +54,6 @@ ExtNetworkRequest::~ExtNetworkRequest() disconnect(this, SIGNAL(requestDataUpdate()), this, SLOT(sendRequest())); m_manager->deleteLater(); - delete ui; } @@ -65,7 +61,7 @@ ExtNetworkRequest *ExtNetworkRequest::copy(const QString &_fileName, const int _ { qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number; - auto *item = new ExtNetworkRequest(dynamic_cast(parent()), _fileName); + auto item = new ExtNetworkRequest(parent(), _fileName); copyDefaults(item); item->setNumber(_number); item->setStringUrl(stringUrl()); @@ -119,10 +115,15 @@ QVariantHash ExtNetworkRequest::run() } -int ExtNetworkRequest::showConfiguration(const QVariant &_args) +int ExtNetworkRequest::showConfiguration(QWidget *_parent, const QVariant &_args) { Q_UNUSED(_args) + auto dialog = new QDialog(_parent); + auto ui = new Ui::ExtNetworkRequest(); + ui->setupUi(dialog); + translate(ui); + ui->lineEdit_name->setText(name()); ui->lineEdit_comment->setText(comment()); ui->label_numberValue->setText(QString("%1").arg(number())); @@ -132,20 +133,24 @@ int ExtNetworkRequest::showConfiguration(const QVariant &_args) ui->lineEdit_socket->setText(socket()); ui->spinBox_interval->setValue(interval()); - int ret = exec(); - if (ret != 1) - return ret; - setName(ui->lineEdit_name->text()); - setComment(ui->lineEdit_comment->text()); - setNumber(ui->label_numberValue->text().toInt()); - setApiVersion(AW_EXTNETREQUEST_API); - setStringUrl(ui->lineEdit_url->text()); - setActive(ui->checkBox_active->checkState() == Qt::Checked); - setCron(ui->lineEdit_schedule->text()); - setSocket(ui->lineEdit_socket->text()); - setInterval(ui->spinBox_interval->value()); + auto ret = dialog->exec(); + if (ret == 1) { + setName(ui->lineEdit_name->text()); + setComment(ui->lineEdit_comment->text()); + setNumber(ui->label_numberValue->text().toInt()); + setApiVersion(AW_EXTNETREQUEST_API); + setStringUrl(ui->lineEdit_url->text()); + setActive(ui->checkBox_active->checkState() == Qt::Checked); + setCron(ui->lineEdit_schedule->text()); + setSocket(ui->lineEdit_socket->text()); + setInterval(ui->spinBox_interval->value()); + + writeConfiguration(); + } + + dialog->deleteLater(); + delete ui; - writeConfiguration(); return ret; } @@ -181,7 +186,7 @@ void ExtNetworkRequest::networkReplyReceived(QNetworkReply *_reply) void ExtNetworkRequest::sendRequest() { m_isRunning = true; - QNetworkReply *reply = m_manager->get(QNetworkRequest(m_url)); + auto reply = m_manager->get(QNetworkRequest(m_url)); new QReplyTimeout(reply, REQUEST_TIMEOUT); } @@ -192,8 +197,10 @@ void ExtNetworkRequest::initUrl() } -void ExtNetworkRequest::translate() +void ExtNetworkRequest::translate(void *_ui) { + auto ui = reinterpret_cast(_ui); + ui->label_name->setText(i18n("Name")); ui->label_comment->setText(i18n("Comment")); ui->label_number->setText(i18n("Tag")); diff --git a/sources/awesomewidgets/extnetworkrequest.h b/sources/awesomewidgets/extnetworkrequest.h index fb079a6..3d92ab2 100644 --- a/sources/awesomewidgets/extnetworkrequest.h +++ b/sources/awesomewidgets/extnetworkrequest.h @@ -23,18 +23,13 @@ #include "abstractextitem.h" -namespace Ui -{ -class ExtNetworkRequest; -} - class ExtNetworkRequest : public AbstractExtItem { Q_OBJECT Q_PROPERTY(QString stringUrl READ stringUrl WRITE setStringUrl) public: - explicit ExtNetworkRequest(QWidget *_parent = nullptr, const QString &_filePath = ""); + explicit ExtNetworkRequest(QObject *_parent = nullptr, const QString &_filePath = ""); ~ExtNetworkRequest() override; ExtNetworkRequest *copy(const QString &_fileName, int _number) override; // get methods @@ -46,7 +41,7 @@ public: public slots: void readConfiguration() override; QVariantHash run() override; - int showConfiguration(const QVariant &_args) override; + int showConfiguration(QWidget *_parent, const QVariant &_args) override; void writeConfiguration() const override; private slots: @@ -57,9 +52,8 @@ private: QNetworkAccessManager *m_manager = nullptr; QUrl m_url; bool m_isRunning = false; - Ui::ExtNetworkRequest *ui = nullptr; void initUrl(); - void translate() override; + void translate(void *_ui) override; // properties QString m_stringUrl = "https://httpbin.org/get"; // values diff --git a/sources/awesomewidgets/extquotes.cpp b/sources/awesomewidgets/extquotes.cpp index c2e5090..84a8cf6 100644 --- a/sources/awesomewidgets/extquotes.cpp +++ b/sources/awesomewidgets/extquotes.cpp @@ -20,7 +20,6 @@ #include -#include #include #include @@ -29,16 +28,13 @@ #include "stooqquotesprovider.h" -ExtQuotes::ExtQuotes(QWidget *_parent, const QString &_filePath) +ExtQuotes::ExtQuotes(QObject *_parent, const QString &_filePath) : AbstractExtItem(_parent, _filePath) - , ui(new Ui::ExtQuotes) { qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; if (!_filePath.isEmpty()) ExtQuotes::readConfiguration(); - ui->setupUi(this); - ExtQuotes::translate(); m_values[tag("price")] = 0.0; m_values[tag("pricechg")] = 0.0; @@ -64,7 +60,6 @@ ExtQuotes::~ExtQuotes() disconnect(this, SIGNAL(requestDataUpdate()), this, SLOT(sendRequest())); m_manager->deleteLater(); - delete ui; } @@ -72,7 +67,7 @@ ExtQuotes *ExtQuotes::copy(const QString &_fileName, const int _number) { qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number; - auto *item = new ExtQuotes(dynamic_cast(parent()), _fileName); + auto item = new ExtQuotes(parent(), _fileName); copyDefaults(item); item->setNumber(_number); item->setTicker(ticker()); @@ -126,10 +121,15 @@ QVariantHash ExtQuotes::run() } -int ExtQuotes::showConfiguration(const QVariant &_args) +int ExtQuotes::showConfiguration(QWidget *_parent, const QVariant &_args) { Q_UNUSED(_args) + auto dialog = new QDialog(_parent); + auto ui = new Ui::ExtQuotes(); + ui->setupUi(dialog); + translate(ui); + ui->lineEdit_name->setText(name()); ui->lineEdit_comment->setText(comment()); ui->label_numberValue->setText(QString("%1").arg(number())); @@ -139,20 +139,24 @@ int ExtQuotes::showConfiguration(const QVariant &_args) ui->lineEdit_socket->setText(socket()); ui->spinBox_interval->setValue(interval()); - int ret = exec(); - if (ret != 1) - return ret; - setName(ui->lineEdit_name->text()); - setComment(ui->lineEdit_comment->text()); - setNumber(ui->label_numberValue->text().toInt()); - setApiVersion(AW_EXTQUOTES_API); - setTicker(ui->lineEdit_ticker->text()); - setActive(ui->checkBox_active->checkState() == Qt::Checked); - setCron(ui->lineEdit_schedule->text()); - setSocket(ui->lineEdit_socket->text()); - setInterval(ui->spinBox_interval->value()); + auto ret = dialog->exec(); + if (ret == 1) { + setName(ui->lineEdit_name->text()); + setComment(ui->lineEdit_comment->text()); + setNumber(ui->label_numberValue->text().toInt()); + setApiVersion(AW_EXTQUOTES_API); + setTicker(ui->lineEdit_ticker->text()); + setActive(ui->checkBox_active->checkState() == Qt::Checked); + setCron(ui->lineEdit_schedule->text()); + setSocket(ui->lineEdit_socket->text()); + setInterval(ui->spinBox_interval->value()); + + writeConfiguration(); + } + + dialog->deleteLater(); + delete ui; - writeConfiguration(); return ret; } @@ -182,7 +186,7 @@ void ExtQuotes::quotesReplyReceived(QNetworkReply *_reply) auto text = _reply->readAll(); _reply->deleteLater(); - QVariantHash data = m_providerObject->parse(text, m_values); + auto data = m_providerObject->parse(text, m_values); if (data.isEmpty()) return; m_values = data; @@ -194,7 +198,7 @@ void ExtQuotes::quotesReplyReceived(QNetworkReply *_reply) void ExtQuotes::sendRequest() { m_isRunning = true; - QNetworkReply *reply = m_manager->get(QNetworkRequest(m_providerObject->url())); + auto reply = m_manager->get(QNetworkRequest(m_providerObject->url())); new QReplyTimeout(reply, REQUEST_TIMEOUT); } @@ -210,8 +214,10 @@ void ExtQuotes::initProvider() } -void ExtQuotes::translate() +void ExtQuotes::translate(void *_ui) { + auto ui = reinterpret_cast(_ui); + ui->label_name->setText(i18n("Name")); ui->label_comment->setText(i18n("Comment")); ui->label_number->setText(i18n("Tag")); diff --git a/sources/awesomewidgets/extquotes.h b/sources/awesomewidgets/extquotes.h index 1acce39..68f5b6e 100644 --- a/sources/awesomewidgets/extquotes.h +++ b/sources/awesomewidgets/extquotes.h @@ -24,10 +24,6 @@ class AbstractQuotesProvider; -namespace Ui -{ -class ExtQuotes; -} class ExtQuotes : public AbstractExtItem { @@ -35,7 +31,7 @@ class ExtQuotes : public AbstractExtItem Q_PROPERTY(QString ticker READ ticker WRITE setTicker) public: - explicit ExtQuotes(QWidget *_parent = nullptr, const QString &_filePath = ""); + explicit ExtQuotes(QObject *_parent = nullptr, const QString &_filePath = ""); ~ExtQuotes() override; ExtQuotes *copy(const QString &_fileName, int _number) override; // get methods @@ -47,7 +43,7 @@ public: public slots: void readConfiguration() override; QVariantHash run() override; - int showConfiguration(const QVariant &_args) override; + int showConfiguration(QWidget *_parent, const QVariant &_args) override; void writeConfiguration() const override; private slots: @@ -58,9 +54,8 @@ private: AbstractQuotesProvider *m_providerObject = nullptr; QNetworkAccessManager *m_manager = nullptr; bool m_isRunning = false; - Ui::ExtQuotes *ui = nullptr; void initProvider(); - void translate() override; + void translate(void *_ui) override; // properties QString m_ticker = "EURUSD=X"; // values diff --git a/sources/awesomewidgets/extscript.cpp b/sources/awesomewidgets/extscript.cpp index 27cfec8..d43f01b 100644 --- a/sources/awesomewidgets/extscript.cpp +++ b/sources/awesomewidgets/extscript.cpp @@ -28,17 +28,14 @@ #include "awdebug.h" -ExtScript::ExtScript(QWidget *_parent, const QString &_filePath) +ExtScript::ExtScript(QObject *_parent, const QString &_filePath) : AbstractExtItem(_parent, _filePath) - , ui(new Ui::ExtScript) { qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; if (!_filePath.isEmpty()) ExtScript::readConfiguration(); readJsonFilters(); - ui->setupUi(this); - ExtScript::translate(); m_values[tag("custom")] = ""; @@ -58,7 +55,6 @@ ExtScript::~ExtScript() m_process->kill(); m_process->deleteLater(); disconnect(this, SIGNAL(requestDataUpdate()), this, SLOT(startProcess())); - delete ui; } @@ -66,7 +62,7 @@ ExtScript *ExtScript::copy(const QString &_fileName, const int _number) { qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number; - auto *item = new ExtScript(dynamic_cast(parent()), _fileName); + auto item = new ExtScript(parent(), _fileName); copyDefaults(item); item->setExecutable(executable()); item->setNumber(_number); @@ -179,7 +175,7 @@ QString ExtScript::applyFilters(QString _value) const for (auto &filt : filters()) { qCInfo(LOG_LIB) << "Found filter" << filt; - QVariantMap filter = m_jsonFilters[filt].toMap(); + auto filter = m_jsonFilters[filt].toMap(); if (filter.isEmpty()) { qCWarning(LOG_LIB) << "Could not find filter" << _value << "in the json"; continue; @@ -225,7 +221,7 @@ void ExtScript::readConfiguration() void ExtScript::readJsonFilters() { - QString fileName = jsonFiltersFile(); + auto fileName = jsonFiltersFile(); QFile jsonFile(fileName); if (!jsonFile.open(QIODevice::ReadOnly | QIODevice::Text)) { qCWarning(LOG_LIB) << "Could not open" << fileName; @@ -235,7 +231,7 @@ void ExtScript::readJsonFilters() jsonFile.close(); QJsonParseError error{}; - QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonText.toUtf8(), &error); + auto jsonDoc = QJsonDocument::fromJson(jsonText.toUtf8(), &error); if (error.error != QJsonParseError::NoError) { qCWarning(LOG_LIB) << "Parse error" << error.errorString(); return; @@ -256,10 +252,15 @@ QVariantHash ExtScript::run() } -int ExtScript::showConfiguration(const QVariant &_args) +int ExtScript::showConfiguration(QWidget *_parent, const QVariant &_args) { Q_UNUSED(_args) + auto dialog = new QDialog(_parent); + auto ui = new Ui::ExtScript(); + ui->setupUi(dialog); + translate(ui); + ui->lineEdit_name->setText(name()); ui->lineEdit_comment->setText(comment()); ui->label_numberValue->setText(QString("%1").arg(number())); @@ -274,25 +275,29 @@ int ExtScript::showConfiguration(const QVariant &_args) ui->checkBox_linesFilter->setCheckState(filters().contains("newline") ? Qt::Checked : Qt::Unchecked); ui->checkBox_spaceFilter->setCheckState(filters().contains("space") ? Qt::Checked : Qt::Unchecked); - int ret = exec(); - if (ret != 1) - return ret; - setName(ui->lineEdit_name->text()); - setComment(ui->lineEdit_comment->text()); - setNumber(ui->label_numberValue->text().toInt()); - setApiVersion(AW_EXTSCRIPT_API); - setExecutable(ui->lineEdit_command->text()); - setActive(ui->checkBox_active->checkState() == Qt::Checked); - setRedirect(static_cast(ui->comboBox_redirect->currentIndex())); - setCron(ui->lineEdit_schedule->text()); - setSocket(ui->lineEdit_socket->text()); - setInterval(ui->spinBox_interval->value()); - // filters - updateFilter("color", ui->checkBox_colorFilter->checkState() == Qt::Checked); - updateFilter("newline", ui->checkBox_linesFilter->checkState() == Qt::Checked); - updateFilter("space", ui->checkBox_spaceFilter->checkState() == Qt::Checked); + int ret = dialog->exec(); + if (ret == 1) { + setName(ui->lineEdit_name->text()); + setComment(ui->lineEdit_comment->text()); + setNumber(ui->label_numberValue->text().toInt()); + setApiVersion(AW_EXTSCRIPT_API); + setExecutable(ui->lineEdit_command->text()); + setActive(ui->checkBox_active->checkState() == Qt::Checked); + setRedirect(static_cast(ui->comboBox_redirect->currentIndex())); + setCron(ui->lineEdit_schedule->text()); + setSocket(ui->lineEdit_socket->text()); + setInterval(ui->spinBox_interval->value()); + // filters + updateFilter("color", ui->checkBox_colorFilter->checkState() == Qt::Checked); + updateFilter("newline", ui->checkBox_linesFilter->checkState() == Qt::Checked); + updateFilter("space", ui->checkBox_spaceFilter->checkState() == Qt::Checked); + + writeConfiguration(); + } + + dialog->deleteLater(); + delete ui; - writeConfiguration(); return ret; } @@ -324,9 +329,9 @@ void ExtScript::startProcess() void ExtScript::updateValue() { qCInfo(LOG_LIB) << "Cmd returns" << m_process->exitCode(); - QString qdebug = QString::fromUtf8(m_process->readAllStandardError()).trimmed(); + auto qdebug = QString::fromUtf8(m_process->readAllStandardError()).trimmed(); qCInfo(LOG_LIB) << "Error" << qdebug; - QString qoutput = QString::fromUtf8(m_process->readAllStandardOutput()).trimmed(); + auto qoutput = QString::fromUtf8(m_process->readAllStandardOutput()).trimmed(); qCInfo(LOG_LIB) << "Output" << qoutput; QString strValue; @@ -350,8 +355,10 @@ void ExtScript::updateValue() } -void ExtScript::translate() +void ExtScript::translate(void *_ui) { + auto ui = reinterpret_cast(_ui); + ui->label_name->setText(i18n("Name")); ui->label_comment->setText(i18n("Comment")); ui->label_number->setText(i18n("Tag")); diff --git a/sources/awesomewidgets/extscript.h b/sources/awesomewidgets/extscript.h index 784a545..2479367 100644 --- a/sources/awesomewidgets/extscript.h +++ b/sources/awesomewidgets/extscript.h @@ -23,11 +23,6 @@ #include "abstractextitem.h" -namespace Ui -{ -class ExtScript; -} - class ExtScript : public AbstractExtItem { Q_OBJECT @@ -38,7 +33,7 @@ class ExtScript : public AbstractExtItem public: enum class Redirect { stdout2stderr = 0, nothing = 1, stderr2stdout = 2, swap = 3 }; - explicit ExtScript(QWidget *_parent = nullptr, const QString &_filePath = ""); + explicit ExtScript(QObject *_parent = nullptr, const QString &_filePath = ""); ~ExtScript() override; ExtScript *copy(const QString &_fileName, int _number) override; static QString jsonFiltersFile(); @@ -62,7 +57,7 @@ public slots: void readConfiguration() override; void readJsonFilters(); QVariantHash run() override; - int showConfiguration(const QVariant &_args) override; + int showConfiguration(QWidget *_parent, const QVariant &_args) override; void writeConfiguration() const override; private slots: @@ -71,8 +66,7 @@ private slots: private: QProcess *m_process = nullptr; - Ui::ExtScript *ui = nullptr; - void translate() override; + void translate(void *_ui) override; // properties QString m_executable = "/usr/bin/true"; QStringList m_filters = QStringList(); diff --git a/sources/awesomewidgets/extupgrade.cpp b/sources/awesomewidgets/extupgrade.cpp index 7f81025..3bbaeae 100644 --- a/sources/awesomewidgets/extupgrade.cpp +++ b/sources/awesomewidgets/extupgrade.cpp @@ -25,16 +25,13 @@ #include "awdebug.h" -ExtUpgrade::ExtUpgrade(QWidget *_parent, const QString &_filePath) +ExtUpgrade::ExtUpgrade(QObject *_parent, const QString &_filePath) : AbstractExtItem(_parent, _filePath) - , ui(new Ui::ExtUpgrade) { qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; if (!_filePath.isEmpty()) ExtUpgrade::readConfiguration(); - ui->setupUi(this); - ExtUpgrade::translate(); m_values[tag("pkgcount")] = 0; @@ -53,7 +50,6 @@ ExtUpgrade::~ExtUpgrade() m_process->kill(); m_process->deleteLater(); disconnect(this, SIGNAL(requestDataUpdate()), this, SLOT(startProcess())); - delete ui; } @@ -61,7 +57,7 @@ ExtUpgrade *ExtUpgrade::copy(const QString &_fileName, const int _number) { qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number; - auto *item = new ExtUpgrade(dynamic_cast(parent()), _fileName); + auto item = new ExtUpgrade(parent(), _fileName); copyDefaults(item); item->setExecutable(executable()); item->setFilter(filter()); @@ -149,10 +145,15 @@ QVariantHash ExtUpgrade::run() } -int ExtUpgrade::showConfiguration(const QVariant &_args) +int ExtUpgrade::showConfiguration(QWidget *_parent, const QVariant &_args) { Q_UNUSED(_args) + auto dialog = new QDialog(_parent); + auto ui = new Ui::ExtUpgrade(); + ui->setupUi(dialog); + translate(ui); + ui->lineEdit_name->setText(name()); ui->lineEdit_comment->setText(comment()); ui->label_numberValue->setText(QString("%1").arg(number())); @@ -164,22 +165,26 @@ int ExtUpgrade::showConfiguration(const QVariant &_args) ui->lineEdit_socket->setText(socket()); ui->spinBox_interval->setValue(interval()); - int ret = exec(); - if (ret != 1) - return ret; - setName(ui->lineEdit_name->text()); - setComment(ui->lineEdit_comment->text()); - setNumber(ui->label_numberValue->text().toInt()); - setApiVersion(AW_EXTUPGRADE_API); - setExecutable(ui->lineEdit_command->text()); - setFilter(ui->lineEdit_filter->text()); - setActive(ui->checkBox_active->checkState() == Qt::Checked); - setNull(ui->spinBox_null->value()); - setCron(ui->lineEdit_schedule->text()); - setSocket(ui->lineEdit_socket->text()); - setInterval(ui->spinBox_interval->value()); + auto ret = dialog->exec(); + if (ret == 1) { + setName(ui->lineEdit_name->text()); + setComment(ui->lineEdit_comment->text()); + setNumber(ui->label_numberValue->text().toInt()); + setApiVersion(AW_EXTUPGRADE_API); + setExecutable(ui->lineEdit_command->text()); + setFilter(ui->lineEdit_filter->text()); + setActive(ui->checkBox_active->checkState() == Qt::Checked); + setNull(ui->spinBox_null->value()); + setCron(ui->lineEdit_schedule->text()); + setSocket(ui->lineEdit_socket->text()); + setInterval(ui->spinBox_interval->value()); + + writeConfiguration(); + } + + dialog->deleteLater(); + delete ui; - writeConfiguration(); return ret; } @@ -213,7 +218,7 @@ void ExtUpgrade::updateValue() qCInfo(LOG_LIB) << "Cmd returns" << m_process->exitCode(); qCInfo(LOG_LIB) << "Error" << m_process->readAllStandardError(); - QString qoutput = QString::fromUtf8(m_process->readAllStandardOutput()).trimmed(); + auto qoutput = QString::fromUtf8(m_process->readAllStandardOutput()).trimmed(); m_values[tag("pkgcount")] = [this](const QString &output) { return filter().isEmpty() ? output.split('\n', Qt::SkipEmptyParts).count() - null() : output.split('\n', Qt::SkipEmptyParts).filter(QRegularExpression(filter())).count(); @@ -223,8 +228,10 @@ void ExtUpgrade::updateValue() } -void ExtUpgrade::translate() +void ExtUpgrade::translate(void *_ui) { + auto ui = reinterpret_cast(_ui); + ui->label_name->setText(i18n("Name")); ui->label_comment->setText(i18n("Comment")); ui->label_number->setText(i18n("Tag")); diff --git a/sources/awesomewidgets/extupgrade.h b/sources/awesomewidgets/extupgrade.h index 62b0edd..30d72f3 100644 --- a/sources/awesomewidgets/extupgrade.h +++ b/sources/awesomewidgets/extupgrade.h @@ -23,11 +23,6 @@ #include "abstractextitem.h" -namespace Ui -{ -class ExtUpgrade; -} - class ExtUpgrade : public AbstractExtItem { Q_OBJECT @@ -36,7 +31,7 @@ class ExtUpgrade : public AbstractExtItem Q_PROPERTY(int null READ null WRITE setNull) public: - explicit ExtUpgrade(QWidget *_parent = nullptr, const QString &_filePath = ""); + explicit ExtUpgrade(QObject *_parent = nullptr, const QString &_filePath = ""); ~ExtUpgrade() override; ExtUpgrade *copy(const QString &_fileName, int _number) override; // get methods @@ -52,7 +47,7 @@ public: public slots: void readConfiguration() override; QVariantHash run() override; - int showConfiguration(const QVariant &_args) override; + int showConfiguration(QWidget *_parent, const QVariant &_args) override; void writeConfiguration() const override; private slots: @@ -61,8 +56,7 @@ private slots: private: QProcess *m_process = nullptr; - Ui::ExtUpgrade *ui = nullptr; - void translate() override; + void translate(void *_ui) override; // properties QString m_executable = "/usr/bin/true"; QString m_filter = ""; diff --git a/sources/awesomewidgets/extweather.cpp b/sources/awesomewidgets/extweather.cpp index 0e5f781..50b4d3a 100644 --- a/sources/awesomewidgets/extweather.cpp +++ b/sources/awesomewidgets/extweather.cpp @@ -29,20 +29,16 @@ #include "awdebug.h" #include "owmweatherprovider.h" -#include "yahooweatherprovider.h" -ExtWeather::ExtWeather(QWidget *_parent, const QString &_filePath) +ExtWeather::ExtWeather(QObject *_parent, const QString &_filePath) : AbstractExtItem(_parent, _filePath) - , ui(new Ui::ExtWeather) { qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; if (!_filePath.isEmpty()) ExtWeather::readConfiguration(); readJsonMap(); - ui->setupUi(this); - ExtWeather::translate(); m_values[tag("weatherId")] = 0; m_values[tag("weather")] = ""; @@ -67,7 +63,6 @@ ExtWeather::~ExtWeather() disconnect(this, SIGNAL(requestDataUpdate()), this, SLOT(sendRequest())); m_manager->deleteLater(); - delete ui; } @@ -75,7 +70,7 @@ ExtWeather *ExtWeather::copy(const QString &_fileName, const int _number) { qCDebug(LOG_LIB) << "File" << _fileName << "number" << _number; - auto *item = new ExtWeather(dynamic_cast(parent()), _fileName); + auto item = new ExtWeather(parent(), _fileName); copyDefaults(item); item->setCity(city()); item->setCountry(country()); @@ -102,7 +97,7 @@ QString ExtWeather::weatherFromInt(const int _id) const { qCDebug(LOG_LIB) << "Weather ID" << _id; - QVariantMap map = m_jsonMap[m_image ? "image" : "text"].toMap(); + auto map = m_jsonMap[m_image ? "image" : "text"].toMap(); return map.value(QString::number(_id), map["default"]).toString(); } @@ -236,7 +231,7 @@ void ExtWeather::readConfiguration() void ExtWeather::readJsonMap() { - QString fileName = jsonMapFile(); + auto fileName = jsonMapFile(); QFile jsonFile(fileName); if (!jsonFile.open(QIODevice::ReadOnly | QIODevice::Text)) { qCWarning(LOG_LIB) << "Could not open" << fileName; @@ -246,7 +241,7 @@ void ExtWeather::readJsonMap() jsonFile.close(); QJsonParseError error{}; - QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonText.toUtf8(), &error); + auto jsonDoc = QJsonDocument::fromJson(jsonText.toUtf8(), &error); if (error.error != QJsonParseError::NoError) { qCWarning(LOG_LIB) << "Parse error" << error.errorString(); return; @@ -267,10 +262,15 @@ QVariantHash ExtWeather::run() } -int ExtWeather::showConfiguration(const QVariant &_args) +int ExtWeather::showConfiguration(QWidget *_parent, const QVariant &_args) { Q_UNUSED(_args) + auto dialog = new QDialog(_parent); + auto ui = new Ui::ExtWeather(); + ui->setupUi(dialog); + translate(ui); + ui->lineEdit_name->setText(name()); ui->lineEdit_comment->setText(comment()); ui->label_numberValue->setText(QString("%1").arg(number())); @@ -284,24 +284,28 @@ int ExtWeather::showConfiguration(const QVariant &_args) ui->lineEdit_socket->setText(socket()); ui->spinBox_interval->setValue(interval()); - int ret = exec(); - if (ret != 1) - return ret; - setName(ui->lineEdit_name->text()); - setComment(ui->lineEdit_comment->text()); - setNumber(ui->label_numberValue->text().toInt()); - setApiVersion(AW_EXTWEATHER_API); - setCity(ui->lineEdit_city->text()); - setCountry(ui->lineEdit_country->text()); - setProvider(static_cast(ui->comboBox_provider->currentIndex())); - setTs(ui->spinBox_timestamp->value()); - setImage(ui->checkBox_image->checkState() == Qt::Checked); - setActive(ui->checkBox_active->checkState() == Qt::Checked); - setCron(ui->lineEdit_schedule->text()); - setSocket(ui->lineEdit_socket->text()); - setInterval(ui->spinBox_interval->value()); + int ret = dialog->exec(); + if (ret == 1) { + setName(ui->lineEdit_name->text()); + setComment(ui->lineEdit_comment->text()); + setNumber(ui->label_numberValue->text().toInt()); + setApiVersion(AW_EXTWEATHER_API); + setCity(ui->lineEdit_city->text()); + setCountry(ui->lineEdit_country->text()); + setProvider(static_cast(ui->comboBox_provider->currentIndex())); + setTs(ui->spinBox_timestamp->value()); + setImage(ui->checkBox_image->checkState() == Qt::Checked); + setActive(ui->checkBox_active->checkState() == Qt::Checked); + setCron(ui->lineEdit_schedule->text()); + setSocket(ui->lineEdit_socket->text()); + setInterval(ui->spinBox_interval->value()); + + writeConfiguration(); + } + + dialog->deleteLater(); + delete ui; - writeConfiguration(); return ret; } @@ -328,7 +332,7 @@ void ExtWeather::writeConfiguration() const void ExtWeather::sendRequest() { m_isRunning = true; - QNetworkReply *reply = m_manager->get(QNetworkRequest(m_providerObject->url())); + auto reply = m_manager->get(QNetworkRequest(m_providerObject->url())); new QReplyTimeout(reply, REQUEST_TIMEOUT); } @@ -342,14 +346,14 @@ void ExtWeather::weatherReplyReceived(QNetworkReply *_reply) m_isRunning = false; QJsonParseError error{}; - QJsonDocument jsonDoc = QJsonDocument::fromJson(_reply->readAll(), &error); + auto jsonDoc = QJsonDocument::fromJson(_reply->readAll(), &error); _reply->deleteLater(); if (error.error != QJsonParseError::NoError) { qCWarning(LOG_LIB) << "Parse error" << error.errorString(); return; } - QVariantHash data = m_providerObject->parse(jsonDoc.toVariant().toMap()); + auto data = m_providerObject->parse(jsonDoc.toVariant().toMap()); if (data.isEmpty()) return; m_values = data; @@ -370,8 +374,10 @@ void ExtWeather::initProvider() } -void ExtWeather::translate() +void ExtWeather::translate(void *_ui) { + auto ui = reinterpret_cast(_ui); + ui->label_name->setText(i18n("Name")); ui->label_comment->setText(i18n("Comment")); ui->label_number->setText(i18n("Tag")); diff --git a/sources/awesomewidgets/extweather.h b/sources/awesomewidgets/extweather.h index 0ba6c7f..c3dda30 100644 --- a/sources/awesomewidgets/extweather.h +++ b/sources/awesomewidgets/extweather.h @@ -42,7 +42,7 @@ class ExtWeather : public AbstractExtItem public: enum class Provider { OWM = 0, Yahoo = 1 }; - explicit ExtWeather(QWidget *_parent = nullptr, const QString &_filePath = ""); + explicit ExtWeather(QObject *_parent = nullptr, const QString &_filePath = ""); ~ExtWeather() override; ExtWeather *copy(const QString &_fileName, int _number) override; static QString jsonMapFile(); @@ -67,7 +67,7 @@ public slots: void readConfiguration() override; void readJsonMap(); QVariantHash run() override; - int showConfiguration(const QVariant &_args) override; + int showConfiguration(QWidget *_parent, const QVariant &_args) override; void writeConfiguration() const override; private slots: @@ -78,9 +78,8 @@ private: AbstractWeatherProvider *m_providerObject = nullptr; QNetworkAccessManager *m_manager = nullptr; bool m_isRunning = false; - Ui::ExtWeather *ui = nullptr; void initProvider(); - void translate() override; + void translate(void *_ui) override; // properties QString m_city = "London"; QString m_country = "uk"; diff --git a/sources/awesomewidgets/graphicalitem.cpp b/sources/awesomewidgets/graphicalitem.cpp index fa87f05..0c3964f 100644 --- a/sources/awesomewidgets/graphicalitem.cpp +++ b/sources/awesomewidgets/graphicalitem.cpp @@ -32,9 +32,8 @@ #include "graphicalitemhelper.h" -GraphicalItem::GraphicalItem(QWidget *_parent, const QString &_filePath) +GraphicalItem::GraphicalItem(QObject *_parent, const QString &_filePath) : AbstractExtItem(_parent, _filePath) - , ui(new Ui::GraphicalItem) { qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; @@ -53,21 +52,6 @@ GraphicalItem::GraphicalItem(QWidget *_parent, const QString &_filePath) if (!_filePath.isEmpty()) GraphicalItem::readConfiguration(); - ui->setupUi(this); - GraphicalItem::translate(); - - connect(ui->checkBox_custom, SIGNAL(stateChanged(int)), this, SLOT(changeValue(int))); - connect(ui->comboBox_type, SIGNAL(currentIndexChanged(int)), this, SLOT(changeCountState(int))); - connect(ui->toolButton_activeColor, SIGNAL(clicked()), this, SLOT(changeColor())); - connect(ui->toolButton_inactiveColor, SIGNAL(clicked()), this, SLOT(changeColor())); -} - - -GraphicalItem::~GraphicalItem() -{ - qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; - - delete ui; } @@ -75,7 +59,7 @@ GraphicalItem *GraphicalItem::copy(const QString &_fileName, const int _number) { qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number; - auto *item = new GraphicalItem(dynamic_cast(parent()), _fileName); + auto item = new GraphicalItem(parent(), _fileName); copyDefaults(item); item->setActiveColor(activeColor()); item->setBar(bar()); @@ -100,7 +84,7 @@ QString GraphicalItem::image(const QVariant &value) m_scene->clear(); int scale[2] = {1, 1}; - float converted = GraphicalItemHelper::getPercents(value.toFloat(), minValue(), maxValue()); + auto converted = GraphicalItemHelper::getPercents(value.toFloat(), minValue(), maxValue()); // paint switch (m_type) { @@ -132,11 +116,11 @@ QString GraphicalItem::image(const QVariant &value) } // convert - QPixmap pixmap = m_view->grab().transformed(QTransform().scale(scale[0], scale[1])); + auto pixmap = m_view->grab().transformed(QTransform().scale(scale[0], scale[1])); QByteArray byteArray; QBuffer buffer(&byteArray); pixmap.save(&buffer, "PNG"); - QString url = QString("").arg(QString(byteArray.toBase64())); + auto url = QString("").arg(QString(byteArray.toBase64())); return url; } @@ -438,10 +422,20 @@ void GraphicalItem::readConfiguration() } -int GraphicalItem::showConfiguration(const QVariant &_args) +int GraphicalItem::showConfiguration(QWidget *_parent, const QVariant &_args) { qCDebug(LOG_LIB) << "Combobox arguments" << _args; - QStringList tags = _args.toStringList(); + auto tags = _args.toStringList(); + + auto dialog = new QDialog(_parent); + auto ui = new Ui::GraphicalItem(); + ui->setupUi(dialog); + translate(ui); + + connect(ui->checkBox_custom, &QCheckBox::stateChanged, [this, ui](const int state) { changeValue(ui, state); }); + connect(ui->comboBox_type, &QComboBox::currentIndexChanged, [this, ui](const int state) { changeCountState(ui, state); }); + connect(ui->toolButton_activeColor, &QToolButton::clicked, [this, ui]() { changeColor(ui); }); + connect(ui->toolButton_inactiveColor, &QToolButton::clicked, [this, ui]() { changeColor(ui); }); ui->lineEdit_name->setText(name()); ui->lineEdit_comment->setText(comment()); @@ -476,25 +470,29 @@ int GraphicalItem::showConfiguration(const QVariant &_args) emit(ui->comboBox_type->currentIndexChanged(ui->comboBox_type->currentIndex())); emit(ui->checkBox_custom->stateChanged(ui->checkBox_custom->checkState())); - int ret = exec(); - if (ret != 1) - return ret; - setName(ui->lineEdit_name->text()); - setComment(ui->lineEdit_comment->text()); - setApiVersion(AW_GRAPHITEM_API); - setCount(ui->spinBox_count->value()); - setCustom(ui->checkBox_custom->isChecked()); - setBar(m_custom ? ui->lineEdit_customValue->text() : ui->comboBox_value->currentText()); - setMaxValue(static_cast(ui->doubleSpinBox_max->value())); - setMinValue(static_cast(ui->doubleSpinBox_min->value())); - setActiveColor(ui->lineEdit_activeColor->text()); - setInactiveColor(ui->lineEdit_inactiveColor->text()); - setType(static_cast(ui->comboBox_type->currentIndex())); - setDirection(static_cast(ui->comboBox_direction->currentIndex())); - setItemHeight(ui->spinBox_height->value()); - setItemWidth(ui->spinBox_width->value()); + int ret = dialog->exec(); + if (ret == 1) { + setName(ui->lineEdit_name->text()); + setComment(ui->lineEdit_comment->text()); + setApiVersion(AW_GRAPHITEM_API); + setCount(ui->spinBox_count->value()); + setCustom(ui->checkBox_custom->isChecked()); + setBar(m_custom ? ui->lineEdit_customValue->text() : ui->comboBox_value->currentText()); + setMaxValue(static_cast(ui->doubleSpinBox_max->value())); + setMinValue(static_cast(ui->doubleSpinBox_min->value())); + setActiveColor(ui->lineEdit_activeColor->text()); + setInactiveColor(ui->lineEdit_inactiveColor->text()); + setType(static_cast(ui->comboBox_type->currentIndex())); + setDirection(static_cast(ui->comboBox_direction->currentIndex())); + setItemHeight(ui->spinBox_height->value()); + setItemWidth(ui->spinBox_width->value()); + + writeConfiguration(); + } + + dialog->deleteLater(); + delete ui; - writeConfiguration(); return ret; } @@ -524,23 +522,23 @@ void GraphicalItem::writeConfiguration() const } -void GraphicalItem::changeColor() +void GraphicalItem::changeColor(Ui::GraphicalItem *_ui) { QLineEdit *lineEdit; int state; - if (sender() == ui->toolButton_activeColor) { - lineEdit = ui->lineEdit_activeColor; - state = ui->comboBox_activeImageType->currentIndex(); + if (sender() == _ui->toolButton_activeColor) { + lineEdit = _ui->lineEdit_activeColor; + state = _ui->comboBox_activeImageType->currentIndex(); } else { - lineEdit = ui->lineEdit_inactiveColor; - state = ui->comboBox_inactiveImageType->currentIndex(); + lineEdit = _ui->lineEdit_inactiveColor; + state = _ui->comboBox_inactiveImageType->currentIndex(); } qCInfo(LOG_LIB) << "Using state" << state << "and lineEdit" << lineEdit; QString outputColor; if (state == 0) { - QColor color = GraphicalItemHelper::stringToColor(lineEdit->text()); - QColor newColor = QColorDialog::getColor(color, this, i18n("Select color"), QColorDialog::ShowAlphaChannel); + auto color = GraphicalItemHelper::stringToColor(lineEdit->text()); + auto newColor = QColorDialog::getColor(color, nullptr, i18n("Select color"), QColorDialog::ShowAlphaChannel); if (!newColor.isValid()) return; qCInfo(LOG_LIB) << "Selected color" << newColor; @@ -553,9 +551,9 @@ void GraphicalItem::changeColor() outputColor = QString("color://%1").arg(colorText.join(',')); } else if (state == 1) { - QString path = lineEdit->text(); - QString directory = QFileInfo(path).absolutePath(); - outputColor = QFileDialog::getOpenFileUrl(this, i18n("Select path"), directory, + auto path = lineEdit->text(); + auto directory = QFileInfo(path).absolutePath(); + outputColor = QFileDialog::getOpenFileUrl(nullptr, i18n("Select path"), directory, i18n("Images (*.png *.bpm *.jpg);;All files (*.*)")) .toString(); @@ -570,26 +568,28 @@ void GraphicalItem::changeColor() } -void GraphicalItem::changeCountState(const int _state) +void GraphicalItem::changeCountState(Ui::GraphicalItem *_ui, const int _state) { qCDebug(LOG_LIB) << "Current state is" << _state; // 3 is magic number. Actually 3 is Graph mode - ui->widget_count->setHidden(_state != 3); + _ui->widget_count->setHidden(_state != 3); } -void GraphicalItem::changeValue(const int _state) +void GraphicalItem::changeValue(Ui::GraphicalItem *_ui, const int _state) { qCDebug(LOG_LIB) << "Current state is" << _state; - ui->widget_value->setHidden(_state != Qt::Unchecked); - ui->widget_customValue->setHidden(_state == Qt::Unchecked); + _ui->widget_value->setHidden(_state != Qt::Unchecked); + _ui->widget_customValue->setHidden(_state == Qt::Unchecked); } -void GraphicalItem::translate() +void GraphicalItem::translate(void *_ui) { + auto ui = reinterpret_cast(_ui); + ui->label_name->setText(i18n("Name")); ui->label_comment->setText(i18n("Comment")); ui->label_number->setText(i18n("Tag")); diff --git a/sources/awesomewidgets/graphicalitem.h b/sources/awesomewidgets/graphicalitem.h index f9d6492..c92c9fd 100644 --- a/sources/awesomewidgets/graphicalitem.h +++ b/sources/awesomewidgets/graphicalitem.h @@ -52,8 +52,7 @@ public: enum class Direction { LeftToRight = 0, RightToLeft = 1 }; enum class Type { Horizontal = 0, Vertical = 1, Circle = 2, Graph = 3, Bars = 4 }; - explicit GraphicalItem(QWidget *_parent = nullptr, const QString &_filePath = ""); - ~GraphicalItem() override; + explicit GraphicalItem(QObject *_parent = nullptr, const QString &_filePath = ""); GraphicalItem *copy(const QString &_fileName, int _number) override; QString image(const QVariant &value); void initScene(); @@ -92,20 +91,19 @@ public: public slots: void readConfiguration() override; QVariantHash run() override { return {}; }; - int showConfiguration(const QVariant &_args) override; + int showConfiguration(QWidget *_parent, const QVariant &_args) override; void writeConfiguration() const override; private slots: - void changeColor(); - void changeCountState(int _state); - void changeValue(int _state); + void changeColor(Ui::GraphicalItem *_ui); + void changeCountState(Ui::GraphicalItem *_ui, int _state); + void changeValue(Ui::GraphicalItem *_ui, int _state); private: GraphicalItemHelper *m_helper = nullptr; QGraphicsScene *m_scene = nullptr; QGraphicsView *m_view = nullptr; - Ui::GraphicalItem *ui = nullptr; - void translate() override; + void translate(void *_ui) override; // properties QString m_bar = "cpu"; int m_count = 100; From 67640cccdc7b9870f81971129cccb3f30e1cf4f3 Mon Sep 17 00:00:00 2001 From: Evgenii Alekseev Date: Thu, 21 Mar 2024 18:08:19 +0200 Subject: [PATCH 06/10] do not derive from qwidget in aggregates --- .../plugin/awdataengineaggregator.cpp | 41 +++++-- .../plugin/awdataengineaggregator.h | 1 + .../plugin/awdataenginemapper.cpp | 66 +++++----- .../plugin/awformatterhelper.cpp | 27 ++--- .../awesome-widget/plugin/awformatterhelper.h | 2 +- sources/awesome-widget/plugin/awkeys.cpp | 19 ++- .../abstractextitemaggregator.cpp | 114 +++++++++--------- .../abstractextitemaggregator.h | 45 +++---- sources/awesomewidgets/awfloatformatter.cpp | 1 - sources/awesomewidgets/awnoformatter.cpp | 1 - sources/awesomewidgets/awscriptformatter.cpp | 1 - sources/awesomewidgets/extitemaggregator.h | 12 +- sources/awesomewidgets/graphicalitem.cpp | 3 +- sources/extsysmon/extsysmon.cpp | 23 +--- sources/extsysmon/extsysmon.h | 4 - sources/extsysmon/extsysmonaggregator.cpp | 75 +++++------- sources/extsysmon/extsysmonaggregator.h | 5 + sources/extsysmonsources/batterysource.cpp | 77 ++++++------ sources/extsysmonsources/customsource.cpp | 2 +- sources/extsysmonsources/desktopsource.cpp | 24 ++-- sources/extsysmonsources/extsysmonsensor.cpp | 65 +++++++--- sources/extsysmonsources/extsysmonsensor.h | 10 +- sources/extsysmonsources/gpuloadsource.cpp | 10 +- sources/extsysmonsources/gputempsource.cpp | 10 +- sources/extsysmonsources/hddtempsource.cpp | 6 +- sources/extsysmonsources/loadsource.cpp | 4 +- sources/extsysmonsources/networksource.cpp | 16 +-- sources/extsysmonsources/playersource.cpp | 86 +++++++------ sources/extsysmonsources/processessource.cpp | 18 +-- sources/extsysmonsources/quotessource.cpp | 30 +++-- sources/extsysmonsources/requestsource.cpp | 10 +- sources/extsysmonsources/systeminfosource.cpp | 28 ++--- sources/extsysmonsources/systeminfosource.h | 4 +- sources/extsysmonsources/upgradesource.cpp | 2 +- sources/extsysmonsources/weathersource.cpp | 30 +++-- 35 files changed, 428 insertions(+), 444 deletions(-) diff --git a/sources/awesome-widget/plugin/awdataengineaggregator.cpp b/sources/awesome-widget/plugin/awdataengineaggregator.cpp index 87b5099..7a0b85d 100644 --- a/sources/awesome-widget/plugin/awdataengineaggregator.cpp +++ b/sources/awesome-widget/plugin/awdataengineaggregator.cpp @@ -18,6 +18,7 @@ #include "awdataengineaggregator.h" #include +#include #include #include "awdebug.h" @@ -33,15 +34,12 @@ AWDataEngineAggregator::AWDataEngineAggregator(QObject *_parent) qDBusRegisterMetaType(); qDBusRegisterMetaType>(); - m_interface = new KSysGuard::SystemStats::DBusInterface( - KSysGuard::SystemStats::ServiceName, KSysGuard::SystemStats::ObjectPath, QDBusConnection::sessionBus(), this); + m_interface = new KSysGuard::SystemStats::DBusInterface(); - connect(m_interface, SIGNAL(newSensorData(KSysGuard::SensorDataList)), this, - SLOT(updateData(KSysGuard::SensorDataList))); - connect(m_interface, SIGNAL(sensorMetaDataChanged(const QHash &)), this, - SLOT(updateSensors(const QHash &))); - connect(m_interface, SIGNAL(sensorAdded(const QString &)), this, SLOT(sensorAdded(const QString &))); - connect(m_interface, SIGNAL(sensorRemoved(const QString &)), this, SLOT(sensorRemoved(const QString &))); + connect(m_interface, &KSysGuard::SystemStats::DBusInterface::newSensorData, this, &AWDataEngineAggregator::updateData); + connect(m_interface, &KSysGuard::SystemStats::DBusInterface::sensorMetaDataChanged, this, &AWDataEngineAggregator::updateSensors); + connect(m_interface, &KSysGuard::SystemStats::DBusInterface::sensorAdded, this, &AWDataEngineAggregator::sensorAdded); + connect(m_interface, &KSysGuard::SystemStats::DBusInterface::sensorRemoved, this, &AWDataEngineAggregator::sensorRemoved); loadSources(); } @@ -52,6 +50,7 @@ AWDataEngineAggregator::~AWDataEngineAggregator() qCDebug(LOG_AW) << __PRETTY_FUNCTION__; disconnectSources(); + m_interface->deleteLater(); } @@ -61,6 +60,12 @@ void AWDataEngineAggregator::disconnectSources() } +bool AWDataEngineAggregator::isValidSensor(const KSysGuard::SensorInfo &_sensor) +{ + return _sensor.unit != KSysGuard::UnitInvalid; +} + + void AWDataEngineAggregator::loadSources() { auto response = m_interface->allSensors(); @@ -68,14 +73,12 @@ void AWDataEngineAggregator::loadSources() auto sensors = response.value(); updateSensors(sensors); - for (auto &sensor : sensors.keys()) - sensorAdded(sensor); } void AWDataEngineAggregator::reconnectSources(const int interval) { - qCDebug(LOG_AW) << "Reconnect all sources with update interval" << interval; + qCDebug(LOG_AW) << "Reconnect all sensors with update interval" << interval; disconnectSources(); m_interface->subscribe(m_sensors.keys()); @@ -84,7 +87,7 @@ void AWDataEngineAggregator::reconnectSources(const int interval) void AWDataEngineAggregator::dropSource(const QString &_source) { - qCDebug(LOG_AW) << "Disconnect source" << _source; + qCDebug(LOG_AW) << "Disconnect sensor" << _source; m_interface->unsubscribe({_source}); } @@ -94,6 +97,15 @@ void AWDataEngineAggregator::sensorAdded(const QString &_sensor) { qCDebug(LOG_AW) << "New sensor added" << _sensor; + // check if sensor is actually valid + auto response = m_interface->sensors({_sensor}); + response.waitForFinished(); + auto info = response.value(); + if (info.count() != 1) + return; + + qCWarning(LOG_AW) << info.keys(); + m_interface->subscribe({_sensor}); } @@ -114,6 +126,9 @@ void AWDataEngineAggregator::updateData(KSysGuard::SensorDataList _data) void AWDataEngineAggregator::updateSensors(const QHash &_sensors) { - for (auto sensor = _sensors.cbegin(); sensor != _sensors.cend(); ++sensor) + for (auto sensor = _sensors.cbegin(); sensor != _sensors.cend(); ++sensor) { + if (!isValidSensor(sensor.value())) + continue; m_sensors.insert(sensor.key(), sensor.value()); + } } diff --git a/sources/awesome-widget/plugin/awdataengineaggregator.h b/sources/awesome-widget/plugin/awdataengineaggregator.h index f3a1e49..fcdab62 100644 --- a/sources/awesome-widget/plugin/awdataengineaggregator.h +++ b/sources/awesome-widget/plugin/awdataengineaggregator.h @@ -40,6 +40,7 @@ public: explicit AWDataEngineAggregator(QObject *_parent = nullptr); ~AWDataEngineAggregator() override; void disconnectSources(); + [[nodiscard]] bool isValidSensor(const KSysGuard::SensorInfo &_sensor); void loadSources(); void reconnectSources(const int interval); diff --git a/sources/awesome-widget/plugin/awdataenginemapper.cpp b/sources/awesome-widget/plugin/awdataenginemapper.cpp index 7c15e64..cab3e4a 100644 --- a/sources/awesome-widget/plugin/awdataenginemapper.cpp +++ b/sources/awesome-widget/plugin/awdataenginemapper.cpp @@ -92,14 +92,14 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const KSy auto netRegExp = QRegularExpression("^network/.*/(download|upload)$"); auto netTotalRegExp = QRegularExpression("^network/.*/(totalDownload|totalUpload)$"); - if (_source == "battery/ac") { + if (_source == "extsysmon/battery/ac") { // AC m_map.insert(_source, "ac"); m_formatter["ac"] = AWKeysAggregator::FormatterType::ACFormat; - } else if (_source.startsWith("battery/")) { + } else if (_source.startsWith("extsysmon/battery/")) { // battery stats QString key = _source; - key.remove("battery/"); + key.remove("extsysmon/battery/"); m_map.insert(_source, key); m_formatter[key] = _source.contains("rate") ? AWKeysAggregator::FormatterType::Float : AWKeysAggregator::FormatterType::IntegerThree; @@ -124,21 +124,21 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const KSy key = QString("cpucl%1").arg(key); m_map.insert(_source, key); m_formatter[key] = AWKeysAggregator::FormatterType::Integer; - } else if (_source.startsWith("custom")) { + } else if (_source.startsWith("extsysmon/custom")) { // custom QString key = _source; - key.remove("custom/"); + key.remove("extsysmon/custom/"); m_map.insert(_source, key); m_formatter[key] = AWKeysAggregator::FormatterType::NoFormat; - } else if (_source == "desktop/current/name") { + } else if (_source == "extsysmon/desktop/current/name") { // current desktop name m_map.insert(_source, "desktop"); m_formatter["desktop"] = AWKeysAggregator::FormatterType::NoFormat; - } else if (_source == "desktop/current/number") { + } else if (_source == "extsysmon/desktop/current/number") { // current desktop number m_map.insert(_source, "ndesktop"); m_formatter["ndesktop"] = AWKeysAggregator::FormatterType::NoFormat; - } else if (_source == "desktop/total/number") { + } else if (_source == "extsysmon/desktop/total/number") { // desktop count m_map.insert(_source, "tdesktops"); m_formatter["tdesktops"] = AWKeysAggregator::FormatterType::NoFormat; @@ -162,11 +162,11 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const KSy m_map.insert(_source, key); m_formatter[key] = AWKeysAggregator::FormatterType::Integer; } - } else if (_source == "gpu/load") { + } else if (_source == "extsysmon/gpuload/load") { // gpu load m_map.insert(_source, "gpu"); m_formatter["gpu"] = AWKeysAggregator::FormatterType::Float; - } else if (_source == "gpu/temperature") { + } else if (_source == "extsysmon/gputemp/temperature") { // gpu temperature m_map.insert(_source, "gputemp"); m_formatter["gputemp"] = AWKeysAggregator::FormatterType::Temperature; @@ -213,7 +213,7 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const KSy m_map.insert(_source, key); m_formatter[key] = AWKeysAggregator::FormatterType::MemGBFormat; } - } else if (_source.startsWith("hdd/temperature")) { + } else if (_source.startsWith("extsysmon/hdd/temperature")) { // hdd temperature QString device = _source; device.remove("hdd/temperature"); @@ -254,18 +254,18 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const KSy // gb m_map.insert(_source, "memusedgb"); m_formatter["memusedgb"] = AWKeysAggregator::FormatterType::MemGBFormat; - } else if (_source == "network/current/name") { + } else if (_source == "extsysmon/network/device") { // network device m_map.insert(_source, "netdev"); m_formatter["netdev"] = AWKeysAggregator::FormatterType::NoFormat; - } else if (_source == "network/current/ssid") { + } else if (_source == "extsysmon/network/ssid") { // current ssid m_map.insert(_source, "ssid"); m_formatter["ssid"] = AWKeysAggregator::FormatterType::NoFormat; - } else if (_source.startsWith("network/response")) { + } else if (_source.startsWith("extsysmon/requests/response")) { // network response QString key = _source; - key.remove("network/"); + key.remove("extsysmon/requests/"); m_map.insert(_source, key); m_formatter[key] = AWKeysAggregator::FormatterType::NoFormat; } else if (_source.contains(netRegExp)) { @@ -300,34 +300,34 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const KSy m_map.insert(_source, key); m_formatter[key] = AWKeysAggregator::FormatterType::MemMBFormat; } - } else if (_source.startsWith("upgrade")) { + } else if (_source.startsWith("extsysmon/upgrade")) { // package manager QString key = _source; - key.remove("upgrade/"); + key.remove("extsysmon/upgrade/"); m_map.insert(_source, key); m_formatter[key] = AWKeysAggregator::FormatterType::IntegerThree; - } else if (_source.startsWith("player")) { + } else if (_source.startsWith("extsysmon/player")) { // player QString key = _source; - key.remove("player/"); + key.remove("extsysmon/player/"); m_map.insert(_source, key); m_formatter[key] = AWKeysAggregator::FormatterType::NoFormat; - } else if (_source == "ps/running/count") { + } else if (_source == "extsysmon/ps/running/count") { // running processes count m_map.insert(_source, "pscount"); m_formatter["pscount"] = AWKeysAggregator::FormatterType::NoFormat; - } else if (_source == "ps/running/list") { + } else if (_source == "extsysmon/ps/running/list") { // list of running processes m_map.insert(_source, "ps"); m_formatter["ps"] = AWKeysAggregator::FormatterType::List; - } else if (_source == "ps/total/count") { + } else if (_source == "extsysmon/ps/total/count") { // total processes count m_map.insert(_source, "pstot"); m_formatter["pstot"] = AWKeysAggregator::FormatterType::NoFormat; - } else if (_source.startsWith("quotes")) { + } else if (_source.startsWith("extsysmon/quotes")) { // quotes QString key = _source; - key.remove("quotes/"); + key.remove("extsysmon/quotes/"); m_map.insert(_source, key); m_formatter[key] = AWKeysAggregator::FormatterType::Quotes; } else if (_source == "memory/swap/free") { @@ -377,35 +377,35 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const KSy // timestamp m_map.insert(_source, "tstime"); m_formatter["tstime"] = AWKeysAggregator::FormatterType::Timestamp; - } else if (_source == "system/brightness") { + } else if (_source == "extsysmon/system/brightness") { m_map.insert(_source, "brightness"); m_formatter["brightness"] = AWKeysAggregator::FormatterType::IntegerThree; - } else if (_source == "system/volume") { + } else if (_source == "extsysmon/system/volume") { m_map.insert(_source, "volume"); m_formatter["volume"] = AWKeysAggregator::FormatterType::IntegerThree; - } else if (_source == "system/uptime") { + } else if (_source == "os/system/uptime") { // uptime m_map.insert(_source, "uptime"); m_formatter["uptime"] = AWKeysAggregator::FormatterType::Uptime; // custom uptime m_map.insert(_source, "cuptime"); m_formatter["cuptime"] = AWKeysAggregator::FormatterType::UptimeCustom; - } else if (_source.startsWith("weather/temperature")) { + } else if (_source.startsWith("extsysmon/weather/temperature")) { // temperature QString key = _source; - key.remove("weather/"); + key.remove("extsysmon/weather/"); m_map.insert(_source, key); m_formatter[key] = AWKeysAggregator::FormatterType::Temperature; - } else if (_source.startsWith("weather/")) { + } else if (_source.startsWith("extsysmon/weather/")) { // other weather QString key = _source; - key.remove("weather/"); + key.remove("extsysmon/weather/"); m_map.insert(_source, key); m_formatter[key] = AWKeysAggregator::FormatterType::NoFormat; - } else if (_source.startsWith("load/load")) { + } else if (_source.startsWith("extsysmon/load/load")) { // load source QString key = _source; - key.remove("load/"); + key.remove("extsysmon/load/"); m_map.insert(_source, key); m_formatter[key] = AWKeysAggregator::FormatterType::Temperature; } diff --git a/sources/awesome-widget/plugin/awformatterhelper.cpp b/sources/awesome-widget/plugin/awformatterhelper.cpp index b857673..116f8f6 100644 --- a/sources/awesome-widget/plugin/awformatterhelper.cpp +++ b/sources/awesome-widget/plugin/awformatterhelper.cpp @@ -114,8 +114,7 @@ QStringList AWFormatterHelper::rightKeys() void AWFormatterHelper::editItems() { - repaintList(); - int ret = exec(); + auto ret = exec(); qCInfo(LOG_AW) << "Dialog returns" << ret; } @@ -200,20 +199,20 @@ QPair AWFormatterHelper::readMetad QSettings settings(_filePath, QSettings::IniFormat); settings.beginGroup("Desktop Entry"); - QString name = settings.value("Name", _filePath).toString(); - QString type = settings.value("X-AW-Type", "NoFormat").toString(); - AWAbstractFormatter::FormatterClass formatter = defineFormatterClass(type); + auto name = settings.value("Name", _filePath).toString(); + auto type = settings.value("X-AW-Type", "NoFormat").toString(); + auto formatter = defineFormatterClass(type); settings.endGroup(); return QPair(name, formatter); } -void AWFormatterHelper::doCreateItem() +void AWFormatterHelper::doCreateItem(QListWidget *_widget) { QStringList selection = {"NoFormat", "DateTime", "Float", "List", "Script", "String", "Json"}; bool ok; - QString select = QInputDialog::getItem(this, i18n("Select type"), i18n("Type:"), selection, 0, false, &ok); + auto select = QInputDialog::getItem(nullptr, i18n("Select type"), i18n("Type:"), selection, 0, false, &ok); if (!ok) { qCWarning(LOG_AW) << "No type selected"; return; @@ -223,18 +222,18 @@ void AWFormatterHelper::doCreateItem() AWAbstractFormatter::FormatterClass formatter = defineFormatterClass(select); switch (formatter) { case AWAbstractFormatter::FormatterClass::DateTime: - return createItem(); + return createItem(_widget); case AWAbstractFormatter::FormatterClass::Float: - return createItem(); + return createItem(_widget); case AWAbstractFormatter::FormatterClass::List: - return createItem(); + return createItem(_widget); case AWAbstractFormatter::FormatterClass::Script: - return createItem(); + return createItem(_widget); case AWAbstractFormatter::FormatterClass::String: - return createItem(); + return createItem(_widget); case AWAbstractFormatter::FormatterClass::Json: - return createItem(); + return createItem(_widget); case AWAbstractFormatter::FormatterClass::NoFormat: - return createItem(); + return createItem(_widget); } } diff --git a/sources/awesome-widget/plugin/awformatterhelper.h b/sources/awesome-widget/plugin/awformatterhelper.h index 31b4703..f5b7a9b 100644 --- a/sources/awesome-widget/plugin/awformatterhelper.h +++ b/sources/awesome-widget/plugin/awformatterhelper.h @@ -51,7 +51,7 @@ private: void initFormatters(); [[nodiscard]] static QPair readMetadata(const QString &_filePath); // parent methods - void doCreateItem() override; + void doCreateItem(QListWidget *_widget) override; // properties QHash m_formatters; QHash m_formattersClasses; diff --git a/sources/awesome-widget/plugin/awkeys.cpp b/sources/awesome-widget/plugin/awkeys.cpp index cdf3919..b336cc3 100644 --- a/sources/awesome-widget/plugin/awkeys.cpp +++ b/sources/awesome-widget/plugin/awkeys.cpp @@ -56,21 +56,16 @@ AWKeys::AWKeys(QObject *_parent) createDBusInterface(); // update key data if required - connect(m_keyOperator, SIGNAL(updateKeys(const QStringList &)), this, SLOT(reinitKeys(const QStringList &))); - connect(m_timer, SIGNAL(timeout()), this, SLOT(updateTextData())); + connect(m_keyOperator, &AWKeyOperations::updateKeys, this, &AWKeys::reinitKeys); + connect(m_timer, &QTimer::timeout, this, &AWKeys::updateTextData); // transfer signal from AWDataAggregator object to QML ui - connect(m_dataAggregator, SIGNAL(toolTipPainted(const QString &)), this, - SIGNAL(needToolTipToBeUpdated(const QString &))); + connect(m_dataAggregator, &AWDataAggregator::toolTipPainted, [this](const QString &_tooltip) { emit(needToolTipToBeUpdated(_tooltip)); }); - connect(this, SIGNAL(dropSourceFromDataengine(const QString &)), m_dataEngineAggregator, - SLOT(dropSource(const QString &))); - connect(m_dataEngineAggregator, - SIGNAL(dataUpdated(const QHash &, const KSysGuard::SensorDataList &)), this, - SLOT(dataUpdated(const QHash &, const KSysGuard::SensorDataList &))); + connect(this, &AWKeys::dropSourceFromDataengine, m_dataEngineAggregator, &AWDataEngineAggregator::dropSource); + connect(m_dataEngineAggregator, &AWDataEngineAggregator::dataUpdated, this, &AWKeys::dataUpdated); // transfer signal from dataengine to update source list - connect(m_dataEngineAggregator, SIGNAL(deviceAdded(const QString &)), m_keyOperator, - SLOT(addDevice(const QString &))); + connect(m_dataEngineAggregator, &AWDataEngineAggregator::deviceAdded, m_keyOperator, &AWKeyOperations::addDevice); } @@ -373,7 +368,7 @@ void AWKeys::setDataBySource(const QString &_source, const KSysGuard::SensorInfo // update data or drop source if there are no matches and exit if (tags.isEmpty()) { - qCInfo(LOG_AW) << "Source" << _source << "not found"; + qCInfo(LOG_AW) << "Sensor" << _source << "not found"; return emit(dropSourceFromDataengine(_source)); } diff --git a/sources/awesomewidgets/abstractextitemaggregator.cpp b/sources/awesomewidgets/abstractextitemaggregator.cpp index eb90bf4..0f344c4 100644 --- a/sources/awesomewidgets/abstractextitemaggregator.cpp +++ b/sources/awesomewidgets/abstractextitemaggregator.cpp @@ -26,46 +26,28 @@ #include -AbstractExtItemAggregator::AbstractExtItemAggregator(QWidget *_parent, QString _type) - : QDialog(_parent) - , ui(new Ui::AbstractExtItemAggregator) +AbstractExtItemAggregator::AbstractExtItemAggregator(QObject *_parent, QString _type) + : QObject(_parent) , m_type(std::move(_type)) { qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; // create directory at $HOME auto localDir = QString("%1/awesomewidgets/%2") - .arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation), type()); + .arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation), type()); QDir localDirectory; if (localDirectory.mkpath(localDir)) qCInfo(LOG_LIB) << "Created directory" << localDir; - - ui->setupUi(this); - copyButton = ui->buttonBox->addButton(i18n("Copy"), QDialogButtonBox::ActionRole); - createButton = ui->buttonBox->addButton(i18n("Create"), QDialogButtonBox::ActionRole); - deleteButton = ui->buttonBox->addButton(i18n("Remove"), QDialogButtonBox::ActionRole); - - connect(ui->buttonBox, SIGNAL(clicked(QAbstractButton *)), this, SLOT(editItemButtonPressed(QAbstractButton *))); - connect(ui->buttonBox, SIGNAL(rejected()), this, SLOT(reject())); - connect(ui->listWidget, SIGNAL(itemActivated(QListWidgetItem *)), this, SLOT(editItemActivated(QListWidgetItem *))); } -AbstractExtItemAggregator::~AbstractExtItemAggregator() +void AbstractExtItemAggregator::copyItem(QListWidget *_widget) { - qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; - - delete ui; -} - - -void AbstractExtItemAggregator::copyItem() -{ - auto source = itemFromWidget(); + auto source = itemFromWidget(_widget); auto fileName = getName(); auto number = uniqNumber(); auto dir = QString("%1/awesomewidgets/%2") - .arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation), m_type); + .arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation), m_type); if ((!source) || (fileName.isEmpty())) { qCWarning(LOG_LIB) << "Nothing to copy"; return; @@ -73,16 +55,16 @@ void AbstractExtItemAggregator::copyItem() auto filePath = QString("%1/%2").arg(dir, fileName); auto newItem = source->copy(filePath, number); - if (newItem->showConfiguration(this, configArgs()) == 1) { + if (newItem->showConfiguration(nullptr, configArgs()) == 1) { initItems(); - repaintList(); + repaintList(_widget); } } -void AbstractExtItemAggregator::deleteItem() +void AbstractExtItemAggregator::deleteItem(QListWidget *_widget) { - auto source = itemFromWidget(); + auto source = itemFromWidget(_widget); if (!source) { qCWarning(LOG_LIB) << "Nothing to delete"; return; @@ -90,30 +72,63 @@ void AbstractExtItemAggregator::deleteItem() if (source->tryDelete()) { initItems(); - repaintList(); + repaintList(_widget); } } -void AbstractExtItemAggregator::editItem() +void AbstractExtItemAggregator::editItem(QListWidget *_widget) { - auto source = itemFromWidget(); + auto source = itemFromWidget(_widget); if (!source) { qCWarning(LOG_LIB) << "Nothing to edit"; return; } - if (source->showConfiguration(this, configArgs()) == 1) { + if (source->showConfiguration(nullptr, configArgs()) == 1) { initItems(); - repaintList(); + repaintList(_widget); } } +int AbstractExtItemAggregator::exec() +{ + auto dialog = new QDialog(); + auto ui = new Ui::AbstractExtItemAggregator(); + ui->setupUi(dialog); + + auto copyButton = ui->buttonBox->addButton(i18n("Copy"), QDialogButtonBox::ActionRole); + auto createButton = ui->buttonBox->addButton(i18n("Create"), QDialogButtonBox::ActionRole); + auto deleteButton = ui->buttonBox->addButton(i18n("Remove"), QDialogButtonBox::ActionRole); + + connect(ui->buttonBox, &QDialogButtonBox::clicked, [&](QAbstractButton *_button) { + if (dynamic_cast(_button) == copyButton) + copyItem(ui->listWidget); + else if (dynamic_cast(_button) == createButton) + doCreateItem(ui->listWidget); + else if (dynamic_cast(_button) == deleteButton) + deleteItem(ui->listWidget); + else if (ui->buttonBox->buttonRole(_button) == QDialogButtonBox::AcceptRole) + editItem(ui->listWidget); + }); + connect(ui->buttonBox, &QDialogButtonBox::rejected, [dialog]() { dialog->reject(); }); + connect(ui->listWidget, &QListWidget::itemActivated, [&](QListWidgetItem *) { editItem(ui->listWidget); }); + + repaintList(ui->listWidget); + auto ret = dialog->exec(); + + dialog->deleteLater(); + delete ui; + + return ret; +} + + QString AbstractExtItemAggregator::getName() { bool ok; - auto name = QInputDialog::getText(this, i18n("Enter file name"), i18n("File name"), QLineEdit::Normal, "", &ok); + auto name = QInputDialog::getText(nullptr, i18n("Enter file name"), i18n("File name"), QLineEdit::Normal, "", &ok); if ((!ok) || (name.isEmpty())) return ""; if (!name.endsWith(".desktop")) @@ -123,9 +138,9 @@ QString AbstractExtItemAggregator::getName() } -AbstractExtItem *AbstractExtItemAggregator::itemFromWidget() const +AbstractExtItem *AbstractExtItemAggregator::itemFromWidget(QListWidget *_widget) const { - auto widgetItem = ui->listWidget->currentItem(); + auto widgetItem = _widget->currentItem(); if (!widgetItem) return nullptr; @@ -144,18 +159,18 @@ AbstractExtItem *AbstractExtItemAggregator::itemFromWidget() const } -void AbstractExtItemAggregator::repaintList() const +void AbstractExtItemAggregator::repaintList(QListWidget *_widget) const { - ui->listWidget->clear(); + _widget->clear(); for (auto &_item : items()) { QString fileName = QFileInfo(_item->fileName()).fileName(); - auto item = new QListWidgetItem(fileName, ui->listWidget); + auto item = new QListWidgetItem(fileName, _widget); QStringList tooltip; tooltip.append(i18n("Name: %1", _item->name())); tooltip.append(i18n("Comment: %1", _item->comment())); tooltip.append(i18n("Identity: %1", _item->uniq())); item->setToolTip(tooltip.join('\n')); - ui->listWidget->addItem(item); + _widget->addItem(item); } } @@ -200,22 +215,3 @@ void AbstractExtItemAggregator::setConfigArgs(const QVariant &_configArgs) m_configArgs = _configArgs; } - - -void AbstractExtItemAggregator::editItemActivated(QListWidgetItem *) -{ - return editItem(); -} - - -void AbstractExtItemAggregator::editItemButtonPressed(QAbstractButton *_button) -{ - if (dynamic_cast(_button) == copyButton) - return copyItem(); - else if (dynamic_cast(_button) == createButton) - return doCreateItem(); - else if (dynamic_cast(_button) == deleteButton) - return deleteItem(); - else if (ui->buttonBox->buttonRole(_button) == QDialogButtonBox::AcceptRole) - return editItem(); -} diff --git a/sources/awesomewidgets/abstractextitemaggregator.h b/sources/awesomewidgets/abstractextitemaggregator.h index 781a657..d984a97 100644 --- a/sources/awesomewidgets/abstractextitemaggregator.h +++ b/sources/awesomewidgets/abstractextitemaggregator.h @@ -18,7 +18,6 @@ #ifndef ABSTRACTEXTITEMAGGREGATOR_H #define ABSTRACTEXTITEMAGGREGATOR_H -#include #include #include "abstractextitem.h" @@ -26,48 +25,45 @@ class QAbstractButton; +class QListWidget; class QListWidgetItem; -namespace Ui -{ -class AbstractExtItemAggregator; -} -class AbstractExtItemAggregator : public QDialog +class AbstractExtItemAggregator : public QObject { Q_OBJECT Q_PROPERTY(QVariant configArgs READ configArgs WRITE setConfigArgs) Q_PROPERTY(QVariant type READ type) public: - explicit AbstractExtItemAggregator(QWidget *_parent, QString _type); - ~AbstractExtItemAggregator() override; + explicit AbstractExtItemAggregator(QObject *_parent, QString _type); // methods - void copyItem(); - template void createItem() + void copyItem(QListWidget *_widget); + template void createItem(QListWidget *_widget) { auto fileName = getName(); - int number = uniqNumber(); + auto number = uniqNumber(); auto dir = QString("%1/awesomewidgets/%2") - .arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation), m_type); + .arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation), m_type); if (fileName.isEmpty()) { qCWarning(LOG_LIB) << "Nothing to create"; return; } auto filePath = QString("%1/%2").arg(dir, fileName); - T *newItem = new T(this, filePath); + auto newItem = new T(this, filePath); newItem->setNumber(number); - if (newItem->showConfiguration(this, configArgs()) == 1) { + if (newItem->showConfiguration(nullptr, configArgs()) == 1) { initItems(); - repaintList(); + repaintList(_widget); } }; - void deleteItem(); - void editItem(); + void deleteItem(QListWidget *_widget); + void editItem(QListWidget *_widget); + [[nodiscard]] int exec(); QString getName(); virtual void initItems() = 0; - [[nodiscard]] AbstractExtItem *itemFromWidget() const; - void repaintList() const; + [[nodiscard]] AbstractExtItem *itemFromWidget(QListWidget *_widget) const; + void repaintList(QListWidget *_widget) const; [[nodiscard]] int uniqNumber() const; // get methods [[nodiscard]] QVariant configArgs() const; @@ -77,21 +73,12 @@ public: // set methods void setConfigArgs(const QVariant &_configArgs); -private slots: - void editItemActivated(QListWidgetItem *); - void editItemButtonPressed(QAbstractButton *_button); - private: - // ui - Ui::AbstractExtItemAggregator *ui = nullptr; - QPushButton *copyButton = nullptr; - QPushButton *createButton = nullptr; - QPushButton *deleteButton = nullptr; // properties QVariant m_configArgs; QString m_type; // ui methods - virtual void doCreateItem() = 0; + virtual void doCreateItem(QListWidget *_widget) = 0; }; diff --git a/sources/awesomewidgets/awfloatformatter.cpp b/sources/awesomewidgets/awfloatformatter.cpp index 968ec96..dcda974 100644 --- a/sources/awesomewidgets/awfloatformatter.cpp +++ b/sources/awesomewidgets/awfloatformatter.cpp @@ -270,4 +270,3 @@ void AWFloatFormatter::translate(void *_ui) ui->label_multiplier->setText(i18n("Multiplier")); ui->label_summand->setText(i18n("Summand")); } - diff --git a/sources/awesomewidgets/awnoformatter.cpp b/sources/awesomewidgets/awnoformatter.cpp index 5ee8909..4a190cd 100644 --- a/sources/awesomewidgets/awnoformatter.cpp +++ b/sources/awesomewidgets/awnoformatter.cpp @@ -91,4 +91,3 @@ void AWNoFormatter::translate(void *_ui) ui->label_comment->setText(i18n("Comment")); ui->label_type->setText(i18n("Type")); } - diff --git a/sources/awesomewidgets/awscriptformatter.cpp b/sources/awesomewidgets/awscriptformatter.cpp index ff0f55f..8fd4c6b 100644 --- a/sources/awesomewidgets/awscriptformatter.cpp +++ b/sources/awesomewidgets/awscriptformatter.cpp @@ -214,4 +214,3 @@ void AWScriptFormatter::translate(void *_ui) ui->checkBox_hasReturn->setText(i18n("Has return")); ui->label_code->setText(i18n("Code")); } - diff --git a/sources/awesomewidgets/extitemaggregator.h b/sources/awesomewidgets/extitemaggregator.h index 3925b16..91532f7 100644 --- a/sources/awesomewidgets/extitemaggregator.h +++ b/sources/awesomewidgets/extitemaggregator.h @@ -31,7 +31,7 @@ template class ExtItemAggregator : public AbstractExtItemAggregator { public: - explicit ExtItemAggregator(QWidget *_parent, const QString &_type) + explicit ExtItemAggregator(QObject *_parent, const QString &_type) : AbstractExtItemAggregator(_parent, _type) { qSetMessagePattern(AWDebug::LOG_FORMAT); @@ -56,8 +56,7 @@ public: void editItems() { - repaintList(); - int ret = exec(); + auto ret = exec(); qCInfo(LOG_LIB) << "Dialog returns" << ret; }; @@ -123,7 +122,7 @@ private: QList m_items; QList m_activeItems; - void doCreateItem() override { return createItem(); } + void doCreateItem(QListWidget *_widget) override { return createItem(_widget); } QList getItems() { @@ -137,7 +136,7 @@ private: if (!file.endsWith(".desktop")) continue; qCInfo(LOG_LIB) << "Found file" << file << "in" << dir; - QString filePath = QString("%1/%2").arg(dir).arg(file); + auto filePath = QString("%1/%2").arg(dir, file); // check if already exists if (std::any_of(items.cbegin(), items.cend(), [&filePath](AbstractExtItem *item) { return (item->fileName() == filePath); })) @@ -147,8 +146,7 @@ private: } // sort items - std::sort(items.begin(), items.end(), - [](const AbstractExtItem *lhs, const AbstractExtItem *rhs) { return lhs->number() < rhs->number(); }); + std::sort(items.begin(), items.end(), [](auto *lhs, auto *rhs) { return lhs->number() < rhs->number(); }); return items; }; }; diff --git a/sources/awesomewidgets/graphicalitem.cpp b/sources/awesomewidgets/graphicalitem.cpp index 0c3964f..25b6b6e 100644 --- a/sources/awesomewidgets/graphicalitem.cpp +++ b/sources/awesomewidgets/graphicalitem.cpp @@ -433,7 +433,8 @@ int GraphicalItem::showConfiguration(QWidget *_parent, const QVariant &_args) translate(ui); connect(ui->checkBox_custom, &QCheckBox::stateChanged, [this, ui](const int state) { changeValue(ui, state); }); - connect(ui->comboBox_type, &QComboBox::currentIndexChanged, [this, ui](const int state) { changeCountState(ui, state); }); + connect(ui->comboBox_type, &QComboBox::currentIndexChanged, + [this, ui](const int state) { changeCountState(ui, state); }); connect(ui->toolButton_activeColor, &QToolButton::clicked, [this, ui]() { changeColor(ui); }); connect(ui->toolButton_inactiveColor, &QToolButton::clicked, [this, ui]() { changeColor(ui); }); diff --git a/sources/extsysmon/extsysmon.cpp b/sources/extsysmon/extsysmon.cpp index b55f54b..65b583f 100644 --- a/sources/extsysmon/extsysmon.cpp +++ b/sources/extsysmon/extsysmon.cpp @@ -18,6 +18,8 @@ #include "extsysmon.h" #include + +#include #include #include #include @@ -38,26 +40,13 @@ ExtendedSysMon::ExtendedSysMon(QObject *_parent, const QVariantList &_args) qCDebug(LOG_ESM) << metadata; readConfiguration(); - - addContainer(new ExtSysMonAggregator("extsysmon", "extsysmon", this, m_configuration)); -} - - -ExtendedSysMon::~ExtendedSysMon() -{ - qCDebug(LOG_ESM) << __PRETTY_FUNCTION__; -} - - -void ExtendedSysMon::update() -{ - // m_aggregator->update(); + addContainer(new ExtSysMonAggregator("extsysmon", "Extended system monitor", this, m_configuration)); } void ExtendedSysMon::readConfiguration() { - QString fileName = QStandardPaths::locate(QStandardPaths::ConfigLocation, "plasma-dataengine-extsysmon.conf"); + auto fileName = QStandardPaths::locate(QStandardPaths::ConfigLocation, "plasma-dataengine-extsysmon.conf"); qCInfo(LOG_ESM) << "Configuration file" << fileName; QSettings settings(fileName, QSettings::IniFormat); QHash rawConfig; @@ -90,13 +79,13 @@ QHash ExtendedSysMon::updateConfiguration(QHash m_configuration; diff --git a/sources/extsysmon/extsysmonaggregator.cpp b/sources/extsysmon/extsysmonaggregator.cpp index 0c9ebd1..d166c13 100644 --- a/sources/extsysmon/extsysmonaggregator.cpp +++ b/sources/extsysmon/extsysmonaggregator.cpp @@ -46,73 +46,52 @@ ExtSysMonAggregator::ExtSysMonAggregator(const QString &_id, const QString &_nam } +void ExtSysMonAggregator::createSensor(const QString &_id, const QString &_name, AbstractExtSysMonSource *_source) +{ + qCDebug(LOG_ESM) << "Register sensor" << _name << "with id" << _id; + + addObject(new ExtSysMonSensor(this, _id, _name, _source)); +} + + void ExtSysMonAggregator::init(const QHash &_config) { qCDebug(LOG_ESM) << "Configuration" << _config; // battery - auto batteryItem = new BatterySource(this, {_config["ACPIPATH"]}); - for (auto &source : batteryItem->sources()) - addObject(new ExtSysMonSensor(this, source, batteryItem)); + createSensor("battery", i18n("Battery"), new BatterySource(this, {_config["ACPIPATH"]})); // custom - auto customItem = new CustomSource(this, {}); - for (auto &source : customItem->sources()) - addObject(new ExtSysMonSensor(this, source, customItem)); + createSensor("custom", i18n("Scripts"), new CustomSource(this, {})); // desktop - auto desktopItem = new DesktopSource(this, {}); - for (auto &source : desktopItem->sources()) - addObject(new ExtSysMonSensor(this, source, desktopItem)); + // FIXME causes segfault + createSensor("desktop", i18n("Desktop"), new DesktopSource(this, {})); // gpu load - auto gpuLoadItem = new GPULoadSource(this, {_config["GPUDEV"]}); - for (auto &source : gpuLoadItem->sources()) - addObject(new ExtSysMonSensor(this, source, gpuLoadItem)); + createSensor("gpuload", i18n("GPU load"), new GPULoadSource(this, {_config["GPUDEV"]})); // gpu temperature - auto gpuTempItem = new GPUTemperatureSource(this, {_config["GPUDEV"]}); - for (auto &source : gpuTempItem->sources()) - addObject(new ExtSysMonSensor(this, source, gpuTempItem)); + createSensor("gputemp", i18n("GPU temperature"), new GPUTemperatureSource(this, {_config["GPUDEV"]})); // hdd temperature - auto hddTempItem - = new HDDTemperatureSource(this, {_config["HDDDEV"], _config["HDDTEMPCMD"]}); - for (auto &source : hddTempItem->sources()) - addObject(new ExtSysMonSensor(this, source, hddTempItem)); + createSensor("hdd", i18n("HDD temperature"), + new HDDTemperatureSource(this, {_config["HDDDEV"], _config["HDDTEMPCMD"]})); // network - auto networkItem = new NetworkSource(this, QStringList()); - for (auto &source : networkItem->sources()) - addObject(new ExtSysMonSensor(this, source, networkItem)); + createSensor("network", i18n("Network"), new NetworkSource(this, {})); // player - auto playerItem - = new PlayerSource(this, {_config["PLAYER"], _config["MPDADDRESS"], _config["MPDPORT"], - _config["MPRIS"], _config["PLAYERSYMBOLS"]}); - for (auto &source : playerItem->sources()) - addObject(new ExtSysMonSensor(this, source, playerItem)); + createSensor("player", i18n("Music player"), + new PlayerSource(this, {_config["PLAYER"], _config["MPDADDRESS"], _config["MPDPORT"], _config["MPRIS"], + _config["PLAYERSYMBOLS"]})); // processes - auto processesItem = new ProcessesSource(this, {}); - for (auto &source : processesItem->sources()) - addObject(new ExtSysMonSensor(this, source, processesItem)); + createSensor("ps", i18n("Processes"), new ProcessesSource(this, {})); // network request - auto requestItem = new RequestSource(this, {}); - for (auto &source : requestItem->sources()) - addObject(new ExtSysMonSensor(this, source, requestItem)); + createSensor("requests", i18n("Network requests"), new RequestSource(this, {})); // quotes - auto quotesItem = new QuotesSource(this, {}); - for (auto &source : quotesItem->sources()) - addObject(new ExtSysMonSensor(this, source, quotesItem)); + createSensor("quotes", i18n("Quotes"), new QuotesSource(this, {})); // system - auto systemItem = new SystemInfoSource(this, {}); - for (auto &source : systemItem->sources()) - addObject(new ExtSysMonSensor(this, source, systemItem)); + createSensor("system", i18n("System"), new SystemInfoSource(this, {})); // upgrade - auto upgradeItem = new UpgradeSource(this, {}); - for (auto &source : upgradeItem->sources()) - addObject(new ExtSysMonSensor(this, source, upgradeItem)); + createSensor("upgrade", i18n("Upgrades"), new UpgradeSource(this, {})); // weather - auto weatherItem = new WeatherSource(this, {}); - for (auto &source : weatherItem->sources()) - addObject(new ExtSysMonSensor(this, source, weatherItem)); + createSensor("weather", i18n("Weather"), new WeatherSource(this, {})); #ifdef BUILD_LOAD // additional load source - auto loadItem = new LoadSource(this, QStringList()); - for (auto &source : loadItem->sources()) - addObject(new ExtSysMonSensor(this, source, loadItem)); + createSensor("load", i18n("Load"), new LoadSource(this, {})); #endif /* BUILD_LOAD */ } diff --git a/sources/extsysmon/extsysmonaggregator.h b/sources/extsysmon/extsysmonaggregator.h index 36b9b86..0c0fefc 100644 --- a/sources/extsysmon/extsysmonaggregator.h +++ b/sources/extsysmon/extsysmonaggregator.h @@ -23,6 +23,10 @@ #include "abstractextsysmonsource.h" + +class AbstractExtSysMonSource; +class ExtSysMonSensor; + class ExtSysMonAggregator : public KSysGuard::SensorContainer { Q_OBJECT @@ -32,6 +36,7 @@ public: const QHash &_config); private: + void createSensor(const QString &_id, const QString &_name, AbstractExtSysMonSource *_source); void init(const QHash &_config); }; diff --git a/sources/extsysmonsources/batterysource.cpp b/sources/extsysmonsources/batterysource.cpp index 53e8552..431ee83 100644 --- a/sources/extsysmonsources/batterysource.cpp +++ b/sources/extsysmonsources/batterysource.cpp @@ -48,12 +48,12 @@ BatterySource::~BatterySource() QStringList BatterySource::getSources() { QStringList sources; - sources.append("battery/ac"); - sources.append("battery/bat"); - sources.append("battery/batleft"); - sources.append("battery/batnow"); - sources.append("battery/batrate"); - sources.append("battery/battotal"); + sources.append("ac"); + sources.append("bat"); + sources.append("batleft"); + sources.append("batnow"); + sources.append("batrate"); + sources.append("battotal"); auto directory = QDir(m_acpiPath); @@ -63,11 +63,11 @@ QStringList BatterySource::getSources() qCInfo(LOG_ESS) << "Init batteries count as" << m_batteriesCount; for (int i = 0; i < m_batteriesCount; i++) { - sources.append(QString("battery/bat%1").arg(i)); - sources.append(QString("battery/batleft%1").arg(i)); - sources.append(QString("battery/batnow%1").arg(i)); - sources.append(QString("battery/batrate%1").arg(i)); - sources.append(QString("battery/battotal%1").arg(i)); + sources.append(QString("bat%1").arg(i)); + sources.append(QString("batleft%1").arg(i)); + sources.append(QString("batnow%1").arg(i)); + sources.append(QString("batrate%1").arg(i)); + sources.append(QString("battotal%1").arg(i)); } } @@ -82,8 +82,7 @@ QVariant BatterySource::data(const QString &_source) if (!m_values.contains(_source)) run(); - QVariant value = m_values.take(_source); - return value; + return m_values.take(_source); } @@ -92,65 +91,65 @@ KSysGuard::SensorInfo *BatterySource::initialData(const QString &_source) const qCDebug(LOG_ESS) << "Source" << _source; auto data = new KSysGuard::SensorInfo(); - if (_source == "battery/ac") { + if (_source == "ac") { data->name = "Is AC online or not"; data->variantType = QVariant::Bool; data->unit = KSysGuard::UnitNone; - } else if (_source == "battery/bat") { + } else if (_source == "bat") { data->min = 0; data->max = 100; data->name = "Average battery usage"; data->variantType = QVariant::Int; data->unit = KSysGuard::UnitPercent; - } else if (_source == "battery/batleft") { + } else if (_source == "batleft") { data->min = 0; data->max = 0; data->name = "Battery discharge time"; data->variantType = QVariant::Int; data->unit = KSysGuard::UnitSecond; - } else if (_source == "battery/batnow") { + } else if (_source == "batnow") { data->min = 0; data->max = 0; data->name = "Current battery capacity"; data->variantType = QVariant::Int; data->unit = KSysGuard::UnitNone; - } else if (_source == "battery/batrate") { + } else if (_source == "batrate") { data->min = 0; data->max = 0; data->name = "Average battery discharge rate"; data->variantType = QVariant::Double; data->unit = KSysGuard::UnitRate; - } else if (_source == "battery/battotal") { + } else if (_source == "battotal") { data->min = 0; data->max = 0; data->name = "Full battery capacity"; data->variantType = QVariant::Int; data->unit = KSysGuard::UnitNone; - } else if (_source.startsWith("battery/batleft")) { + } else if (_source.startsWith("batleft")) { data->min = 0; data->max = 0; data->name = QString("Battery %1 discharge time").arg(index(_source)); data->variantType = QVariant::Int; data->unit = KSysGuard::UnitSecond; - } else if (_source.startsWith("battery/batnow")) { + } else if (_source.startsWith("batnow")) { data->min = 0; data->max = 0; data->name = QString("Battery %1 capacity").arg(index(_source)); data->variantType = QVariant::Int; data->unit = KSysGuard::UnitNone; - } else if (_source.startsWith("battery/battotal")) { + } else if (_source.startsWith("battotal")) { data->min = 0; data->max = 0; data->name = QString("Battery %1 full capacity").arg(index(_source)); data->variantType = QVariant::Int; data->unit = KSysGuard::UnitNone; - } else if (_source.startsWith("battery/batrate")) { + } else if (_source.startsWith("batrate")) { data->min = 0; data->max = 0; data->name = QString("Battery %1 discharge rate").arg(index(_source)); data->variantType = QVariant::Double; data->unit = KSysGuard::UnitRate; - } else if (_source.startsWith("battery/bat")) { + } else if (_source.startsWith("bat")) { data->min = 0; data->max = 100; data->name = QString("Battery %1 usage").arg(index(_source)); @@ -167,7 +166,7 @@ void BatterySource::run() // adaptor QFile acFile(QString("%1/AC/online").arg(m_acpiPath)); if (acFile.open(QIODevice::ReadOnly | QIODevice::Text)) - m_values["battery/ac"] = (QString(acFile.readLine()).trimmed().toInt() == 1); + m_values["ac"] = (QString(acFile.readLine()).trimmed().toInt() == 1); acFile.close(); // batteries @@ -178,28 +177,27 @@ void BatterySource::run() if (currentLevelFile.open(QIODevice::ReadOnly | QIODevice::Text)) { auto value = QString(currentLevelFile.readLine()).toInt(); m_trend[i + 1].append(value); - m_values[QString("battery/batnow%1").arg(i)] = value; + m_values[QString("batnow%1").arg(i)] = value; } currentLevelFile.close(); // total QFile fullLevelFile(QString("%1/BAT%2/energy_full").arg(m_acpiPath).arg(i)); if (fullLevelFile.open(QIODevice::ReadOnly | QIODevice::Text)) - m_values[QString("battery/battotal%1").arg(i)] = QString(fullLevelFile.readLine()).toInt(); + m_values[QString("battotal%1").arg(i)] = QString(fullLevelFile.readLine()).toInt(); fullLevelFile.close(); - m_values[QString("battery/bat%1").arg(i)] - = static_cast(100 * m_values[QString("battery/batnow%1").arg(i)].toFloat() - / m_values[QString("battery/battotal%1").arg(i)].toFloat()); + m_values[QString("bat%1").arg(i)] = static_cast(100 * m_values[QString("batnow%1").arg(i)].toFloat() + / m_values[QString("battotal%1").arg(i)].toFloat()); // accumulate - currentLevel += m_values[QString("battery/batnow%1").arg(i)].toFloat(); - fullLevel += m_values[QString("battery/battotal%1").arg(i)].toFloat(); + currentLevel += m_values[QString("batnow%1").arg(i)].toFloat(); + fullLevel += m_values[QString("battotal%1").arg(i)].toFloat(); } // total m_trend[0].append(static_cast(currentLevel)); - m_values["battery/batnow"] = static_cast(currentLevel); - m_values["battery/battotal"] = static_cast(fullLevel); - m_values["battery/bat"] = static_cast(100 * currentLevel / fullLevel); + m_values["batnow"] = static_cast(currentLevel); + m_values["battotal"] = static_cast(fullLevel); + m_values["bat"] = static_cast(100 * currentLevel / fullLevel); calculateRates(); } @@ -245,15 +243,14 @@ void BatterySource::calculateRates() for (int i = 0; i < m_batteriesCount; i++) { auto approx = approximate(m_trend[i + 1]); - m_values[QString("battery/batrate%1").arg(i)] = approx / interval; - m_values[QString("battery/batleft%1").arg(i)] - = interval * m_values[QString("battery/batnow%1").arg(i)].toFloat() / approx; + m_values[QString("batrate%1").arg(i)] = approx / interval; + m_values[QString("batleft%1").arg(i)] = interval * m_values[QString("batnow%1").arg(i)].toFloat() / approx; } // total auto approx = approximate(m_trend[0]); - m_values["battery/batrate"] = approx / interval; - m_values["battery/batleft"] = interval * m_values["battery/batnow"].toFloat() / approx; + m_values["batrate"] = approx / interval; + m_values["batleft"] = interval * m_values["batnow"].toFloat() / approx; // old data cleanup for (auto &trend : m_trend.keys()) { diff --git a/sources/extsysmonsources/customsource.cpp b/sources/extsysmonsources/customsource.cpp index f6b689f..a03214e 100644 --- a/sources/extsysmonsources/customsource.cpp +++ b/sources/extsysmonsources/customsource.cpp @@ -74,7 +74,7 @@ QStringList CustomSource::getSources() { QStringList sources; for (auto &item : m_extScripts->activeItems()) - sources.append(QString("custom/%1").arg(item->tag("custom"))); + sources.append(item->tag("custom")); return sources; } diff --git a/sources/extsysmonsources/desktopsource.cpp b/sources/extsysmonsources/desktopsource.cpp index a301118..3ee3f6d 100644 --- a/sources/extsysmonsources/desktopsource.cpp +++ b/sources/extsysmonsources/desktopsource.cpp @@ -51,13 +51,13 @@ QVariant DesktopSource::data(const QString &_source) auto decrement = KWindowSystem::isPlatformX11() ? 1 : 0; auto current = nativeIndex - decrement; - if (_source == "desktop/current/name") { + if (_source == "current/name") { return m_vdi->desktopNames().at(current); - } else if (_source == "desktop/current/number") { + } else if (_source == "current/number") { return current + 1; - } else if (_source == "desktop/total/name") { + } else if (_source == "total/name") { return m_vdi->desktopNames(); - } else if (_source == "desktop/total/number") { + } else if (_source == "total/number") { return m_vdi->numberOfDesktops(); } @@ -70,20 +70,20 @@ KSysGuard::SensorInfo *DesktopSource::initialData(const QString &_source) const qCDebug(LOG_ESS) << "Source" << _source; auto data = new KSysGuard::SensorInfo(); - if (_source == "desktop/current/name") { + if (_source == "current/name") { data->name = "Current desktop name"; data->variantType = QVariant::String; data->unit = KSysGuard::UnitNone; - } else if (_source == "desktop/current/number") { + } else if (_source == "current/number") { data->min = 0; data->name = "Current desktop number"; data->variantType = QVariant::Int; data->unit = KSysGuard::UnitNone; - } else if (_source == "desktop/total/name") { + } else if (_source == "total/name") { data->name = "All desktops by name"; data->variantType = QVariant::StringList; data->unit = KSysGuard::UnitNone; - } else if (_source == "desktop/total/number") { + } else if (_source == "total/number") { data->min = 0; data->name = "Desktops count"; data->variantType = QVariant::Int; @@ -97,10 +97,10 @@ KSysGuard::SensorInfo *DesktopSource::initialData(const QString &_source) const QStringList DesktopSource::sources() const { QStringList sources; - sources.append("desktop/current/name"); - sources.append("desktop/current/number"); - sources.append("desktop/total/name"); - sources.append("desktop/total/number"); + sources.append("current/name"); + sources.append("current/number"); + sources.append("total/name"); + sources.append("total/number"); return sources; } diff --git a/sources/extsysmonsources/extsysmonsensor.cpp b/sources/extsysmonsources/extsysmonsensor.cpp index 29931f7..74342f9 100644 --- a/sources/extsysmonsources/extsysmonsensor.cpp +++ b/sources/extsysmonsources/extsysmonsensor.cpp @@ -17,23 +17,67 @@ #include "extsysmonsensor.h" +#include + #include "abstractextsysmonsource.h" #include "awdebug.h" -ExtSysMonSensor::ExtSysMonSensor(KSysGuard::SensorContainer *_parent, const QString &_id, +ExtSysMonSensor::ExtSysMonSensor(KSysGuard::SensorContainer *_parent, const QString &_id, const QString &_name, AbstractExtSysMonSource *_source) - : KSysGuard::SensorObject(_id, _parent) + : KSysGuard::SensorObject(_id, _name, _parent) + , m_source(_source) + , m_timer(new QTimer(this)) { qCDebug(LOG_ESS) << __PRETTY_FUNCTION__; - m_source = _source; + loadProperties(); + connect(this, &SensorObject::subscribedChanged, [this](bool _state) { changeSubscription(_state); }); + connect(m_timer, &QTimer::timeout, [this]() { update(); }); +} + + +ExtSysMonSensor::~ExtSysMonSensor() +{ + qCDebug(LOG_ESS) << __PRETTY_FUNCTION__; + + m_timer->stop(); + m_timer->deleteLater(); +} + + +void ExtSysMonSensor::changeSubscription(bool _subscribed) +{ + qCDebug(LOG_ESS) << "Subscription changed to" << _subscribed; + + if (_subscribed) { + m_timer->start(1000); + } else { + m_timer->stop(); + } +} + + +void ExtSysMonSensor::update() +{ for (auto &source : m_source->sources()) { - auto property = new KSysGuard::SensorProperty(source, this); + auto property = sensor(source); + if (!property->isSubscribed()) + continue; // skip properties which are not explicitly subscribed + auto value = m_source->data(source); + qCWarning(LOG_ESS) << source << value; + property->setValue(value); + } +} + + +void ExtSysMonSensor::loadProperties() +{ + for (auto &source : m_source->sources()) { auto info = m_source->initialData(source); - property->setName(info->name); + auto property = new KSysGuard::SensorProperty(source, info->name, this); property->setUnit(info->unit); property->setVariantType(info->variantType); @@ -41,15 +85,6 @@ ExtSysMonSensor::ExtSysMonSensor(KSysGuard::SensorContainer *_parent, const QStr property->setMin(info->min); property->setMax(info->max); - m_properties[source] = property; - } -} - - -void ExtSysMonSensor::update() -{ - for (auto &source : m_properties.keys()) { - auto value = m_source->data(source); - m_properties[source]->setValue(value); + addProperty(property); } } diff --git a/sources/extsysmonsources/extsysmonsensor.h b/sources/extsysmonsources/extsysmonsensor.h index f0a0908..6105cf6 100644 --- a/sources/extsysmonsources/extsysmonsensor.h +++ b/sources/extsysmonsources/extsysmonsensor.h @@ -22,19 +22,23 @@ class AbstractExtSysMonSource; +class QTimer; class ExtSysMonSensor : public KSysGuard::SensorObject { Q_OBJECT public: - explicit ExtSysMonSensor(KSysGuard::SensorContainer *_parent, const QString &_id, AbstractExtSysMonSource *_source); - ~ExtSysMonSensor() override = default; + explicit ExtSysMonSensor(KSysGuard::SensorContainer *_parent, const QString &_id, const QString &_name, + AbstractExtSysMonSource *_source); + ~ExtSysMonSensor() override; + void changeSubscription(bool _subscribed); void update(); private: - QHash m_properties; + void loadProperties(); AbstractExtSysMonSource *m_source = nullptr; + QTimer *m_timer = nullptr; }; diff --git a/sources/extsysmonsources/gpuloadsource.cpp b/sources/extsysmonsources/gpuloadsource.cpp index a1bd171..565cbd2 100644 --- a/sources/extsysmonsources/gpuloadsource.cpp +++ b/sources/extsysmonsources/gpuloadsource.cpp @@ -75,7 +75,7 @@ QVariant GPULoadSource::data(const QString &_source) { qCDebug(LOG_ESS) << "Source" << _source; - if (_source == "gpu/load") + if (_source == "load") run(); return m_values[_source]; @@ -87,7 +87,7 @@ KSysGuard::SensorInfo *GPULoadSource::initialData(const QString &_source) const qCDebug(LOG_ESS) << "Source" << _source; auto data = new KSysGuard::SensorInfo(); - if (_source == "gpu/load") { + if (_source == "load") { data->min = 0.0; data->max = 100.0; data->name = "GPU usage"; @@ -115,7 +115,7 @@ void GPULoadSource::run() QStringList GPULoadSource::sources() const { QStringList sources; - sources.append("gpu/load"); + sources.append("load"); return sources; } @@ -134,7 +134,7 @@ void GPULoadSource::updateValue() if (!str.contains("")) continue; auto load = str.remove("").remove("").remove('%'); - m_values["gpu/load"] = load.toFloat(); + m_values["load"] = load.toFloat(); break; } } else if (m_device == "ati") { @@ -142,7 +142,7 @@ void GPULoadSource::updateValue() if (!str.contains("load")) continue; QString load = str.split(' ', Qt::SkipEmptyParts)[3].remove('%'); - m_values["gpu/load"] = load.toFloat(); + m_values["load"] = load.toFloat(); break; } } diff --git a/sources/extsysmonsources/gputempsource.cpp b/sources/extsysmonsources/gputempsource.cpp index b74fcf9..f926817 100644 --- a/sources/extsysmonsources/gputempsource.cpp +++ b/sources/extsysmonsources/gputempsource.cpp @@ -55,7 +55,7 @@ QVariant GPUTemperatureSource::data(const QString &_source) { qCDebug(LOG_ESS) << "Source" << _source; - if (_source == "gpu/temperature") + if (_source == "temperature") run(); return m_values[_source]; @@ -67,7 +67,7 @@ KSysGuard::SensorInfo *GPUTemperatureSource::initialData(const QString &_source) qCDebug(LOG_ESS) << "Source" << _source; auto data = new KSysGuard::SensorInfo(); - if (_source == "gpu/temperature") { + if (_source == "temperature") { data->min = 0.0; data->max = 0.0; data->name = "GPU temperature"; @@ -95,7 +95,7 @@ void GPUTemperatureSource::run() QStringList GPUTemperatureSource::sources() const { QStringList sources; - sources.append("gpu/temperature"); + sources.append("temperature"); return sources; } @@ -114,7 +114,7 @@ void GPUTemperatureSource::updateValue() if (!str.contains("")) continue; QString temp = str.remove("").remove("C"); - m_values["gpu/temperature"] = temp.toFloat(); + m_values["temperature"] = temp.toFloat(); break; } } else if (m_device == "ati") { @@ -122,7 +122,7 @@ void GPUTemperatureSource::updateValue() if (!str.contains("Temperature")) continue; QString temp = str.split(' ', Qt::SkipEmptyParts).at(4); - m_values["gpu/temperature"] = temp.toFloat(); + m_values["temperature"] = temp.toFloat(); break; } } diff --git a/sources/extsysmonsources/hddtempsource.cpp b/sources/extsysmonsources/hddtempsource.cpp index 7af9620..50c11fa 100644 --- a/sources/extsysmonsources/hddtempsource.cpp +++ b/sources/extsysmonsources/hddtempsource.cpp @@ -77,7 +77,7 @@ QVariant HDDTemperatureSource::data(const QString &_source) qCDebug(LOG_ESS) << "Source" << _source; QString device = _source; - device.remove("hdd/temperature"); + device.remove("temperature"); // run cmd if (m_processes[device]->state() == QProcess::NotRunning) { auto cmd = m_cmd.first(); @@ -95,7 +95,7 @@ KSysGuard::SensorInfo *HDDTemperatureSource::initialData(const QString &_source) qCDebug(LOG_ESS) << "Source" << _source; auto device = _source; - device.remove("hdd/temperature"); + device.remove("temperature"); auto data = new KSysGuard::SensorInfo(); data->min = 0.0; @@ -112,7 +112,7 @@ QStringList HDDTemperatureSource::sources() const { QStringList sources; for (auto &device : m_devices) - sources.append(QString("hdd/temperature%1").arg(device)); + sources.append(QString("temperature%1").arg(device)); return sources; } diff --git a/sources/extsysmonsources/loadsource.cpp b/sources/extsysmonsources/loadsource.cpp index d8f1b88..c2062ff 100644 --- a/sources/extsysmonsources/loadsource.cpp +++ b/sources/extsysmonsources/loadsource.cpp @@ -53,7 +53,7 @@ KSysGuard::SensorInfo *LoadSource::initialData(const QString &_source) const qCDebug(LOG_ESS) << "Source" << _source; auto data = new KSysGuard::SensorInfo(); - if (_source.startsWith("load/load")) { + if (_source.startsWith("load")) { data->min = 0; data->max = 0; data->name = "Simple sources for load tests"; @@ -69,7 +69,7 @@ QStringList LoadSource::sources() const { QStringList sources; for (int i = 0; i < 1000; i++) - sources.append(QString("load/load%1").arg(i)); + sources.append(QString("load%1").arg(i)); return sources; } diff --git a/sources/extsysmonsources/networksource.cpp b/sources/extsysmonsources/networksource.cpp index 6762cf1..c8c166e 100644 --- a/sources/extsysmonsources/networksource.cpp +++ b/sources/extsysmonsources/networksource.cpp @@ -52,7 +52,7 @@ NetworkSource::~NetworkSource() QVariant NetworkSource::data(const QString &_source) { - qCDebug(LOG_ESS) << "Source" << _source; + qCWarning(LOG_ESS) << "Source" << _source; if (!m_values.contains(_source)) run(); @@ -65,11 +65,11 @@ KSysGuard::SensorInfo *NetworkSource::initialData(const QString &_source) const qCDebug(LOG_ESS) << "Source" << _source; auto data = new KSysGuard::SensorInfo(); - if (_source == "network/current/name") { + if (_source == "device") { data->name = "Current network device name"; data->variantType = QVariant::String; data->unit = KSysGuard::UnitNone; - } else if (_source == "network/current/ssid") { + } else if (_source == "ssid") { data->name = "Current SSID name"; data->variantType = QVariant::String; data->unit = KSysGuard::UnitNone; @@ -81,16 +81,16 @@ KSysGuard::SensorInfo *NetworkSource::initialData(const QString &_source) const void NetworkSource::run() { - m_values["network/current/name"] = NetworkSource::getCurrentDevice(); - m_process->start("iwgetid", QStringList() << "-r"); + m_values["device"] = NetworkSource::getCurrentDevice(); + m_process->start("iwgetid", {"-r"}); } QStringList NetworkSource::sources() const { QStringList sources; - sources.append("network/current/name"); - sources.append("network/current/ssid"); + sources.append("device"); + sources.append("ssid"); return sources; } @@ -104,7 +104,7 @@ void NetworkSource::updateSsid() QString qoutput = QString::fromUtf8(m_process->readAllStandardOutput()).trimmed(); qCInfo(LOG_ESS) << "Output" << qoutput; - m_values["network/current/ssid"] = qoutput; + m_values["ssid"] = qoutput; } diff --git a/sources/extsysmonsources/playersource.cpp b/sources/extsysmonsources/playersource.cpp index e23a845..98e0cdf 100644 --- a/sources/extsysmonsources/playersource.cpp +++ b/sources/extsysmonsources/playersource.cpp @@ -95,51 +95,51 @@ KSysGuard::SensorInfo *PlayerSource::initialData(const QString &_source) const qCDebug(LOG_ESS) << "Source" << _source; auto data = new KSysGuard::SensorInfo(); - if (_source == "player/album") { + if (_source == "album") { data->name = "Current song album"; data->variantType = QVariant::String; data->unit = KSysGuard::UnitNone; - } else if (_source == "player/salbum") { + } else if (_source == "salbum") { data->name = QString("Current song album (%1 symbols)").arg(m_symbols); data->variantType = QVariant::String; data->unit = KSysGuard::UnitNone; - } else if (_source == "player/dalbum") { + } else if (_source == "dalbum") { data->name = QString("Current song album (%1 symbols, dynamic)").arg(m_symbols); data->variantType = QVariant::String; data->unit = KSysGuard::UnitNone; - } else if (_source == "player/artist") { + } else if (_source == "artist") { data->name = "Current song artist"; data->variantType = QVariant::String; data->unit = KSysGuard::UnitNone; - } else if (_source == "player/sartist") { + } else if (_source == "sartist") { data->name = QString("Current song artist (%1 symbols)").arg(m_symbols); data->variantType = QVariant::String; data->unit = KSysGuard::UnitNone; - } else if (_source == "player/dartist") { + } else if (_source == "dartist") { data->name = QString("Current song artist (%1 symbols, dynamic)").arg(m_symbols); data->variantType = QVariant::String; data->unit = KSysGuard::UnitNone; - } else if (_source == "player/duration") { + } else if (_source == "duration") { data->min = 0; data->max = 0; data->name = "Current song duration"; data->variantType = QVariant::Int; data->unit = KSysGuard::UnitSecond; - } else if (_source == "player/progress") { + } else if (_source == "progress") { data->min = 0; data->max = 0; data->name = "Current song progress"; data->variantType = QVariant::Int; data->unit = KSysGuard::UnitSecond; - } else if (_source == "player/title") { + } else if (_source == "title") { data->name = "Current song title"; data->variantType = QVariant::String; data->unit = KSysGuard::UnitNone; - } else if (_source == "player/stitle") { + } else if (_source == "stitle") { data->name = QString("Current song title (%1 symbols)").arg(m_symbols); data->variantType = QVariant::String; data->unit = KSysGuard::UnitNone; - } else if (_source == "player/dtitle") { + } else if (_source == "dtitle") { data->name = QString("Current song title (%1 symbols, dynamic)").arg(m_symbols); data->variantType = QVariant::String; data->unit = KSysGuard::UnitNone; @@ -166,33 +166,30 @@ void PlayerSource::run() // dymanic properties // solid - m_values["player/salbum"] = stripString(m_values["player/album"].toString(), m_symbols); - m_values["player/sartist"] = stripString(m_values["player/artist"].toString(), m_symbols); - m_values["player/stitle"] = stripString(m_values["player/title"].toString(), m_symbols); + m_values["salbum"] = stripString(m_values["album"].toString(), m_symbols); + m_values["sartist"] = stripString(m_values["artist"].toString(), m_symbols); + m_values["stitle"] = stripString(m_values["title"].toString(), m_symbols); // dynamic - m_values["player/dalbum"] - = buildString(m_values["player/dalbum"].toString(), m_values["player/album"].toString(), m_symbols); - m_values["player/dartist"] - = buildString(m_values["player/dartist"].toString(), m_values["player/artist"].toString(), m_symbols); - m_values["player/dtitle"] - = buildString(m_values["player/dtitle"].toString(), m_values["player/title"].toString(), m_symbols); + m_values["dalbum"] = buildString(m_values["dalbum"].toString(), m_values["album"].toString(), m_symbols); + m_values["dartist"] = buildString(m_values["dartist"].toString(), m_values["artist"].toString(), m_symbols); + m_values["dtitle"] = buildString(m_values["dtitle"].toString(), m_values["title"].toString(), m_symbols); } QStringList PlayerSource::sources() const { QStringList sources; - sources.append("player/album"); - sources.append("player/dalbum"); - sources.append("player/salbum"); - sources.append("player/artist"); - sources.append("player/dartist"); - sources.append("player/sartist"); - sources.append("player/duration"); - sources.append("player/progress"); - sources.append("player/title"); - sources.append("player/dtitle"); - sources.append("player/stitle"); + sources.append("album"); + sources.append("dalbum"); + sources.append("salbum"); + sources.append("artist"); + sources.append("dartist"); + sources.append("sartist"); + sources.append("duration"); + sources.append("progress"); + sources.append("title"); + sources.append("dtitle"); + sources.append("stitle"); return sources; } @@ -245,10 +242,10 @@ void PlayerSource::mpdSocketReadyRead() // there are one more time... if ((metadata == "time") && (data.contains(':'))) { QStringList times = data.split(':'); - m_mpdCached["player/duration"] = times.at(0).toInt(); - m_mpdCached["player/progress"] = times.at(1).toInt(); + m_mpdCached["duration"] = times.at(0).toInt(); + m_mpdCached["progress"] = times.at(1).toInt(); } else if (m_metadata.contains(metadata)) { - m_mpdCached[QString("player/%1").arg(metadata)] = data; + m_mpdCached[metadata] = data; } } } @@ -266,11 +263,11 @@ void PlayerSource::mpdSocketWritten(const qint64 _bytes) QVariantHash PlayerSource::defaultInfo() { QVariantHash info; - info["player/album"] = "unknown"; - info["player/artist"] = "unknown"; - info["player/duration"] = 0; - info["player/progress"] = 0; - info["player/title"] = "unknown"; + info["album"] = "unknown"; + info["artist"] = "unknown"; + info["duration"] = 0; + info["progress"] = 0; + info["title"] = "unknown"; return info; } @@ -321,11 +318,11 @@ QVariantHash PlayerSource::getPlayerMprisInfo(const QString &_mpris) // another portion of dirty magic auto map = qdbus_cast( response.arguments().first().value().variant().value()); - info["player/album"] = map.value("xesam:album", "unknown"); + info["album"] = map.value("xesam:album", "unknown"); // artist is array - info["player/artist"] = map.value("xesam:artist", "unknown").toString(); - info["player/duration"] = map.value("mpris:length", 0).toInt() / (1000 * 1000); - info["player/title"] = map.value("xesam:title", "unknown"); + info["artist"] = map.value("xesam:artist", "unknown").toString(); + info["duration"] = map.value("mpris:length", 0).toInt() / (1000 * 1000); + info["title"] = map.value("xesam:title", "unknown"); } // position @@ -336,8 +333,7 @@ QVariantHash PlayerSource::getPlayerMprisInfo(const QString &_mpris) qCWarning(LOG_ESS) << "Error message" << response.errorMessage(); } else { // this cast is simpler than the previous one ;) - info["player/progress"] - = response.arguments().first().value().variant().toLongLong() / (1000 * 1000); + info["progress"] = response.arguments().first().value().variant().toLongLong() / (1000 * 1000); } return info; diff --git a/sources/extsysmonsources/processessource.cpp b/sources/extsysmonsources/processessource.cpp index a3219eb..5af403c 100644 --- a/sources/extsysmonsources/processessource.cpp +++ b/sources/extsysmonsources/processessource.cpp @@ -56,17 +56,17 @@ KSysGuard::SensorInfo *ProcessesSource::initialData(const QString &_source) cons qCDebug(LOG_ESS) << "Source" << _source; auto data = new KSysGuard::SensorInfo(); - if (_source == "ps/running/count") { + if (_source == "running/count") { data->min = 0; data->max = 0; data->name = "Count of running processes"; data->variantType = QVariant::Int; data->unit = KSysGuard::UnitNone; - } else if (_source == "ps/running/list") { + } else if (_source == "running/list") { data->name = "All running processes list"; data->variantType = QVariant::StringList; data->unit = KSysGuard::UnitNone; - } else if (_source == "ps/total/count") { + } else if (_source == "total/count") { data->min = 0; data->max = 0; data->name = "Total count of processes"; @@ -99,18 +99,18 @@ void ProcessesSource::run() cmdFile.close(); } - m_values["ps/running/count"] = running.count(); - m_values["ps/running/list"] = running; - m_values["ps/total/count"] = directories.count(); + m_values["running/count"] = running.count(); + m_values["running/list"] = running; + m_values["total/count"] = directories.count(); } QStringList ProcessesSource::sources() const { QStringList sources; - sources.append("ps/running/count"); - sources.append("ps/running/list"); - sources.append("ps/total/count"); + sources.append("running/count"); + sources.append("running/list"); + sources.append("total/count"); return sources; } diff --git a/sources/extsysmonsources/quotessource.cpp b/sources/extsysmonsources/quotessource.cpp index f386345..042b367 100644 --- a/sources/extsysmonsources/quotessource.cpp +++ b/sources/extsysmonsources/quotessource.cpp @@ -48,14 +48,12 @@ QVariant QuotesSource::data(const QString &_source) qCDebug(LOG_ESS) << "Source" << _source; int ind = index(_source); - auto service = _source; - service.remove("quotes/"); - if (!m_values.contains(service)) { + if (!m_values.contains(_source)) { QVariantHash data = m_extQuotes->itemByTagNumber(ind)->run(); for (auto &key : data.keys()) m_values[key] = data[key]; } - QVariant value = m_values.take(service); + QVariant value = m_values.take(_source); return value; } @@ -66,37 +64,37 @@ KSysGuard::SensorInfo *QuotesSource::initialData(const QString &_source) const int ind = index(_source); auto data = new KSysGuard::SensorInfo; - if (_source.startsWith("quotes/pricechg")) { + if (_source.startsWith("pricechg")) { data->min = 0.0; data->max = 0.0; data->name = QString("Absolute price changes for '%1'").arg(m_extQuotes->itemByTagNumber(ind)->uniq()); data->variantType = QVariant::Double; data->unit = KSysGuard::UnitNone; - } else if (_source.startsWith("quotes/price")) { + } else if (_source.startsWith("price")) { data->min = 0.0; data->max = 0.0; data->name = QString("Price for '%1'").arg(m_extQuotes->itemByTagNumber(ind)->uniq()); data->variantType = QVariant::Double; data->unit = KSysGuard::UnitNone; - } else if (_source.startsWith("quotes/percpricechg")) { + } else if (_source.startsWith("percpricechg")) { data->min = -100.0; data->max = 100.0; data->name = QString("Price changes for '%1'").arg(m_extQuotes->itemByTagNumber(ind)->uniq()); data->variantType = QVariant::Double; data->unit = KSysGuard::UnitPercent; - } else if (_source.startsWith("quotes/volumechg")) { + } else if (_source.startsWith("volumechg")) { data->min = 0; data->max = 0; data->name = QString("Absolute volume changes for '%1'").arg(m_extQuotes->itemByTagNumber(ind)->uniq()); data->variantType = QVariant::Int; data->unit = KSysGuard::UnitNone; - } else if (_source.startsWith("quotes/volume")) { + } else if (_source.startsWith("volume")) { data->min = 0; data->max = 0; data->name = QString("Volume for '%1'").arg(m_extQuotes->itemByTagNumber(ind)->uniq()); data->variantType = QVariant::Int; data->unit = KSysGuard::UnitNone; - } else if (_source.startsWith("quotes/percvolumechg")) { + } else if (_source.startsWith("percvolumechg")) { data->min = -100.0; data->max = 100.0; data->name = QString("Volume changes for '%1'").arg(m_extQuotes->itemByTagNumber(ind)->uniq()); @@ -118,12 +116,12 @@ QStringList QuotesSource::getSources() { QStringList sources; for (auto &item : m_extQuotes->activeItems()) { - sources.append(QString("quotes/%1").arg(item->tag("price"))); - sources.append(QString("quotes/%1").arg(item->tag("pricechg"))); - sources.append(QString("quotes/%1").arg(item->tag("percpricechg"))); - sources.append(QString("quotes/%1").arg(item->tag("volume"))); - sources.append(QString("quotes/%1").arg(item->tag("volumechg"))); - sources.append(QString("quotes/%1").arg(item->tag("percvolumechg"))); + sources.append(item->tag("price")); + sources.append(item->tag("pricechg")); + sources.append(item->tag("percpricechg")); + sources.append(item->tag("volume")); + sources.append(item->tag("volumechg")); + sources.append(item->tag("percvolumechg")); } return sources; diff --git a/sources/extsysmonsources/requestsource.cpp b/sources/extsysmonsources/requestsource.cpp index c4a0a3e..2ac9eec 100644 --- a/sources/extsysmonsources/requestsource.cpp +++ b/sources/extsysmonsources/requestsource.cpp @@ -48,14 +48,12 @@ QVariant RequestSource::data(const QString &_source) qCDebug(LOG_ESS) << "Source" << _source; int ind = index(_source); - auto service = _source; - service.remove("network/"); - if (!m_values.contains(service)) { + if (!m_values.contains(_source)) { QVariantHash data = m_extNetRequest->itemByTagNumber(ind)->run(); for (auto &key : data.keys()) m_values[key] = data[key]; } - QVariant value = m_values.take(service); + QVariant value = m_values.take(_source); return value; } @@ -66,7 +64,7 @@ KSysGuard::SensorInfo *RequestSource::initialData(const QString &_source) const int ind = index(_source); auto data = new KSysGuard::SensorInfo(); - if (_source.startsWith("network/response")) { + if (_source.startsWith("response")) { data->name = QString("Network response for %1").arg(m_extNetRequest->itemByTagNumber(ind)->uniq()); data->variantType = QVariant::String; data->unit = KSysGuard::UnitNone; @@ -86,7 +84,7 @@ QStringList RequestSource::getSources() { QStringList sources; for (auto &item : m_extNetRequest->activeItems()) - sources.append(QString("network/%1").arg(item->tag("response"))); + sources.append(item->tag("response")); return sources; } diff --git a/sources/extsysmonsources/systeminfosource.cpp b/sources/extsysmonsources/systeminfosource.cpp index a089001..4a5dbe1 100644 --- a/sources/extsysmonsources/systeminfosource.cpp +++ b/sources/extsysmonsources/systeminfosource.cpp @@ -59,13 +59,13 @@ KSysGuard::SensorInfo *SystemInfoSource::initialData(const QString &_source) con qCDebug(LOG_ESS) << "Source" << _source; auto data = new KSysGuard::SensorInfo(); - if (_source == "system/brightness") { + if (_source == "brightness") { data->min = 0.0; data->max = 100.0; data->name = "Screen brightness"; data->variantType = QVariant::Double; data->unit = KSysGuard::UnitPercent; - } else if (_source == "system/volume") { + } else if (_source == "volume") { data->min = 0.0; data->max = 100.0; data->name = "Master volume"; @@ -79,16 +79,16 @@ KSysGuard::SensorInfo *SystemInfoSource::initialData(const QString &_source) con void SystemInfoSource::run() { - m_values["system/brightness"] = SystemInfoSource::getCurrentBrightness(); - m_values["system/volume"] = SystemInfoSource::getCurrentVolume(); + m_values["brightness"] = SystemInfoSource::getCurrentBrightness(); + m_values["volume"] = SystemInfoSource::getCurrentVolume(); } QStringList SystemInfoSource::sources() const { QStringList sources; - sources.append("system/brightness"); - sources.append("system/volume"); + sources.append("brightness"); + sources.append("volume"); return sources; } @@ -100,24 +100,24 @@ QVariant SystemInfoSource::fromDBusVariant(const QVariant &value) } -float SystemInfoSource::getCurrentBrightness() +double SystemInfoSource::getCurrentBrightness() { qCDebug(LOG_ESS) << "Get current brightness"; auto maxBrightness = sendDBusRequest("org.kde.Solid.PowerManagement", "/org/kde/Solid/PowerManagement/Actions/BrightnessControl", "org.kde.Solid.PowerManagement.Actions.BrightnessControl", "brightnessMax") - .toFloat(); + .toDouble(); auto brightness = sendDBusRequest("org.kde.Solid.PowerManagement", "/org/kde/Solid/PowerManagement/Actions/BrightnessControl", "org.kde.Solid.PowerManagement.Actions.BrightnessControl", "brightness") - .toFloat(); + .toDouble(); - return std::round(100.0f * brightness / maxBrightness); + return std::round(100.0 * brightness / maxBrightness); } -float SystemInfoSource::getCurrentVolume() +double SystemInfoSource::getCurrentVolume() { qCDebug(LOG_ESS) << "Get current volume"; @@ -129,7 +129,7 @@ float SystemInfoSource::getCurrentVolume() if (currentMixer.isEmpty()) { qCWarning(LOG_ESS) << "Mixer is empty"; - return std::numeric_limits::quiet_NaN(); + return std::numeric_limits::quiet_NaN(); } currentMixer.replace(":", "_").replace(".", "_").replace("-", "_"); @@ -140,14 +140,14 @@ float SystemInfoSource::getCurrentVolume() .toString(); if (currentControl.isEmpty()) { qCWarning(LOG_ESS) << "Control is empty"; - return std::numeric_limits::quiet_NaN(); + return std::numeric_limits::quiet_NaN(); } currentControl.replace(":", "_").replace(".", "_").replace("-", "_"); auto path = QString("/Mixers/%1/%2").arg(currentMixer).arg(currentControl); return fromDBusVariant(sendDBusRequest("org.kde.kmix", path, "org.freedesktop.DBus.Properties", "Get", QVariantList({"org.kde.KMix.Control", "volume"}))) - .toFloat(); + .toDouble(); } diff --git a/sources/extsysmonsources/systeminfosource.h b/sources/extsysmonsources/systeminfosource.h index 6f0aec2..578e671 100644 --- a/sources/extsysmonsources/systeminfosource.h +++ b/sources/extsysmonsources/systeminfosource.h @@ -39,8 +39,8 @@ private: // configuration and values QVariantHash m_values; static QVariant fromDBusVariant(const QVariant &value); - static float getCurrentBrightness(); - static float getCurrentVolume(); + static double getCurrentBrightness(); + static double getCurrentVolume(); static QVariant sendDBusRequest(const QString &destination, const QString &path, const QString &interface, const QString &method, const QVariantList &args = QVariantList()); }; diff --git a/sources/extsysmonsources/upgradesource.cpp b/sources/extsysmonsources/upgradesource.cpp index 5b165ad..f278bcf 100644 --- a/sources/extsysmonsources/upgradesource.cpp +++ b/sources/extsysmonsources/upgradesource.cpp @@ -75,7 +75,7 @@ QStringList UpgradeSource::getSources() { QStringList sources; for (auto &item : m_extUpgrade->activeItems()) - sources.append(QString("upgrade/%1").arg(item->tag("pkgcount"))); + sources.append(item->tag("pkgcount")); return sources; } diff --git a/sources/extsysmonsources/weathersource.cpp b/sources/extsysmonsources/weathersource.cpp index 2be6194..678fcc9 100644 --- a/sources/extsysmonsources/weathersource.cpp +++ b/sources/extsysmonsources/weathersource.cpp @@ -48,14 +48,12 @@ QVariant WeatherSource::data(const QString &_source) qCDebug(LOG_ESS) << "Source" << _source; int ind = index(_source); - auto service = _source; - service.remove("weather/"); - if (!m_values.contains(service)) { + if (!m_values.contains(_source)) { QVariantHash data = m_extWeather->itemByTagNumber(ind)->run(); for (auto &key : data.keys()) m_values[key] = data[key]; } - QVariant value = m_values.take(service); + QVariant value = m_values.take(_source); return value; } @@ -66,35 +64,35 @@ KSysGuard::SensorInfo *WeatherSource::initialData(const QString &_source) const int ind = index(_source); auto data = new KSysGuard::SensorInfo(); - if (_source.startsWith("weather/weatherId")) { + if (_source.startsWith("weatherId")) { data->min = 0; data->max = 1000; data->name = QString("Numeric weather ID for '%1'").arg(m_extWeather->itemByTagNumber(ind)->uniq()); data->variantType = QVariant::Int; data->unit = KSysGuard::UnitNone; - } else if (_source.startsWith("weather/weather")) { + } else if (_source.startsWith("weather")) { data->name = QString("ID string map for '%1'").arg(m_extWeather->itemByTagNumber(ind)->uniq()); data->variantType = QVariant::String; data->unit = KSysGuard::UnitNone; - } else if (_source.startsWith("weather/humidity")) { + } else if (_source.startsWith("humidity")) { data->min = 0; data->max = 100; data->name = QString("Humidity for '%1'").arg(m_extWeather->itemByTagNumber(ind)->uniq()); data->variantType = QVariant::Int; data->unit = KSysGuard::UnitPercent; - } else if (_source.startsWith("weather/pressure")) { + } else if (_source.startsWith("pressure")) { data->min = 0; data->max = 0; data->name = QString("Atmospheric pressure for '%1'").arg(m_extWeather->itemByTagNumber(ind)->uniq()); data->variantType = QVariant::Int; data->unit = KSysGuard::UnitNone; - } else if (_source.startsWith("weather/temperature")) { + } else if (_source.startsWith("temperature")) { data->min = 0.0; data->max = 0.0; data->name = QString("Temperature for '%1'").arg(m_extWeather->itemByTagNumber(ind)->uniq()); data->variantType = QVariant::Double; data->unit = KSysGuard::UnitCelsius; - } else if (_source.startsWith("weather/timestamp")) { + } else if (_source.startsWith("timestamp")) { data->name = QString("Timestamp for '%1'").arg(m_extWeather->itemByTagNumber(ind)->uniq()); data->variantType = QVariant::String; data->unit = KSysGuard::UnitNone; @@ -114,12 +112,12 @@ QStringList WeatherSource::getSources() { QStringList sources; for (auto &item : m_extWeather->activeItems()) { - sources.append(QString("weather/%1").arg(item->tag("weatherId"))); - sources.append(QString("weather/%1").arg(item->tag("weather"))); - sources.append(QString("weather/%1").arg(item->tag("humidity"))); - sources.append(QString("weather/%1").arg(item->tag("pressure"))); - sources.append(QString("weather/%1").arg(item->tag("temperature"))); - sources.append(QString("weather/%1").arg(item->tag("timestamp"))); + sources.append(item->tag("weatherId")); + sources.append(item->tag("weather")); + sources.append(item->tag("humidity")); + sources.append(item->tag("pressure")); + sources.append(item->tag("temperature")); + sources.append(item->tag("timestamp")); } return sources; From 23e197789faad810c6c1f9c26f5e44a2c6d062b5 Mon Sep 17 00:00:00 2001 From: Evgenii Alekseev Date: Sat, 23 Mar 2024 13:57:28 +0200 Subject: [PATCH 07/10] make it build together --- sources/awesomewidgets/CMakeLists.txt | 20 +- .../awesomewidgets-extweather-ids.json | 208 +++++++++--------- sources/desktop-panel/CMakeLists.txt | 2 +- sources/desktop-panel/metadata.desktop | 26 --- sources/desktop-panel/metadata.json | 7 +- .../package/contents/config/config.qml | 2 +- .../package/contents/config/main.xml | 50 ++--- .../package/contents/ui/about.qml | 2 +- .../package/contents/ui/activeapp.qml | 2 +- .../package/contents/ui/advanced.qml | 6 +- .../package/contents/ui/inactiveapp.qml | 2 +- .../package/contents/ui/main.qml | 14 +- .../package/contents/ui/widget.qml | 2 +- .../desktop-panel/package/metadata.desktop | 26 --- sources/desktop-panel/package/metadata.json | 26 +++ sources/desktop-panel/plugin/CMakeLists.txt | 4 +- sources/desktop-panel/plugin/dpadds.cpp | 2 +- sources/extsysmon/CMakeLists.txt | 2 +- sources/libraries.cmake | 6 +- sources/translations/CMakeLists.txt | 4 +- 20 files changed, 191 insertions(+), 222 deletions(-) delete mode 100644 sources/desktop-panel/metadata.desktop delete mode 100644 sources/desktop-panel/package/metadata.desktop create mode 100644 sources/desktop-panel/package/metadata.json diff --git a/sources/awesomewidgets/CMakeLists.txt b/sources/awesomewidgets/CMakeLists.txt index 881ec58..c49d13a 100644 --- a/sources/awesomewidgets/CMakeLists.txt +++ b/sources/awesomewidgets/CMakeLists.txt @@ -33,13 +33,13 @@ add_library(${SUBPROJECT} STATIC ${SUBPROJECT_SOURCE} ${SUBPROJECT_HEADER} ${SUB target_link_libraries(${SUBPROJECT} ${Qt_LIBRARIES} ${Kf6_LIBRARIES}) # install -install(DIRECTORY ${SUBPROJECT_CONFIGS} DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME}) -install(DIRECTORY ${SUBPROJECT_FORMATTERS} DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME}) -install(DIRECTORY ${SUBPROJECT_GRAPHITEMS} DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME}) -install(DIRECTORY ${SUBPROJECT_QUOTES} DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME}) -install(DIRECTORY ${SUBPROJECT_SCRIPTS} DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME}) -install(DIRECTORY ${SUBPROJECT_REQUESTS} DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME}) -install(DIRECTORY ${SUBPROJECT_UPGRADE} DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME}) -install(DIRECTORY ${SUBPROJECT_WEATHER} DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME}) -install(FILES ${SUBPROJECT_INI} DESTINATION ${KDE_INSTALL_CONFDIR}) -install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${SUBPROJECT_WEATHER_JSON} DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME}/weather) +install(DIRECTORY ${SUBPROJECT_CONFIGS} DESTINATION ${KDE_INSTALL_DATADIR}/${PROJECT_NAME}) +install(DIRECTORY ${SUBPROJECT_FORMATTERS} DESTINATION ${KDE_INSTALL_DATADIR}/${PROJECT_NAME}) +install(DIRECTORY ${SUBPROJECT_GRAPHITEMS} DESTINATION ${KDE_INSTALL_DATADIR}/${PROJECT_NAME}) +install(DIRECTORY ${SUBPROJECT_QUOTES} DESTINATION ${KDE_INSTALL_DATADIR}/${PROJECT_NAME}) +install(DIRECTORY ${SUBPROJECT_SCRIPTS} DESTINATION ${KDE_INSTALL_DATADIR}/${PROJECT_NAME}) +install(DIRECTORY ${SUBPROJECT_REQUESTS} DESTINATION ${KDE_INSTALL_DATADIR}/${PROJECT_NAME}) +install(DIRECTORY ${SUBPROJECT_UPGRADE} DESTINATION ${KDE_INSTALL_DATADIR}/${PROJECT_NAME}) +install(DIRECTORY ${SUBPROJECT_WEATHER} DESTINATION ${KDE_INSTALL_DATADIR}/${PROJECT_NAME}) +install(FILES ${SUBPROJECT_INI} DESTINATION /${KDE_INSTALL_CONFDIR}) +install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${SUBPROJECT_WEATHER_JSON} DESTINATION ${KDE_INSTALL_DATADIR}/${PROJECT_NAME}/weather) diff --git a/sources/awesomewidgets/awesomewidgets-extweather-ids.json b/sources/awesomewidgets/awesomewidgets-extweather-ids.json index e8ec649..0c47dec 100644 --- a/sources/awesomewidgets/awesomewidgets-extweather-ids.json +++ b/sources/awesomewidgets/awesomewidgets-extweather-ids.json @@ -5,120 +5,120 @@ "image": { "__comment": "should be described as html image with full path inside", - "default": "", + "default": "", - "800": "", + "800": "", - "801": "", + "801": "", - "802": "", - "803": "", + "802": "", + "803": "", - "804": "", + "804": "", - "300": "", - "301": "", - "302": "", - "310": "", - "311": "", - "312": "", - "313": "", - "314": "", - "321": "", - "520": "", - "521": "", - "522": "", - "531": "", + "300": "", + "301": "", + "302": "", + "310": "", + "311": "", + "312": "", + "313": "", + "314": "", + "321": "", + "520": "", + "521": "", + "522": "", + "531": "", - "500": "", - "501": "", - "502": "", - "503": "", - "504": "", + "500": "", + "501": "", + "502": "", + "503": "", + "504": "", - "200": "", - "201": "", - "202": "", - "210": "", - "211": "", - "212": "", - "221": "", - "230": "", - "231": "", - "232": "", + "200": "", + "201": "", + "202": "", + "210": "", + "211": "", + "212": "", + "221": "", + "230": "", + "231": "", + "232": "", - "511": "", - "600": "", - "601": "", - "602": "", - "611": "", - "612": "", - "615": "", - "616": "", - "620": "", - "621": "", - "622": "", + "511": "", + "600": "", + "601": "", + "602": "", + "611": "", + "612": "", + "615": "", + "616": "", + "620": "", + "621": "", + "622": "", - "701": "", - "711": "", - "721": "", - "731": "", - "741": "", - "751": "", - "761": "", - "762": "", - "771": "", - "781": "", + "701": "", + "711": "", + "721": "", + "731": "", + "741": "", + "751": "", + "761": "", + "762": "", + "771": "", + "781": "", - "0": "", - "1": "", - "2": "", - "3": "", - "4": "", - "5": "", - "6": "", - "7": "", - "8": "", - "9": "", - "10": "", - "11": "", - "12": "", - "13": "", - "14": "", - "15": "", - "16": "", - "17": "", - "18": "", - "19": "", - "20": "", - "21": "", - "22": "", - "23": "", - "24": "", - "25": "", - "26": "", - "27": "", - "28": "", - "29": "", - "30": "", - "31": "", - "32": "", - "33": "", - "34": "", - "35": "", - "36": "", - "37": "", - "38": "", - "39": "", - "40": "", - "41": "", - "42": "", - "43": "", - "44": "", - "45": "", - "46": "", - "47": "", - "3200": "" + "0": "", + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "", + "7": "", + "8": "", + "9": "", + "10": "", + "11": "", + "12": "", + "13": "", + "14": "", + "15": "", + "16": "", + "17": "", + "18": "", + "19": "", + "20": "", + "21": "", + "22": "", + "23": "", + "24": "", + "25": "", + "26": "", + "27": "", + "28": "", + "29": "", + "30": "", + "31": "", + "32": "", + "33": "", + "34": "", + "35": "", + "36": "", + "37": "", + "38": "", + "39": "", + "40": "", + "41": "", + "42": "", + "43": "", + "44": "", + "45": "", + "46": "", + "47": "", + "3200": "" }, "text": { diff --git a/sources/desktop-panel/CMakeLists.txt b/sources/desktop-panel/CMakeLists.txt index 6d7ea73..0bb8bcd 100644 --- a/sources/desktop-panel/CMakeLists.txt +++ b/sources/desktop-panel/CMakeLists.txt @@ -1,7 +1,7 @@ set(SUBPROJECT plasma_applet_desktop-panel) message(STATUS "Subproject ${SUBPROJECT}") -configure_file(metadata.desktop ${CMAKE_CURRENT_SOURCE_DIR}/package/metadata.desktop) +configure_file(metadata.json ${CMAKE_CURRENT_SOURCE_DIR}/package/metadata.json) add_subdirectory(plugin) plasma_install_package(package org.kde.plasma.desktoppanel) diff --git a/sources/desktop-panel/metadata.desktop b/sources/desktop-panel/metadata.desktop deleted file mode 100644 index a0950d9..0000000 --- a/sources/desktop-panel/metadata.desktop +++ /dev/null @@ -1,26 +0,0 @@ -[Desktop Entry] -Encoding=UTF-8 -Name=Desktop Panel -Comment=A minimalistic Plasmoid -Comment[en]=A minimalistic Plasmoid -Comment[es]=Un plasmoide minimalista -Comment[es]=Un script Plasmoïde minimaliste -Comment[pt_BR]=Um script Plasmoid -Comment[ru]=Минималистичный плазмоид -Comment[uk]=Мінімалістичний плазмоїд -X-KDE-ServiceTypes=Plasma/Applet -Type=Service -Icon=utilities-system-monitor - -X-KDE-ServiceTypes=Plasma/Applet -X-Plasma-API=declarativeappletscript -X-Plasma-MainScript=ui/main.qml - -X-KDE-PluginInfo-Author=Evgeniy Alekseev aka arcanis -X-KDE-PluginInfo-Email=esalexeev@gmail.com -X-KDE-PluginInfo-Name=org.kde.plasma.desktoppanel -X-KDE-PluginInfo-Version=@PROJECT_VERSION@ -X-KDE-PluginInfo-Website=https://arcanis.me/projects/awesome-widgets/ -X-KDE-PluginInfo-Category=System Information -X-KDE-PluginInfo-License=GPLv3 -X-KDE-PluginInfo-EnabledByDefault=true diff --git a/sources/desktop-panel/metadata.json b/sources/desktop-panel/metadata.json index efd12be..88ff508 100644 --- a/sources/desktop-panel/metadata.json +++ b/sources/desktop-panel/metadata.json @@ -1,4 +1,5 @@ { + "KPackageStructure": "Plasma/Applet", "KPlugin": { "Authors": [ { @@ -18,12 +19,8 @@ "Id": "org.kde.plasma.desktoppanel", "License": "GPLv3", "Name": "Desktop Panel", - "ServiceTypes": [ - "Plasma/Applet" - ], "Version": "@PROJECT_VERSION@", "Website": "https://arcanis.me/projects/awesome-widgets/" }, - "X-Plasma-API": "declarativeappletscript", - "X-Plasma-MainScript": "ui/main.qml" + "X-Plasma-API-Minimum-Version": "6.0" } diff --git a/sources/desktop-panel/package/contents/config/config.qml b/sources/desktop-panel/package/contents/config/config.qml index 9f6f6c3..a9ad5da 100644 --- a/sources/desktop-panel/package/contents/config/config.qml +++ b/sources/desktop-panel/package/contents/config/config.qml @@ -15,7 +15,7 @@ * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * ***************************************************************************/ -import QtQuick 2.0 +import QtQuick 2.15 import org.kde.plasma.configuration 2.0 diff --git a/sources/desktop-panel/package/contents/config/main.xml b/sources/desktop-panel/package/contents/config/main.xml index 7c147f6..83c4b65 100644 --- a/sources/desktop-panel/package/contents/config/main.xml +++ b/sources/desktop-panel/package/contents/config/main.xml @@ -7,88 +7,88 @@ - + [$mark$number/$total: $name] - + true - + false - + 0 - + 0 - + ¤ - + contours - + 200 - + #ffffff - + center - + Terminus - + 12 - + #000000 - + normal - + normal - + normal - + #000000 - + center - + Terminus - + 12 - + #ff0000 - + normal - + normal - + normal - + #000000 diff --git a/sources/desktop-panel/package/contents/ui/about.qml b/sources/desktop-panel/package/contents/ui/about.qml index fd6361a..1df9fd2 100644 --- a/sources/desktop-panel/package/contents/ui/about.qml +++ b/sources/desktop-panel/package/contents/ui/about.qml @@ -15,7 +15,7 @@ * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * ***************************************************************************/ -import QtQuick 2.0 +import QtQuick 2.15 import org.kde.plasma.private.desktoppanel 1.0 diff --git a/sources/desktop-panel/package/contents/ui/activeapp.qml b/sources/desktop-panel/package/contents/ui/activeapp.qml index 0c51790..4013442 100644 --- a/sources/desktop-panel/package/contents/ui/activeapp.qml +++ b/sources/desktop-panel/package/contents/ui/activeapp.qml @@ -15,7 +15,7 @@ * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * ***************************************************************************/ -import QtQuick 2.0 +import QtQuick 2.15 import org.kde.plasma.private.desktoppanel 1.0 import "." diff --git a/sources/desktop-panel/package/contents/ui/advanced.qml b/sources/desktop-panel/package/contents/ui/advanced.qml index 38ac1c8..a3d0a52 100644 --- a/sources/desktop-panel/package/contents/ui/advanced.qml +++ b/sources/desktop-panel/package/contents/ui/advanced.qml @@ -15,8 +15,8 @@ * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * ***************************************************************************/ -import QtQuick 2.0 -import QtQuick.Controls 1.3 as QtControls +import QtQuick 2.15 +import QtQuick.Controls import org.kde.plasma.private.desktoppanel 1.0 @@ -131,7 +131,7 @@ Item { onValueEdited: cfg_mark = newValue } - QtControls.GroupBox { + GroupBox { height: implicitHeight width: parent.width title: i18n("Tooltip") diff --git a/sources/desktop-panel/package/contents/ui/inactiveapp.qml b/sources/desktop-panel/package/contents/ui/inactiveapp.qml index 6e04fed..e650dab 100644 --- a/sources/desktop-panel/package/contents/ui/inactiveapp.qml +++ b/sources/desktop-panel/package/contents/ui/inactiveapp.qml @@ -15,7 +15,7 @@ * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * ***************************************************************************/ -import QtQuick 2.0 +import QtQuick 2.15 import org.kde.plasma.private.desktoppanel 1.0 import "." diff --git a/sources/desktop-panel/package/contents/ui/main.qml b/sources/desktop-panel/package/contents/ui/main.qml index e8382ad..4301fbb 100644 --- a/sources/desktop-panel/package/contents/ui/main.qml +++ b/sources/desktop-panel/package/contents/ui/main.qml @@ -15,18 +15,17 @@ * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * ***************************************************************************/ -import QtQuick 2.4 -import QtQuick.Controls 1.3 as QtControls -import QtQuick.Layouts 1.1 +import QtQuick 2.15 +import QtQuick.Controls +import QtQuick.Layouts +import org.kde.plasma.core as PlasmaCore import org.kde.plasma.plasmoid 2.0 -import org.kde.plasma.core 2.0 as PlasmaCore -import org.kde.plasma.components 2.0 as PlasmaComponents import org.kde.plasma.private.desktoppanel 1.0 import "." -Item { +PlasmoidItem { id: main // backend DPAdds { @@ -46,9 +45,6 @@ Item { // init - Plasmoid.preferredRepresentation: Plasmoid.fullRepresentation - Plasmoid.compactRepresentation: Plasmoid.fullRepresentation - Layout.alignment: Qt.AlignVCenter | Qt.AlignHCenter Plasmoid.icon: "utilities-system-monitor" diff --git a/sources/desktop-panel/package/contents/ui/widget.qml b/sources/desktop-panel/package/contents/ui/widget.qml index 683419e..1c47788 100644 --- a/sources/desktop-panel/package/contents/ui/widget.qml +++ b/sources/desktop-panel/package/contents/ui/widget.qml @@ -15,7 +15,7 @@ * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * ***************************************************************************/ -import QtQuick 2.0 +import QtQuick 2.15 import org.kde.plasma.private.desktoppanel 1.0 import "." diff --git a/sources/desktop-panel/package/metadata.desktop b/sources/desktop-panel/package/metadata.desktop deleted file mode 100644 index 8220a91..0000000 --- a/sources/desktop-panel/package/metadata.desktop +++ /dev/null @@ -1,26 +0,0 @@ -[Desktop Entry] -Encoding=UTF-8 -Name=Desktop Panel -Comment=A minimalistic Plasmoid -Comment[en]=A minimalistic Plasmoid -Comment[es]=Un plasmoide minimalista -Comment[es]=Un script Plasmoïde minimaliste -Comment[pt_BR]=Um script Plasmoid -Comment[ru]=Минималистичный плазмоид -Comment[uk]=Мінімалістичний плазмоїд -X-KDE-ServiceTypes=Plasma/Applet -Type=Service -Icon=utilities-system-monitor - -X-KDE-ServiceTypes=Plasma/Applet -X-Plasma-API=declarativeappletscript -X-Plasma-MainScript=ui/main.qml - -X-KDE-PluginInfo-Author=Evgeniy Alekseev aka arcanis -X-KDE-PluginInfo-Email=esalexeev@gmail.com -X-KDE-PluginInfo-Name=org.kde.plasma.desktoppanel -X-KDE-PluginInfo-Version=3.5.1 -X-KDE-PluginInfo-Website=https://arcanis.me/projects/awesome-widgets/ -X-KDE-PluginInfo-Category=System Information -X-KDE-PluginInfo-License=GPLv3 -X-KDE-PluginInfo-EnabledByDefault=true diff --git a/sources/desktop-panel/package/metadata.json b/sources/desktop-panel/package/metadata.json new file mode 100644 index 0000000..5ceb3d0 --- /dev/null +++ b/sources/desktop-panel/package/metadata.json @@ -0,0 +1,26 @@ +{ + "KPackageStructure": "Plasma/Applet", + "KPlugin": { + "Authors": [ + { + "Email": "esalexeev@gmail.com", + "Name": "Evgeniy Alekseev aka arcanis" + } + ], + "Category": "System Information", + "Description": "A minimalistic Plasmoid", + "Description[en]": "A minimalistic Plasmoid", + "Description[es]": "Un script Plasmoïde minimaliste", + "Description[pt_BR]": "Um script Plasmoid", + "Description[ru]": "Минималистичный плазмоид", + "Description[uk]": "Мінімалістичний плазмоїд", + "EnabledByDefault": true, + "Icon": "utilities-system-monitor", + "Id": "org.kde.plasma.desktoppanel", + "License": "GPLv3", + "Name": "Desktop Panel", + "Version": "3.5.1", + "Website": "https://arcanis.me/projects/awesome-widgets/" + }, + "X-Plasma-API-Minimum-Version": "6.0" +} diff --git a/sources/desktop-panel/plugin/CMakeLists.txt b/sources/desktop-panel/plugin/CMakeLists.txt index 25cf51f..21d3c0f 100644 --- a/sources/desktop-panel/plugin/CMakeLists.txt +++ b/sources/desktop-panel/plugin/CMakeLists.txt @@ -15,6 +15,6 @@ file(GLOB SUBPROJECT_NOTIFY *.notifyrc) add_library(${PLUGIN_NAME} SHARED ${SUBPROJECT_SOURCE}) target_link_libraries(${PLUGIN_NAME} ${Qt_LIBRARIES} ${Kf6_LIBRARIES}) -install(TARGETS ${PLUGIN_NAME} DESTINATION ${QML_INSTALL_DIR}/org/kde/plasma/private/desktoppanel) -install(FILES qmldir DESTINATION ${QML_INSTALL_DIR}/org/kde/plasma/private/desktoppanel) +install(TARGETS ${PLUGIN_NAME} DESTINATION ${KDE_INSTALL_QMLDIR}/org/kde/plasma/private/desktoppanel) +install(FILES qmldir DESTINATION ${KDE_INSTALL_QMLDIR}/org/kde/plasma/private/desktoppanel) install(FILES ${SUBPROJECT_NOTIFY} DESTINATION ${KDE_INSTALL_KNOTIFYRCDIR}) diff --git a/sources/desktop-panel/plugin/dpadds.cpp b/sources/desktop-panel/plugin/dpadds.cpp index e3632ef..0782664 100644 --- a/sources/desktop-panel/plugin/dpadds.cpp +++ b/sources/desktop-panel/plugin/dpadds.cpp @@ -223,7 +223,7 @@ QString DPAdds::valueByKey(const QString &_key, int _desktop) const QString currentMark = currentDesktop() == _desktop ? m_mark : ""; if (_key == "mark") - return QString("%1").arg(currentMark, m_mark.count(), QLatin1Char(' ')).replace(" ", " "); + return QString("%1").arg(currentMark, m_mark.size(), QLatin1Char(' ')).replace(" ", " "); else if (_key == "name") { auto name = m_vdi->desktopNames().at(_desktop); return name.replace(" ", " "); diff --git a/sources/extsysmon/CMakeLists.txt b/sources/extsysmon/CMakeLists.txt index 07b1ba4..6d5fa27 100644 --- a/sources/extsysmon/CMakeLists.txt +++ b/sources/extsysmon/CMakeLists.txt @@ -24,4 +24,4 @@ target_link_libraries(${SUBPROJECT} # install install(TARGETS ${SUBPROJECT} DESTINATION ${KDE_INSTALL_PLUGINDIR}/ksystemstats) -install(FILES ${SUBPROJECT_CONF} DESTINATION ${KDE_INSTALL_CONFDIR}) +install(FILES ${SUBPROJECT_CONF} DESTINATION /${KDE_INSTALL_CONFDIR}) diff --git a/sources/libraries.cmake b/sources/libraries.cmake index c8b9695..2d9aaa9 100644 --- a/sources/libraries.cmake +++ b/sources/libraries.cmake @@ -18,13 +18,15 @@ set(Qt_LIBRARIES # kf6 libraries find_package(ECM 0.0.11 REQUIRED NO_MODULE) -set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${ECM_MODULE_PATH} ${ECM_KDE_MODULE_DIR}) +set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${ECM_MODULE_PATH}) find_package(KF6 REQUIRED COMPONENTS I18n Notifications Service WindowSystem) +find_package(KSysGuard REQUIRED) find_package(LibTaskManager REQUIRED) find_package(Plasma REQUIRED) -find_package(KSysGuard REQUIRED) + include(KDEInstallDirs) include(KDECMakeSettings) include(KDECompilerSettings) + set(Kf6_INCLUDE ${KDE_INSTALL_FULL_INCLUDEDIR_KF}) set(Kf6_LIBRARIES KF6::CoreAddons KF6::I18n KF6::Notifications KF6::WindowSystem KSysGuard::Sensors KSysGuard::SensorFaces KSysGuard::SystemStats PW::LibTaskManager) diff --git a/sources/translations/CMakeLists.txt b/sources/translations/CMakeLists.txt index 9b375e5..47c37ea 100644 --- a/sources/translations/CMakeLists.txt +++ b/sources/translations/CMakeLists.txt @@ -16,12 +16,12 @@ foreach (_current_PO_FILE ${_po_files}) install( FILES ${CMAKE_CURRENT_BINARY_DIR}/${_lang}.gmo - DESTINATION ${LOCALE_INSTALL_DIR}/${_lang}/LC_MESSAGES/ + DESTINATION ${KDE_INSTALL_LOCALEDIR}/${_lang}/LC_MESSAGES/ RENAME ${MO_NAME} ) install( FILES ${CMAKE_CURRENT_BINARY_DIR}/${_lang}.gmo - DESTINATION ${LOCALE_INSTALL_DIR}/${_lang}/LC_MESSAGES/ + DESTINATION ${KDE_INSTALL_LOCALEDIR}/${_lang}/LC_MESSAGES/ RENAME ${SND_MO_NAME} ) list(APPEND _gmoFiles ${_gmoFile}) From 0555185044f12e002413b7870716a844b6ec1876 Mon Sep 17 00:00:00 2001 From: Evgenii Alekseev Date: Sat, 23 Mar 2024 15:11:49 +0200 Subject: [PATCH 08/10] add time source --- packages/PKGBUILD | 23 +++---- .../plugin/awdataenginemapper.cpp | 6 +- sources/awesome-widget/plugin/awkeys.cpp | 1 - .../plugin/awkeysaggregator.cpp | 12 ++-- sources/awesomewidgets/owmweatherprovider.cpp | 6 +- .../awesomewidgets/yahooweatherprovider.cpp | 4 +- sources/extsysmon/extsysmonaggregator.cpp | 3 + sources/extsysmon/extsysmonaggregator.h | 6 +- sources/extsysmonsources/timesource.cpp | 62 +++++++++++++++++++ sources/extsysmonsources/timesource.h | 36 +++++++++++ 10 files changed, 123 insertions(+), 36 deletions(-) create mode 100644 sources/extsysmonsources/timesource.cpp create mode 100644 sources/extsysmonsources/timesource.h diff --git a/packages/PKGBUILD b/packages/PKGBUILD index 263a080..746c035 100644 --- a/packages/PKGBUILD +++ b/packages/PKGBUILD @@ -9,8 +9,7 @@ arch=('i686' 'x86_64') url="https://arcanis.me/projects/awesome-widgets" license=('GPL3') depends=('ksysguard' 'plasma-framework') -optdepends=("catalyst: for GPU monitor" - "hddtemp: for HDD temperature monitor" +optdepends=("hddtemp: for HDD temperature monitor" "smartmontools: for HDD temperature monitor" "mpd: for music player monitor" "nvidia-utils: for GPU monitor") @@ -20,22 +19,14 @@ install=${pkgname}.install md5sums=('5953ba518191bb6fff83cdb8633c735c') backup=('etc/xdg/plasma-dataengine-extsysmon.conf') -prepare() { - rm -rf "${srcdir}/build" - mkdir "${srcdir}/build" -} - build () { - cd "${srcdir}/build" - cmake -DKDE_INSTALL_USE_QT_SYS_PATHS=ON \ - -DCMAKE_BUILD_TYPE=Optimization \ - -DCMAKE_INSTALL_PREFIX=/usr \ - -DBUILD_FUTURE=ON \ - "../${_pkgname}" - make + cmake -B build -S "${_pkgname}" \ + -DCMAKE_BUILD_TYPE=Optimization \ + -DBUILD_FUTURE=ON \ + -DBUILD_TESTING=OFF + cmake --build build } package() { - cd "${srcdir}/build" - make DESTDIR="${pkgdir}" install + DESTDIR="$pkgdir" cmake --install build } diff --git a/sources/awesome-widget/plugin/awdataenginemapper.cpp b/sources/awesome-widget/plugin/awdataenginemapper.cpp index cab3e4a..0509df6 100644 --- a/sources/awesome-widget/plugin/awdataenginemapper.cpp +++ b/sources/awesome-widget/plugin/awdataenginemapper.cpp @@ -358,7 +358,7 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const KSy m_formatter[key] = _units == KSysGuard::UnitCelsius ? AWKeysAggregator::FormatterType::Temperature : AWKeysAggregator::FormatterType::Integer; } - } else if (_source == "Local") { + } else if (_source == "extsysmon/time/now") { // time m_map.insert(_source, "time"); m_formatter["time"] = AWKeysAggregator::FormatterType::Time; @@ -410,7 +410,7 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const KSy m_formatter[key] = AWKeysAggregator::FormatterType::Temperature; } - QStringList foundKeys = keysFromSource(_source); + auto foundKeys = keysFromSource(_source); // rewrite formatters for custom ones QStringList customFormattersKeys; @@ -425,7 +425,7 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const KSy // drop key from dictionary if no one user requested key required it qCInfo(LOG_AW) << "Looking for keys" << foundKeys << "in" << _keys; - bool required = _keys.isEmpty() || std::any_of(foundKeys.cbegin(), foundKeys.cend(), [&_keys](const QString &key) { + auto required = _keys.isEmpty() || std::any_of(foundKeys.cbegin(), foundKeys.cend(), [&_keys](const QString &key) { return _keys.contains(key); }); if (!required) { diff --git a/sources/awesome-widget/plugin/awkeys.cpp b/sources/awesome-widget/plugin/awkeys.cpp index b336cc3..d3bfbfa 100644 --- a/sources/awesome-widget/plugin/awkeys.cpp +++ b/sources/awesome-widget/plugin/awkeys.cpp @@ -373,7 +373,6 @@ void AWKeys::setDataBySource(const QString &_source, const KSysGuard::SensorInfo } m_mutex.lock(); - // HACK workaround for time values which are stored in the different path std::for_each(tags.cbegin(), tags.cend(), [this, &_data](const QString &tag) { m_values[tag] = _data.payload; }); m_mutex.unlock(); } diff --git a/sources/awesome-widget/plugin/awkeysaggregator.cpp b/sources/awesome-widget/plugin/awkeysaggregator.cpp index 71607c5..44dc0a4 100644 --- a/sources/awesome-widget/plugin/awkeysaggregator.cpp +++ b/sources/awesome-widget/plugin/awkeysaggregator.cpp @@ -113,26 +113,26 @@ QString AWKeysAggregator::formatter(const QVariant &_data, const QString &_key, output = QString("%1").arg(temperature(_data.toDouble()), 5, 'f', 1); break; case FormatterType::Time: - output = _data.toDateTime().toString(); + output = QDateTime::fromSecsSinceEpoch(_data.toLongLong()).toString(); break; case FormatterType::TimeCustom: output = m_customTime; [&output, loc, this](const QDateTime &dt) { for (auto &key : m_timeKeys) output.replace(QString("$%1").arg(key), loc.toString(dt, key)); - }(_data.toDateTime()); + }(QDateTime::fromSecsSinceEpoch(_data.toLongLong())); break; case FormatterType::TimeISO: - output = _data.toDateTime().toString(Qt::ISODate); + output = QDateTime::fromSecsSinceEpoch(_data.toLongLong()).toString(Qt::ISODate); break; case FormatterType::TimeLong: - output = loc.toString(_data.toDateTime(), QLocale::LongFormat); + output = loc.toString(QDateTime::fromSecsSinceEpoch(_data.toLongLong()), QLocale::LongFormat); break; case FormatterType::TimeShort: - output = loc.toString(_data.toDateTime(), QLocale::ShortFormat); + output = loc.toString(QDateTime::fromSecsSinceEpoch(_data.toLongLong()), QLocale::ShortFormat); break; case FormatterType::Timestamp: - output = QString("%1").arg(_data.toDateTime().toMSecsSinceEpoch() / 1000.0, 10, 'f', 0); + output = _data.toString(); break; case FormatterType::Uptime: case FormatterType::UptimeCustom: diff --git a/sources/awesomewidgets/owmweatherprovider.cpp b/sources/awesomewidgets/owmweatherprovider.cpp index 70d9126..85f9710 100644 --- a/sources/awesomewidgets/owmweatherprovider.cpp +++ b/sources/awesomewidgets/owmweatherprovider.cpp @@ -93,9 +93,9 @@ QVariantHash OWMWeatherProvider::parseSingleJson(const QVariantMap &_json) const // main data QVariantMap mainWeather = _json["main"].toMap(); if (!weather.isEmpty()) { - output[tag("humidity")] = mainWeather["humidity"].toFloat(); - output[tag("pressure")] = mainWeather["pressure"].toFloat(); - output[tag("temperature")] = mainWeather["temp"].toFloat(); + output[tag("humidity")] = mainWeather["humidity"].toDouble(); + output[tag("pressure")] = mainWeather["pressure"].toDouble(); + output[tag("temperature")] = mainWeather["temp"].toDouble(); } // timestamp diff --git a/sources/awesomewidgets/yahooweatherprovider.cpp b/sources/awesomewidgets/yahooweatherprovider.cpp index 7fd52fe..561e9d8 100644 --- a/sources/awesomewidgets/yahooweatherprovider.cpp +++ b/sources/awesomewidgets/yahooweatherprovider.cpp @@ -86,7 +86,7 @@ QVariantHash YahooWeatherProvider::parseCurrent(const QVariantMap &_json, const values[tag("timestamp")] = condition["date"].toString(); values[tag("humidity")] = _atmosphere["humidity"].toInt(); // HACK temporary fix of invalid values on Yahoo! side - values[tag("pressure")] = static_cast(_atmosphere["pressure"].toFloat() / 33.863753); + values[tag("pressure")] = static_cast(_atmosphere["pressure"].toDouble() / 33.863753); return values; } @@ -103,7 +103,7 @@ QVariantHash YahooWeatherProvider::parseForecast(const QVariantMap &_json) const values[tag("weatherId")] = id; values[tag("timestamp")] = weatherMap["date"].toString(); // yahoo provides high and low temperatures. Lets calculate average one - values[tag("temperature")] = (weatherMap["high"].toFloat() + weatherMap["low"].toFloat()) / 2.0; + values[tag("temperature")] = (weatherMap["high"].toDouble() + weatherMap["low"].toDouble()) / 2.0; // ... and no forecast data for humidity and pressure values[tag("humidity")] = 0; values[tag("pressure")] = 0.0; diff --git a/sources/extsysmon/extsysmonaggregator.cpp b/sources/extsysmon/extsysmonaggregator.cpp index d166c13..2849bdb 100644 --- a/sources/extsysmon/extsysmonaggregator.cpp +++ b/sources/extsysmon/extsysmonaggregator.cpp @@ -32,6 +32,7 @@ #include "quotessource.h" #include "requestsource.h" #include "systeminfosource.h" +#include "timesource.h" #include "upgradesource.h" #include "weathersource.h" @@ -86,6 +87,8 @@ void ExtSysMonAggregator::init(const QHash &_config) createSensor("quotes", i18n("Quotes"), new QuotesSource(this, {})); // system createSensor("system", i18n("System"), new SystemInfoSource(this, {})); + // current time + createSensor("time", i18n("Time"), new TimeSource(this, {})); // upgrade createSensor("upgrade", i18n("Upgrades"), new UpgradeSource(this, {})); // weather diff --git a/sources/extsysmon/extsysmonaggregator.h b/sources/extsysmon/extsysmonaggregator.h index 0c0fefc..c43216c 100644 --- a/sources/extsysmon/extsysmonaggregator.h +++ b/sources/extsysmon/extsysmonaggregator.h @@ -15,8 +15,7 @@ * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * ***************************************************************************/ -#ifndef EXTSYSMONAGGREGATOR_H -#define EXTSYSMONAGGREGATOR_H +#pragma once #include #include @@ -39,6 +38,3 @@ private: void createSensor(const QString &_id, const QString &_name, AbstractExtSysMonSource *_source); void init(const QHash &_config); }; - - -#endif /* EXTSYSMONAGGREGATOR_H */ diff --git a/sources/extsysmonsources/timesource.cpp b/sources/extsysmonsources/timesource.cpp new file mode 100644 index 0000000..9e02dea --- /dev/null +++ b/sources/extsysmonsources/timesource.cpp @@ -0,0 +1,62 @@ +/*************************************************************************** + * This file is part of awesome-widgets * + * * + * awesome-widgets is free software: you can redistribute it and/or * + * modify it under the terms of the GNU General Public License as * + * published by the Free Software Foundation, either version 3 of the * + * License, or (at your option) any later version. * + * * + * awesome-widgets is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * + ***************************************************************************/ + +#include "timesource.h" + +#include +#include + +#include "awdebug.h" + + +TimeSource::TimeSource(QObject *_parent, const QStringList &_args) + : AbstractExtSysMonSource(_parent, _args) +{ + Q_ASSERT(_args.count() == 0); + qCDebug(LOG_ESS) << __PRETTY_FUNCTION__; +} + + +QVariant TimeSource::data(const QString &_source) +{ + qCDebug(LOG_ESS) << "Source" << _source; + + if (_source == "now") { + return QDateTime::currentSecsSinceEpoch(); + } + + return {}; +} + + +KSysGuard::SensorInfo *TimeSource::initialData(const QString &_source) const +{ + qCDebug(LOG_ESS) << "Source" << _source; + + auto data = new KSysGuard::SensorInfo(); + data->name = "Current time"; + data->variantType = QVariant::LongLong; + data->unit = KSysGuard::UnitSecond; + + return data; +} + + +QStringList TimeSource::sources() const +{ + return QStringList({"now"}); +} diff --git a/sources/extsysmonsources/timesource.h b/sources/extsysmonsources/timesource.h new file mode 100644 index 0000000..bb780d8 --- /dev/null +++ b/sources/extsysmonsources/timesource.h @@ -0,0 +1,36 @@ +/*************************************************************************** + * This file is part of awesome-widgets * + * * + * awesome-widgets is free software: you can redistribute it and/or * + * modify it under the terms of the GNU General Public License as * + * published by the Free Software Foundation, either version 3 of the * + * License, or (at your option) any later version. * + * * + * awesome-widgets is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * + ***************************************************************************/ + +#pragma once + +#include + +#include "abstractextsysmonsource.h" +#include "extitemaggregator.h" + + +class TimeSource : public AbstractExtSysMonSource +{ + Q_OBJECT + +public: + explicit TimeSource(QObject *_parent, const QStringList &_args); + QVariant data(const QString &_source) override; + [[nodiscard]] KSysGuard::SensorInfo *initialData(const QString &_source) const override; + void run() override{}; + [[nodiscard]] QStringList sources() const override; +}; From b6ade7310af26092dac6780b5aacf3a3d079047b Mon Sep 17 00:00:00 2001 From: Evgenii Alekseev Date: Sat, 23 Mar 2024 15:30:35 +0200 Subject: [PATCH 09/10] extend temperature sensors --- sources/awesome-widget/plugin/awdataenginemapper.cpp | 5 +++-- sources/awesome-widget/plugin/awkeyoperations.cpp | 3 ++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/sources/awesome-widget/plugin/awdataenginemapper.cpp b/sources/awesome-widget/plugin/awdataenginemapper.cpp index 0509df6..b2226f2 100644 --- a/sources/awesome-widget/plugin/awdataenginemapper.cpp +++ b/sources/awesome-widget/plugin/awdataenginemapper.cpp @@ -84,6 +84,7 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const KSy // regular expressions auto cpuRegExp = QRegularExpression("^cpu/cpu.*/usage$"); auto cpuclRegExp = QRegularExpression("^cpu/cpu.*/frequency$"); + auto cpuTempRegExp = QRegularExpression("^cpu/cpu.*/temperature$"); auto hddrRegExp = QRegularExpression("^disk/.*/read$"); auto hddwRegExp = QRegularExpression("^disk/.*/write$"); auto mountFillRegExp = QRegularExpression("^disk/.*/usedPercent$"); @@ -346,9 +347,9 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const KSy // gb m_map.insert(_source, "swapgb"); m_formatter["swapgb"] = AWKeysAggregator::FormatterType::MemGBFormat; - } else if (_source.startsWith("lmsensors/")) { + } else if (_source.startsWith("lmsensors/") || _source.contains(cpuTempRegExp) || _source == "cpu/all/averageTemperature") { // temperature - int index = m_devices["temp"].indexOf(_source); + auto index = m_devices["temp"].indexOf(_source); // HACK on DE initialization there are no units key if (_units == KSysGuard::UnitInvalid) return QStringList({QString("temp%1").arg(index)}); diff --git a/sources/awesome-widget/plugin/awkeyoperations.cpp b/sources/awesome-widget/plugin/awkeyoperations.cpp index 6f8819e..d4bb085 100644 --- a/sources/awesome-widget/plugin/awkeyoperations.cpp +++ b/sources/awesome-widget/plugin/awkeyoperations.cpp @@ -304,6 +304,7 @@ void AWKeyOperations::addDevice(const QString &_source) auto diskRegexp = QRegularExpression("disk/(?:md|sd|hd)[a-z|0-9]_.*/Rate/(?:rblk)"); auto mountRegexp = QRegularExpression("partitions/.*/filllevel"); + auto cpuTempRegExp = QRegularExpression("^cpu/cpu.*/temperature$"); if (_source.contains(diskRegexp)) { QString device = _source; @@ -313,7 +314,7 @@ void AWKeyOperations::addDevice(const QString &_source) QString device = _source; device.remove("partitions").remove("/filllevel"); addKeyToCache("mount", device); - } else if (_source.startsWith("lmsensors")) { + } else if (_source.startsWith("lmsensors") || _source.contains(cpuTempRegExp) || _source == "cpu/all/averageTemperature") { addKeyToCache("temp", _source); } } From 115bef3dbedcc6c7033a56e0700d4c8b337cb1c7 Mon Sep 17 00:00:00 2001 From: Evgenii Alekseev Date: Sun, 24 Mar 2024 00:42:03 +0200 Subject: [PATCH 10/10] correct subscription processing --- .../plugin/awdataengineaggregator.cpp | 63 ++++++++++++------- .../plugin/awdataengineaggregator.h | 13 ++-- .../plugin/awdataenginemapper.cpp | 3 +- .../awesome-widget/plugin/awkeyoperations.cpp | 3 +- sources/awesome-widget/plugin/awkeys.cpp | 4 +- sources/extsysmonsources/extsysmonsensor.cpp | 1 - sources/extsysmonsources/networksource.cpp | 6 +- sources/extsysmonsources/weathersource.cpp | 10 ++- 8 files changed, 57 insertions(+), 46 deletions(-) diff --git a/sources/awesome-widget/plugin/awdataengineaggregator.cpp b/sources/awesome-widget/plugin/awdataengineaggregator.cpp index 7a0b85d..4e86701 100644 --- a/sources/awesome-widget/plugin/awdataengineaggregator.cpp +++ b/sources/awesome-widget/plugin/awdataengineaggregator.cpp @@ -17,15 +17,17 @@ #include "awdataengineaggregator.h" -#include #include #include +#include + #include "awdebug.h" AWDataEngineAggregator::AWDataEngineAggregator(QObject *_parent) : QObject(_parent) + , m_interface(new KSysGuard::SystemStats::DBusInterface()) { qCDebug(LOG_AW) << __PRETTY_FUNCTION__; @@ -34,12 +36,14 @@ AWDataEngineAggregator::AWDataEngineAggregator(QObject *_parent) qDBusRegisterMetaType(); qDBusRegisterMetaType>(); - m_interface = new KSysGuard::SystemStats::DBusInterface(); - - connect(m_interface, &KSysGuard::SystemStats::DBusInterface::newSensorData, this, &AWDataEngineAggregator::updateData); - connect(m_interface, &KSysGuard::SystemStats::DBusInterface::sensorMetaDataChanged, this, &AWDataEngineAggregator::updateSensors); - connect(m_interface, &KSysGuard::SystemStats::DBusInterface::sensorAdded, this, &AWDataEngineAggregator::sensorAdded); - connect(m_interface, &KSysGuard::SystemStats::DBusInterface::sensorRemoved, this, &AWDataEngineAggregator::sensorRemoved); + connect(m_interface, &KSysGuard::SystemStats::DBusInterface::newSensorData, this, + &AWDataEngineAggregator::updateData); + connect(m_interface, &KSysGuard::SystemStats::DBusInterface::sensorMetaDataChanged, this, + &AWDataEngineAggregator::updateSensors); + connect(m_interface, &KSysGuard::SystemStats::DBusInterface::sensorAdded, this, + &AWDataEngineAggregator::sensorAdded); + connect(m_interface, &KSysGuard::SystemStats::DBusInterface::sensorRemoved, this, + &AWDataEngineAggregator::sensorRemoved); loadSources(); } @@ -54,9 +58,20 @@ AWDataEngineAggregator::~AWDataEngineAggregator() } +void AWDataEngineAggregator::connectSources() +{ + auto keys = m_sensors.keys(); + auto newKeys = QSet(keys.cbegin(), keys.cend()) - m_subscribed; + + m_interface->subscribe(newKeys.values()).waitForFinished(); + m_subscribed.unite(newKeys); +} + + void AWDataEngineAggregator::disconnectSources() { - m_interface->unsubscribe(m_sensors.keys()); + m_interface->unsubscribe(m_subscribed.values()).waitForFinished(); + m_subscribed.clear(); } @@ -73,15 +88,7 @@ void AWDataEngineAggregator::loadSources() auto sensors = response.value(); updateSensors(sensors); -} - - -void AWDataEngineAggregator::reconnectSources(const int interval) -{ - qCDebug(LOG_AW) << "Reconnect all sensors with update interval" << interval; - - disconnectSources(); - m_interface->subscribe(m_sensors.keys()); + connectSources(); } @@ -89,7 +96,10 @@ void AWDataEngineAggregator::dropSource(const QString &_source) { qCDebug(LOG_AW) << "Disconnect sensor" << _source; - m_interface->unsubscribe({_source}); + if (m_subscribed.contains(_source)) { + m_interface->unsubscribe({_source}).waitForFinished(); + m_subscribed.remove(_source); + } } @@ -100,13 +110,17 @@ void AWDataEngineAggregator::sensorAdded(const QString &_sensor) // check if sensor is actually valid auto response = m_interface->sensors({_sensor}); response.waitForFinished(); - auto info = response.value(); - if (info.count() != 1) + + auto info = response.value().value(_sensor); + if (!isValidSensor(info)) return; - qCWarning(LOG_AW) << info.keys(); - - m_interface->subscribe({_sensor}); + m_sensors[_sensor] = info; + dropSource(_sensor); // force reconnect + if (!m_subscribed.contains(_sensor)) { + m_interface->subscribe({_sensor}).waitForFinished(); + m_subscribed.insert(_sensor); + } } @@ -115,9 +129,10 @@ void AWDataEngineAggregator::sensorRemoved(const QString &_sensor) qCDebug(LOG_AW) << "Sensor" << _sensor << "has been removed"; m_sensors.remove(_sensor); - m_interface->unsubscribe({_sensor}); + dropSource(_sensor); } + void AWDataEngineAggregator::updateData(KSysGuard::SensorDataList _data) { emit(dataUpdated(m_sensors, _data)); diff --git a/sources/awesome-widget/plugin/awdataengineaggregator.h b/sources/awesome-widget/plugin/awdataengineaggregator.h index fcdab62..244811a 100644 --- a/sources/awesome-widget/plugin/awdataengineaggregator.h +++ b/sources/awesome-widget/plugin/awdataengineaggregator.h @@ -15,9 +15,7 @@ * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * ***************************************************************************/ - -#ifndef AWDATAENGINEAGGREGATOR_H -#define AWDATAENGINEAGGREGATOR_H +#pragma once #include @@ -31,7 +29,6 @@ namespace KSysGuard::SystemStats class DBusInterface; } - class AWDataEngineAggregator : public QObject { Q_OBJECT @@ -39,10 +36,10 @@ class AWDataEngineAggregator : public QObject public: explicit AWDataEngineAggregator(QObject *_parent = nullptr); ~AWDataEngineAggregator() override; + void connectSources(); void disconnectSources(); - [[nodiscard]] bool isValidSensor(const KSysGuard::SensorInfo &_sensor); + [[nodiscard]] static bool isValidSensor(const KSysGuard::SensorInfo &_sensor); void loadSources(); - void reconnectSources(const int interval); signals: void dataUpdated(const QHash &_sensors, const KSysGuard::SensorDataList &_data); @@ -58,7 +55,5 @@ public slots: private: KSysGuard::SystemStats::DBusInterface *m_interface = nullptr; QHash m_sensors; + QSet m_subscribed; }; - - -#endif /* AWDATAENGINEAGGREGATOR_H */ diff --git a/sources/awesome-widget/plugin/awdataenginemapper.cpp b/sources/awesome-widget/plugin/awdataenginemapper.cpp index b2226f2..197d9d4 100644 --- a/sources/awesome-widget/plugin/awdataenginemapper.cpp +++ b/sources/awesome-widget/plugin/awdataenginemapper.cpp @@ -347,7 +347,8 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const KSy // gb m_map.insert(_source, "swapgb"); m_formatter["swapgb"] = AWKeysAggregator::FormatterType::MemGBFormat; - } else if (_source.startsWith("lmsensors/") || _source.contains(cpuTempRegExp) || _source == "cpu/all/averageTemperature") { + } else if (_source.startsWith("lmsensors/") || _source.contains(cpuTempRegExp) + || _source == "cpu/all/averageTemperature") { // temperature auto index = m_devices["temp"].indexOf(_source); // HACK on DE initialization there are no units key diff --git a/sources/awesome-widget/plugin/awkeyoperations.cpp b/sources/awesome-widget/plugin/awkeyoperations.cpp index d4bb085..01abdf2 100644 --- a/sources/awesome-widget/plugin/awkeyoperations.cpp +++ b/sources/awesome-widget/plugin/awkeyoperations.cpp @@ -314,7 +314,8 @@ void AWKeyOperations::addDevice(const QString &_source) QString device = _source; device.remove("partitions").remove("/filllevel"); addKeyToCache("mount", device); - } else if (_source.startsWith("lmsensors") || _source.contains(cpuTempRegExp) || _source == "cpu/all/averageTemperature") { + } else if (_source.startsWith("lmsensors") || _source.contains(cpuTempRegExp) + || _source == "cpu/all/averageTemperature") { addKeyToCache("temp", _source); } } diff --git a/sources/awesome-widget/plugin/awkeys.cpp b/sources/awesome-widget/plugin/awkeys.cpp index d3bfbfa..05054c8 100644 --- a/sources/awesome-widget/plugin/awkeys.cpp +++ b/sources/awesome-widget/plugin/awkeys.cpp @@ -60,7 +60,8 @@ AWKeys::AWKeys(QObject *_parent) connect(m_timer, &QTimer::timeout, this, &AWKeys::updateTextData); // transfer signal from AWDataAggregator object to QML ui - connect(m_dataAggregator, &AWDataAggregator::toolTipPainted, [this](const QString &_tooltip) { emit(needToolTipToBeUpdated(_tooltip)); }); + connect(m_dataAggregator, &AWDataAggregator::toolTipPainted, + [this](const QString &_tooltip) { emit(needToolTipToBeUpdated(_tooltip)); }); connect(this, &AWKeys::dropSourceFromDataengine, m_dataEngineAggregator, &AWDataEngineAggregator::dropSource); connect(m_dataEngineAggregator, &AWDataEngineAggregator::dataUpdated, this, &AWKeys::dataUpdated); @@ -102,7 +103,6 @@ void AWKeys::initKeys(const QString &_currentPattern, const int _interval, const m_aggregator->initFormatters(); m_keyOperator->setPattern(_currentPattern); m_keyOperator->updateCache(); - m_dataEngineAggregator->reconnectSources(_interval); // timer m_timer->setInterval(_interval); diff --git a/sources/extsysmonsources/extsysmonsensor.cpp b/sources/extsysmonsources/extsysmonsensor.cpp index 74342f9..e8b5c50 100644 --- a/sources/extsysmonsources/extsysmonsensor.cpp +++ b/sources/extsysmonsources/extsysmonsensor.cpp @@ -67,7 +67,6 @@ void ExtSysMonSensor::update() continue; // skip properties which are not explicitly subscribed auto value = m_source->data(source); - qCWarning(LOG_ESS) << source << value; property->setValue(value); } } diff --git a/sources/extsysmonsources/networksource.cpp b/sources/extsysmonsources/networksource.cpp index c8c166e..3d62b42 100644 --- a/sources/extsysmonsources/networksource.cpp +++ b/sources/extsysmonsources/networksource.cpp @@ -52,7 +52,7 @@ NetworkSource::~NetworkSource() QVariant NetworkSource::data(const QString &_source) { - qCWarning(LOG_ESS) << "Source" << _source; + qCDebug(LOG_ESS) << "Source" << _source; if (!m_values.contains(_source)) run(); @@ -82,7 +82,9 @@ KSysGuard::SensorInfo *NetworkSource::initialData(const QString &_source) const void NetworkSource::run() { m_values["device"] = NetworkSource::getCurrentDevice(); - m_process->start("iwgetid", {"-r"}); + if (m_process->state() == QProcess::ProcessState::NotRunning) { + m_process->start("iwgetid", {"-r"}); + } } diff --git a/sources/extsysmonsources/weathersource.cpp b/sources/extsysmonsources/weathersource.cpp index 678fcc9..ee76e56 100644 --- a/sources/extsysmonsources/weathersource.cpp +++ b/sources/extsysmonsources/weathersource.cpp @@ -49,12 +49,10 @@ QVariant WeatherSource::data(const QString &_source) int ind = index(_source); if (!m_values.contains(_source)) { - QVariantHash data = m_extWeather->itemByTagNumber(ind)->run(); - for (auto &key : data.keys()) - m_values[key] = data[key]; + auto data = m_extWeather->itemByTagNumber(ind)->run(); + m_values.insert(data); } - QVariant value = m_values.take(_source); - return value; + return m_values.take(_source); } @@ -94,7 +92,7 @@ KSysGuard::SensorInfo *WeatherSource::initialData(const QString &_source) const data->unit = KSysGuard::UnitCelsius; } else if (_source.startsWith("timestamp")) { data->name = QString("Timestamp for '%1'").arg(m_extWeather->itemByTagNumber(ind)->uniq()); - data->variantType = QVariant::String; + data->variantType = QVariant::DateTime; data->unit = KSysGuard::UnitNone; }