diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index c630f00c..f9fd9d58 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -27,10 +27,10 @@ jobs: run: pacman -Sy --noconfirm base-devel cmake extra-cmake-modules python util-linux-libs xorg-server-xvfb - name: install dependencies - run: pacman -S --noconfirm plasma-workspace ksysguard + run: pacman -S --noconfirm plasma-workspace - name: configure cmake - run: cmake -B build -DKDE_INSTALL_USE_QT_SYS_PATHS=ON -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DBUILD_FUTURE=ON -DBUILD_TESTING=ON sources + run: cmake -B build -S sources -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DBUILD_FUTURE=ON -DBUILD_TESTING=ON - name: build working-directory: /repo/build diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index d1c371ed..5700b7cc 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -25,17 +25,17 @@ jobs: env: VERSION: ${{ steps.version.outputs.VERSION }} - - name: build debian package - run: | - sudo apt update && \ - sudo apt install -yq cmake extra-cmake-modules g++ git gettext make && \ - sudo apt install -yq libkf5i18n-dev libkf5notifications-dev libkf5service-dev \ - libkf5windowsystem-dev libkf5plasma-dev qtbase5-dev qtdeclarative5-dev \ - plasma-workspace-dev && \ - cmake -B build-deb -DKDE_INSTALL_USE_QT_SYS_PATHS=ON -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Optimization -DBUILD_FUTURE=ON -DBUILD_DEB_PACKAGE=ON sources && \ - cd build-deb && \ - make package && \ - cd .. +# - name: build debian package +# run: | +# sudo apt update && \ +# sudo apt install -yq cmake extra-cmake-modules g++ git gettext make && \ +# sudo apt install -yq libkf5i18n-dev libkf5notifications-dev libkf5service-dev \ +# libkf5windowsystem-dev libkf5plasma-dev qtbase5-dev qtdeclarative5-dev \ +# plasma-workspace-dev && \ +# cmake -B build-deb -DKDE_INSTALL_USE_QT_SYS_PATHS=ON -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Optimization -DBUILD_FUTURE=ON -DBUILD_DEB_PACKAGE=ON sources && \ +# cd build-deb && \ +# make package && \ +# cd .. - name: release uses: softprops/action-gh-release@v1 @@ -45,7 +45,7 @@ jobs: ${{ steps.changelog.outputs.changelog }} files: | awesome-widgets-*-src.tar.xz - build-deb/plasma-widget-awesome-widgets-*.deb +# build-deb/plasma-widget-awesome-widgets-*.deb fail_on_unmatched_files: true env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/CHANGELOG b/CHANGELOG index 23044595..7ae1951e 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,6 @@ +Ver.4.0.0: +* migration to plasma 6 + Ver.3.5.0: + wayland support * update code to latest standards @@ -12,7 +15,6 @@ Ver.3.4.2: * update to new qt api - fix non printable spaces (#142, #143) - Ver.3.3.3: + add custom keys support (#101) * DBus interface improvements diff --git a/packages/PKGBUILD b/packages/PKGBUILD index 263a080c..bf695499 100644 --- a/packages/PKGBUILD +++ b/packages/PKGBUILD @@ -1,41 +1,30 @@ # Maintainer: Evgeniy Alekseev -pkgname=plasma5-applet-awesome-widgets +pkgname=plasma6-applet-awesome-widgets _pkgname=awesome-widgets -pkgver=3.4.3 +pkgver=4.0.0alpha2 pkgrel=1 pkgdesc="Collection of minimalistic Plasmoids which look like Awesome WM widgets (ex-PyTextMonitor)" -arch=('i686' 'x86_64') +arch=('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" - "smartmontools: for HDD temperature monitor" - "mpd: for music player monitor" - "nvidia-utils: for GPU monitor") +depends=('plasma-workspace') +optdepends=("mpd: for music player monitor") makedepends=('cmake' 'extra-cmake-modules' 'python') -source=(https://github.com/arcan1s/awesome-widgets/releases/download/V.${pkgver}/${_pkgname}-${pkgver}-src.tar.xz) -install=${pkgname}.install -md5sums=('5953ba518191bb6fff83cdb8633c735c') +source=(https://github.com/arcan1s/awesome-widgets/releases/download/${pkgver}/${_pkgname}-${pkgver}-src.tar.xz) +install="$pkgname.install" 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 } + +sha256sums=('b2a7b07a1df6f710f4e0d6e5898933f4ddb131818b922dc4b8e48afe3e98a664') diff --git a/packages/plasma5-applet-awesome-widgets.install b/packages/plasma6-applet-awesome-widgets.install similarity index 100% rename from packages/plasma5-applet-awesome-widgets.install rename to packages/plasma6-applet-awesome-widgets.install diff --git a/sources/3rdparty/fontdialog/fontdialog.cpp b/sources/3rdparty/fontdialog/fontdialog.cpp index a659347d..2cfb6cf4 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 3a16d4b9..6302e33e 100644 --- a/sources/3rdparty/fontdialog/fontdialog.h +++ b/sources/3rdparty/fontdialog/fontdialog.h @@ -34,11 +34,6 @@ class CFont : public QFont // 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/CMakeLists.txt b/sources/CMakeLists.txt index 687f3453..7c0cbcd9 100644 --- a/sources/CMakeLists.txt +++ b/sources/CMakeLists.txt @@ -14,9 +14,9 @@ project(awesomewidgets) set(PROJECT_AUTHOR "Evgeniy Alekseev") set(PROJECT_CONTACT "esalexeev@gmail.com") set(PROJECT_LICENSE "GPL3") -set(PROJECT_VERSION_MAJOR "3") -set(PROJECT_VERSION_MINOR "5") -set(PROJECT_VERSION_PATCH "1") +set(PROJECT_VERSION_MAJOR "4") +set(PROJECT_VERSION_MINOR "0") +set(PROJECT_VERSION_PATCH "0") set(PROJECT_VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}") # append git version if any set(PROJECT_COMMIT_SHA "Commit hash" CACHE INTERNAL "") diff --git a/sources/awesome-widget/CMakeLists.txt b/sources/awesome-widget/CMakeLists.txt index fced7abe..7fd254c8 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 9b305520..00000000 --- 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 new file mode 100644 index 00000000..d59bfa1e --- /dev/null +++ b/sources/awesome-widget/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": "@PROJECT_VERSION@", + "Website": "https://arcanis.me/projects/awesome-widgets/" + }, + "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 ad08409f..fd6a9c84 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 063a99e6..b5d715e9 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 15ec0dea..abbdbd15 100644 --- a/sources/awesome-widget/package/contents/ui/about.qml +++ b/sources/awesome-widget/package/contents/ui/about.qml @@ -15,28 +15,21 @@ * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * ***************************************************************************/ -import QtQuick 2.0 +import QtQuick 2.15 +import org.kde.kcmutils as KCM import org.kde.plasma.private.awesomewidget 1.0 -Item { +KCM.SimpleKCM { id: aboutPage + // backend AWActions { id: awActions } - width: childrenRect.width - height: childrenRect.height - - property bool debug: awActions.isDebugEnabled() - AboutTab { textProvider: awActions } - - Component.onCompleted: { - if (debug) console.debug() - } } diff --git a/sources/awesome-widget/package/contents/ui/advanced.qml b/sources/awesome-widget/package/contents/ui/advanced.qml index a4d29a83..65af7111 100644 --- a/sources/awesome-widget/package/contents/ui/advanced.qml +++ b/sources/awesome-widget/package/contents/ui/advanced.qml @@ -15,26 +15,21 @@ * 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.kcmutils as KCM import org.kde.plasma.private.awesomewidget 1.0 -Item { +KCM.SimpleKCM { id: advancedPage + // backend AWActions { id: awActions } - width: childrenRect.width - height: childrenRect.height - implicitWidth: pageColumn.implicitWidth - implicitHeight: pageColumn.implicitHeight - - property bool debug: awActions.isDebugEnabled() - property alias cfg_background: background.checked property alias cfg_translateStrings: translate.checked property alias cfg_wrapNewLines: wrapNewLines.checked @@ -55,7 +50,6 @@ Item { property alias cfg_telemetryRemote: telemetryRemote.checked property alias cfg_telemetryId: telemetryId.value - Column { id: pageColumn anchors.fill: parent @@ -135,37 +129,37 @@ Item { id: tempUnits model: [ { - 'label': i18n("Celsius"), - 'name': "Celsius" + "label": i18n("Celsius"), + "name": "Celsius" }, { - 'label': i18n("Fahrenheit"), - 'name': "Fahrenheit" + "label": i18n("Fahrenheit"), + "name": "Fahrenheit" }, { - 'label': i18n("Kelvin"), - 'name': "Kelvin" + "label": i18n("Kelvin"), + "name": "Kelvin" }, { - 'label': i18n("Reaumur"), - 'name': "Reaumur" + "label": i18n("Reaumur"), + "name": "Reaumur" }, { - 'label': i18n("cm^-1"), - 'name': "cm^-1" + "label": i18n("cm^-1"), + "name": "cm^-1" }, { - 'label': i18n("kJ/mol"), - 'name': "kJ/mol" + "label": i18n("kJ/mol"), + "name": "kJ/mol" }, { - 'label': i18n("kcal/mol"), - 'name': "kcal/mol" + "label": i18n("kcal/mol"), + "name": "kcal/mol" } ] text: i18n("Temperature units") value: plasmoid.configuration.tempUnits - onValueEdited: cfg_tempUnits = newValue + onValueEdited: newValue => cfg_tempUnits = newValue } LineSelector { @@ -192,18 +186,20 @@ Item { value: plasmoid.configuration.acOffline } - QtControls.GroupBox { - height: implicitHeight + GroupBox { width: parent.width + height: implicitHeight title: i18n("Actions") Column { height: implicitHeight width: parent.width + ButtonSelector { value: i18n("Drop key cache") onButtonActivated: awActions.dropCache() } + ButtonSelector { ExportDialog { id: saveConfigAs @@ -212,11 +208,12 @@ Item { value: i18n("Export configuration") onButtonActivated: saveConfigAs.open() } + ButtonSelector { ImportDialog { id: loadConfigFrom onConfigurationReceived: { - for (var key in configuration) + for (const key in configuration) plasmoid.configuration[key] = configuration[key] } } @@ -226,7 +223,7 @@ Item { } } - QtControls.GroupBox { + GroupBox { height: implicitHeight width: parent.width title: i18n("Telemetry") @@ -234,10 +231,12 @@ Item { Column { height: implicitHeight width: parent.width + CheckBoxSelector { id: telemetryRemote text: i18n("Enable remote telemetry") } + IntegerSelector { id: telemetryCount maximumValue: 10000 @@ -246,6 +245,7 @@ Item { text: i18n("History count") value: plasmoid.configuration.telemetryCount } + LineSelector { id: telemetryId text: i18n("Telemetry ID") @@ -254,9 +254,4 @@ Item { } } } - - - Component.onCompleted: { - if (debug) console.debug() - } } diff --git a/sources/awesome-widget/package/contents/ui/appearance.qml b/sources/awesome-widget/package/contents/ui/appearance.qml index f4c9b2e4..bbc0afda 100644 --- a/sources/awesome-widget/package/contents/ui/appearance.qml +++ b/sources/awesome-widget/package/contents/ui/appearance.qml @@ -15,31 +15,22 @@ * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * ***************************************************************************/ -import QtQuick 2.0 +import QtQuick 2.15 +import org.kde.kcmutils as KCM import org.kde.plasma.private.awesomewidget 1.0 import "." -Item { +KCM.SimpleKCM { id: appearancePage - // backend - AWActions { - id: awActions - } - - width: childrenRect.width - height: childrenRect.height - implicitWidth: pageColumn.implicitWidth - implicitHeight: pageColumn.implicitHeight - property bool debug: awActions.isDebugEnabled() property variant weight: { 25: 0, 50: 1, 63: 3, 75: 4, - 87: 5 + 87: 5, } property alias cfg_fontFamily: font.value @@ -50,7 +41,6 @@ Item { property alias cfg_textStyleColor: selectStyleColor.value property string cfg_textStyle: textStyle.value - Column { id: pageColumn anchors.fill: parent @@ -75,7 +65,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 +73,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 +87,7 @@ Item { model: General.textStyleModel text: i18n("Style") value: plasmoid.configuration.textStyle - onValueEdited: cfg_textStyle = newValue + onValueEdited: newValue => cfg_textStyle = newValue } ColorSelector { @@ -106,9 +96,4 @@ Item { value: plasmoid.configuration.textStyleColor } } - - - Component.onCompleted: { - if (debug) console.debug() - } } diff --git a/sources/awesome-widget/package/contents/ui/dataengine.qml b/sources/awesome-widget/package/contents/ui/dataengine.qml index 38296731..31a180c0 100644 --- a/sources/awesome-widget/package/contents/ui/dataengine.qml +++ b/sources/awesome-widget/package/contents/ui/dataengine.qml @@ -15,105 +15,46 @@ * 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.kcmutils as KCM import org.kde.plasma.private.awesomewidget 1.0 -Item { +KCM.SimpleKCM { id: dataenginePage + // backend AWKeys { id: awKeys } - AWActions { - id: awActions - } AWConfigHelper { id: awConfig } - width: childrenRect.width - height: childrenRect.height - implicitWidth: pageColumn.implicitWidth - implicitHeight: pageColumn.implicitHeight - - property bool debug: awActions.isDebugEnabled() - property variant cfg_dataengine: awConfig.readDataEngineConfiguration() - 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 { - height: implicitHeight - width: parent.width - title: i18n("GPU") - ComboBoxSelector { - model: [ - { - 'label': "auto", - 'name': "auto" - }, - { - 'label': "disable", - 'name': "disable" - }, - { - 'label': "ati", - 'name': "ati" - }, - { - 'label': "nvidia", - 'name': "nvidia" - } - ] - text: i18n("GPU device") - value: cfg_dataengine["GPUDEV"] - onValueEdited: cfg_dataengine["GPUDEV"] = newValue - } - } - - QtControls.GroupBox { - height: implicitHeight - width: parent.width - title: i18n("HDD temperature") - Column { - height: implicitHeight - width: parent.width - ComboBoxSelector { - id: hdd - text: i18n("HDD") - value: cfg_dataengine["HDDDEV"] - onValueEdited: cfg_dataengine["HDDDEV"] = newValue - } - - LineSelector { - text: i18n("hddtemp cmd") - value: cfg_dataengine["HDDTEMPCMD"] - onValueEdited: cfg_dataengine["HDDTEMPCMD"] = newValue - } - } - } - - QtControls.GroupBox { + GroupBox { height: implicitHeight width: parent.width title: i18n("Player") + Column { height: implicitHeight width: parent.width @@ -123,27 +64,27 @@ Item { stepSize: 1 text: i18n("Player data symbols") value: cfg_dataengine["PLAYERSYMBOLS"] - onValueEdited: cfg_dataengine["PLAYERSYMBOLS"] = newValue + onValueEdited: newValue => cfg_dataengine["PLAYERSYMBOLS"] = newValue } ComboBoxSelector { model: [ { - 'label': "disable", - 'name': "disable" + "label": "disable", + "name": "disable" }, { - 'label': "mpris", - 'name': "mpris" + "label": "mpris", + "name": "mpris" }, { - 'label': "mpd", - 'name': "mpd" + "label": "mpd", + "name": "mpd" } ] text: i18n("Music player") value: cfg_dataengine["PLAYER"] - onValueEdited: cfg_dataengine["PLAYER"] = newValue + onValueEdited: newValue => cfg_dataengine["PLAYER"] = newValue } ComboBoxSelector { @@ -151,40 +92,40 @@ Item { editable: true model: [ { - 'label': 'auto', - 'name': 'auto' + "label": "auto", + "name": "auto" }, { - 'label': 'amarok', - 'name': 'amarok' + "label": "amarok", + "name": "amarok" }, { - 'label': 'audacious', - 'name': 'audacious' + "label": "audacious", + "name": "audacious" }, { - 'label': 'clementine', - 'name': 'clementine' + "label": "clementine", + "name": "clementine" }, { - 'label': 'DeaDBeeF', - 'name': 'DeaDBeeF' + "label": "DeaDBeeF", + "name": "DeaDBeeF" }, { - 'label': 'vlc', - 'name': 'vlc' + "label": "vlc", + "name": "vlc" }, { - 'label': 'qmmp', - 'name': 'qmmp' + "label": "qmmp", + "name": "qmmp" }, { - 'label': 'xmms2', - 'name': 'xmms2' + "label": "xmms2", + "name": "xmms2" }, { - 'label': cfg_dataengine["MPRIS"], - 'name': cfg_dataengine["MPRIS"] + "label": cfg_dataengine["MPRIS"], + "name": cfg_dataengine["MPRIS"] } ] text: i18n("MPRIS player name") @@ -194,7 +135,7 @@ Item { LineSelector { text: i18n("MPD address") value: cfg_dataengine["MPDADDRESS"] - onValueEdited: cfg_dataengine["MPDADDRESS"] = newValue + onValueEdited: newValue => cfg_dataengine["MPDADDRESS"] = newValue } IntegerSelector { @@ -203,18 +144,20 @@ 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") + Column { height: implicitHeight width: parent.width + ButtonSelector { value: i18n("Custom scripts") onButtonActivated: awKeys.editItem("extscript") @@ -245,8 +188,6 @@ Item { Component.onCompleted: { - if (debug) console.debug() - // init submodule awKeys.updateCache() @@ -256,8 +197,6 @@ Item { } Component.onDestruction: { - if (debug) console.debug() - cfg_dataengine["MPRIS"] = mpris.editText awConfig.writeDataEngineConfiguration(cfg_dataengine) } diff --git a/sources/awesome-widget/package/contents/ui/main.qml b/sources/awesome-widget/package/contents/ui/main.qml index 83422c2e..d2184d26 100644 --- a/sources/awesome-widget/package/contents/ui/main.qml +++ b/sources/awesome-widget/package/contents/ui/main.qml @@ -15,20 +15,20 @@ * 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 { id: awKeys @@ -43,7 +43,6 @@ Item { id: bugReport } - property bool debug: awActions.isDebugEnabled() property variant tooltipSettings: { "tooltipNumber": plasmoid.configuration.tooltipNumber, "useTooltipBackground": plasmoid.configuration.useTooltipBackground, @@ -73,19 +72,12 @@ Item { signal needToolTipUpdate(string newText) 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 Text { @@ -100,7 +92,7 @@ Item { color: plasmoid.configuration.fontColor font.family: plasmoid.configuration.fontFamily - font.italic: plasmoid.configuration.fontStyle == "italic" ? true : false + font.italic: plasmoid.configuration.fontStyle === "italic" ? true : false font.pointSize: plasmoid.configuration.fontSize font.weight: General.fontWeight[plasmoid.configuration.fontWeight] @@ -119,19 +111,19 @@ Item { } } - QtDialogs.Dialog { + Dialog { id: tagSelector title: i18n("Select tag") - QtControls.ComboBox { + ComboBox { id: tagSelectorBox width: parent.width editable: true } onAccepted: { - var tag = tagSelectorBox.editText - var message = i18n("Tag: %1", tag) + const tag = tagSelectorBox.editText + let message = i18n("Tag: %1", tag) message += "
" message += i18n("Value: %1", awKeys.valueByKey(tag)) message += "
" @@ -140,17 +132,37 @@ Item { } } + Plasmoid.contextualActions: [ + PlasmaCore.Action { + text: i18n("Request key") + icon.name: "utilities-system-monitor" + onTriggered: { + tagSelectorBox.model = awKeys.dictKeys(true) + tagSelector.open() + } + }, + PlasmaCore.Action { + text: i18n("Show README") + icon.name: "text-x-readme" + onTriggered: awActions.showReadme() + }, + PlasmaCore.Action { + text: i18n("Check updates") + icon.name: "system-software-update" + onTriggered: awActions.checkUpdates(true) + }, + PlasmaCore.Action { + text: i18n("Report bug") + icon.name: "tools-report-bug" + onTriggered: { + bugReport.reset() + bugReport.open() + } + } + ] - 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") + Component.onCompleted: { // init submodule Plasmoid.userConfiguringChanged(false) // connect data @@ -160,32 +172,26 @@ Item { if (plasmoid.configuration.checkUpdates) return awActions.checkUpdates(false) } - onNeedTextUpdate: { - if (debug) console.debug() - + onNeedTextUpdate: newText => { text.text = newText sizeUpdate() } - onNeedToolTipUpdate: { - if (debug) console.debug() - + onNeedToolTipUpdate: newText => { tooltip.text = newText } onSizeUpdate: { - if (debug) console.debug() // 16 is a magic number // in other case plasmoid will increase own size on each update - - if (plasmoid.configuration.height == 0) { + if (plasmoid.configuration.height === 0) { Layout.minimumHeight = text.contentHeight - 16 Layout.maximumHeight = -1 } else { Layout.minimumHeight = plasmoid.configuration.height Layout.maximumHeight = plasmoid.configuration.height } - if (plasmoid.configuration.width == 0) { + if (plasmoid.configuration.width === 0) { Layout.minimumWidth = text.contentWidth - 16 Layout.maximumWidth = -1 } else { @@ -196,7 +202,6 @@ Item { Plasmoid.onUserConfiguringChanged: { if (plasmoid.userConfiguring) return - if (debug) console.debug() // init submodule awKeys.initDataAggregator(tooltipSettings) @@ -211,7 +216,7 @@ Item { awKeys.setAggregatorProperty("tempUnits", plasmoid.configuration.tempUnits) awKeys.setAggregatorProperty("translate", plasmoid.configuration.translateStrings) // update telemetry ID - if (plasmoid.configuration.telemetryId.length == 0) + if (plasmoid.configuration.telemetryId.length === 0) plasmoid.configuration.telemetryId = generateUuid() // save telemetry awTelemetryHandler.init(plasmoid.configuration.telemetryCount, @@ -221,37 +226,10 @@ Item { awTelemetryHandler.uploadTelemetry("awwidgetconfig", plasmoid.configuration.text) } - - function action_checkUpdates() { - if (debug) console.debug() - - return awActions.checkUpdates(true) - } - - function action_showReadme() { - if (debug) console.debug() - - return awActions.showReadme() - } - - function action_reportBug() { - if (debug) console.debug() - - bugReport.reset() - bugReport.open() - } - - function action_requestKey() { - if (debug) console.debug() - - tagSelectorBox.model = awKeys.dictKeys(true) - return tagSelector.open() - } - // code from http://stackoverflow.com/questions/105034/create-guid-uuid-in-javascript function generateUuid() { - return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { - var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8); + return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(c) { + let r = Math.random() * 16 | 0, v = c === "x" ? r : (r & 0x3 | 0x8); return v.toString(16); }); } diff --git a/sources/awesome-widget/package/contents/ui/tooltip.qml b/sources/awesome-widget/package/contents/ui/tooltip.qml index e7a3db1d..ff0c6375 100644 --- a/sources/awesome-widget/package/contents/ui/tooltip.qml +++ b/sources/awesome-widget/package/contents/ui/tooltip.qml @@ -15,25 +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 2.15 +import QtQuick.Controls +import org.kde.kcmutils as KCM import org.kde.plasma.private.awesomewidget 1.0 -Item { +KCM.SimpleKCM { id: tooltipPage - // backend - AWActions { - id: awActions - } - - width: childrenRect.width - height: childrenRect.height - implicitWidth: pageColumn.implicitWidth - implicitHeight: pageColumn.implicitHeight - - property bool debug: awActions.isDebugEnabled() property alias cfg_tooltipNumber: tooltipNumber.value property alias cfg_useTooltipBackground: useTooltipBackground.checked @@ -46,18 +36,18 @@ 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 property alias cfg_batTooltipColor: batTooltipColor.value property alias cfg_batInTooltipColor: batInTooltipColor.value - Column { id: pageColumn anchors.fill: parent - QtControls.Label { + + Label { width: parent.width horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter @@ -74,85 +64,116 @@ 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") value: plasmoid.configuration.downkbTooltipColor } + ColorSelector { id: upkbTooltipColor text: i18n("Upload speed color") @@ -161,20 +182,26 @@ 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") value: plasmoid.configuration.batTooltipColor } + ColorSelector { id: batInTooltipColor text: i18n("Battery inactive color") @@ -183,9 +210,4 @@ Item { } } } - - - Component.onCompleted: { - if (debug) console.debug() - } } diff --git a/sources/awesome-widget/package/contents/ui/widget.qml b/sources/awesome-widget/package/contents/ui/widget.qml index d46a8279..c65d3f4b 100644 --- a/sources/awesome-widget/package/contents/ui/widget.qml +++ b/sources/awesome-widget/package/contents/ui/widget.qml @@ -15,14 +15,17 @@ * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * ***************************************************************************/ -import QtQuick 2.2 +import QtQuick 2.15 +import QtQuick.Controls +import org.kde.kcmutils as KCM import org.kde.plasma.private.awesomewidget 1.0 import "." -Item { +KCM.SimpleKCM { id: widgetPage + // backend AWKeys { id: awKeys @@ -31,19 +34,11 @@ Item { id: awActions } - width: childrenRect.width - height: childrenRect.height - implicitWidth: pageColumn.implicitWidth - implicitHeight: pageColumn.implicitHeight - - property bool debug: awActions.isDebugEnabled() - property alias cfg_text: textPattern.text property bool lock: true signal needTextUpdate(string newText) - Column { id: pageColumn anchors.fill: parent @@ -74,10 +69,7 @@ Item { } } - Component.onCompleted: { - if (debug) console.debug() - awKeys.needTextToBeUpdated.connect(needTextUpdate) // init submodule awKeys.initKeys(plasmoid.configuration.text, plasmoid.configuration.interval, @@ -90,9 +82,8 @@ Item { awKeys.setAggregatorProperty("translate", plasmoid.configuration.translateStrings) } - onNeedTextUpdate: { + onNeedTextUpdate: newText => { if (lock) return - if (debug) console.debug() extensions.showMessage(newText) lock = true diff --git a/sources/awesome-widget/package/metadata.desktop b/sources/awesome-widget/package/metadata.desktop deleted file mode 100644 index 91dbdeb3..00000000 --- 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 00000000..d287ef0d --- /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": "4.0.0", + "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 4d90d575..9f79847d 100644 --- a/sources/awesome-widget/plugin/CMakeLists.txt +++ b/sources/awesome-widget/plugin/CMakeLists.txt @@ -7,17 +7,17 @@ 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) 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}) +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(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/awactions.cpp b/sources/awesome-widget/plugin/awactions.cpp index 57dd85e0..b3e50fbf 100644 --- a/sources/awesome-widget/plugin/awactions.cpp +++ b/sources/awesome-widget/plugin/awactions.cpp @@ -71,13 +71,6 @@ QString AWActions::getFileContent(const QString &_path) } -// HACK: since QML could not use QLoggingCategory I need this hack -bool AWActions::isDebugEnabled() -{ - return LOG_AW().isDebugEnabled(); -} - - bool AWActions::runCmd(const QString &_cmd, const QStringList &_args) { qCDebug(LOG_AW) << "Cmd" << _cmd << "args" << _args; diff --git a/sources/awesome-widget/plugin/awactions.h b/sources/awesome-widget/plugin/awactions.h index cd63371f..08c359af 100644 --- a/sources/awesome-widget/plugin/awactions.h +++ b/sources/awesome-widget/plugin/awactions.h @@ -34,7 +34,6 @@ class AWActions : public QObject ~AWActions() override; Q_INVOKABLE void checkUpdates(bool _showAnyway = false); Q_INVOKABLE static QString getFileContent(const QString &_path); - Q_INVOKABLE static bool isDebugEnabled(); Q_INVOKABLE static bool runCmd(const QString &_cmd, const QStringList &_args); Q_INVOKABLE static void showLegacyInfo(); Q_INVOKABLE static void showReadme(); diff --git a/sources/awesome-widget/plugin/awconfighelper.cpp b/sources/awesome-widget/plugin/awconfighelper.cpp index 7c716aff..baa369d2 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" @@ -171,9 +170,6 @@ QVariantMap AWConfigHelper::readDataEngineConfiguration() settings.beginGroup("Configuration"); configuration["ACPIPATH"] = settings.value("ACPIPATH", "/sys/class/power_supply/"); - configuration["GPUDEV"] = settings.value("GPUDEV", "auto"); - configuration["HDDDEV"] = settings.value("HDDDEV", "all"); - configuration["HDDTEMPCMD"] = settings.value("HDDTEMPCMD", "sudo smartctl -a"); configuration["MPDADDRESS"] = settings.value("MPDADDRESS", "localhost"); configuration["MPDPORT"] = settings.value("MPDPORT", "6600"); configuration["MPRIS"] = settings.value("MPRIS", "auto"); @@ -198,9 +194,6 @@ bool AWConfigHelper::writeDataEngineConfiguration(const QVariantMap &_configurat settings.beginGroup("Configuration"); settings.setValue("ACPIPATH", _configuration["ACPIPATH"]); - settings.setValue("GPUDEV", _configuration["GPUDEV"]); - settings.setValue("HDDDEV", _configuration["HDDDEV"]); - settings.setValue("HDDTEMPCMD", _configuration["HDDTEMPCMD"]); settings.setValue("MPDADDRESS", _configuration["MPDADDRESS"]); settings.setValue("MPDPORT", _configuration["MPDPORT"]); settings.setValue("MPRIS", _configuration["MPRIS"]); @@ -285,7 +278,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 431c20df..36be7bdb 100644 --- a/sources/awesome-widget/plugin/awdataengineaggregator.cpp +++ b/sources/awesome-widget/plugin/awdataengineaggregator.cpp @@ -17,30 +17,35 @@ #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__; - 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"); - - // 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); - }); - - // required to define Qt::QueuedConnection for signal-slot connection - qRegisterMetaType("Plasma::DataEngine::Data"); + qDBusRegisterMetaType(); + qDBusRegisterMetaType(); + qDBusRegisterMetaType(); + qDBusRegisterMetaType>(); + + 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(); } @@ -49,67 +54,102 @@ AWDataEngineAggregator::~AWDataEngineAggregator() qCDebug(LOG_AW) << __PRETTY_FUNCTION__; disconnectSources(); + m_interface->deleteLater(); +} + + +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() { - for (auto dataEngine : m_dataEngines.values()) - for (auto &source : dataEngine->sources()) - dataEngine->disconnectSource(source, parent()); - disconnect(m_newSourceConnection); + m_interface->unsubscribe(m_subscribed.values()).waitForFinished(); + m_subscribed.clear(); } -void AWDataEngineAggregator::reconnectSources(const int _interval) +bool AWDataEngineAggregator::isValidSensor(const KSysGuard::SensorInfo &_sensor) { - qCDebug(LOG_AW) << "Reconnect sources with interval" << _interval; + return _sensor.unit != KSysGuard::UnitInvalid; +} - disconnectSources(); - m_dataEngines["systemmonitor"]->connectAllSources(parent(), (uint)_interval); - m_dataEngines["extsysmon"]->connectAllSources(parent(), (uint)_interval); - m_dataEngines["time"]->connectSource("Local", parent(), 1000); +void AWDataEngineAggregator::loadSources() +{ + auto response = m_interface->allSensors(); + response.waitForFinished(); - 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); - }); + auto sensors = response.value(); + updateSensors(sensors); + connectSources(); -#ifdef BUILD_FUTURE - createQueuedConnection(); -#endif /* BUILD_FUTURE */ + for (auto &sensor : m_sensors.keys()) + emit(deviceAdded(sensor)); } void AWDataEngineAggregator::dropSource(const QString &_source) { - qCDebug(LOG_AW) << "Source" << _source; + qCDebug(LOG_AW) << "Disconnect sensor" << _source; + + if (m_subscribed.contains(_source)) { + m_interface->unsubscribe({_source}).waitForFinished(); + m_subscribed.remove(_source); + } +} + + +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().value(_sensor); + if (!isValidSensor(info)) + return; + + m_sensors[_sensor] = info; + dropSource(_sensor); // force reconnect + if (!m_subscribed.contains(_sensor)) { + m_interface->subscribe({_sensor}).waitForFinished(); + m_subscribed.insert(_sensor); + } + + // notify about new device + emit(deviceAdded(_sensor)); +} - // 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()); + +void AWDataEngineAggregator::sensorRemoved(const QString &_sensor) +{ + qCDebug(LOG_AW) << "Sensor" << _sensor << "has been removed"; + + m_sensors.remove(_sensor); + dropSource(_sensor); +} + + +void AWDataEngineAggregator::updateData(KSysGuard::SensorDataList _data) +{ + emit(dataUpdated(m_sensors, _data)); } -void AWDataEngineAggregator::createQueuedConnection() +void AWDataEngineAggregator::updateSensors(const QHash &_sensors) { - // 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); - } + 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 580b9b81..244811a5 100644 --- a/sources/awesome-widget/plugin/awdataengineaggregator.h +++ b/sources/awesome-widget/plugin/awdataengineaggregator.h @@ -15,15 +15,19 @@ * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * ***************************************************************************/ +#pragma once -#ifndef AWDATAENGINEAGGREGATOR_H -#define AWDATAENGINEAGGREGATOR_H - -#include -#include +#include +#include #include +#include + +namespace KSysGuard::SystemStats +{ +class DBusInterface; +} class AWDataEngineAggregator : public QObject { @@ -32,21 +36,24 @@ class AWDataEngineAggregator : public QObject public: explicit AWDataEngineAggregator(QObject *_parent = nullptr); ~AWDataEngineAggregator() override; + void connectSources(); void disconnectSources(); - void reconnectSources(int _interval); + [[nodiscard]] static bool isValidSensor(const KSysGuard::SensorInfo &_sensor); + void loadSources(); 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; + QSet m_subscribed; }; - - -#endif /* AWDATAENGINEAGGREGATOR_H */ diff --git a/sources/awesome-widget/plugin/awdataenginemapper.cpp b/sources/awesome-widget/plugin/awdataenginemapper.cpp index 9c2a9bd0..0bade0ec 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" @@ -76,76 +76,80 @@ 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 - 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.*/usage$"); + auto cpuclRegExp = QRegularExpression("^cpu/cpu.*/frequency$"); + auto cpuTempRegExp = QRegularExpression("^cpu/cpu.*/temperature$"); + auto gpuRegExp = QRegularExpression("^gpu/gpu.*/usage$"); + auto gpuTempRegExp = QRegularExpression("^gpu/gpu.*/temperature$"); + 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") { + 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/"); + auto key = _source; + key.remove("extsysmon/battery/"); 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"); + auto key = _source; + 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"); + auto key = _source; + key.remove("cpu/cpu").remove("/frequency"); 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/"); + auto key = _source; + 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/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/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/count") { // desktop count m_map.insert(_source, "tdesktops"); m_formatter["tdesktops"] = AWKeysAggregator::FormatterType::NoFormat; } else if (_source.contains(hddrRegExp)) { // read speed - QString device = _source; - device.remove("/Rate/rblk"); - int index = m_devices["disk"].indexOf(device); + auto device = _source; + device.remove("disk/").remove("/read"); + auto index = m_devices["disk"].indexOf(device); if (index > -1) { QString key = QString("hddr%1").arg(index); m_map.insert(_source, key); @@ -153,29 +157,45 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const QSt } } else if (_source.contains(hddwRegExp)) { // write speed - QString device = _source; - device.remove("/Rate/wblk"); - int index = m_devices["disk"].indexOf(device); + auto device = _source; + device.remove("disk/").remove("/write"); + auto index = m_devices["disk"].indexOf(device); if (index > -1) { QString key = QString("hddw%1").arg(index); m_map.insert(_source, key); m_formatter[key] = AWKeysAggregator::FormatterType::Integer; } - } else if (_source == "gpu/load") { + } else if (_source == "gpu/all/usage") { // gpu load m_map.insert(_source, "gpu"); m_formatter["gpu"] = AWKeysAggregator::FormatterType::Float; - } else if (_source == "gpu/temperature") { - // gpu temperature - m_map.insert(_source, "gputemp"); - m_formatter["gputemp"] = AWKeysAggregator::FormatterType::Temperature; + } else if (_source.contains(gpuRegExp)) { + // gpus + auto device = _source; + device.remove("gpu/").remove("/usage"); + auto index = m_devices["gpu"].indexOf(device); + if (index > -1) { + auto key = QString("gpu%1").arg(index); + m_map.insert(_source, key); + m_formatter[key] = AWKeysAggregator::FormatterType::Float; + } + } else if (_source.contains(gpuTempRegExp)) { + // gpus temps + auto device = _source; + device.remove("gpu/").remove("/temperature"); + auto index = m_devices["gpu"].indexOf(device); + if (index > -1) { + auto key = QString("gputemp%1").arg(index); + m_map.insert(_source, key); + m_formatter[key] = AWKeysAggregator::FormatterType::Temperature; + } } else if (_source.contains(mountFillRegExp)) { // fill level - QString device = _source; - device.remove("partitions").remove("/filllevel"); - int index = m_devices["mount"].indexOf(device); + auto device = _source; + device.remove("disk/").remove("/usedPercent"); + auto index = m_devices["mount"].indexOf(device); if (index > -1) { - QString key = QString("hdd%1").arg(index); + auto key = QString("hdd%1").arg(index); m_map.insert(_source, key); m_formatter[key] = AWKeysAggregator::FormatterType::Float; // additional keys @@ -184,9 +204,9 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const QSt } } else if (_source.contains(mountFreeRegExp)) { // free space - QString device = _source; - device.remove("partitions").remove("/freespace"); - int index = m_devices["mount"].indexOf(device); + auto device = _source; + device.remove("disk/").remove("/free"); + auto index = m_devices["mount"].indexOf(device); if (index > -1) { // mb QString key = QString("hddfreemb%1").arg(index); @@ -199,9 +219,9 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const QSt } } else if (_source.contains(mountUsedRegExp)) { // used - QString device = _source; - device.remove("partitions").remove("/usedspace"); - int index = m_devices["mount"].indexOf(device); + auto device = _source; + device.remove("disk/").remove("/used"); + auto index = m_devices["mount"].indexOf(device); if (index > -1) { // mb QString key = QString("hddmb%1").arg(index); @@ -212,24 +232,14 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const QSt m_map.insert(_source, key); m_formatter[key] = AWKeysAggregator::FormatterType::MemGBFormat; } - } else if (_source.startsWith("hdd/temperature")) { - // hdd temperature - QString device = _source; - device.remove("hdd/temperature"); - int index = m_devices["hdd"].indexOf(device); - if (index > -1) { - QString key = QString("hddtemp%1").arg(index); - 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"); - QString key = QString("la%1").arg(time); + auto time = _source; + time.remove("cpu/loadaverages/loadaverage"); + auto 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 +247,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 +255,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"); @@ -253,27 +263,27 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const QSt // 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/"); + auto key = _source; + key.remove("extsysmon/requests/"); m_map.insert(_source, key); m_formatter[key] = AWKeysAggregator::FormatterType::NoFormat; } else if (_source.contains(netRegExp)) { // network speed - QString type = _source.contains("receiver") ? "down" : "up"; - int index = m_devices["net"].indexOf(_source.split('/')[2]); + auto type = _source.endsWith("download") ? "down" : "up"; + auto index = m_devices["net"].indexOf(_source.split('/')[1]); if (index > -1) { // kb - QString key = QString("%1kb%2").arg(type).arg(index); + auto key = QString("%1kb%2").arg(type).arg(index); m_map.insert(_source, key); m_formatter[key] = AWKeysAggregator::FormatterType::Integer; // smart @@ -287,11 +297,11 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const QSt } } else if (_source.contains(netTotalRegExp)) { // network data total - QString type = _source.contains("receiver") ? "down" : "up"; - int index = m_devices["net"].indexOf(_source.split('/')[2]); + auto type = _source.endsWith("Download") ? "down" : "up"; + auto index = m_devices["net"].indexOf(_source.split('/')[1]); if (index > -1) { // kb - QString key = QString("%1totkb%2").arg(type).arg(index); + auto key = QString("%1totkb%2").arg(type).arg(index); m_map.insert(_source, key); m_formatter[key] = AWKeysAggregator::FormatterType::Integer; // mb @@ -299,37 +309,37 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const QSt 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/"); + auto key = _source; + 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/"); + auto key = _source; + 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") { // 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/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/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/"); + auto key = _source; + key.remove("extsysmon/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 +347,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"); @@ -345,19 +355,20 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const QSt // 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.isEmpty()) + if (_units == KSysGuard::UnitInvalid) return QStringList({QString("temp%1").arg(index)}); if (index > -1) { - QString key = QString("temp%1").arg(index); + auto 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") { + } else if (_source == "extsysmon/time/now") { // time m_map.insert(_source, "time"); m_formatter["time"] = AWKeysAggregator::FormatterType::Time; @@ -376,40 +387,40 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const QSt // 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/"); + auto key = _source; + 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/"); + auto key = _source; + 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/"); + auto key = _source; + key.remove("extsysmon/load/"); m_map.insert(_source, key); m_formatter[key] = AWKeysAggregator::FormatterType::Temperature; } - QStringList foundKeys = keysFromSource(_source); + auto foundKeys = keysFromSource(_source); // rewrite formatters for custom ones QStringList customFormattersKeys; @@ -424,7 +435,7 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const QSt // 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/awdataenginemapper.h b/sources/awesome-widget/plugin/awdataenginemapper.h index 5ee7124c..aa65bfa4 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 @@ class AWDataEngineMapper : public QObject [[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/awformatterhelper.cpp b/sources/awesome-widget/plugin/awformatterhelper.cpp index b8576737..116f8f6b 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 31b47030..f5b7a9b7 100644 --- a/sources/awesome-widget/plugin/awformatterhelper.h +++ b/sources/awesome-widget/plugin/awformatterhelper.h @@ -51,7 +51,7 @@ public slots: 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/awkeycache.cpp b/sources/awesome-widget/plugin/awkeycache.cpp index d618cc26..f22c26f7 100644 --- a/sources/awesome-widget/plugin/awkeycache.cpp +++ b/sources/awesome-widget/plugin/awkeycache.cpp @@ -20,6 +20,7 @@ #include #include +#include #include #include @@ -30,7 +31,7 @@ bool AWKeyCache::addKeyToCache(const QString &_type, const QString &_key) { qCDebug(LOG_AW) << "Key" << _key << "with type" << _type; - QString fileName + auto fileName = QString("%1/awesomewidgets.ndx").arg(QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation)); qCInfo(LOG_AW) << "Cache file" << fileName; QSettings cache(fileName, QSettings::IniFormat); @@ -40,19 +41,8 @@ bool AWKeyCache::addKeyToCache(const QString &_type, const QString &_key) for (auto &number : cache.allKeys()) cachedValues.append(cache.value(number).toString()); - if (_type == "hdd") { - QStringList allDevices = QDir("/dev").entryList(QDir::System, QDir::Name); - QStringList devices = allDevices.filter(QRegExp("^[hms]d[a-z]$")); - for (auto &dev : devices) { - QString device = QString("/dev/%1").arg(dev); - if (cachedValues.contains(device)) - continue; - qCInfo(LOG_AW) << "Found new key" << device << "for type" << _type; - cachedValues.append(device); - cache.setValue(QString("%1").arg(cache.allKeys().count(), 3, 10, QChar('0')), device); - } - } else if (_type == "net") { - QList rawInterfaceList = QNetworkInterface::allInterfaces(); + if (_type == "net") { + auto rawInterfaceList = QNetworkInterface::allInterfaces(); for (auto &interface : rawInterfaceList) { QString device = interface.name(); if (cachedValues.contains(device)) @@ -93,19 +83,19 @@ 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"); - int index = key.toInt(); + auto index = key.toInt(); 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"); - int index = key.toInt(); + auto index = key.toInt(); used << QString("hddfreegb%1").arg(index) << QString("hddgb%1").arg(index); } // mem @@ -138,7 +128,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))); + auto filt = _allKeys.filter(QRegularExpression(QString("^%1[0-9]{1,}").arg(key))); for (auto &filtered : filt) used << filtered; } @@ -157,7 +147,7 @@ QStringList AWKeyCache::getRequiredKeys(const QStringList &_keys, const QStringL QHash AWKeyCache::loadKeysFromCache() { - QString fileName + auto fileName = QString("%1/awesomewidgets.ndx").arg(QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation)); qCInfo(LOG_AW) << "Cache file" << fileName; QSettings cache(fileName, QSettings::IniFormat); diff --git a/sources/awesome-widget/plugin/awkeyoperations.cpp b/sources/awesome-widget/plugin/awkeyoperations.cpp index b7ec39ad..663272f3 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" @@ -72,7 +72,6 @@ QHash AWKeyOperations::devices() const void AWKeyOperations::updateCache() { // update network and hdd list - addKeyToCache("hdd"); addKeyToCache("net"); } @@ -90,15 +89,20 @@ QStringList AWKeyOperations::dictKeys() const allKeys.append(item->tag("timestamp")); } // cpuclock & cpu - for (int i = 0; i < QThread::idealThreadCount(); i++) { + for (auto i = 0; i < QThread::idealThreadCount(); i++) { allKeys.append(QString("cpucl%1").arg(i)); allKeys.append(QString("cpu%1").arg(i)); } // temperature - for (int i = 0; i < m_devices["temp"].count(); i++) + for (auto i = 0; i < m_devices["temp"].count(); i++) allKeys.append(QString("temp%1").arg(i)); + // gpu + for (auto i = 0; i < m_devices["gpu"].count(); i++) { + allKeys.append(QString("gpu%1").arg(i)); + allKeys.append(QString("gputemp%1").arg(i)); + } // hdd - for (int i = 0; i < m_devices["mount"].count(); i++) { + for (auto i = 0; i < m_devices["mount"].count(); i++) { allKeys.append(QString("hddmb%1").arg(i)); allKeys.append(QString("hddgb%1").arg(i)); allKeys.append(QString("hddfreemb%1").arg(i)); @@ -108,15 +112,12 @@ QStringList AWKeyOperations::dictKeys() const allKeys.append(QString("hdd%1").arg(i)); } // hdd speed - for (int i = 0; i < m_devices["disk"].count(); i++) { + for (auto i = 0; i < m_devices["disk"].count(); i++) { allKeys.append(QString("hddr%1").arg(i)); allKeys.append(QString("hddw%1").arg(i)); } - // hdd temp - for (int i = 0; i < m_devices["hdd"].count(); i++) - allKeys.append(QString("hddtemp%1").arg(i)); // network - for (int i = 0; i < m_devices["net"].count(); i++) { + for (auto i = 0; i < m_devices["net"].count(); i++) { allKeys.append(QString("downunits%1").arg(i)); allKeys.append(QString("upunits%1").arg(i)); allKeys.append(QString("downtotkb%1").arg(i)); @@ -129,9 +130,8 @@ QStringList AWKeyOperations::dictKeys() const allKeys.append(QString("up%1").arg(i)); } // battery - QStringList allBatteryDevices - = QDir("/sys/class/power_supply") - .entryList(QStringList({"BAT*"}), QDir::Dirs | QDir::NoDotAndDotDot, QDir::Name); + auto allBatteryDevices = QDir("/sys/class/power_supply") + .entryList(QStringList({"BAT*"}), QDir::Dirs | QDir::NoDotAndDotDot, QDir::Name); for (int i = 0; i < allBatteryDevices.count(); i++) { allKeys.append(QString("bat%1").arg(i)); allKeys.append(QString("batleft%1").arg(i)); @@ -205,52 +205,48 @@ QString AWKeyOperations::infoByKey(const QString &_key) const { qCDebug(LOG_AW) << "Requested key" << _key; - QString stripped = _key; - stripped.remove(QRegExp("\\d+")); + auto stripped = _key; + stripped.remove(QRegularExpression("\\d+")); QString output; if (_key.startsWith("bar")) { - AbstractExtItem *item = m_graphicalItems->itemByTag(_key, stripped); + auto *item = m_graphicalItems->itemByTag(_key, stripped); if (item) output = item->uniq(); } else if (_key.startsWith("custom")) { - AbstractExtItem *item = m_extScripts->itemByTag(_key, stripped); + auto *item = m_extScripts->itemByTag(_key, stripped); if (item) output = item->uniq(); - } else if (_key.contains(QRegExp("^hdd[rw]"))) { - QString index = _key; - index.remove(QRegExp("hdd[rw]")); + } else if (_key.contains(QRegularExpression("^hdd[rw]"))) { + auto index = _key; + 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)"))) { - QString index = _key; - index.remove(QRegExp("^hdd(|mb|gb|freemb|freegb|totmb|totgb)")); + } else if (_key.contains(QRegularExpression("^hdd([0-9]|mb|gb|freemb|freegb|totmb|totgb)"))) { + auto index = _key; + 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]"))) { - QString index = _key; - index.remove(QRegExp("^(down|up)")); + } else if (_key.contains(QRegularExpression("^(down|up)[0-9]"))) { + auto index = _key; + index.remove(QRegularExpression("^(down|up)")); output = m_devices["net"][index.toInt()]; } else if (_key.startsWith("pkgcount")) { - AbstractExtItem *item = m_extUpgrade->itemByTag(_key, stripped); + auto *item = m_extUpgrade->itemByTag(_key, stripped); if (item) output = item->uniq(); - } else if (_key.contains(QRegExp("(^|perc)(ask|bid|price)(chg|)"))) { - AbstractExtItem *item = m_extQuotes->itemByTag(_key, stripped); + } else if (_key.contains(QRegularExpression("(^|perc)(ask|bid|price)(chg|)"))) { + auto *item = m_extQuotes->itemByTag(_key, stripped); if (item) output = item->uniq(); - } else if (_key.contains(QRegExp("(weather|weatherId|humidity|pressure|temperature)"))) { - AbstractExtItem *item = m_extWeather->itemByTag(_key, stripped); + } else if (_key.contains(QRegularExpression("(weather|weatherId|humidity|pressure|temperature)"))) { + auto *item = m_extWeather->itemByTag(_key, stripped); if (item) output = item->uniq(); } else if (_key.startsWith("temp")) { - QString index = _key; + auto index = _key; index.remove("temp"); output = m_devices["temp"][index.toInt()]; } else if (_key.startsWith("response")) { - AbstractExtItem *item = m_extNetRequest->itemByTag(_key, stripped); + auto *item = m_extNetRequest->itemByTag(_key, stripped); if (item) output = item->uniq(); } else { @@ -280,7 +276,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,19 +298,26 @@ 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/.*/read$"); + auto mountRegexp = QRegularExpression("^disk/.*/usedPercent$"); + auto cpuTempRegExp = QRegularExpression("^cpu/cpu.*/temperature$"); + auto gpuRegExp = QRegularExpression("^gpu/gpu.*/usage$"); if (_source.contains(diskRegexp)) { - QString device = _source; - device.remove("/Rate/rblk"); + auto device = _source; + device.remove("disk/").remove("/read"); addKeyToCache("disk", device); } else if (_source.contains(mountRegexp)) { - QString device = _source; - device.remove("partitions").remove("/filllevel"); + auto device = _source; + device.remove("disk/").remove("/usedPercent"); addKeyToCache("mount", device); - } else if (_source.startsWith("lmsensors")) { + } else if (_source.startsWith("lmsensors") || _source.contains(cpuTempRegExp) + || _source == "cpu/all/averageTemperature") { addKeyToCache("temp", _source); + } else if (_source.contains(gpuRegExp)) { + auto device = _source; + device.remove("gpu/").remove("/usage"); + addKeyToCache("gpu", device); } } diff --git a/sources/awesome-widget/plugin/awkeys.cpp b/sources/awesome-widget/plugin/awkeys.cpp index 922f8b68..80098493 100644 --- a/sources/awesome-widget/plugin/awkeys.cpp +++ b/sources/awesome-widget/plugin/awkeys.cpp @@ -56,16 +56,17 @@ 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(this, SIGNAL(dropSourceFromDataengine(const QString &)), m_dataEngineAggregator, - SLOT(dropSource(const QString &))); + 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); // 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); } @@ -102,7 +103,7 @@ void AWKeys::initKeys(const QString &_currentPattern, const int _interval, const m_aggregator->initFormatters(); m_keyOperator->setPattern(_currentPattern); m_keyOperator->updateCache(); - m_dataEngineAggregator->reconnectSources(_interval); + m_dataEngineAggregator->loadSources(); // timer m_timer->setInterval(_interval); @@ -148,7 +149,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)); } @@ -185,9 +186,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 +200,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 +245,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(); @@ -256,17 +262,17 @@ 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)].toFloat() + m_values[QString("hddmb%1").arg(index)].toFloat(); - 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("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* - 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 +288,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 +329,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 +349,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 +357,23 @@ 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) << "Sensor" << _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 8ebf2226..5673d78a 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 @@ class AWKeys : public QObject 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,8 @@ private slots: 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 6cd33093..44dc0a43 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,29 +110,29 @@ 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(); + 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: @@ -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,8 @@ 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 8bc93ae5..cdf48f25 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 @@ class AWKeysAggregator : public QObject 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 51695efa..9a56da39 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 @@ -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/awesome-widget/plugin/awupdatehelper.cpp b/sources/awesome-widget/plugin/awupdatehelper.cpp index 2d077520..3412c053 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/awesomewidgets/CMakeLists.txt b/sources/awesomewidgets/CMakeLists.txt index c8b6ef28..c49d13ac 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) @@ -28,18 +28,18 @@ 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}) +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 ${CONFIG_INSTALL_DIR}) -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/abstractextitem.cpp b/sources/awesomewidgets/abstractextitem.cpp index ab6ad2f1..8d1a7271 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(); - path.remove(path.count() - name.count() - 1, name.count() + 1); - QString dir = QFileInfo(path).fileName(); + auto path = m_fileName; + auto name = QFileInfo(path).fileName(); + path.remove(path.length() - name.length() - 1, name.length() + 1); + 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 91fe6208..d2f60f37 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 slots: 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 b0ecea90..0f344c44 100644 --- a/sources/awesomewidgets/abstractextitemaggregator.cpp +++ b/sources/awesomewidgets/abstractextitemaggregator.cpp @@ -26,65 +26,45 @@ #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 - 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; - - 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() -{ - qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; - - delete ui; } -void AbstractExtItemAggregator::copyItem() +void AbstractExtItemAggregator::copyItem(QListWidget *_widget) { - 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(_widget); + 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(nullptr, configArgs()) == 1) { initItems(); - repaintList(); + repaintList(_widget); } } -void AbstractExtItemAggregator::deleteItem() +void AbstractExtItemAggregator::deleteItem(QListWidget *_widget) { - AbstractExtItem *source = itemFromWidget(); + auto source = itemFromWidget(_widget); if (!source) { qCWarning(LOG_LIB) << "Nothing to delete"; return; @@ -92,30 +72,63 @@ void AbstractExtItemAggregator::deleteItem() if (source->tryDelete()) { initItems(); - repaintList(); + repaintList(_widget); } } -void AbstractExtItemAggregator::editItem() +void AbstractExtItemAggregator::editItem(QListWidget *_widget) { - AbstractExtItem *source = itemFromWidget(); + auto source = itemFromWidget(_widget); if (!source) { qCWarning(LOG_LIB) << "Nothing to edit"; return; } - if (source->showConfiguration(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; - QString 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")) @@ -125,15 +138,15 @@ QString AbstractExtItemAggregator::getName() } -AbstractExtItem *AbstractExtItemAggregator::itemFromWidget() const +AbstractExtItem *AbstractExtItemAggregator::itemFromWidget(QListWidget *_widget) const { - QListWidgetItem *widgetItem = ui->listWidget->currentItem(); + auto widgetItem = _widget->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; @@ -146,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); } } @@ -202,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 7c767b8d..d984a977 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,49 +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) { - QString fileName = getName(); - int number = uniqNumber(); - QString dir = QString("%1/awesomewidgets/%2") - .arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)) - .arg(m_type); + auto fileName = getName(); + auto number = uniqNumber(); + 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); + auto newItem = new T(this, filePath); newItem->setNumber(number); - if (newItem->showConfiguration(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; @@ -78,21 +73,12 @@ class AbstractExtItemAggregator : public QDialog // 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/awabstractformatter.cpp b/sources/awesomewidgets/awabstractformatter.cpp index 5e1978cf..70ace6c8 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 4da1bfc3..95004ece 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" @@ -30,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 03a34de5..a0953239 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); - - writeConfiguration(); + 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; + 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 ef6bca24..31202047 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 @@ class AWDateTimeFormatter : public AWAbstractFormatter 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/awesomewidgets-extweather-ids.json b/sources/awesomewidgets/awesomewidgets-extweather-ids.json index e8ec6493..0c47dec1 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": "", - - "800": "", - - "801": "", - - "802": "", - "803": "", - - "804": "", - - "300": "", - "301": "", - "302": "", - "310": "", - "311": "", - "312": "", - "313": "", - "314": "", - "321": "", - "520": "", - "521": "", - "522": "", - "531": "", - - "500": "", - "501": "", - "502": "", - "503": "", - "504": "", - - "200": "", - "201": "", - "202": "", - "210": "", - "211": "", - "212": "", - "221": "", - "230": "", - "231": "", - "232": "", - - "511": "", - "600": "", - "601": "", - "602": "", - "611": "", - "612": "", - "615": "", - "616": "", - "620": "", - "621": "", - "622": "", - - "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": "" + "default": "", + + "800": "", + + "801": "", + + "802": "", + "803": "", + + "804": "", + + "300": "", + "301": "", + "302": "", + "310": "", + "311": "", + "312": "", + "313": "", + "314": "", + "321": "", + "520": "", + "521": "", + "522": "", + "531": "", + + "500": "", + "501": "", + "502": "", + "503": "", + "504": "", + + "200": "", + "201": "", + "202": "", + "210": "", + "211": "", + "212": "", + "221": "", + "230": "", + "231": "", + "232": "", + + "511": "", + "600": "", + "601": "", + "602": "", + "611": "", + "612": "", + "615": "", + "616": "", + "620": "", + "621": "", + "622": "", + + "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": "" }, "text": { diff --git a/sources/awesomewidgets/awfloatformatter.cpp b/sources/awesomewidgets/awfloatformatter.cpp index a4418283..dcda9744 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()); - - writeConfiguration(); + 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; + 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")); diff --git a/sources/awesomewidgets/awfloatformatter.h b/sources/awesomewidgets/awfloatformatter.h index 021d3e79..f3399700 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 @@ class AWFloatFormatter : public AWAbstractFormatter 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 e0b13669..af055260 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; } @@ -53,8 +41,8 @@ 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::fromVariant(_value); + QJsonDocument json = _value.userType() == QMetaType::QString ? QJsonDocument::fromJson(_value.toString().toUtf8()) + : QJsonDocument::fromVariant(_value); QVariant converted = json.toVariant(); for (auto &element : m_splittedPath) converted = getFromJson(converted, element); @@ -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; } @@ -147,9 +144,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(); @@ -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 b0dec251..d521ad64 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 @@ class AWJsonFormatter : public AWAbstractFormatter 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 de154069..91090767 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()); @@ -97,7 +85,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); } @@ -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); - - writeConfiguration(); + 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; + 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 665e54bf..8ba78eb8 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,17 +42,16 @@ class AWListFormatter : public AWAbstractFormatter 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 = ""; bool m_sorted = false; - QRegExp m_regex; + QRegularExpression m_regex; }; diff --git a/sources/awesomewidgets/awnoformatter.cpp b/sources/awesomewidgets/awnoformatter.cpp index 3253f1e3..4a190cd1 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,29 +53,40 @@ 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 56f7b405..78ae2488 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 ea386716..8fd4c6bf 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")); diff --git a/sources/awesomewidgets/awscriptformatter.h b/sources/awesomewidgets/awscriptformatter.h index b3df69c5..9e93a6d1 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 @@ class AWScriptFormatter : public AWAbstractFormatter 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 b6069317..c22b1305 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); - - writeConfiguration(); + 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; + 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 c634f6e9..a39a8144 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 @@ class AWStringFormatter : public AWAbstractFormatter 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/extitemaggregator.h b/sources/awesomewidgets/extitemaggregator.h index 3925b168..91532f71 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 @@ template class ExtItemAggregator : public AbstractExtItemAggregator void editItems() { - repaintList(); - int ret = exec(); + auto ret = exec(); qCInfo(LOG_LIB) << "Dialog returns" << ret; }; @@ -123,7 +122,7 @@ template class ExtItemAggregator : public AbstractExtItemAggregator 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 @@ template class ExtItemAggregator : public AbstractExtItemAggregator 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 @@ template class ExtItemAggregator : public AbstractExtItemAggregator } // 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/extnetworkrequest.cpp b/sources/awesomewidgets/extnetworkrequest.cpp index c218b43b..05cd7031 100644 --- a/sources/awesomewidgets/extnetworkrequest.cpp +++ b/sources/awesomewidgets/extnetworkrequest.cpp @@ -20,25 +20,20 @@ #include -#include #include -#include #include #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")] = ""; @@ -59,7 +54,6 @@ ExtNetworkRequest::~ExtNetworkRequest() disconnect(this, SIGNAL(requestDataUpdate()), this, SLOT(sendRequest())); m_manager->deleteLater(); - delete ui; } @@ -67,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()); @@ -121,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())); @@ -134,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()); - - writeConfiguration(); + 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; + return ret; } @@ -174,7 +177,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)); } @@ -183,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); } @@ -194,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 fb079a62..3d92ab25 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 @@ class ExtNetworkRequest : public AbstractExtItem 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 slots: 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 c2e50905..8023c998 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; @@ -50,9 +46,8 @@ ExtQuotes::ExtQuotes(QWidget *_parent, const QString &_filePath) // HACK declare as child of nullptr to avoid crash with plasmawindowed // in the destructor m_manager = new QNetworkAccessManager(nullptr); - connect(m_manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(quotesReplyReceived(QNetworkReply *))); - - connect(this, SIGNAL(requestDataUpdate()), this, SLOT(sendRequest())); + connect(m_manager, &QNetworkAccessManager::finished, this, &ExtQuotes::quotesReplyReceived); + connect(this, &ExtQuotes::requestDataUpdate, this, &ExtQuotes::sendRequest); } @@ -60,11 +55,10 @@ ExtQuotes::~ExtQuotes() { qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; - disconnect(m_manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(quotesReplyReceived(QNetworkReply *))); - disconnect(this, SIGNAL(requestDataUpdate()), this, SLOT(sendRequest())); + disconnect(m_manager, &QNetworkAccessManager::finished, this, &ExtQuotes::quotesReplyReceived); + disconnect(this, &ExtQuotes::requestDataUpdate, this, &ExtQuotes::sendRequest); m_manager->deleteLater(); - delete ui; } @@ -72,7 +66,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 +120,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 +138,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()); - - writeConfiguration(); + 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; + return ret; } @@ -182,7 +185,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 +197,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 +213,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 1acce392..68f5b6e1 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 @@ class ExtQuotes : public AbstractExtItem 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 slots: 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 007822f6..d43f01be 100644 --- a/sources/awesomewidgets/extscript.cpp +++ b/sources/awesomewidgets/extscript.cpp @@ -24,22 +24,18 @@ #include #include #include -#include #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")] = ""; @@ -59,7 +55,6 @@ ExtScript::~ExtScript() m_process->kill(); m_process->deleteLater(); disconnect(this, SIGNAL(requestDataUpdate()), this, SLOT(startProcess())); - delete ui; } @@ -67,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); @@ -180,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; @@ -226,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; @@ -236,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; @@ -257,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())); @@ -275,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; } @@ -325,9 +329,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(); + auto qdebug = QString::fromUtf8(m_process->readAllStandardError()).trimmed(); qCInfo(LOG_LIB) << "Error" << qdebug; - QString qoutput = QTextCodec::codecForMib(106)->toUnicode(m_process->readAllStandardOutput()).trimmed(); + auto qoutput = QString::fromUtf8(m_process->readAllStandardOutput()).trimmed(); qCInfo(LOG_LIB) << "Output" << qoutput; QString strValue; @@ -351,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 784a545a..24793672 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 433ec146..3bbaeae6 100644 --- a/sources/awesomewidgets/extupgrade.cpp +++ b/sources/awesomewidgets/extupgrade.cpp @@ -21,21 +21,17 @@ #include #include -#include #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; @@ -54,7 +50,6 @@ ExtUpgrade::~ExtUpgrade() m_process->kill(); m_process->deleteLater(); disconnect(this, SIGNAL(requestDataUpdate()), this, SLOT(startProcess())); - delete ui; } @@ -62,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()); @@ -150,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())); @@ -165,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()); - - writeConfiguration(); + 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; + return ret; } @@ -214,18 +218,20 @@ 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(); + 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(QRegExp(filter())).count(); + : output.split('\n', Qt::SkipEmptyParts).filter(QRegularExpression(filter())).count(); }(qoutput); emit(dataReceived(m_values)); } -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 62b0eddf..30d72f3e 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 @@ class ExtUpgrade : public AbstractExtItem 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 0e5f781a..50b4d3a2 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()); - - writeConfiguration(); + 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; + 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 0ba6c7fc..c3dda306 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 slots: 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 fa87f059..25b6b6e8 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,21 @@ 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 +471,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()); - - writeConfiguration(); + 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; + return ret; } @@ -524,23 +523,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 +552,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 +569,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 f9d64927..c92c9fd0 100644 --- a/sources/awesomewidgets/graphicalitem.h +++ b/sources/awesomewidgets/graphicalitem.h @@ -52,8 +52,7 @@ class GraphicalItem : public AbstractExtItem 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 @@ class GraphicalItem : public AbstractExtItem 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; diff --git a/sources/awesomewidgets/owmweatherprovider.cpp b/sources/awesomewidgets/owmweatherprovider.cpp index 91a849d5..85f97104 100644 --- a/sources/awesomewidgets/owmweatherprovider.cpp +++ b/sources/awesomewidgets/owmweatherprovider.cpp @@ -93,13 +93,13 @@ 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 - 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/quotes/aapl.desktop b/sources/awesomewidgets/quotes/aapl.desktop index c2eb130a..fbe38890 100644 --- a/sources/awesomewidgets/quotes/aapl.desktop +++ b/sources/awesomewidgets/quotes/aapl.desktop @@ -1,8 +1,8 @@ [Desktop Entry] Encoding=UTF-8 -Name=AAPL.NASDAQ +Name=AAPL Comment=Apple Inc -X-AW-Ticker="AAPL" +X-AW-Ticker="AAPL.US" X-AW-Active=false X-AW-ApiVersion=5 X-AW-Interval=60 diff --git a/sources/awesomewidgets/quotes/goog.desktop b/sources/awesomewidgets/quotes/goog.desktop index 85003b66..c223de4c 100644 --- a/sources/awesomewidgets/quotes/goog.desktop +++ b/sources/awesomewidgets/quotes/goog.desktop @@ -1,8 +1,8 @@ [Desktop Entry] Encoding=UTF-8 -Name=GOOG.NASDAQ +Name=GOOG Comment=Google Inc -X-AW-Ticker="GOOG" +X-AW-Ticker="GOOG.US" X-AW-Active=false X-AW-ApiVersion=5 X-AW-Interval=60 diff --git a/sources/awesomewidgets/quotes/msft.desktop b/sources/awesomewidgets/quotes/msft.desktop index 2fdcea32..0049c211 100644 --- a/sources/awesomewidgets/quotes/msft.desktop +++ b/sources/awesomewidgets/quotes/msft.desktop @@ -1,8 +1,8 @@ [Desktop Entry] Encoding=UTF-8 -Name=MSFT.NASDAQ +Name=MSFT Comment=Microsoft Corp -X-AW-Ticker="MSFT" +X-AW-Ticker="MSFT.US" X-AW-Active=false X-AW-ApiVersion=5 X-AW-Interval=60 diff --git a/sources/awesomewidgets/stooqquotesprovider.cpp b/sources/awesomewidgets/stooqquotesprovider.cpp index 591d927b..5067379b 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(','); + auto sourceValues = QString::fromUtf8(_source).trimmed().split(','); if (sourceValues.count() != 2) { qCWarning(LOG_LIB) << "Parse error" << sourceValues; return values; @@ -68,12 +67,12 @@ QVariantHash StooqQuotesProvider::parse(const QByteArray &_source, const QVarian // last trade auto price = sourceValues.at(0).toDouble(); values[tag("pricechg")] = oldPrice == 0.0 ? 0.0 : price - oldPrice; - values[tag("percpricechg")] = 100.0 * values[tag("pricechg")].toDouble() / price; + values[tag("percpricechg")] = 100.0 * values[tag("pricechg")].toDouble() / oldPrice; values[tag("price")] = price; // volume auto volume = sourceValues.at(1).toInt(); values[tag("volumechg")] = oldVolume == 0 ? 0 : volume - oldVolume; - values[tag("percvolumechg")] = 100.0 * values[tag("volumechg")].toDouble() / volume; + values[tag("percvolumechg")] = 100.0 * values[tag("volumechg")].toDouble() / oldVolume; values[tag("volume")] = volume; return values; diff --git a/sources/awesomewidgets/yahooweatherprovider.cpp b/sources/awesomewidgets/yahooweatherprovider.cpp index 7fd52fe8..561e9d89 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/desktop-panel/CMakeLists.txt b/sources/desktop-panel/CMakeLists.txt index 6d7ea734..0bb8bcd9 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 a0950d9b..00000000 --- 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 new file mode 100644 index 00000000..88ff5082 --- /dev/null +++ b/sources/desktop-panel/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": "@PROJECT_VERSION@", + "Website": "https://arcanis.me/projects/awesome-widgets/" + }, + "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 9f6f6c35..a9ad5da3 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 7c147f69..83c4b654 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 fd6361a9..2b6c5835 100644 --- a/sources/desktop-panel/package/contents/ui/about.qml +++ b/sources/desktop-panel/package/contents/ui/about.qml @@ -15,28 +15,21 @@ * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * ***************************************************************************/ -import QtQuick 2.0 +import QtQuick 2.15 +import org.kde.kcmutils as KCM import org.kde.plasma.private.desktoppanel 1.0 -Item { +KCM.SimpleKCM { id: aboutPage + // backend DPAdds { id: dpAdds } - width: childrenRect.width - height: childrenRect.height - - property bool debug: awActions.isDebugEnabled() - AboutTab { textProvider: dpAdds } - - Component.onCompleted: { - if (debug) console.debug() - } } diff --git a/sources/desktop-panel/package/contents/ui/activeapp.qml b/sources/desktop-panel/package/contents/ui/activeapp.qml index 0c517907..10f509f9 100644 --- a/sources/desktop-panel/package/contents/ui/activeapp.qml +++ b/sources/desktop-panel/package/contents/ui/activeapp.qml @@ -15,25 +15,15 @@ * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * ***************************************************************************/ -import QtQuick 2.0 +import QtQuick 2.15 +import org.kde.kcmutils as KCM import org.kde.plasma.private.desktoppanel 1.0 import "." -Item { +KCM.SimpleKCM { id: activeAppearancePage - // backend - DPAdds { - id: dpAdds - } - - width: childrenRect.width - height: childrenRect.height - implicitWidth: pageColumn.implicitWidth - implicitHeight: pageColumn.implicitHeight - - property bool debug: dpAdds.isDebugEnabled() property alias cfg_currentFontFamily: font.value property alias cfg_currentFontSize: fontSize.value @@ -43,7 +33,6 @@ Item { property alias cfg_currentTextStyleColor: selectStyleColor.value property string cfg_currentTextStyle: textStyle.value - Column { id: pageColumn anchors.fill: parent @@ -99,9 +88,4 @@ Item { value: plasmoid.configuration.currentTextStyleColor } } - - - Component.onCompleted: { - if (debug) console.debug() - } } diff --git a/sources/desktop-panel/package/contents/ui/advanced.qml b/sources/desktop-panel/package/contents/ui/advanced.qml index 38ac1c8d..783bc1b9 100644 --- a/sources/desktop-panel/package/contents/ui/advanced.qml +++ b/sources/desktop-panel/package/contents/ui/advanced.qml @@ -15,25 +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 2.15 +import QtQuick.Controls +import org.kde.kcmutils as KCM import org.kde.plasma.private.desktoppanel 1.0 -Item { +KCM.SimpleKCM { id: advancedPage - // backend - DPAdds { - id: dpAdds - } - - width: childrenRect.width - height: childrenRect.height - implicitWidth: pageColumn.implicitWidth - implicitHeight: pageColumn.implicitHeight - - property bool debug: dpAdds.isDebugEnabled() property alias cfg_background: background.checked property alias cfg_verticalLayout: verticalLayout.checked @@ -44,7 +34,6 @@ Item { property alias cfg_tooltipWidth: tooltipWidth.value property alias cfg_tooltipColor: tooltipColor.value - Column { id: pageColumn anchors.fill: parent @@ -82,48 +71,48 @@ Item { editable: true model: [ { - 'label': '#', - 'name': '#' + "label": "#", + "name": "#" }, { - 'label': '$', - 'name': '$' + "label": "$", + "name": "$" }, { - 'label': '%', - 'name': '%' + "label": "%", + "name": "%" }, { - 'label': '&', - 'name': '&' + "label": "&", + "name": "&" }, { - 'label': '*', - 'name': '*' + "label": "*", + "name": "*" }, { - 'label': '@', - 'name': '@' + "label": "@", + "name": "@" }, { - 'label': '¤', - 'name': '¤' + "label": "¤", + "name": "¤" }, { - 'label': '¶', - 'name': '¶' + "label": "¶", + "name": "¶" }, { - 'label': '·', - 'name': '·' + "label": "·", + "name": "·" }, { - 'label': 'º', - 'name': 'º' + "label": "º", + "name": "º" }, { - 'label': plasmoid.configuration.mark, - 'name': plasmoid.configuration.mark + "label": plasmoid.configuration.mark, + "name": plasmoid.configuration.mark } ] text: i18n("Mark") @@ -131,7 +120,7 @@ Item { onValueEdited: cfg_mark = newValue } - QtControls.GroupBox { + GroupBox { height: implicitHeight width: parent.width title: i18n("Tooltip") @@ -144,16 +133,16 @@ Item { id: tooltipType model: [ { - 'label': i18n("contours"), - 'name': "contours" + "label": i18n("contours"), + "name": "contours" }, { - 'label': i18n("names"), - 'name': "names" + "label": i18n("names"), + "name": "names" }, { - 'label': i18n("none"), - 'name': "none" + "label": i18n("none"), + "name": "none" } ] text: i18n("Tooltip type") @@ -178,8 +167,4 @@ Item { } } } - - Component.onCompleted: { - if (debug) console.debug() - } } diff --git a/sources/desktop-panel/package/contents/ui/inactiveapp.qml b/sources/desktop-panel/package/contents/ui/inactiveapp.qml index 6e04fede..d787cee5 100644 --- a/sources/desktop-panel/package/contents/ui/inactiveapp.qml +++ b/sources/desktop-panel/package/contents/ui/inactiveapp.qml @@ -15,25 +15,15 @@ * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * ***************************************************************************/ -import QtQuick 2.0 +import QtQuick 2.15 +import org.kde.kcmutils as KCM import org.kde.plasma.private.desktoppanel 1.0 import "." -Item { +KCM.SimpleKCM { id: inactiveAppearancePage - // backend - DPAdds { - id: dpAdds - } - - width: childrenRect.width - height: childrenRect.height - implicitWidth: pageColumn.implicitWidth - implicitHeight: pageColumn.implicitHeight - - property bool debug: dpAdds.isDebugEnabled() property alias cfg_fontFamily: font.value property alias cfg_fontSize: fontSize.value @@ -43,7 +33,6 @@ Item { property alias cfg_textStyleColor: selectStyleColor.value property string cfg_textStyle: textStyle.value - Column { id: pageColumn anchors.fill: parent @@ -99,9 +88,4 @@ Item { value: plasmoid.configuration.textStyleColor } } - - - Component.onCompleted: { - if (debug) console.debug() - } } diff --git a/sources/desktop-panel/package/contents/ui/main.qml b/sources/desktop-panel/package/contents/ui/main.qml index e8382ad6..6db0ff14 100644 --- a/sources/desktop-panel/package/contents/ui/main.qml +++ b/sources/desktop-panel/package/contents/ui/main.qml @@ -15,25 +15,23 @@ * 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 { id: dpAdds } - property bool debug: dpAdds.isDebugEnabled() property variant tooltipSettings: { "tooltipColor": plasmoid.configuration.tooltipColor, "tooltipType": plasmoid.configuration.tooltipType, @@ -44,17 +42,12 @@ Item { signal needTooltipUpdate signal sizeUpdate - // init - Plasmoid.preferredRepresentation: Plasmoid.fullRepresentation - Plasmoid.compactRepresentation: Plasmoid.fullRepresentation - Layout.alignment: Qt.AlignVCenter | Qt.AlignHCenter Plasmoid.icon: "utilities-system-monitor" Plasmoid.backgroundHints: plasmoid.configuration.background ? "DefaultBackground" : "NoBackground" - // ui GridLayout { anchors.fill: parent @@ -101,7 +94,6 @@ Item { } } - Timer { id: timer interval: 1000 @@ -109,19 +101,16 @@ Item { } onNeedUpdate: { - if (debug) console.debug() - - for (var i=0; icurrentDesktop(); @@ -92,7 +83,7 @@ QStringList DPAdds::dictKeys(const bool _sorted, const QString &_regexp) if (_sorted) allKeys.sort(); - return allKeys.filter(QRegExp(_regexp)); + return allKeys.filter(QRegularExpression(_regexp)); } @@ -223,7 +214,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/desktop-panel/plugin/dpadds.h b/sources/desktop-panel/plugin/dpadds.h index a2e3be28..c053d5a4 100644 --- a/sources/desktop-panel/plugin/dpadds.h +++ b/sources/desktop-panel/plugin/dpadds.h @@ -46,7 +46,6 @@ class DPAdds : public QObject public: explicit DPAdds(QObject *_parent = nullptr); ~DPAdds() override; - Q_INVOKABLE static bool isDebugEnabled(); Q_INVOKABLE [[nodiscard]] int currentDesktop() const; Q_INVOKABLE static QStringList dictKeys(bool _sorted = true, const QString &_regexp = ""); Q_INVOKABLE [[nodiscard]] int numberOfDesktops() const; diff --git a/sources/extsysmon/CMakeLists.txt b/sources/extsysmon/CMakeLists.txt index f078f0b2..6d5fa273 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\") @@ -9,27 +9,19 @@ include_directories( ${CMAKE_CURRENT_SOURCE_DIR}/../${PROJECT_MONITORSOURCES}/ ${PROJECT_TRDPARTY_DIR} ${Qt_INCLUDE} - ${Kf5_INCLUDE} + ${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} ${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(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 68b5e027..ea73879c 100644 --- a/sources/extsysmon/extsysmon.cpp +++ b/sources/extsysmon/extsysmon.cpp @@ -17,85 +17,40 @@ #include "extsysmon.h" +#include + +#include #include +#include #include #include #include "awdebug.h" #include "extsysmonaggregator.h" -#include "gpuloadsource.h" -#include "hddtempsource.h" 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)); -} - - -ExtendedSysMon::~ExtendedSysMon() -{ - qCDebug(LOG_ESM) << __PRETTY_FUNCTION__; -} - - -QStringList ExtendedSysMon::sources() const -{ - 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; + 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; settings.beginGroup("Configuration"); rawConfig["ACPIPATH"] = settings.value("ACPIPATH", "/sys/class/power_supply/").toString(); - rawConfig["GPUDEV"] = settings.value("GPUDEV", "auto").toString(); - rawConfig["HDDDEV"] = settings.value("HDDDEV", "all").toString(); - rawConfig["HDDTEMPCMD"] = settings.value("HDDTEMPCMD", "sudo smartctl -a").toString(); rawConfig["MPDADDRESS"] = settings.value("MPDADDRESS", "localhost").toString(); rawConfig["MPDPORT"] = settings.value("MPDPORT", "6600").toString(); rawConfig["MPRIS"] = settings.value("MPRIS", "auto").toString(); @@ -111,31 +66,6 @@ QHash ExtendedSysMon::updateConfiguration(QHash ExtendedSysMon::updateConfiguration(QHash +#include -class ExtSysMonAggregator; - -class ExtendedSysMon : public Plasma::DataEngine +class ExtendedSysMon : public KSysGuard::SensorPlugin { Q_OBJECT 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"); } 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 0bd58684..93e0280b 100644 --- a/sources/extsysmon/extsysmonaggregator.cpp +++ b/sources/extsysmon/extsysmonaggregator.cpp @@ -21,9 +21,7 @@ #include "batterysource.h" #include "customsource.h" #include "desktopsource.h" -#include "gpuloadsource.h" -#include "gputempsource.h" -#include "hddtempsource.h" +#include "extsysmonsensor.h" #include "loadsource.h" #include "networksource.h" #include "playersource.h" @@ -31,12 +29,14 @@ #include "quotessource.h" #include "requestsource.h" #include "systeminfosource.h" +#include "timesource.h" #include "upgradesource.h" #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,41 +44,11 @@ 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(); -} + qCDebug(LOG_ESM) << "Register sensor" << _name << "with id" << _id; - -QStringList ExtSysMonAggregator::sources() const -{ - return m_map.keys(); + addObject(new ExtSysMonSensor(this, _id, _name, _source)); } @@ -87,68 +57,34 @@ void ExtSysMonAggregator::init(const QHash &_config) qCDebug(LOG_ESM) << "Configuration" << _config; // battery - AbstractExtSysMonSource *batteryItem = new BatterySource(this, QStringList() << _config["ACPIPATH"]); - for (auto &source : batteryItem->sources()) - m_map[source] = batteryItem; + createSensor("battery", i18n("Battery"), new BatterySource(this, {_config["ACPIPATH"]})); // custom - AbstractExtSysMonSource *customItem = new CustomSource(this, QStringList()); - for (auto &source : customItem->sources()) - m_map[source] = customItem; + createSensor("custom", i18n("Scripts"), new CustomSource(this, {})); // desktop - AbstractExtSysMonSource *desktopItem = new DesktopSource(this, QStringList()); - for (auto &source : desktopItem->sources()) - m_map[source] = desktopItem; - // gpu load - AbstractExtSysMonSource *gpuLoadItem = new GPULoadSource(this, QStringList({_config["GPUDEV"]})); - for (auto &source : gpuLoadItem->sources()) - m_map[source] = gpuLoadItem; - // gpu temperature - AbstractExtSysMonSource *gpuTempItem = new GPUTemperatureSource(this, QStringList({_config["GPUDEV"]})); - for (auto &source : gpuTempItem->sources()) - m_map[source] = gpuTempItem; - // hdd temperature - AbstractExtSysMonSource *hddTempItem - = new HDDTemperatureSource(this, QStringList({_config["HDDDEV"], _config["HDDTEMPCMD"]})); - for (auto &source : hddTempItem->sources()) - m_map[source] = hddTempItem; + // FIXME causes segfault in kde libs + // createSensor("desktop", i18n("Desktop"), new DesktopSource(this, {})); // network - AbstractExtSysMonSource *networkItem = new NetworkSource(this, QStringList()); - for (auto &source : networkItem->sources()) - m_map[source] = networkItem; + createSensor("network", i18n("Network"), new NetworkSource(this, {})); // player - AbstractExtSysMonSource *playerItem - = new PlayerSource(this, QStringList({_config["PLAYER"], _config["MPDADDRESS"], _config["MPDPORT"], - _config["MPRIS"], _config["PLAYERSYMBOLS"]})); - for (auto &source : playerItem->sources()) - m_map[source] = playerItem; + createSensor("player", i18n("Music player"), + new PlayerSource(this, {_config["PLAYER"], _config["MPDADDRESS"], _config["MPDPORT"], _config["MPRIS"], + _config["PLAYERSYMBOLS"]})); // processes - AbstractExtSysMonSource *processesItem = new ProcessesSource(this, QStringList()); - for (auto &source : processesItem->sources()) - m_map[source] = processesItem; + createSensor("ps", i18n("Processes"), new ProcessesSource(this, {})); // network request - AbstractExtSysMonSource *requestItem = new RequestSource(this, QStringList()); - for (auto &source : requestItem->sources()) - m_map[source] = requestItem; + createSensor("requests", i18n("Network requests"), new RequestSource(this, {})); // quotes - AbstractExtSysMonSource *quotesItem = new QuotesSource(this, QStringList()); - for (auto &source : quotesItem->sources()) - m_map[source] = quotesItem; + createSensor("quotes", i18n("Quotes"), new QuotesSource(this, {})); // system - AbstractExtSysMonSource *systemItem = new SystemInfoSource(this, QStringList()); - for (auto &source : systemItem->sources()) - m_map[source] = systemItem; + createSensor("system", i18n("System"), new SystemInfoSource(this, {})); + // current time + createSensor("time", i18n("Time"), new TimeSource(this, {})); // upgrade - AbstractExtSysMonSource *upgradeItem = new UpgradeSource(this, QStringList()); - for (auto &source : upgradeItem->sources()) - m_map[source] = upgradeItem; + createSensor("upgrade", i18n("Upgrades"), new UpgradeSource(this, {})); // weather - AbstractExtSysMonSource *weatherItem = new WeatherSource(this, QStringList()); - for (auto &source : weatherItem->sources()) - m_map[source] = weatherItem; + createSensor("weather", i18n("Weather"), new WeatherSource(this, {})); #ifdef BUILD_LOAD // additional load source - AbstractExtSysMonSource *loadItem = new LoadSource(this, QStringList()); - for (auto &source : loadItem->sources()) - m_map[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 d47d216c..c43216cc 100644 --- a/sources/extsysmon/extsysmonaggregator.h +++ b/sources/extsysmon/extsysmonaggregator.h @@ -15,30 +15,26 @@ * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * ***************************************************************************/ -#ifndef EXTSYSMONAGGREGATOR_H -#define EXTSYSMONAGGREGATOR_H +#pragma once #include +#include #include "abstractextsysmonsource.h" -class ExtSysMonAggregator : public QObject +class AbstractExtSysMonSource; +class ExtSysMonSensor; + +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 createSensor(const QString &_id, const QString &_name, AbstractExtSysMonSource *_source); void init(const QHash &_config); - QHash m_map; }; - - -#endif /* EXTSYSMONAGGREGATOR_H */ diff --git a/sources/extsysmon/metadata.json b/sources/extsysmon/metadata.json new file mode 100644 index 00000000..94f3ae38 --- /dev/null +++ b/sources/extsysmon/metadata.json @@ -0,0 +1,3 @@ +{ + "providerName": "extsysmon" +} diff --git a/sources/extsysmon/plasma-dataengine-extsysmon.conf b/sources/extsysmon/plasma-dataengine-extsysmon.conf index 906dffaa..1fc7ddcd 100644 --- a/sources/extsysmon/plasma-dataengine-extsysmon.conf +++ b/sources/extsysmon/plasma-dataengine-extsysmon.conf @@ -1,13 +1,6 @@ [Configuration] # ACPI devices ACPIPATH=/sys/class/power_supply/ -# May be 'nvidia' (for nvidia), 'ati' (for ATI RADEON), 'disable' or 'auto' -GPUDEV=auto -# HDD temperature -## Set block device for hddtemp comma separated or use 'all' or 'disable' -HDDDEV=all -# cmd -HDDTEMPCMD=sudo smartctl -a # mpd server settings MPDADDRESS=localhost MPDPORT=6600 diff --git a/sources/extsysmon/plasma-dataengine-extsysmon.desktop b/sources/extsysmon/plasma-dataengine-extsysmon.desktop deleted file mode 100644 index 19664fb6..00000000 --- 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/extsysmonsources/CMakeLists.txt b/sources/extsysmonsources/CMakeLists.txt index b5940f72..b3fd1c71 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 cfe13669..4e6e2f9e 100644 --- a/sources/extsysmonsources/abstractextsysmonsource.h +++ b/sources/extsysmonsources/abstractextsysmonsource.h @@ -19,10 +19,15 @@ #define ABSTRACTEXTSYSMONSOURCE_H #include -#include +#include #include +namespace KSysGuard +{ +class SensorInfo; +} + class AbstractExtSysMonSource : public QObject { Q_OBJECT @@ -32,15 +37,14 @@ class AbstractExtSysMonSource : public QObject : 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 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/batterysource.cpp b/sources/extsysmonsources/batterysource.cpp index a424f79c..431ee831 100644 --- a/sources/extsysmonsources/batterysource.cpp +++ b/sources/extsysmonsources/batterysource.cpp @@ -18,6 +18,9 @@ #include "batterysource.h" +#include +#include + #include #include @@ -45,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); @@ -60,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)); } } @@ -79,82 +82,79 @@ 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); } -QVariantMap BatterySource::initialData(const QString &_source) const +KSysGuard::SensorInfo *BatterySource::initialData(const QString &_source) const { qCDebug(LOG_ESS) << "Source" << _source; - QVariantMap data; - if (_source == "battery/ac") { - data["min"] = false; - data["max"] = true; - data["name"] = "Is AC online or not"; - data["type"] = "bool"; - data["units"] = ""; - } else if (_source == "battery/bat") { - data["min"] = 0; - data["max"] = 100; - data["name"] = "Average battery usage"; - data["type"] = "integer"; - data["units"] = "%"; - } else if (_source == "battery/batleft") { - data["min"] = 0; - data["max"] = 0; - data["name"] = "Battery discharge time"; - data["type"] = "integer"; - data["units"] = "s"; - } else if (_source == "battery/batnow") { - data["min"] = 0; - data["max"] = 0; - data["name"] = "Current battery capacity"; - data["type"] = "integer"; - data["units"] = ""; - } else if (_source == "battery/batrate") { - data["min"] = 0; - data["max"] = 0; - data["name"] = "Average battery discharge rate"; - data["type"] = "float"; - data["units"] = "1/s"; - } else if (_source == "battery/battotal") { - data["min"] = 0; - data["max"] = 0; - data["name"] = "Full battery capacity"; - data["type"] = "integer"; - data["units"] = ""; - } 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"; - } 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"] = ""; - } 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"] = ""; - } 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"; - } 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"] = "%"; + auto data = new KSysGuard::SensorInfo(); + if (_source == "ac") { + data->name = "Is AC online or not"; + data->variantType = QVariant::Bool; + data->unit = KSysGuard::UnitNone; + } 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 == "batleft") { + data->min = 0; + data->max = 0; + data->name = "Battery discharge time"; + data->variantType = QVariant::Int; + data->unit = KSysGuard::UnitSecond; + } 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 == "batrate") { + data->min = 0; + data->max = 0; + data->name = "Average battery discharge rate"; + data->variantType = QVariant::Double; + data->unit = KSysGuard::UnitRate; + } 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("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("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("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("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("bat")) { + 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; @@ -166,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 @@ -177,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(); } @@ -244,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/batterysource.h b/sources/extsysmonsources/batterysource.h index 23b3a346..938ed6cf 100644 --- a/sources/extsysmonsources/batterysource.h +++ b/sources/extsysmonsources/batterysource.h @@ -35,7 +35,7 @@ class BatterySource : public AbstractExtSysMonSource ~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 a4af21b4..a03214e9 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; } @@ -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/customsource.h b/sources/extsysmonsources/customsource.h index c7e921d9..4e0142dc 100644 --- a/sources/extsysmonsources/customsource.h +++ b/sources/extsysmonsources/customsource.h @@ -34,7 +34,7 @@ class CustomSource : public AbstractExtSysMonSource 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 871dd15b..149f4751 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" @@ -50,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 == "name") { return m_vdi->desktopNames().at(current); - } else if (_source == "desktop/current/number") { + } else if (_source == "number") { return current + 1; - } else if (_source == "desktop/total/name") { + } else if (_source == "names") { return m_vdi->desktopNames(); - } else if (_source == "desktop/total/number") { + } else if (_source == "count") { return m_vdi->numberOfDesktops(); } @@ -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; - if (_source == "desktop/current/name") { - data["min"] = ""; - data["max"] = ""; - data["name"] = "Current desktop name"; - data["type"] = "QString"; - data["units"] = ""; - } else if (_source == "desktop/current/number") { - data["min"] = 0; - data["max"] = 0; - data["name"] = "Current desktop number"; - data["type"] = "integer"; - data["units"] = ""; - } else if (_source == "desktop/total/name") { - data["min"] = QStringList(); - data["max"] = QStringList(); - data["name"] = "All desktops by name"; - data["type"] = "QStringList"; - data["units"] = ""; - } else if (_source == "desktop/total/number") { - data["min"] = 0; - data["max"] = 0; - data["name"] = "Desktops count"; - data["type"] = "integer"; - data["units"] = ""; + auto data = new KSysGuard::SensorInfo(); + if (_source == "name") { + data->name = "Current desktop name"; + data->variantType = QVariant::String; + data->unit = KSysGuard::UnitNone; + } else if (_source == "number") { + data->min = 0; + data->name = "Current desktop number"; + data->variantType = QVariant::Int; + data->unit = KSysGuard::UnitNone; + } else if (_source == "names") { + data->name = "All desktops by name"; + data->variantType = QVariant::StringList; + data->unit = KSysGuard::UnitNone; + } else if (_source == "count") { + data->min = 0; + data->name = "Desktops count"; + data->variantType = QVariant::Int; + data->unit = KSysGuard::UnitNone; } return data; @@ -102,10 +97,10 @@ QVariantMap 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("name"); + sources.append("number"); + sources.append("names"); + sources.append("count"); return sources; } diff --git a/sources/extsysmonsources/desktopsource.h b/sources/extsysmonsources/desktopsource.h index 05222eea..5867fa3a 100644 --- a/sources/extsysmonsources/desktopsource.h +++ b/sources/extsysmonsources/desktopsource.h @@ -35,7 +35,7 @@ class DesktopSource : public AbstractExtSysMonSource 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 00000000..e8b5c502 --- /dev/null +++ b/sources/extsysmonsources/extsysmonsensor.cpp @@ -0,0 +1,89 @@ +/*************************************************************************** + * 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 + +#include "abstractextsysmonsource.h" +#include "awdebug.h" + + +ExtSysMonSensor::ExtSysMonSensor(KSysGuard::SensorContainer *_parent, const QString &_id, const QString &_name, + AbstractExtSysMonSource *_source) + : KSysGuard::SensorObject(_id, _name, _parent) + , m_source(_source) + , m_timer(new QTimer(this)) +{ + qCDebug(LOG_ESS) << __PRETTY_FUNCTION__; + + 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 = sensor(source); + if (!property->isSubscribed()) + continue; // skip properties which are not explicitly subscribed + + auto value = m_source->data(source); + property->setValue(value); + } +} + + +void ExtSysMonSensor::loadProperties() +{ + for (auto &source : m_source->sources()) { + auto info = m_source->initialData(source); + auto property = new KSysGuard::SensorProperty(source, info->name, this); + + property->setUnit(info->unit); + property->setVariantType(info->variantType); + + property->setMin(info->min); + property->setMax(info->max); + + addProperty(property); + } +} diff --git a/sources/test/testgputempsource.h b/sources/extsysmonsources/extsysmonsensor.h similarity index 67% rename from sources/test/testgputempsource.h rename to sources/extsysmonsources/extsysmonsensor.h index 3f7ce9b5..6105cf6c 100644 --- a/sources/test/testgputempsource.h +++ b/sources/extsysmonsources/extsysmonsensor.h @@ -15,34 +15,31 @@ * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * ***************************************************************************/ +#ifndef EXTSYSMONSENSOR_H +#define EXTSYSMONSENSOR_H -#ifndef TESTGPUTEMPSOURCE_H -#define TESTGPUTEMPSOURCE_H +#include -#include -#include +class AbstractExtSysMonSource; +class QTimer; -class GPUTemperatureSource; - -class TestGPUTemperatureSource : public QObject +class ExtSysMonSensor : public KSysGuard::SensorObject { Q_OBJECT -private slots: - // initialization - void initTestCase(); - void cleanupTestCase(); - // test - void test_sources(); - void test_gputemp(); +public: + explicit ExtSysMonSensor(KSysGuard::SensorContainer *_parent, const QString &_id, const QString &_name, + AbstractExtSysMonSource *_source); + ~ExtSysMonSensor() override; + void changeSubscription(bool _subscribed); + void update(); private: - GPUTemperatureSource *source = nullptr; - QString device; - QString src = "gpu/temperature"; - QPair temp = QPair(0.0f, 120.0f); + void loadProperties(); + AbstractExtSysMonSource *m_source = nullptr; + QTimer *m_timer = nullptr; }; -#endif /* TESTGPUTEMPSOURCE_H */ +#endif /* EXTSYSMONSENSOR_H */ diff --git a/sources/extsysmonsources/gpuloadsource.cpp b/sources/extsysmonsources/gpuloadsource.cpp deleted file mode 100644 index 74078dfc..00000000 --- a/sources/extsysmonsources/gpuloadsource.cpp +++ /dev/null @@ -1,151 +0,0 @@ -/*************************************************************************** - * 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 "gpuloadsource.h" - -#include -#include -#include - -#include "awdebug.h" - - -GPULoadSource::GPULoadSource(QObject *_parent, const QStringList &_args) - : AbstractExtSysMonSource(_parent, _args) -{ - Q_ASSERT(_args.count() == 1); - qCDebug(LOG_ESS) << __PRETTY_FUNCTION__; - - m_device = _args.at(0); - - m_process = new QProcess(nullptr); - // fucking magic from http://doc.qt.io/qt-5/qprocess.html#finished - connect(m_process, QOverload::of(&QProcess::finished), - [this](int, QProcess::ExitStatus) { return updateValue(); }); - m_process->waitForFinished(0); -} - - -GPULoadSource::~GPULoadSource() -{ - qCDebug(LOG_ESS) << __PRETTY_FUNCTION__; - - m_process->kill(); - m_process->deleteLater(); -} - - -QString GPULoadSource::autoGpu() -{ - QString gpu = "disable"; - QFile moduleFile("/proc/modules"); - if (!moduleFile.open(QIODevice::ReadOnly | QIODevice::Text)) { - qCWarning(LOG_AW) << "Could not open file as text" << moduleFile.fileName(); - return gpu; - } - - QString output = moduleFile.readAll(); - moduleFile.close(); - if (output.contains("fglrx")) - gpu = "ati"; - else if (output.contains("nvidia")) - gpu = "nvidia"; - - qCInfo(LOG_ESM) << "Device" << gpu; - return gpu; -} - - -QVariant GPULoadSource::data(const QString &_source) -{ - qCDebug(LOG_ESS) << "Source" << _source; - - if (_source == "gpu/load") - run(); - - return m_values[_source]; -} - - -QVariantMap GPULoadSource::initialData(const QString &_source) const -{ - qCDebug(LOG_ESS) << "Source" << _source; - - QVariantMap data; - if (_source == "gpu/load") { - data["min"] = 0.0; - data["max"] = 100.0; - data["name"] = "GPU usage"; - data["type"] = "float"; - data["units"] = "%"; - } - - return data; -} - - -void GPULoadSource::run() -{ - if ((m_device != "nvidia") && (m_device != "ati")) - return; - // build cmd - QString cmd = m_device == "nvidia" ? "nvidia-smi" : "aticonfig"; - auto args = m_device == "nvidia" ? QStringList({"-q", "-x"}) : QStringList({"--od-getclocks"}); - qCInfo(LOG_ESS) << "cmd" << cmd; - - m_process->start(cmd, args); -} - - -QStringList GPULoadSource::sources() const -{ - QStringList sources; - sources.append("gpu/load"); - - return sources; -} - - -void GPULoadSource::updateValue() -{ - qCInfo(LOG_ESS) << "Cmd returns" << m_process->exitCode(); - QString qdebug = QTextCodec::codecForMib(106)->toUnicode(m_process->readAllStandardError()).trimmed(); - qCInfo(LOG_ESS) << "Error" << qdebug; - QString qoutput = QTextCodec::codecForMib(106)->toUnicode(m_process->readAllStandardOutput()).trimmed(); - qCInfo(LOG_ESS) << "Output" << qoutput; - - if (m_device == "nvidia") { - for (auto &str : qoutput.split('\n', Qt::SkipEmptyParts)) { - if (!str.contains("")) - continue; - auto load = str.remove("").remove("").remove('%'); - m_values["gpu/load"] = load.toFloat(); - break; - } - } else if (m_device == "ati") { - for (auto &str : qoutput.split('\n', Qt::SkipEmptyParts)) { - if (!str.contains("load")) - continue; - QString load = str.split(' ', Qt::SkipEmptyParts)[3].remove('%'); - m_values["gpu/load"] = load.toFloat(); - break; - } - } - - emit(dataReceived(m_values)); -} diff --git a/sources/extsysmonsources/gputempsource.cpp b/sources/extsysmonsources/gputempsource.cpp deleted file mode 100644 index de13ff4f..00000000 --- a/sources/extsysmonsources/gputempsource.cpp +++ /dev/null @@ -1,130 +0,0 @@ -/*************************************************************************** - * 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 "gputempsource.h" - -#include -#include -#include - -#include "awdebug.h" - - -GPUTemperatureSource::GPUTemperatureSource(QObject *_parent, const QStringList &_args) - : AbstractExtSysMonSource(_parent, _args) -{ - Q_ASSERT(_args.count() == 1); - qCDebug(LOG_ESS) << __PRETTY_FUNCTION__; - - m_device = _args.at(0); - - m_process = new QProcess(nullptr); - // fucking magic from http://doc.qt.io/qt-5/qprocess.html#finished - connect(m_process, QOverload::of(&QProcess::finished), - [this](int, QProcess::ExitStatus) { return updateValue(); }); - m_process->waitForFinished(0); -} - - -GPUTemperatureSource::~GPUTemperatureSource() -{ - qCDebug(LOG_ESS) << __PRETTY_FUNCTION__; - - m_process->kill(); - m_process->deleteLater(); -} - - -QVariant GPUTemperatureSource::data(const QString &_source) -{ - qCDebug(LOG_ESS) << "Source" << _source; - - if (_source == "gpu/temperature") - run(); - - return m_values[_source]; -} - - -QVariantMap GPUTemperatureSource::initialData(const QString &_source) const -{ - qCDebug(LOG_ESS) << "Source" << _source; - - QVariantMap data; - if (_source == "gpu/temperature") { - data["min"] = 0.0; - data["max"] = 0.0; - data["name"] = "GPU temperature"; - data["type"] = "float"; - data["units"] = "°C"; - } - - return data; -} - - -void GPUTemperatureSource::run() -{ - if ((m_device != "nvidia") && (m_device != "ati")) - return; - // build cmd - QString cmd = m_device == "nvidia" ? "nvidia-smi" : "aticonfig"; - auto args = m_device == "nvidia" ? QStringList({"-q", "-x"}) : QStringList({"--od-gettemperature"}); - qCInfo(LOG_ESS) << "cmd" << cmd; - - m_process->start(cmd, args); -} - - -QStringList GPUTemperatureSource::sources() const -{ - QStringList sources; - sources.append("gpu/temperature"); - - return sources; -} - - -void GPUTemperatureSource::updateValue() -{ - qCInfo(LOG_ESS) << "Cmd returns" << m_process->exitCode(); - QString qdebug = QTextCodec::codecForMib(106)->toUnicode(m_process->readAllStandardError()).trimmed(); - qCInfo(LOG_ESS) << "Error" << qdebug; - QString qoutput = QTextCodec::codecForMib(106)->toUnicode(m_process->readAllStandardOutput()).trimmed(); - qCInfo(LOG_ESS) << "Output" << qoutput; - - if (m_device == "nvidia") { - for (auto &str : qoutput.split('\n', Qt::SkipEmptyParts)) { - if (!str.contains("")) - continue; - QString temp = str.remove("").remove("C"); - m_values["gpu/temperature"] = temp.toFloat(); - break; - } - } else if (m_device == "ati") { - for (auto &str : qoutput.split('\n', Qt::SkipEmptyParts)) { - if (!str.contains("Temperature")) - continue; - QString temp = str.split(' ', Qt::SkipEmptyParts).at(4); - m_values["gpu/temperature"] = temp.toFloat(); - break; - } - } - - emit(dataReceived(m_values)); -} diff --git a/sources/extsysmonsources/gputempsource.h b/sources/extsysmonsources/gputempsource.h deleted file mode 100644 index 1d88ccfa..00000000 --- a/sources/extsysmonsources/gputempsource.h +++ /dev/null @@ -1,51 +0,0 @@ -/*************************************************************************** - * 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 GPUTEMPSOURCE_H -#define GPUTEMPSOURCE_H - -#include - -#include "abstractextsysmonsource.h" - - -class QProcess; - -class GPUTemperatureSource : public AbstractExtSysMonSource -{ - Q_OBJECT - -public: - explicit GPUTemperatureSource(QObject *_parent, const QStringList &_args); - ~GPUTemperatureSource() override; - QVariant data(const QString &_source) override; - [[nodiscard]] QVariantMap initialData(const QString &_source) const override; - void run() override; - [[nodiscard]] QStringList sources() const override; - -private slots: - void updateValue(); - -private: - // configuration and values - QString m_device; - QProcess *m_process = nullptr; - QVariantHash m_values; -}; - - -#endif /* GPUTEMPSOURCE_H */ diff --git a/sources/extsysmonsources/hddtempsource.cpp b/sources/extsysmonsources/hddtempsource.cpp deleted file mode 100644 index 322ffd1a..00000000 --- a/sources/extsysmonsources/hddtempsource.cpp +++ /dev/null @@ -1,149 +0,0 @@ -/*************************************************************************** - * 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 "hddtempsource.h" - -#include -#include -#include - -#include "awdebug.h" - - -HDDTemperatureSource::HDDTemperatureSource(QObject *_parent, const QStringList &_args) - : AbstractExtSysMonSource(_parent, _args) -{ - Q_ASSERT(_args.count() == 2); - qCDebug(LOG_ESS) << __PRETTY_FUNCTION__; - - m_devices = _args.at(0).split(',', Qt::SkipEmptyParts); - m_cmd = _args.at(1).split(' '); // lets hope no one put cmd with spaces here lol - - m_smartctl = m_cmd.contains("smartctl"); - qCInfo(LOG_ESS) << "Parse as smartctl" << m_smartctl; - - for (auto &device : m_devices) { - m_processes[device] = new QProcess(nullptr); - // fucking magic from http://doc.qt.io/qt-5/qprocess.html#finished - connect(m_processes[device], QOverload::of(&QProcess::finished), - [this, &device](int, QProcess::ExitStatus) { return updateValue(device); }); - m_processes[device]->waitForFinished(0); - } -} - - -HDDTemperatureSource::~HDDTemperatureSource() -{ - qCDebug(LOG_ESS) << __PRETTY_FUNCTION__; - - for (auto &device : m_devices) { - m_processes[device]->kill(); - m_processes[device]->deleteLater(); - } -} - - -QStringList HDDTemperatureSource::allHdd() -{ - QStringList allDevices = QDir("/dev").entryList(QDir::System, QDir::Name); - QStringList devices = allDevices.filter(QRegExp("^[hms]d[a-z]$")); - for (int i = 0; i < devices.count(); i++) - devices[i] = QString("/dev/%1").arg(devices.at(i)); - - qCInfo(LOG_ESS) << "Device list" << devices; - return devices; -} - - -QVariant HDDTemperatureSource::data(const QString &_source) -{ - qCDebug(LOG_ESS) << "Source" << _source; - - QString device = _source; - device.remove("hdd/temperature"); - // run cmd - if (m_processes[device]->state() == QProcess::NotRunning) { - auto cmd = m_cmd.first(); - auto args = m_cmd.mid(1); - args.append(device); - m_processes[device]->start(cmd, args); - } - - return m_values[device]; -} - - -QVariantMap HDDTemperatureSource::initialData(const QString &_source) const -{ - qCDebug(LOG_ESS) << "Source" << _source; - - QString 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"; - - return data; -} - - -QStringList HDDTemperatureSource::sources() const -{ - QStringList sources; - for (auto &device : m_devices) - sources.append(QString("hdd/temperature%1").arg(device)); - - return sources; -} - - -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(); - qCInfo(LOG_ESS) << "Error" << qdebug; - QString qoutput = QTextCodec::codecForMib(106)->toUnicode(m_processes[_device]->readAllStandardOutput()).trimmed(); - qCInfo(LOG_ESS) << "Output" << qoutput; - - // parse - if (m_smartctl) { - QStringList lines = qoutput.split('\n', Qt::SkipEmptyParts); - for (auto &str : lines) { - if (!str.startsWith("194")) - continue; - if (str.split(' ', Qt::SkipEmptyParts).count() < 9) - continue; - m_values[_device] = str.split(' ', Qt::SkipEmptyParts).at(9).toFloat(); - break; - } - } else { - QStringList lines = qoutput.split(':', Qt::SkipEmptyParts); - if (lines.count() >= 3) { - QString temp = lines.at(2); - temp.remove(QChar(0260)).remove('C'); - m_values[_device] = temp.toFloat(); - } - } - - emit(dataReceived(m_values)); -} diff --git a/sources/extsysmonsources/hddtempsource.h b/sources/extsysmonsources/hddtempsource.h deleted file mode 100644 index 4034ab89..00000000 --- a/sources/extsysmonsources/hddtempsource.h +++ /dev/null @@ -1,55 +0,0 @@ -/*************************************************************************** - * 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 HDDTEMPSOURCE_H -#define HDDTEMPSOURCE_H - -#include - -#include "abstractextsysmonsource.h" - - -class QProcess; - -class HDDTemperatureSource : public AbstractExtSysMonSource -{ - Q_OBJECT - -public: - explicit HDDTemperatureSource(QObject *_parent, const QStringList &_args); - ~HDDTemperatureSource() override; - static QStringList allHdd(); - QVariant data(const QString &_source) override; - [[nodiscard]] QVariantMap initialData(const QString &_source) const override; - void run() override{}; - [[nodiscard]] QStringList sources() const override; - -private slots: - void updateValue(const QString &_device); - -private: - // properties - QHash m_processes; - // configuration and values - QStringList m_cmd; - QStringList m_devices; - bool m_smartctl; - QHash m_values; -}; - - -#endif /* HDDTEMPSOURCE_H */ diff --git a/sources/extsysmonsources/loadsource.cpp b/sources/extsysmonsources/loadsource.cpp index 958a3c04..c2062ff0 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; - if (_source.startsWith("load/load")) { - data["min"] = 0; - data["max"] = 0; - data["name"] = "Simple sources for load tests"; - data["type"] = "int"; - data["units"] = ""; + auto data = new KSysGuard::SensorInfo(); + if (_source.startsWith("load")) { + data->min = 0; + data->max = 0; + data->name = "Simple sources for load tests"; + data->variantType = QVariant::Int; + data->unit = KSysGuard::UnitNone; } return data; @@ -66,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/loadsource.h b/sources/extsysmonsources/loadsource.h index 3566d32f..bbf1f34e 100644 --- a/sources/extsysmonsources/loadsource.h +++ b/sources/extsysmonsources/loadsource.h @@ -31,7 +31,7 @@ class LoadSource : public AbstractExtSysMonSource 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 e56c7b57..3d62b423 100644 --- a/sources/extsysmonsources/networksource.cpp +++ b/sources/extsysmonsources/networksource.cpp @@ -18,9 +18,11 @@ #include "networksource.h" +#include +#include + #include #include -#include #include "awdebug.h" @@ -58,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; - if (_source == "network/current/name") { - data["min"] = ""; - data["max"] = ""; - data["name"] = "Current network device name"; - data["type"] = "QString"; - data["units"] = ""; - } else if (_source == "network/current/ssid") { - data["min"] = ""; - data["max"] = ""; - data["name"] = "Current SSID name"; - data["type"] = "QString"; - data["units"] = ""; + auto data = new KSysGuard::SensorInfo(); + if (_source == "device") { + data->name = "Current network device name"; + data->variantType = QVariant::String; + data->unit = KSysGuard::UnitNone; + } else if (_source == "ssid") { + data->name = "Current SSID name"; + data->variantType = QVariant::String; + data->unit = KSysGuard::UnitNone; } return data; @@ -83,16 +81,18 @@ QVariantMap 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(); + if (m_process->state() == QProcess::ProcessState::NotRunning) { + 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; } @@ -101,12 +101,12 @@ 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; + m_values["ssid"] = qoutput; } diff --git a/sources/extsysmonsources/networksource.h b/sources/extsysmonsources/networksource.h index 8e115c65..10691998 100644 --- a/sources/extsysmonsources/networksource.h +++ b/sources/extsysmonsources/networksource.h @@ -33,7 +33,7 @@ class NetworkSource : public AbstractExtSysMonSource 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 b56d07e6..98e0cdf0 100644 --- a/sources/extsysmonsources/playersource.cpp +++ b/sources/extsysmonsources/playersource.cpp @@ -18,12 +18,14 @@ #include "playersource.h" +#include +#include + #include #include #include #include #include -#include #include "awdebug.h" @@ -88,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; - if (_source == "player/album") { - data["min"] = ""; - data["max"] = ""; - data["name"] = "Current song album"; - data["type"] = "QString"; - data["units"] = ""; - } 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"] = ""; - } 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"] = ""; - } else if (_source == "player/artist") { - data["min"] = ""; - data["max"] = ""; - data["name"] = "Current song artist"; - data["type"] = "QString"; - data["units"] = ""; - } 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"] = ""; - } 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"] = ""; - } else if (_source == "player/duration") { - data["min"] = 0; - data["max"] = 0; - data["name"] = "Current song duration"; - data["type"] = "integer"; - data["units"] = "s"; - } else if (_source == "player/progress") { - data["min"] = 0; - data["max"] = 0; - data["name"] = "Current song progress"; - data["type"] = "integer"; - data["units"] = "s"; - } else if (_source == "player/title") { - data["min"] = ""; - data["max"] = ""; - data["name"] = "Current song title"; - data["type"] = "QString"; - data["units"] = ""; - } 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"] = ""; - } 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"] = ""; + auto data = new KSysGuard::SensorInfo(); + if (_source == "album") { + data->name = "Current song album"; + data->variantType = QVariant::String; + data->unit = KSysGuard::UnitNone; + } 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 == "dalbum") { + data->name = QString("Current song album (%1 symbols, dynamic)").arg(m_symbols); + data->variantType = QVariant::String; + data->unit = KSysGuard::UnitNone; + } else if (_source == "artist") { + data->name = "Current song artist"; + data->variantType = QVariant::String; + data->unit = KSysGuard::UnitNone; + } 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 == "dartist") { + data->name = QString("Current song artist (%1 symbols, dynamic)").arg(m_symbols); + data->variantType = QVariant::String; + data->unit = KSysGuard::UnitNone; + } 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 == "progress") { + data->min = 0; + data->max = 0; + data->name = "Current song progress"; + data->variantType = QVariant::Int; + data->unit = KSysGuard::UnitSecond; + } else if (_source == "title") { + data->name = "Current song title"; + data->variantType = QVariant::String; + data->unit = KSysGuard::UnitNone; + } 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 == "dtitle") { + data->name = QString("Current song title (%1 symbols, dynamic)").arg(m_symbols); + data->variantType = QVariant::String; + data->unit = KSysGuard::UnitNone; } return data; @@ -182,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; } @@ -219,7 +200,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 +211,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 +230,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 @@ -261,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; } } } @@ -282,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; } @@ -337,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 @@ -352,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/playersource.h b/sources/extsysmonsources/playersource.h index e5a8449a..6d0e8d19 100644 --- a/sources/extsysmonsources/playersource.h +++ b/sources/extsysmonsources/playersource.h @@ -38,7 +38,7 @@ class PlayerSource : public AbstractExtSysMonSource ~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 9d434e08..e5792c01 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; - if (_source == "ps/running/count") { - data["min"] = 0; - data["max"] = 0; - data["name"] = "Count of running processes"; - data["type"] = "integer"; - data["units"] = ""; - } else if (_source == "ps/running/list") { - data["min"] = QStringList(); - data["max"] = QStringList(); - data["name"] = "All running processes list"; - data["type"] = "QStringList"; - data["units"] = ""; - } else if (_source == "ps/total/count") { - data["min"] = 0; - data["max"] = 0; - data["name"] = "Total count of processes"; - data["type"] = "integer"; - data["units"] = ""; + auto data = new KSysGuard::SensorInfo(); + if (_source == "running") { + data->min = 0; + data->max = 0; + data->name = "Count of running processes"; + data->variantType = QVariant::Int; + data->unit = KSysGuard::UnitNone; + } else if (_source == "list") { + data->name = "All running processes list"; + data->variantType = QVariant::StringList; + data->unit = KSysGuard::UnitNone; + } else if (_source == "count") { + data->min = 0; + data->max = 0; + data->name = "Total count of processes"; + data->variantType = QVariant::Int; + data->unit = KSysGuard::UnitNone; } return data; @@ -80,7 +81,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) { @@ -98,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"] = running.count(); + m_values["list"] = running; + m_values["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"); + sources.append("list"); + sources.append("count"); return sources; } diff --git a/sources/extsysmonsources/processessource.h b/sources/extsysmonsources/processessource.h index 2f4cb6e4..19067683 100644 --- a/sources/extsysmonsources/processessource.h +++ b/sources/extsysmonsources/processessource.h @@ -31,7 +31,7 @@ class ProcessesSource : public AbstractExtSysMonSource 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 b1955e13..042b3674 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" @@ -45,60 +48,58 @@ 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; } -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; - 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"] = ""; - } 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"] = ""; - } 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"] = ""; - } 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"] = ""; - } 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"] = ""; - } 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"] = ""; + auto data = new KSysGuard::SensorInfo; + 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("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("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("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("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("percvolumechg")) { + 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; @@ -115,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/quotessource.h b/sources/extsysmonsources/quotessource.h index 04fbcba1..79034c81 100644 --- a/sources/extsysmonsources/quotessource.h +++ b/sources/extsysmonsources/quotessource.h @@ -34,7 +34,7 @@ class QuotesSource : public AbstractExtSysMonSource 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 628fb0d4..2ac9eece 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" @@ -45,30 +48,26 @@ 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; } -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; - 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"] = ""; + auto data = new KSysGuard::SensorInfo(); + 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; } return data; @@ -85,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/requestsource.h b/sources/extsysmonsources/requestsource.h index 4ad16cb5..6e36f50c 100644 --- a/sources/extsysmonsources/requestsource.h +++ b/sources/extsysmonsources/requestsource.h @@ -34,7 +34,7 @@ class RequestSource : public AbstractExtSysMonSource 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 68497045..4a5dbe16 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; - if (_source == "system/brightness") { - data["min"] = 0.0; - data["max"] = 100.0; - data["name"] = "Screen brightness"; - data["type"] = "float"; - data["units"] = "%"; - } else if (_source == "system/volume") { - data["min"] = 0.0; - data["max"] = 100.0; - data["name"] = "Master volume"; - data["type"] = "float"; - data["units"] = "%"; + auto data = new KSysGuard::SensorInfo(); + 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 == "volume") { + data->min = 0.0; + data->max = 100.0; + data->name = "Master volume"; + data->variantType = QVariant::Double; + data->unit = KSysGuard::UnitPercent; } return data; @@ -76,16 +79,16 @@ QVariantMap SystemInfoSource::initialData(const QString &_source) const 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; } @@ -97,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"; @@ -126,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("-", "_"); @@ -137,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 b700b8a4..578e6718 100644 --- a/sources/extsysmonsources/systeminfosource.h +++ b/sources/extsysmonsources/systeminfosource.h @@ -31,7 +31,7 @@ class SystemInfoSource : public AbstractExtSysMonSource 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; @@ -39,8 +39,8 @@ class SystemInfoSource : public AbstractExtSysMonSource // 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/gpuloadsource.h b/sources/extsysmonsources/timesource.cpp similarity index 57% rename from sources/extsysmonsources/gpuloadsource.h rename to sources/extsysmonsources/timesource.cpp index 57874113..9e02dead 100644 --- a/sources/extsysmonsources/gpuloadsource.h +++ b/sources/extsysmonsources/timesource.cpp @@ -15,38 +15,48 @@ * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * ***************************************************************************/ -#ifndef GPULOADSOURCE_H -#define GPULOADSOURCE_H +#include "timesource.h" -#include +#include +#include -#include "abstractextsysmonsource.h" +#include "awdebug.h" -class QProcess; +TimeSource::TimeSource(QObject *_parent, const QStringList &_args) + : AbstractExtSysMonSource(_parent, _args) +{ + Q_ASSERT(_args.count() == 0); + qCDebug(LOG_ESS) << __PRETTY_FUNCTION__; +} + -class GPULoadSource : public AbstractExtSysMonSource +QVariant TimeSource::data(const QString &_source) { - Q_OBJECT + qCDebug(LOG_ESS) << "Source" << _source; -public: - explicit GPULoadSource(QObject *_parent, const QStringList &_args); - ~GPULoadSource() override; - static QString autoGpu(); - QVariant data(const QString &_source) override; - [[nodiscard]] QVariantMap initialData(const QString &_source) const override; - void run() override; - [[nodiscard]] QStringList sources() const override; + if (_source == "now") { + return QDateTime::currentSecsSinceEpoch(); + } -private slots: - void updateValue(); + return {}; +} -private: - // configuration and values - QString m_device; - QProcess *m_process = nullptr; - QVariantHash m_values; -}; +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; -#endif /* GPULOADSOURCE_H */ + return data; +} + + +QStringList TimeSource::sources() const +{ + return QStringList({"now"}); +} diff --git a/sources/test/testgpuloadsource.h b/sources/extsysmonsources/timesource.h similarity index 72% rename from sources/test/testgpuloadsource.h rename to sources/extsysmonsources/timesource.h index 93ee7ce3..bb780d83 100644 --- a/sources/test/testgpuloadsource.h +++ b/sources/extsysmonsources/timesource.h @@ -15,34 +15,22 @@ * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * ***************************************************************************/ - -#ifndef TESTGPULOADSOURCE_H -#define TESTGPULOADSOURCE_H +#pragma once #include -#include +#include "abstractextsysmonsource.h" +#include "extitemaggregator.h" -class GPULoadSource; -class TestGPULoadSource : public QObject +class TimeSource : public AbstractExtSysMonSource { Q_OBJECT -private slots: - // initialization - void initTestCase(); - void cleanupTestCase(); - // test - void test_sources(); - void test_gpuload(); - -private: - GPULoadSource *source = nullptr; - QString device; - QString src = "gpu/load"; - QPair load = QPair(0.0f, 100.0f); +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; }; - - -#endif /* TESTGPULOADSOURCE_H */ diff --git a/sources/extsysmonsources/upgradesource.cpp b/sources/extsysmonsources/upgradesource.cpp index 914d4e1f..f278bcf1 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; } @@ -74,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/upgradesource.h b/sources/extsysmonsources/upgradesource.h index 79a64439..1e42785b 100644 --- a/sources/extsysmonsources/upgradesource.h +++ b/sources/extsysmonsources/upgradesource.h @@ -34,7 +34,7 @@ class UpgradeSource : public AbstractExtSysMonSource 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 e3a618ae..ee76e567 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" @@ -45,60 +48,52 @@ 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)) { - QVariantHash data = m_extWeather->itemByTagNumber(ind)->run(); - for (auto &key : data.keys()) - m_values[key] = data[key]; + if (!m_values.contains(_source)) { + auto data = m_extWeather->itemByTagNumber(ind)->run(); + m_values.insert(data); } - QVariant value = m_values.take(service); - return value; + return m_values.take(_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; - 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"] = ""; - } 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"] = ""; - } 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"] = "%"; - } 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"; - } 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"; - } 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"] = ""; + auto data = new KSysGuard::SensorInfo(); + 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")) { + 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("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("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("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("timestamp")) { + data->name = QString("Timestamp for '%1'").arg(m_extWeather->itemByTagNumber(ind)->uniq()); + data->variantType = QVariant::DateTime; + data->unit = KSysGuard::UnitNone; } return data; @@ -115,12 +110,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; diff --git a/sources/extsysmonsources/weathersource.h b/sources/extsysmonsources/weathersource.h index b75a1e5d..e43cc8d3 100644 --- a/sources/extsysmonsources/weathersource.h +++ b/sources/extsysmonsources/weathersource.h @@ -34,7 +34,7 @@ class WeatherSource : public AbstractExtSysMonSource 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 4046f95e..2d9aaa95 100644 --- a/sources/libraries.cmake +++ b/sources/libraries.cmake @@ -2,28 +2,31 @@ 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) +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) + 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 ${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/qml/AWExtensions.qml b/sources/qml/AWExtensions.qml index c83fca5b..07eac570 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,35 @@ Row { } } - QtControls.Button { + Button { width: parent.width / 15 - iconName: "view-history" - menu: QtControls.Menu { + icon.name: "view-history" + + onClicked: historyConfig.open() + + Menu { id: historyConfig + Instantiator { model: awTelemetryHandler.get("awwidgetconfig") - QtControls.MenuItem { + delegate: MenuItem { text: modelData onTriggered: textArea.text = modelData } - onObjectAdded: historyConfig.insertItem(index, object) - onObjectRemoved: historyConfig.removeItem(object) + + onObjectAdded: (index, object) => historyConfig.insertItem(index, object) + onObjectRemoved: (index, object) => 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 7e8d16ec..249acd85 100644 --- a/sources/qml/AWInfoLabel.qml +++ b/sources/qml/AWInfoLabel.qml @@ -15,15 +15,17 @@ * 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 + wrapMode: Text.WordWrap text: i18n("Detailed information may be found on project homepage") + onLinkActivated: Qt.openUrlExternally(link) } diff --git a/sources/qml/AWTagSelector.qml b/sources/qml/AWTagSelector.qml index 52b65717..301cf283 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 568391b1..61d7c9e5 100644 --- a/sources/qml/AWTextEditor.qml +++ b/sources/qml/AWTextEditor.qml @@ -15,20 +15,19 @@ * 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 { +ScrollView { width: parent.width height: parent.height * 4 / 5 property var backend property alias text: textArea.text - QtControls.TextArea { + TextArea { id: textArea - anchors.fill: parent textFormat: TextEdit.PlainText Column { @@ -50,9 +49,9 @@ Item { } onTextChanged: { - var currentTag = getLastTag() + let currentTag = getLastTag() // exit if there are spaces or empty - if ((currentTag.indexOf(" ") != -1) || (currentTag.length == 0)) { + if ((currentTag.indexOf(" ") !== -1) || (currentTag.length === 0)) { tooltip.visible = false return } @@ -63,7 +62,7 @@ Item { // show tooltip if found more than 1 or current text does not match // tag found tooltip.visible = ((tags.count > 1) - || ((tags.count == 1) && (tags.model[0] != tooltip.substring))) + || ((tags.count === 1) && (tags.model[0] !== tooltip.substring))) } } @@ -78,10 +77,10 @@ Item { function getLastTag() { // get substring to analyze - var substring = textArea.getText(0, textArea.cursorPosition) + const substring = textArea.getText(0, textArea.cursorPosition) // find last position of index in the given substring - var signIndex = substring.lastIndexOf('$') + 1 - if ((signIndex == 0) || (signIndex == textArea.cursorPosition)) + const signIndex = substring.lastIndexOf("$") + 1 + if ((signIndex === 0) || (signIndex === textArea.cursorPosition)) return "" // get current tag text return substring.substr(signIndex) diff --git a/sources/qml/AboutTab.qml b/sources/qml/AboutTab.qml index 0f6eae00..6a894fb1 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 50b80d71..cb218de3 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 @@ -34,89 +34,100 @@ QtDialogs.Dialog { width: 640 height: 480 - property bool debug: awActions.isDebugEnabled() - 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 - QtControls.GroupBox { - QtLayouts.Layout.fillWidth: true + ColumnLayout { + 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: @@ -127,16 +138,11 @@ QtDialogs.Dialog { } onAccepted: { - if (debug) console.debug() - - var text = awBugReporter.generateText(description.text, reproduce.text, - expected.text, logBody.text) + const text = awBugReporter.generateText(description.text, reproduce.text, expected.text, logBody.text) awBugReporter.sendBugReport(title.text, text) } onReset: { - if (debug) console.debug() - title.text = "" description.text = "" reproduce.text = "" @@ -144,8 +150,6 @@ QtDialogs.Dialog { } Component.onCompleted: { - if (debug) console.debug() - awBugReporter.doConnect() } } diff --git a/sources/qml/ButtonSelector.qml b/sources/qml/ButtonSelector.qml index 854bda5c..9fa33d8c 100644 --- a/sources/qml/ButtonSelector.qml +++ b/sources/qml/ButtonSelector.qml @@ -15,28 +15,29 @@ * 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 1834fefc..29a6c959 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 e9b265cb..a7e23c78 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,12 @@ 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 1ecaac09..6d7ab84b 100644 --- a/sources/qml/ColorSelector.qml +++ b/sources/qml/ColorSelector.qml @@ -15,32 +15,23 @@ * 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 - - property alias text: selector.text - property alias value: selector.value - - ButtonSelector { - id: selector - style: QtStyles.ButtonStyle { - background: Rectangle { - color: value - } - } - onButtonActivated: colorDialog.visible = true +ButtonSelector { + background: Rectangle { + implicitWidth: 100 + implicitHeight: 25 + color: value } - QtDialogs.ColorDialog { + onButtonActivated: colorDialog.visible = true + + 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 19929d40..849a6d10 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,22 +32,24 @@ 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' - onCurrentIndexChanged: valueEdited(comboBox.model[comboBox.currentIndex]['name']) + textRole: "label" + onCurrentIndexChanged: valueEdited(comboBox.model[comboBox.currentIndex]["name"]) + Component.onCompleted: { - var total = comboBox.model.length - for (var i = 0; i < total; i++) { - if (comboBox.model[i]["name"] == value) + const total = comboBox.model.length + for (let i = 0; i < total; i++) { + if (comboBox.model[i]["name"] === value) comboBox.currentIndex = i } } diff --git a/sources/qml/ExportDialog.qml b/sources/qml/ExportDialog.qml index db136d5f..eba4d7d9 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,18 +28,18 @@ 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( + const status = awConfig.exportConfiguration( configuration, fileDialog.fileUrl.toString().replace("file://", "")) if (status) { @@ -52,7 +52,6 @@ Item { messageDialog.open() } } - function open() { return fileDialog.open() } diff --git a/sources/qml/FontSelector.qml b/sources/qml/FontSelector.qml index aed47319..cbf656e4 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 32885cf8..5526c334 100644 --- a/sources/qml/General.qml +++ b/sources/qml/General.qml @@ -16,7 +16,10 @@ ***************************************************************************/ pragma Singleton -import QtQuick 2.0 +import QtQuick 2.15 + +// required by i18n functions +import org.kde.plasma.core as PlasmaCore QtObject { diff --git a/sources/qml/HtmlDefaultFunctionsBar.qml b/sources/qml/HtmlDefaultFunctionsBar.qml index 97cee45c..80c57c26 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 { @@ -30,6 +30,7 @@ Row { text: i18n("Bgcolor") textField: textArea } + HtmlEditorFont { width: parent.width * 3 / 15 textField: textArea @@ -41,35 +42,39 @@ 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 +83,31 @@ 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 b5c17ed9..e319ba84 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 @@ -31,7 +31,7 @@ QtControls.Button { function updateText() { // get selected text - var selected = textField.selectedText() + const selected = textField.selectedText() // remove it from widget textField.removeSelection() // insert edited text diff --git a/sources/qml/HtmlEditorColor.qml b/sources/qml/HtmlEditorColor.qml index 45365dca..71100c8a 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 590a1724..dbfcd434 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 @@ -36,13 +36,13 @@ HtmlEditorButton { clickedEvent: function() { // get new font - var defaultFont = { + const defaultFont = { "color": defaultFontColor, "family": defaultFontFamily, "size": defaultFontSize } // we are using custom selector as soon as we need to select color as well - var font = awActions.getFont(defaultFont) + const font = awActions.getFont(defaultFont) // check status if (!font.applied) diff --git a/sources/qml/ImportDialog.qml b/sources/qml/ImportDialog.qml index 0ebdaadc..3f61934f 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,42 +29,41 @@ 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") } } onAccepted: { - var importConfig = awConfig.importConfiguration( + const importConfig = awConfig.importConfiguration( fileDialog.fileUrl.toString().replace("file://", ""), importPlasmoid.checked, importExtensions.checked, importAdds.checked) configurationReceived(importConfig) } } - function open() { return fileDialog.open() } diff --git a/sources/qml/IntegerSelector.qml b/sources/qml/IntegerSelector.qml index dea94438..b27c6902 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,23 @@ 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 ab21728a..37988046 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,15 @@ 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 ea537a87..9930b153 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 diff --git a/sources/test/CMakeLists.txt b/sources/test/CMakeLists.txt index d0318c2e..3903a3ab 100644 --- a/sources/test/CMakeLists.txt +++ b/sources/test/CMakeLists.txt @@ -13,23 +13,23 @@ 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} ${Qt6Test_LIBRARIES} ${Kf6_LIBRARIES}) set(LIBRARY_TEST_SET ${SUBPROJECT}-awtest ${PROJECT_LIBRARY} ${PROJECT_MONITORSOURCES} - ${Qt_LIBRARIES} ${Kf5_LIBRARIES} ${Qt5Test_LIBRARIES}) + ${Qt_LIBRARIES} ${Kf6_LIBRARIES} ${Qt6Test_LIBRARIES}) # modules set(TEST_MODULES abstractextitem extquotes extscript extupgrade extweather abstractformatter datetimeformatter floatformatter jsonformatter listformatter noformatter scriptformatter stringformatter extitemaggregator - batterysource desktopsource gpuloadsource gputempsource hddtempsource networksource playersource processessource + batterysource desktopsource networksource playersource processessource awbugreporter awconfighelper awkeycache awkeys awpatternfunctions awtelemetryhandler awupdatehelper dpplugin) foreach (TEST_MODULE ${TEST_MODULES}) diff --git a/sources/test/testawpatternfunctions.cpp b/sources/test/testawpatternfunctions.cpp index 80fc975c..bb740380 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); } diff --git a/sources/test/testdatetimeformatter.cpp b/sources/test/testdatetimeformatter.cpp index 501d6a7e..f102793b 100644 --- a/sources/test/testdatetimeformatter.cpp +++ b/sources/test/testdatetimeformatter.cpp @@ -49,15 +49,15 @@ void TestAWDateTimeFormatter::test_values() void TestAWDateTimeFormatter::test_conversion() { - QDateTime now = QDateTime::currentDateTime(); - QCOMPARE(formatter->convert(now), now.toString(format)); + auto now = QDateTime::currentDateTime(); + QCOMPARE(formatter->convert(now), QLocale::system().toString(now, format)); } void TestAWDateTimeFormatter::test_copy() { formatter->setTranslateString(false); - AWDateTimeFormatter *newFormatter = formatter->copy("/dev/null", 1); + auto *newFormatter = formatter->copy("/dev/null", 1); QCOMPARE(newFormatter->format(), formatter->format()); QCOMPARE(newFormatter->translateString(), formatter->translateString()); diff --git a/sources/test/testgpuloadsource.cpp b/sources/test/testgpuloadsource.cpp deleted file mode 100644 index f6d64611..00000000 --- a/sources/test/testgpuloadsource.cpp +++ /dev/null @@ -1,66 +0,0 @@ -/*************************************************************************** - * 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 "testgpuloadsource.h" - -#include - -#include "awtestlibrary.h" -#include "gpuloadsource.h" - - -void TestGPULoadSource::initTestCase() -{ - AWTestLibrary::init(); - device = GPULoadSource::autoGpu(); - QVERIFY(!device.isEmpty()); - - source = new GPULoadSource(this, QStringList() << device); -} - - -void TestGPULoadSource::cleanupTestCase() -{ - delete source; -} - - -void TestGPULoadSource::test_sources() -{ - QCOMPARE(source->sources(), QStringList() << src); -} - - -void TestGPULoadSource::test_gpuload() -{ - if (device == "disable") - QSKIP("Not supported device, test will be skipped"); - - QSignalSpy spy(source, SIGNAL(dataReceived(const QVariantHash &))); - float firstValue = source->data(src).toFloat(); - - QVERIFY(spy.wait(5000)); - QVariantHash arguments = spy.takeFirst().at(0).toHash(); - float secondValue = arguments[src].toFloat(); - - QCOMPARE(firstValue, 0.0f); - QVERIFY((secondValue >= load.first) && (secondValue <= load.second)); -} - - -QTEST_MAIN(TestGPULoadSource); diff --git a/sources/test/testgputempsource.cpp b/sources/test/testgputempsource.cpp deleted file mode 100644 index efad21d1..00000000 --- a/sources/test/testgputempsource.cpp +++ /dev/null @@ -1,67 +0,0 @@ -/*************************************************************************** - * 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 "testgputempsource.h" - -#include - -#include "awtestlibrary.h" -#include "gpuloadsource.h" -#include "gputempsource.h" - - -void TestGPUTemperatureSource::initTestCase() -{ - AWTestLibrary::init(); - device = GPULoadSource::autoGpu(); - QVERIFY(!device.isEmpty()); - - source = new GPUTemperatureSource(this, QStringList() << device); -} - - -void TestGPUTemperatureSource::cleanupTestCase() -{ - delete source; -} - - -void TestGPUTemperatureSource::test_sources() -{ - QCOMPARE(source->sources(), QStringList() << src); -} - - -void TestGPUTemperatureSource::test_gputemp() -{ - if (device == "disable") - QSKIP("Not supported device, test will be skipped"); - - QSignalSpy spy(source, SIGNAL(dataReceived(const QVariantHash &))); - float firstValue = source->data(src).toFloat(); - - QVERIFY(spy.wait(5000)); - QVariantHash arguments = spy.takeFirst().at(0).toHash(); - float secondValue = arguments[src].toFloat(); - - QCOMPARE(firstValue, 0.0f); - QVERIFY((secondValue >= temp.first) && (secondValue <= temp.second)); -} - - -QTEST_MAIN(TestGPUTemperatureSource); diff --git a/sources/test/testhddtempsource.cpp b/sources/test/testhddtempsource.cpp deleted file mode 100644 index 5e675bba..00000000 --- a/sources/test/testhddtempsource.cpp +++ /dev/null @@ -1,96 +0,0 @@ -/*************************************************************************** - * 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 "testhddtempsource.h" - -#include - -#include "awtestlibrary.h" -#include "hddtempsource.h" - - -void TestHDDTemperatureSource::initTestCase() -{ - AWTestLibrary::init(); - devices = HDDTemperatureSource::allHdd(); - - hddtempSource = new HDDTemperatureSource(this, QStringList() << devices.join(',') << hddtempCmd); - smartctlSource = new HDDTemperatureSource(this, QStringList() << devices.join(',') << smartctlCmd); -} - - -void TestHDDTemperatureSource::cleanupTestCase() -{ - delete hddtempSource; - delete smartctlSource; -} - - -void TestHDDTemperatureSource::test_sources() -{ - if (devices.isEmpty()) - QSKIP("No hdd devices found, test will be skipped"); - - std::for_each(devices.begin(), devices.end(), [](QString &device) { device.prepend("hdd/temperature"); }); - - QCOMPARE(hddtempSource->sources(), devices); - QCOMPARE(smartctlSource->sources(), devices); -} - - -void TestHDDTemperatureSource::test_hddtemp() -{ - if (devices.isEmpty()) - QSKIP("No hdd devices found, test will be skipped"); - - std::for_each(devices.begin(), devices.end(), [this](QString device) { - QSignalSpy spy(hddtempSource, SIGNAL(dataReceived(const QVariantHash &))); - float firstValue = hddtempSource->data(device).toFloat(); - - QVERIFY(spy.wait(5000)); - QVariantHash arguments = spy.takeFirst().at(0).toHash(); - device.remove("hdd/temperature"); - float secondValue = arguments[device].toFloat(); - - QCOMPARE(firstValue, 0.0f); - QVERIFY((secondValue >= temp.first) && (secondValue <= temp.second)); - }); -} - - -void TestHDDTemperatureSource::test_smartctl() -{ - if (devices.isEmpty()) - QSKIP("No hdd devices found, test will be skipped"); - - std::for_each(devices.begin(), devices.end(), [this](QString &device) { - QSignalSpy spy(smartctlSource, SIGNAL(dataReceived(const QVariantHash &))); - float firstValue = smartctlSource->data(device).toFloat(); - - QVERIFY(spy.wait(5000)); - QVariantHash arguments = spy.takeFirst().at(0).toHash(); - device.remove("hdd/temperature"); - float secondValue = arguments[device].toFloat(); - - QCOMPARE(firstValue, 0.0f); - QVERIFY((secondValue >= temp.first) && (secondValue <= temp.second)); - }); -} - - -QTEST_MAIN(TestHDDTemperatureSource); diff --git a/sources/test/testhddtempsource.h b/sources/test/testhddtempsource.h deleted file mode 100644 index f687c0a6..00000000 --- a/sources/test/testhddtempsource.h +++ /dev/null @@ -1,51 +0,0 @@ -/*************************************************************************** - * 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 TESTHDDTEMPSOURCE_H -#define TESTHDDTEMPSOURCE_H - -#include -#include - - -class HDDTemperatureSource; - -class TestHDDTemperatureSource : public QObject -{ - Q_OBJECT - -private slots: - // initialization - void initTestCase(); - void cleanupTestCase(); - // test - void test_sources(); - void test_hddtemp(); - void test_smartctl(); - -private: - HDDTemperatureSource *hddtempSource = nullptr; - HDDTemperatureSource *smartctlSource = nullptr; - QStringList devices; - QString hddtempCmd = "sudo hddtemp"; - QString smartctlCmd = "sudo smartctl -a"; - QPair temp = QPair(0.0f, 120.0f); -}; - - -#endif /* TESTHDDTEMPSOURCE_H */ diff --git a/sources/test/testnetworksource.cpp b/sources/test/testnetworksource.cpp index ee3a7db5..db41e246 100644 --- a/sources/test/testnetworksource.cpp +++ b/sources/test/testnetworksource.cpp @@ -39,13 +39,13 @@ void TestNetworkSource::cleanupTestCase() void TestNetworkSource::test_sources() { - QCOMPARE(source->sources(), QStringList() << src << "network/current/ssid"); + QCOMPARE(source->sources(), QStringList({"device", "ssid"})); } void TestNetworkSource::test_values() { - QVERIFY(source->data(src).toString().count() > 0); + QVERIFY(source->data("device").toString().length() > 0); } diff --git a/sources/test/testnetworksource.h b/sources/test/testnetworksource.h index c467e3fb..6f86fe14 100644 --- a/sources/test/testnetworksource.h +++ b/sources/test/testnetworksource.h @@ -38,7 +38,6 @@ private slots: private: NetworkSource *source = nullptr; - QString src = "network/current/name"; }; diff --git a/sources/test/testplayersource.cpp b/sources/test/testplayersource.cpp index ab7f26b4..a132f217 100644 --- a/sources/test/testplayersource.cpp +++ b/sources/test/testplayersource.cpp @@ -43,23 +43,23 @@ void TestPlayerSource::test_buildString() { QString randomString = AWTestLibrary::randomString(1, 40); QString str = PlayerSource::buildString("", randomString, 20); - QCOMPARE(str.count(), 20); + QCOMPARE(str.length(), 20); str = PlayerSource::buildString(str, randomString, 20); - QCOMPARE(str.count(), 20); + QCOMPARE(str.length(), 20); str = PlayerSource::buildString("", AWTestLibrary::randomString(1, 10), 20); - QCOMPARE(str.count(), 20); + QCOMPARE(str.length(), 20); } void TestPlayerSource::test_stripString() { QString str = PlayerSource::buildString("", AWTestLibrary::randomString(1, 40), 20); - QCOMPARE(str.count(), 20); + QCOMPARE(str.length(), 20); str = PlayerSource::buildString("", AWTestLibrary::randomString(1, 10), 20); - QCOMPARE(str.count(), 20); + QCOMPARE(str.length(), 20); } @@ -85,7 +85,7 @@ void TestPlayerSource::test_mpd() // init spy QSignalSpy spy(source, SIGNAL(dataReceived(const QVariantHash &))); - QVariant firstValue = source->data("player/title"); + QVariant firstValue = source->data("title"); if (!source->isMpdSocketConnected()) QSKIP("No mpd found"); @@ -95,10 +95,10 @@ void TestPlayerSource::test_mpd() QVariantHash secondValue = arguments.at(0).toHash(); // actually nothing to test here just print warning if no information found - if (secondValue["player/title"].toString() == "unknown") + if (secondValue["title"].toString() == "unknown") QSKIP("No mpd found"); - QVERIFY(secondValue["player/progress"].toInt() < secondValue["player/duration"].toInt()); + QVERIFY(secondValue["progress"].toInt() < secondValue["duration"].toInt()); } @@ -109,9 +109,9 @@ void TestPlayerSource::test_mpris() PlayerSource *source = new PlayerSource(this, args); _test_sources(source); - QString value = source->data("player/title").toString(); - int progress = source->data("player/progress").toInt(); - int duration = source->data("player/duration").toInt(); + QString value = source->data("title").toString(); + int progress = source->data("progress").toInt(); + int duration = source->data("duration").toInt(); // actually nothing to test here just print warning if no information found if (value == "unknown") diff --git a/sources/test/testprocessessource.cpp b/sources/test/testprocessessource.cpp index 1fdce78b..6272ce2c 100644 --- a/sources/test/testprocessessource.cpp +++ b/sources/test/testprocessessource.cpp @@ -45,9 +45,9 @@ void TestProcessesSource::test_sources() void TestProcessesSource::test_values() { - QVERIFY(source->data("ps/running/count").toInt() > 0); - QVERIFY(source->data("ps/running/list").toStringList().count() > 0); - QVERIFY(source->data("ps/total/count").toInt() > 0); + QVERIFY(source->data("running").toInt() > 0); + QVERIFY(source->data("list").toStringList().count() > 0); + QVERIFY(source->data("count").toInt() > 0); } diff --git a/sources/translations/CMakeLists.txt b/sources/translations/CMakeLists.txt index 9b375e58..47c37ea1 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}) diff --git a/sources/version.h.in b/sources/version.h.in index 1c1a18be..74166791 100644 --- a/sources/version.h.in +++ b/sources/version.h.in @@ -54,7 +54,7 @@ const char STATIC_FUNCTIONS[] = "{{\n\n}},template{{\n\n}},aw_all<>{{}},aw_" "count<>{{}},aw_keys<>{{}},aw_macro<>{{}},aw_" "names<>{{}}"; const char STATIC_KEYS[] = "time,isotime,shorttime,longtime,tstime,ctime,uptime,cuptime,cpucl,cpu," - "gputemp,gpu,memmb,memgb,memfreemb,memfreegb,memtotmb,memtotgb,memusedmb," + "gpu,memmb,memgb,memfreemb,memfreegb,memtotmb,memtotgb,memusedmb," "memusedgb,mem,swapmb,swapgb,swapfreemb,swapfreegb,swaptotmb,swaptotgb," "swap,downunits,upunits,downkb,downtotkb,downtot,down,uptotkb,uptot,upkb," "up,netdev,ac,bat,batleft,batnow,batrate,battotal,album,artist,duration,"