mirror of
				https://github.com/arcan1s/awesome-widgets.git
				synced 2025-10-27 11:53:40 +00:00 
			
		
		
		
	Compare commits
	
		
			9 Commits
		
	
	
		
			3.5.1
			...
			f1a01fbb32
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| f1a01fbb32 | |||
| 960640f5bc | |||
| ac52888b0d | |||
| a35b57e5d2 | |||
| 0bcceefd47 | |||
| f27050afbc | |||
| d71f85eaad | |||
| b0df3535a5 | |||
| 4d01b87088 | 
							
								
								
									
										4
									
								
								.github/workflows/build.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								.github/workflows/build.yml
									
									
									
									
										vendored
									
									
								
							| @ -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 | ||||
|  | ||||
							
								
								
									
										24
									
								
								.github/workflows/release.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										24
									
								
								.github/workflows/release.yml
									
									
									
									
										vendored
									
									
								
							| @ -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 }} | ||||
|  | ||||
| @ -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 | ||||
|  | ||||
| @ -1,41 +1,30 @@ | ||||
| # Maintainer: Evgeniy Alekseev <arcanis at archlinux dot org> | ||||
|  | ||||
| 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 \ | ||||
|     cmake -B build -S "${_pkgname}" \ | ||||
|           -DCMAKE_BUILD_TYPE=Optimization \ | ||||
|         -DCMAKE_INSTALL_PREFIX=/usr \ | ||||
|           -DBUILD_FUTURE=ON \ | ||||
|         "../${_pkgname}" | ||||
|   make | ||||
|           -DBUILD_TESTING=OFF | ||||
|     cmake --build build | ||||
| } | ||||
|  | ||||
| package() { | ||||
|   cd "${srcdir}/build" | ||||
|   make DESTDIR="${pkgdir}" install | ||||
|       DESTDIR="$pkgdir" cmake --install build | ||||
| } | ||||
|  | ||||
| sha256sums=('b2a7b07a1df6f710f4e0d6e5898933f4ddb131818b922dc4b8e48afe3e98a664') | ||||
|  | ||||
							
								
								
									
										81
									
								
								sources/3rdparty/fontdialog/fontdialog.cpp
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										81
									
								
								sources/3rdparty/fontdialog/fontdialog.cpp
									
									
									
									
										vendored
									
									
								
							| @ -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); | ||||
| @ -133,7 +58,7 @@ CFontDialog::CFontDialog(QWidget *parent, bool needWeight, bool needItalic) | ||||
|     setLayout(mainGrid); | ||||
|  | ||||
|     colorBox = new QComboBox(this); | ||||
|     connect(colorBox, SIGNAL(currentIndexChanged(QString)), this, SLOT(updateColor(QString))); | ||||
|     connect(colorBox, &QComboBox::currentTextChanged, this, &CFontDialog::updateColor); | ||||
|     QStringList colorNames = QColor::colorNames(); | ||||
|     int index = 0; | ||||
|     for (int i=0; i<colorNames.count(); i++) { | ||||
| @ -156,8 +81,8 @@ CFontDialog::CFontDialog(QWidget *parent, bool needWeight, bool needItalic) | ||||
|  | ||||
|     buttons = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, | ||||
|                                    Qt::Horizontal, this); | ||||
|     QObject::connect(buttons, SIGNAL(accepted()), this, SLOT(accept())); | ||||
|     QObject::connect(buttons, SIGNAL(rejected()), this, SLOT(reject())); | ||||
|     QObject::connect(buttons, &QDialogButtonBox::accepted, this, &CFontDialog::accept); | ||||
|     QObject::connect(buttons, &QDialogButtonBox::rejected, this, &CFontDialog::reject); | ||||
|     mainGrid->addWidget(buttons, 1, 0, 1, 5); | ||||
|  | ||||
|     italicBox->setHidden(!needItalic); | ||||
|  | ||||
							
								
								
									
										11
									
								
								sources/3rdparty/fontdialog/fontdialog.h
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										11
									
								
								sources/3rdparty/fontdialog/fontdialog.h
									
									
									
									
										vendored
									
									
								
							| @ -15,8 +15,7 @@ | ||||
|  *  License along with this library.                                       * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
| #ifndef FONTDIALOG_H | ||||
| #define FONTDIALOG_H | ||||
| #pragma once | ||||
|  | ||||
| #include <QComboBox> | ||||
| #include <QDialog> | ||||
| @ -34,11 +33,6 @@ public: | ||||
|     // color properties | ||||
|     QColor color(); | ||||
|     void setCurrentColor(const QColor color); | ||||
|     // html weight properties | ||||
|     static int html2QFont(const int htmlWeight); | ||||
|     static int qFont2html(const int weight); | ||||
|     int htmlWeight(); | ||||
|     void setHtmlWeight(const int htmlWeight); | ||||
|     // conversion to QFont | ||||
|     static CFont fromQFont(const QFont font, | ||||
|                            const QColor color = QColor(QString("#000000"))); | ||||
| @ -77,6 +71,3 @@ private: | ||||
|     QSpinBox *sizeBox; | ||||
|     QSpinBox *weightBox; | ||||
| }; | ||||
|  | ||||
|  | ||||
| #endif /* FONTDIALOG_H */ | ||||
|  | ||||
| @ -12,7 +12,7 @@ QReplyTimeout::QReplyTimeout(QNetworkReply *reply, const int timeout) | ||||
|  | ||||
| void QReplyTimeout::timeout() | ||||
| { | ||||
|     auto *reply = dynamic_cast<QNetworkReply *>(parent()); | ||||
|     auto reply = dynamic_cast<QNetworkReply *>(parent()); | ||||
|     if (reply->isRunning()) | ||||
|         reply->close(); | ||||
| } | ||||
|  | ||||
| @ -9,14 +9,17 @@ endif () | ||||
| if (POLICY CMP0071) | ||||
|     cmake_policy(SET CMP0071 NEW) | ||||
| endif () | ||||
| if (POLICY CMP0160) | ||||
|     cmake_policy(SET CMP0160 OLD) | ||||
| endif () | ||||
|  | ||||
| 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 "") | ||||
|  | ||||
| @ -15,9 +15,7 @@ | ||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
|  | ||||
| #ifndef AWDEBUG_H | ||||
| #define AWDEBUG_H | ||||
| #pragma once | ||||
|  | ||||
| #include <QLoggingCategory> | ||||
|  | ||||
| @ -42,6 +40,3 @@ Q_DECLARE_LOGGING_CATEGORY(LOG_DP) | ||||
| Q_DECLARE_LOGGING_CATEGORY(LOG_ESM) | ||||
| Q_DECLARE_LOGGING_CATEGORY(LOG_ESS) | ||||
| Q_DECLARE_LOGGING_CATEGORY(LOG_LIB) | ||||
|  | ||||
|  | ||||
| #endif /* AWDEBUG_H */ | ||||
|  | ||||
| @ -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) | ||||
|  | ||||
| @ -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 | ||||
							
								
								
									
										26
									
								
								sources/awesome-widget/metadata.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								sources/awesome-widget/metadata.json
									
									
									
									
									
										Normal file
									
								
							| @ -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" | ||||
| } | ||||
| @ -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 | ||||
|  | ||||
|  | ||||
| @ -7,150 +7,150 @@ | ||||
|  | ||||
|     <group name="Widget"> | ||||
|         <!--   widget --> | ||||
|         <entry name="text" type="string"> | ||||
|         <entry name="text" type="String"> | ||||
|             <default>[cpu: $cpu%] [mem: $mem%] [swap: $swap%] [$netdev: $down/$upKB/s]</default> | ||||
|         </entry> | ||||
|     </group> | ||||
|  | ||||
|     <group name="Advanced"> | ||||
|         <!--   advanced --> | ||||
|         <entry name="background" type="bool"> | ||||
|         <entry name="background" type="Bool"> | ||||
|             <default>true</default> | ||||
|         </entry> | ||||
|         <entry name="translateStrings" type="bool"> | ||||
|         <entry name="translateStrings" type="Bool"> | ||||
|             <default>true</default> | ||||
|         </entry> | ||||
|         <entry name="wrapNewLines" type="bool"> | ||||
|         <entry name="wrapNewLines" type="Bool"> | ||||
|             <default>false</default> | ||||
|         </entry> | ||||
|         <entry name="wrapText" type="bool"> | ||||
|         <entry name="wrapText" type="Bool"> | ||||
|             <default>false</default> | ||||
|         </entry> | ||||
|         <entry name="notify" type="bool"> | ||||
|         <entry name="notify" type="Bool"> | ||||
|             <default>true</default> | ||||
|         </entry> | ||||
|         <entry name="checkUpdates" type="bool"> | ||||
|         <entry name="checkUpdates" type="Bool"> | ||||
|             <default>true</default> | ||||
|         </entry> | ||||
|         <entry name="optimize" type="bool"> | ||||
|         <entry name="optimize" type="Bool"> | ||||
|             <default>true</default> | ||||
|         </entry> | ||||
|         <entry name="height" type="int"> | ||||
|         <entry name="height" type="Int"> | ||||
|             <default>0</default> | ||||
|         </entry> | ||||
|         <entry name="width" type="int"> | ||||
|         <entry name="width" type="Int"> | ||||
|             <default>0</default> | ||||
|         </entry> | ||||
|         <entry name="interval" type="int"> | ||||
|         <entry name="interval" type="Int"> | ||||
|             <default>1000</default> | ||||
|         </entry> | ||||
|         <entry name="queueLimit" type="int"> | ||||
|         <entry name="queueLimit" type="Int"> | ||||
|             <default>0</default> | ||||
|         </entry> | ||||
|         <entry name="tempUnits" type="string"> | ||||
|         <entry name="tempUnits" type="String"> | ||||
|             <default>Celsius</default> | ||||
|         </entry> | ||||
|         <entry name="customTime" type="string"> | ||||
|         <entry name="customTime" type="String"> | ||||
|             <default>$hh:$mm</default> | ||||
|         </entry> | ||||
|         <entry name="customUptime" type="string"> | ||||
|         <entry name="customUptime" type="String"> | ||||
|             <default>$dd,$hh,$mm</default> | ||||
|         </entry> | ||||
|         <entry name="acOnline" type="string"> | ||||
|         <entry name="acOnline" type="String"> | ||||
|             <default>(*)</default> | ||||
|         </entry> | ||||
|         <entry name="acOffline" type="string"> | ||||
|         <entry name="acOffline" type="String"> | ||||
|             <default>( )</default> | ||||
|         </entry> | ||||
|         <entry name="telemetryCount" type="int"> | ||||
|         <entry name="telemetryCount" type="Int"> | ||||
|             <default>100</default> | ||||
|         </entry> | ||||
|         <entry name="telemetryRemote" type="bool"> | ||||
|         <entry name="telemetryRemote" type="Bool"> | ||||
|             <default>false</default> | ||||
|         </entry> | ||||
|         <entry name="telemetryId" type="string"> | ||||
|         <entry name="telemetryId" type="String"> | ||||
|             <default></default> | ||||
|         </entry> | ||||
|     </group> | ||||
|  | ||||
|     <group name="Tooltip"> | ||||
|         <entry name="tooltipNumber" type="int"> | ||||
|         <entry name="tooltipNumber" type="Int"> | ||||
|             <default>100</default> | ||||
|         </entry> | ||||
|         <entry name="useTooltipBackground" type="bool"> | ||||
|         <entry name="useTooltipBackground" type="Bool"> | ||||
|             <default>true</default> | ||||
|         </entry> | ||||
|         <entry name="tooltipBackground" type="string"> | ||||
|         <entry name="tooltipBackground" type="String"> | ||||
|             <default>#ffffff</default> | ||||
|         </entry> | ||||
|         <entry name="cpuTooltip" type="bool"> | ||||
|         <entry name="cpuTooltip" type="Bool"> | ||||
|             <default>true</default> | ||||
|         </entry> | ||||
|         <entry name="cpuTooltipColor" type="string"> | ||||
|         <entry name="cpuTooltipColor" type="String"> | ||||
|             <default>#ff0000</default> | ||||
|         </entry> | ||||
|         <entry name="cpuclTooltip" type="bool"> | ||||
|         <entry name="cpuclTooltip" type="Bool"> | ||||
|             <default>true</default> | ||||
|         </entry> | ||||
|         <entry name="cpuclTooltipColor" type="string"> | ||||
|         <entry name="cpuclTooltipColor" type="String"> | ||||
|             <default>#00ff00</default> | ||||
|         </entry> | ||||
|         <entry name="memTooltip" type="bool"> | ||||
|         <entry name="memTooltip" type="Bool"> | ||||
|             <default>true</default> | ||||
|         </entry> | ||||
|         <entry name="memTooltipColor" type="string"> | ||||
|         <entry name="memTooltipColor" type="String"> | ||||
|             <default>#0000ff</default> | ||||
|         </entry> | ||||
|         <entry name="swapTooltip" type="bool"> | ||||
|         <entry name="swapTooltip" type="Bool"> | ||||
|             <default>true</default> | ||||
|         </entry> | ||||
|         <entry name="swapTooltipColor" type="string"> | ||||
|         <entry name="swapTooltipColor" type="String"> | ||||
|             <default>#ffff00</default> | ||||
|         </entry> | ||||
|         <entry name="downkbTooltip" type="bool"> | ||||
|         <entry name="downkbTooltip" type="Bool"> | ||||
|             <default>true</default> | ||||
|         </entry> | ||||
|         <entry name="downkbTooltipColor" type="string"> | ||||
|         <entry name="downkbTooltipColor" type="String"> | ||||
|             <default>#00ffff</default> | ||||
|         </entry> | ||||
|         <entry name="upkbTooltipColor" type="string"> | ||||
|         <entry name="upkbTooltipColor" type="String"> | ||||
|             <default>#ff00ff</default> | ||||
|         </entry> | ||||
|         <entry name="batTooltip" type="bool"> | ||||
|         <entry name="batTooltip" type="Bool"> | ||||
|             <default>true</default> | ||||
|         </entry> | ||||
|         <entry name="batTooltipColor" type="string"> | ||||
|         <entry name="batTooltipColor" type="String"> | ||||
|             <default>#008800</default> | ||||
|         </entry> | ||||
|         <entry name="batInTooltipColor" type="string"> | ||||
|         <entry name="batInTooltipColor" type="String"> | ||||
|             <default>#880000</default> | ||||
|         </entry> | ||||
|     </group> | ||||
|  | ||||
|     <group name="Appearance"> | ||||
|         <!--   appearance --> | ||||
|         <entry name="textAlign" type="string"> | ||||
|         <entry name="textAlign" type="String"> | ||||
|             <default>center</default> | ||||
|         </entry> | ||||
|         <entry name="fontFamily" type="string"> | ||||
|         <entry name="fontFamily" type="String"> | ||||
|             <default>Terminus</default> | ||||
|         </entry> | ||||
|         <entry name="fontSize" type="int"> | ||||
|         <entry name="fontSize" type="Int"> | ||||
|             <default>12</default> | ||||
|         </entry> | ||||
|         <entry name="fontColor" type="string"> | ||||
|         <entry name="fontColor" type="String"> | ||||
|             <default>#000000</default> | ||||
|         </entry> | ||||
|         <entry name="fontWeight" type="string"> | ||||
|         <entry name="fontWeight" type="String"> | ||||
|             <default>normal</default> | ||||
|         </entry> | ||||
|         <entry name="fontStyle" type="string"> | ||||
|         <entry name="fontStyle" type="String"> | ||||
|             <default>normal</default> | ||||
|         </entry> | ||||
|         <entry name="textStyle" type="string"> | ||||
|         <entry name="textStyle" type="String"> | ||||
|             <default>normal</default> | ||||
|         </entry> | ||||
|         <entry name="textStyleColor" type="string"> | ||||
|         <entry name="textStyleColor" type="String"> | ||||
|             <default>#000000</default> | ||||
|         </entry> | ||||
|     </group> | ||||
|  | ||||
| @ -15,28 +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 org.kde.plasma.awesomewidgets | ||||
| import org.kde.plasma.private.awesomewidget | ||||
|  | ||||
|  | ||||
| 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() | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -15,26 +15,22 @@ | ||||
|  *   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 | ||||
| import org.kde.plasma.awesomewidgets | ||||
| import org.kde.plasma.private.awesomewidget | ||||
|  | ||||
|  | ||||
| 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 +51,6 @@ Item { | ||||
|     property alias cfg_telemetryRemote: telemetryRemote.checked | ||||
|     property alias cfg_telemetryId: telemetryId.value | ||||
|  | ||||
|  | ||||
|     Column { | ||||
|         id: pageColumn | ||||
|         anchors.fill: parent | ||||
| @ -135,37 +130,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 +187,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 +209,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 +224,7 @@ Item { | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         QtControls.GroupBox { | ||||
|         GroupBox { | ||||
|             height: implicitHeight | ||||
|             width: parent.width | ||||
|             title: i18n("Telemetry") | ||||
| @ -234,10 +232,12 @@ Item { | ||||
|             Column { | ||||
|                 height: implicitHeight | ||||
|                 width: parent.width | ||||
|  | ||||
|                 CheckBoxSelector { | ||||
|                     id: telemetryRemote | ||||
|                     text: i18n("Enable remote telemetry") | ||||
|                 } | ||||
|  | ||||
|                 IntegerSelector { | ||||
|                     id: telemetryCount | ||||
|                     maximumValue: 10000 | ||||
| @ -246,6 +246,7 @@ Item { | ||||
|                     text: i18n("History count") | ||||
|                     value: plasmoid.configuration.telemetryCount | ||||
|                 } | ||||
|  | ||||
|                 LineSelector { | ||||
|                     id: telemetryId | ||||
|                     text: i18n("Telemetry ID") | ||||
| @ -254,9 +255,4 @@ Item { | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|  | ||||
|     Component.onCompleted: { | ||||
|         if (debug) console.debug() | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -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 "." | ||||
| import org.kde.plasma.awesomewidgets | ||||
| import org.kde.plasma.private.awesomewidget | ||||
|  | ||||
|  | ||||
| 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() | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -15,105 +15,47 @@ | ||||
|  *   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 | ||||
| import org.kde.plasma.awesomewidgets | ||||
| import org.kde.plasma.private.awesomewidget | ||||
|  | ||||
|  | ||||
| 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 +65,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 +93,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 +136,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 +145,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,19 +189,11 @@ Item { | ||||
|  | ||||
|  | ||||
|     Component.onCompleted: { | ||||
|         if (debug) console.debug() | ||||
|  | ||||
|         // init submodule | ||||
|         awKeys.updateCache() | ||||
|  | ||||
|         // update hdd model | ||||
|         hdd.model = awKeys.getHddDevices() | ||||
|         hdd.onCompleted | ||||
|     } | ||||
|  | ||||
|     Component.onDestruction: { | ||||
|         if (debug) console.debug() | ||||
|  | ||||
|         cfg_dataengine["MPRIS"] = mpris.editText | ||||
|         awConfig.writeDataEngineConfiguration(cfg_dataengine) | ||||
|     } | ||||
|  | ||||
| @ -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 "." | ||||
| import org.kde.plasma.awesomewidgets | ||||
| import org.kde.plasma.private.awesomewidget | ||||
|  | ||||
|  | ||||
| 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 += "<br>" | ||||
|             message += i18n("Value: %1", awKeys.valueByKey(tag)) | ||||
|             message += "<br>" | ||||
| @ -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") | ||||
|         // 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); | ||||
|         }); | ||||
|     } | ||||
|  | ||||
| @ -1,27 +0,0 @@ | ||||
| # Do not edit qmldir directly it will be overrided during compilation, | ||||
| # edit qml/qmldir.in file instead. | ||||
|  | ||||
|  | ||||
| # common QML constants | ||||
| singleton General 1.0 file:///usr/share/awesomewidgets/qml/General.qml | ||||
|  | ||||
| # custom QML UI classes | ||||
| AboutTab file:///usr/share/awesomewidgets/qml/AboutTab.qml | ||||
| AWExtensions file:///usr/share/awesomewidgets/qml/AWExtensions.qml | ||||
| AWInfoLabel file:///usr/share/awesomewidgets/qml/AWInfoLabel.qml | ||||
| AWTagSelector file:///usr/share/awesomewidgets/qml/AWTagSelector.qml | ||||
| AWTextEditor file:///usr/share/awesomewidgets/qml/AWTextEditor.qml | ||||
| BugReport file:///usr/share/awesomewidgets/qml/BugReport.qml | ||||
| ButtonSelector file:///usr/share/awesomewidgets/qml/ButtonSelector.qml | ||||
| CheckBoxSelector file:///usr/share/awesomewidgets/qml/CheckBoxSelector.qml | ||||
| ColorSelector file:///usr/share/awesomewidgets/qml/ColorSelector.qml | ||||
| ComboBoxSelector file:///usr/share/awesomewidgets/qml/ComboBoxSelector.qml | ||||
| ExportDialog file:///usr/share/awesomewidgets/qml/ExportDialog.qml | ||||
| FontSelector file:///usr/share/awesomewidgets/qml/FontSelector.qml | ||||
| HtmlDefaultFunctionsBar file:///usr/share/awesomewidgets/qml/HtmlDefaultFunctionsBar.qml | ||||
| HtmlEditorButton file:///usr/share/awesomewidgets/qml/HtmlEditorButton.qml | ||||
| HtmlEditorColor file:///usr/share/awesomewidgets/qml/HtmlEditorColor.qml | ||||
| HtmlEditorFont file:///usr/share/awesomewidgets/qml/HtmlEditorFont.qml | ||||
| ImportDialog file:///usr/share/awesomewidgets/qml/ImportDialog.qml | ||||
| IntegerSelector file:///usr/share/awesomewidgets/qml/IntegerSelector.qml | ||||
| LineSelector file:///usr/share/awesomewidgets/qml/LineSelector.qml | ||||
| @ -15,25 +15,16 @@ | ||||
|  *   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 | ||||
| import org.kde.plasma.awesomewidgets | ||||
| import org.kde.plasma.private.awesomewidget | ||||
|  | ||||
|  | ||||
| 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 +37,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 +65,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 +183,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 +211,4 @@ Item { | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|  | ||||
|     Component.onCompleted: { | ||||
|         if (debug) console.debug() | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -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 "." | ||||
| import org.kde.plasma.awesomewidgets | ||||
| import org.kde.plasma.private.awesomewidget | ||||
|  | ||||
|  | ||||
| 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 | ||||
|  | ||||
| @ -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 | ||||
							
								
								
									
										26
									
								
								sources/awesome-widget/package/metadata.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								sources/awesome-widget/package/metadata.json
									
									
									
									
									
										Normal file
									
								
							| @ -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" | ||||
| } | ||||
| @ -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}) | ||||
|  | ||||
| @ -37,13 +37,13 @@ AWAbstractPairConfig::AWAbstractPairConfig(QWidget *_parent, const bool _hasEdit | ||||
|  | ||||
|     ui->setupUi(this); | ||||
|  | ||||
|     connect(ui->buttonBox, SIGNAL(accepted()), this, SLOT(accept())); | ||||
|     connect(ui->buttonBox, SIGNAL(rejected()), this, SLOT(reject())); | ||||
|     connect(ui->buttonBox, &QDialogButtonBox::accepted, this, &AWAbstractPairConfig::accept); | ||||
|     connect(ui->buttonBox, &QDialogButtonBox::rejected, this, &AWAbstractPairConfig::reject); | ||||
|  | ||||
|     // edit feature | ||||
|     if (m_hasEdit) { | ||||
|         m_editButton = ui->buttonBox->addButton(i18n("Edit"), QDialogButtonBox::ActionRole); | ||||
|         connect(m_editButton, SIGNAL(clicked(bool)), this, SLOT(edit())); | ||||
|         connect(m_editButton, &QPushButton::clicked, [this]() { return edit(); }); | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -84,14 +84,14 @@ void AWAbstractPairConfig::edit() | ||||
|  | ||||
| void AWAbstractPairConfig::updateUi() | ||||
| { | ||||
|     QPair<QString, QString> current = dynamic_cast<AWAbstractSelector *>(sender())->current(); | ||||
|     int index = m_selectors.indexOf(dynamic_cast<AWAbstractSelector *>(sender())); | ||||
|     auto current = dynamic_cast<AWAbstractSelector *>(sender())->current(); | ||||
|     auto index = m_selectors.indexOf(dynamic_cast<AWAbstractSelector *>(sender())); | ||||
|  | ||||
|     if ((current.first.isEmpty()) && (current.second.isEmpty())) { | ||||
|         // remove current selector if it is empty and does not last | ||||
|         if (sender() == m_selectors.last()) | ||||
|             return; | ||||
|         AWAbstractSelector *selector = m_selectors.takeAt(index); | ||||
|         auto selector = m_selectors.takeAt(index); | ||||
|         ui->verticalLayout->removeWidget(selector); | ||||
|         selector->deleteLater(); | ||||
|     } else { | ||||
| @ -109,10 +109,10 @@ void AWAbstractPairConfig::addSelector(const QStringList &_keys, const QStringLi | ||||
| { | ||||
|     qCDebug(LOG_AW) << "Add selector with keys" << _keys << "values" << _values << "and current ones" << _current; | ||||
|  | ||||
|     auto *selector = new AWAbstractSelector(ui->scrollAreaWidgetContents, m_editable); | ||||
|     auto selector = new AWAbstractSelector(ui->scrollAreaWidgetContents, m_editable); | ||||
|     selector->init(_keys, _values, _current); | ||||
|     ui->verticalLayout->insertWidget(ui->verticalLayout->count() - 1, selector); | ||||
|     connect(selector, SIGNAL(selectionChanged()), this, SLOT(updateUi())); | ||||
|     connect(selector, &AWAbstractSelector::selectionChanged, this, &AWAbstractPairConfig::updateUi); | ||||
|     m_selectors.append(selector); | ||||
| } | ||||
|  | ||||
| @ -120,7 +120,7 @@ void AWAbstractPairConfig::addSelector(const QStringList &_keys, const QStringLi | ||||
| void AWAbstractPairConfig::clearSelectors() | ||||
| { | ||||
|     for (auto &selector : m_selectors) { | ||||
|         disconnect(selector, SIGNAL(selectionChanged()), this, SLOT(updateUi())); | ||||
|         disconnect(selector, &AWAbstractSelector::selectionChanged, this, &AWAbstractPairConfig::updateUi); | ||||
|         ui->verticalLayout->removeWidget(selector); | ||||
|         selector->deleteLater(); | ||||
|     } | ||||
| @ -164,7 +164,7 @@ QPair<QStringList, QStringList> AWAbstractPairConfig::initKeys() const | ||||
|     right.append(m_helper->rightKeys().isEmpty() ? m_keys : m_helper->rightKeys()); | ||||
|     right.sort(); | ||||
|  | ||||
|     return QPair<QStringList, QStringList>(left, right); | ||||
|     return {left, right}; | ||||
| } | ||||
|  | ||||
|  | ||||
| @ -175,7 +175,7 @@ void AWAbstractPairConfig::updateDialog() | ||||
|     auto keys = initKeys(); | ||||
|  | ||||
|     for (auto &key : m_helper->keys()) | ||||
|         addSelector(keys.first, keys.second, QPair<QString, QString>(key, m_helper->pairs()[key])); | ||||
|         addSelector(keys.first, keys.second, QPair<QString, QString>(key, pairs[key])); | ||||
|     // empty one | ||||
|     addSelector(keys.first, keys.second, QPair<QString, QString>()); | ||||
| } | ||||
|  | ||||
| @ -15,9 +15,7 @@ | ||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
|  | ||||
| #ifndef AWABSTRACTPAIRCONFIG_H | ||||
| #define AWABSTRACTPAIRCONFIG_H | ||||
| #pragma once | ||||
|  | ||||
| #include <QDialog> | ||||
|  | ||||
| @ -67,6 +65,3 @@ private: | ||||
|     [[nodiscard]] QPair<QStringList, QStringList> initKeys() const; | ||||
|     void updateDialog(); | ||||
| }; | ||||
|  | ||||
|  | ||||
| #endif /* AWABSTRACTPAIRCONFIG_H */ | ||||
|  | ||||
| @ -15,9 +15,7 @@ | ||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
|  | ||||
| #ifndef AWABSTRACTPAIRHELPER_H | ||||
| #define AWABSTRACTPAIRHELPER_H | ||||
| #pragma once | ||||
|  | ||||
| #include <QHash> | ||||
|  | ||||
| @ -46,6 +44,3 @@ private: | ||||
|     QString m_filePath; | ||||
|     QString m_section; | ||||
| }; | ||||
|  | ||||
|  | ||||
| #endif /* AWABSTRACTPAIRHELPER_H */ | ||||
|  | ||||
| @ -15,9 +15,7 @@ | ||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
|  | ||||
| #ifndef AWABSTRACTSELECTOR_H | ||||
| #define AWABSTRACTSELECTOR_H | ||||
| #pragma once | ||||
|  | ||||
| #include <QWidget> | ||||
|  | ||||
| @ -43,6 +41,3 @@ signals: | ||||
| private: | ||||
|     Ui::AWAbstractSelector *ui = nullptr; | ||||
| }; | ||||
|  | ||||
|  | ||||
| #endif /* AWABSTRACTSELECTOR_H */ | ||||
|  | ||||
| @ -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; | ||||
| @ -95,20 +88,6 @@ void AWActions::showReadme() | ||||
| } | ||||
|  | ||||
|  | ||||
| void AWActions::showLegacyInfo() | ||||
| { | ||||
|     auto *msgBox = new QMessageBox(nullptr); | ||||
|     msgBox->setAttribute(Qt::WA_DeleteOnClose); | ||||
|     msgBox->setModal(false); | ||||
|     msgBox->setWindowTitle(i18n("Not supported")); | ||||
|     msgBox->setText(i18n("You are using mammoth's Qt version, try to update it first")); | ||||
|     msgBox->setStandardButtons(QMessageBox::Ok); | ||||
|     msgBox->setIcon(QMessageBox::Information); | ||||
|  | ||||
|     msgBox->open(); | ||||
| } | ||||
|  | ||||
|  | ||||
| // HACK: this method uses variables from version.h | ||||
| QString AWActions::getAboutText(const QString &_type) | ||||
| { | ||||
| @ -142,7 +121,6 @@ void AWActions::sendNotification(const QString &_eventId, const QString &_messag | ||||
| { | ||||
|     qCDebug(LOG_AW) << "Event" << _eventId << "with message" << _message; | ||||
|  | ||||
|     KNotification *notification | ||||
|         = KNotification::event(_eventId, QString("Awesome Widget ::: %1").arg(_eventId), _message); | ||||
|     notification->setComponentName("plasma-applet-org.kde.plasma.awesome-widget"); | ||||
|     auto *event = KNotification::event(_eventId, QString("Awesome Widget ::: %1").arg(_eventId), _message); | ||||
|     event->setComponentName("plasma-applet-org.kde.plasma.awesome-widget"); | ||||
| } | ||||
|  | ||||
| @ -15,9 +15,7 @@ | ||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
|  | ||||
| #ifndef AWACTIONS_H | ||||
| #define AWACTIONS_H | ||||
| #pragma once | ||||
|  | ||||
| #include <QMap> | ||||
| #include <QObject> | ||||
| @ -34,9 +32,7 @@ public: | ||||
|     ~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(); | ||||
|     // configuration slots | ||||
|     Q_INVOKABLE static QString getAboutText(const QString &_type); | ||||
| @ -48,6 +44,3 @@ public slots: | ||||
| private: | ||||
|     AWUpdateHelper *m_updateHelper = nullptr; | ||||
| }; | ||||
|  | ||||
|  | ||||
| #endif /* AWACTIONS_H */ | ||||
|  | ||||
| @ -18,6 +18,7 @@ | ||||
| #include "awbugreporter.h" | ||||
|  | ||||
| #include <KI18n/KLocalizedString> | ||||
| #include <KNotifications/KNotification> | ||||
|  | ||||
| #include <QDesktopServices> | ||||
| #include <QJsonDocument> | ||||
| @ -44,7 +45,7 @@ AWBugReporter::~AWBugReporter() | ||||
| void AWBugReporter::doConnect() | ||||
| { | ||||
|     // additional method for testing needs | ||||
|     connect(this, SIGNAL(replyReceived(const int, const QString &)), this, SLOT(showInformation(int, const QString &))); | ||||
|     connect(this, &AWBugReporter::replyReceived, this, &AWBugReporter::showInformation); | ||||
| } | ||||
|  | ||||
|  | ||||
| @ -71,26 +72,26 @@ void AWBugReporter::sendBugReport(const QString &_title, const QString &_body) | ||||
| { | ||||
|     qCDebug(LOG_AW) << "Send bug report with title" << _title << "and body" << _body; | ||||
|  | ||||
|     auto *manager = new QNetworkAccessManager(nullptr); | ||||
|     connect(manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(issueReplyRecieved(QNetworkReply *))); | ||||
|     auto manager = new QNetworkAccessManager(nullptr); | ||||
|     connect(manager, &QNetworkAccessManager::finished, this, &AWBugReporter::issueReplyReceived); | ||||
|  | ||||
|     QNetworkRequest request = QNetworkRequest(QUrl(BUGTRACKER_API)); | ||||
|     auto request = QNetworkRequest(QUrl(BUGTRACKER_API)); | ||||
|     request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json"); | ||||
|  | ||||
|     // generate payload | ||||
|     QVariantMap payload; | ||||
|     payload["title"] = _title; | ||||
|     payload["body"] = _body; | ||||
|     payload["labels"] = QStringList() << "from application"; | ||||
|     payload["labels"] = QStringList({"from application"}); | ||||
|     // convert to QByteArray to send request | ||||
|     QByteArray data = QJsonDocument::fromVariant(payload).toJson(QJsonDocument::Compact); | ||||
|     auto data = QJsonDocument::fromVariant(payload).toJson(QJsonDocument::Compact); | ||||
|     qCInfo(LOG_AW) << "Send request with _body" << data.data() << "and size" << data.size(); | ||||
|  | ||||
|     manager->post(request, data); | ||||
| } | ||||
|  | ||||
|  | ||||
| void AWBugReporter::issueReplyRecieved(QNetworkReply *_reply) | ||||
| void AWBugReporter::issueReplyReceived(QNetworkReply *_reply) | ||||
| { | ||||
|     if (_reply->error() != QNetworkReply::NoError) { | ||||
|         qCWarning(LOG_AW) << "An error occurs" << _reply->error() << "with message" << _reply->errorString(); | ||||
| @ -98,7 +99,7 @@ void AWBugReporter::issueReplyRecieved(QNetworkReply *_reply) | ||||
|     } | ||||
|  | ||||
|     QJsonParseError error{}; | ||||
|     QJsonDocument jsonDoc = QJsonDocument::fromJson(_reply->readAll(), &error); | ||||
|     auto jsonDoc = QJsonDocument::fromJson(_reply->readAll(), &error); | ||||
|     if (error.error != QJsonParseError::NoError) { | ||||
|         qCWarning(LOG_AW) << "Parse error" << error.errorString(); | ||||
|         return emit(replyReceived(0, "")); | ||||
| @ -106,14 +107,20 @@ void AWBugReporter::issueReplyRecieved(QNetworkReply *_reply) | ||||
|     _reply->deleteLater(); | ||||
|  | ||||
|     // convert to map | ||||
|     QVariantMap response = jsonDoc.toVariant().toMap(); | ||||
|     QString url = response["html_url"].toString(); | ||||
|     int number = response["number"].toInt(); | ||||
|     auto response = jsonDoc.toVariant().toMap(); | ||||
|     auto url = response["html_url"].toString(); | ||||
|     auto number = response["number"].toInt(); | ||||
|  | ||||
|     return emit(replyReceived(number, url)); | ||||
| } | ||||
|  | ||||
|  | ||||
| void AWBugReporter::openBugReport() | ||||
| { | ||||
|     QDesktopServices::openUrl(m_lastBugUrl); | ||||
| } | ||||
|  | ||||
|  | ||||
| void AWBugReporter::showInformation(const int _number, const QString &_url) | ||||
| { | ||||
|     qCDebug(LOG_AW) << "Created issue with number" << _number << "and url" << _url; | ||||
| @ -121,29 +128,9 @@ void AWBugReporter::showInformation(const int _number, const QString &_url) | ||||
|     // cache url first | ||||
|     m_lastBugUrl = _url; | ||||
|  | ||||
|     auto *msgBox = new QMessageBox(nullptr); | ||||
|     msgBox->setAttribute(Qt::WA_DeleteOnClose); | ||||
|     msgBox->setModal(false); | ||||
|     msgBox->setWindowTitle(i18n("Issue created")); | ||||
|     msgBox->setText(i18n("Issue %1 has been created", _number)); | ||||
|     msgBox->setStandardButtons(QMessageBox::Open | QMessageBox::Close); | ||||
|     msgBox->setIcon(QMessageBox::Information); | ||||
|     auto event = KNotification::event("system", i18n("Issue created"), i18n("Issue %1 has been created", _number)); | ||||
|     event->setComponentName("plasma-applet-org.kde.plasma.awesome-widget"); | ||||
|  | ||||
|     msgBox->open(this, SLOT(userReplyOnBugReport(QAbstractButton *))); | ||||
| } | ||||
|  | ||||
|  | ||||
| void AWBugReporter::userReplyOnBugReport(QAbstractButton *_button) | ||||
| { | ||||
|     QMessageBox::ButtonRole ret = dynamic_cast<QMessageBox *>(sender())->buttonRole(_button); | ||||
|     qCInfo(LOG_AW) << "User select" << ret; | ||||
|  | ||||
|     switch (ret) { | ||||
|     case QMessageBox::AcceptRole: | ||||
|         QDesktopServices::openUrl(m_lastBugUrl); | ||||
|         break; | ||||
|     case QMessageBox::RejectRole: | ||||
|     default: | ||||
|         break; | ||||
|     } | ||||
|     auto action = event->addAction(i18n("Details")); | ||||
|     connect(action, &KNotificationAction::activated, this, &AWBugReporter::openBugReport); | ||||
| } | ||||
|  | ||||
| @ -15,9 +15,7 @@ | ||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
|  | ||||
| #ifndef AWBUGREPORTER_H | ||||
| #define AWBUGREPORTER_H | ||||
| #pragma once | ||||
|  | ||||
| #include <QObject> | ||||
|  | ||||
| @ -41,13 +39,10 @@ signals: | ||||
|     void replyReceived(int _number, const QString &_url); | ||||
|  | ||||
| private slots: | ||||
|     void issueReplyRecieved(QNetworkReply *_reply); | ||||
|     void issueReplyReceived(QNetworkReply *_reply); | ||||
|     void openBugReport(); | ||||
|     void showInformation(int _number, const QString &_url); | ||||
|     void userReplyOnBugReport(QAbstractButton *_button); | ||||
|  | ||||
| private: | ||||
|     QString m_lastBugUrl; | ||||
| }; | ||||
|  | ||||
|  | ||||
| #endif /* AWBUGREPORTER_H */ | ||||
|  | ||||
| @ -21,7 +21,6 @@ | ||||
| #include <QQmlPropertyMap> | ||||
| #include <QSettings> | ||||
| #include <QStandardPaths> | ||||
| #include <QTextCodec> | ||||
|  | ||||
| #include "awdebug.h" | ||||
|  | ||||
| @ -73,7 +72,7 @@ bool AWConfigHelper::exportConfiguration(QObject *_nativeConfig, const QString & | ||||
|  | ||||
|     QSettings settings(_fileName, QSettings::IniFormat); | ||||
|     // plasmoid configuration | ||||
|     const auto *configuration = dynamic_cast<const QQmlPropertyMap *>(_nativeConfig); | ||||
|     auto configuration = dynamic_cast<const QQmlPropertyMap *>(_nativeConfig); | ||||
|     settings.beginGroup("plasmoid"); | ||||
|     for (auto &key : configuration->keys()) { | ||||
|         QVariant value = configuration->value(key); | ||||
| @ -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(); | ||||
|  | ||||
| @ -15,9 +15,7 @@ | ||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
|  | ||||
| #ifndef AWCONFIGHELPER_H | ||||
| #define AWCONFIGHELPER_H | ||||
| #pragma once | ||||
|  | ||||
| #include <QObject> | ||||
| #include <QVariant> | ||||
| @ -52,6 +50,3 @@ private: | ||||
|     QString m_baseDir; | ||||
|     QStringList m_dirs = {"desktops", "quotes", "scripts", "upgrade", "weather", "formatters"}; | ||||
| }; | ||||
|  | ||||
|  | ||||
| #endif /* AWCONFIGHELPER_H */ | ||||
|  | ||||
| @ -15,9 +15,7 @@ | ||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
|  | ||||
| #ifndef AWCUSTOMKEYSCONFIG_H | ||||
| #define AWCUSTOMKEYSCONFIG_H | ||||
| #pragma once | ||||
|  | ||||
| #include "awabstractpairconfig.h" | ||||
|  | ||||
| @ -30,6 +28,3 @@ public: | ||||
|     explicit AWCustomKeysConfig(QWidget *_parent = nullptr, const QStringList &_keys = QStringList()); | ||||
|     ~AWCustomKeysConfig() override; | ||||
| }; | ||||
|  | ||||
|  | ||||
| #endif /* AWCUSTOMKEYSCONFIG_H */ | ||||
|  | ||||
| @ -15,9 +15,7 @@ | ||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
|  | ||||
| #ifndef AWCUSTOMKEYSHELPER_H | ||||
| #define AWCUSTOMKEYSHELPER_H | ||||
| #pragma once | ||||
|  | ||||
| #include <QObject> | ||||
|  | ||||
| @ -42,6 +40,3 @@ public: | ||||
|  | ||||
| private: | ||||
| }; | ||||
|  | ||||
|  | ||||
| #endif /* AWCUSTOMKEYSHELPER_H */ | ||||
|  | ||||
| @ -15,9 +15,7 @@ | ||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
|  | ||||
| #ifndef AWTOOLTIP_H | ||||
| #define AWTOOLTIP_H | ||||
| #pragma once | ||||
|  | ||||
| #include <QObject> | ||||
| #include <QVariant> | ||||
| @ -68,6 +66,3 @@ private: | ||||
|     bool m_enablePopup = false; | ||||
|     QStringList requiredKeys; | ||||
| }; | ||||
|  | ||||
|  | ||||
| #endif /* AWTOOLTIP_H */ | ||||
|  | ||||
| @ -17,30 +17,35 @@ | ||||
|  | ||||
| #include "awdataengineaggregator.h" | ||||
|  | ||||
| #include <Plasma/DataContainer> | ||||
| #include <ksysguard/formatter/Unit.h> | ||||
| #include <ksysguard/systemstats/DBusInterface.h> | ||||
|  | ||||
| #include <QDBusConnection> | ||||
|  | ||||
| #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"); | ||||
|     qDBusRegisterMetaType<KSysGuard::SensorData>(); | ||||
|     qDBusRegisterMetaType<KSysGuard::SensorInfo>(); | ||||
|     qDBusRegisterMetaType<KSysGuard::SensorDataList>(); | ||||
|     qDBusRegisterMetaType<QHash<QString, KSysGuard::SensorInfo>>(); | ||||
|  | ||||
|     // 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); | ||||
|           }); | ||||
|     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); | ||||
|  | ||||
|     // required to define Qt::QueuedConnection for signal-slot connection | ||||
|     qRegisterMetaType<Plasma::DataEngine::Data>("Plasma::DataEngine::Data"); | ||||
|     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; | ||||
|  | ||||
|     // 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()); | ||||
|     if (m_subscribed.contains(_source)) { | ||||
|         m_interface->unsubscribe({_source}).waitForFinished(); | ||||
|         m_subscribed.remove(_source); | ||||
|     } | ||||
| } | ||||
|  | ||||
|  | ||||
| void AWDataEngineAggregator::createQueuedConnection() | ||||
| void AWDataEngineAggregator::sensorAdded(const QString &_sensor) | ||||
| { | ||||
|     // HACK additional method which forces QueuedConnection instead of Auto one | ||||
|     // for more details refer to plasma-framework source code | ||||
|     for (auto &dataEngine : m_dataEngines.keys()) { | ||||
|         // different source set for different engines | ||||
|         QStringList sources = dataEngine == "time" ? QStringList() << "Local" : m_dataEngines[dataEngine]->sources(); | ||||
|         // reconnect sources | ||||
|         for (auto &source : sources) { | ||||
|             Plasma::DataContainer *container = m_dataEngines[dataEngine]->containerForSource(source); | ||||
|             // disconnect old connections first | ||||
|             disconnect(container, SIGNAL(dataUpdated(QString, Plasma::DataEngine::Data)), parent(), | ||||
|                        SLOT(dataUpdated(QString, Plasma::DataEngine::Data))); | ||||
|             // and now reconnect with Qt::QueuedConnection type | ||||
|             connect(container, SIGNAL(dataUpdated(QString, Plasma::DataEngine::Data)), parent(), | ||||
|                     SLOT(dataUpdated(QString, Plasma::DataEngine::Data)), Qt::QueuedConnection); | ||||
|         } | ||||
|     qCDebug(LOG_AW) << "New sensor added" << _sensor; | ||||
|  | ||||
|     // 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)); | ||||
| } | ||||
|  | ||||
|  | ||||
| void AWDataEngineAggregator::sensorRemoved(const QString &_sensor) | ||||
| { | ||||
|     qCDebug(LOG_AW) << "Sensor" << _sensor << "has been removed"; | ||||
|  | ||||
|     m_sensors.remove(_sensor); | ||||
|     dropSource(_sensor); | ||||
| } | ||||
|  | ||||
|  | ||||
| void AWDataEngineAggregator::updateData(const KSysGuard::SensorDataList &_data) | ||||
| { | ||||
|     emit(dataUpdated(m_sensors, _data)); | ||||
| } | ||||
|  | ||||
|  | ||||
| void AWDataEngineAggregator::updateSensors(const QHash<QString, KSysGuard::SensorInfo> &_sensors) | ||||
| { | ||||
|     for (auto [source, sensor] : _sensors.asKeyValueRange()) { | ||||
|         if (!isValidSensor(sensor)) | ||||
|             continue; | ||||
|         m_sensors.insert(source, sensor); | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -15,16 +15,20 @@ | ||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
| #pragma once | ||||
|  | ||||
| #ifndef AWDATAENGINEAGGREGATOR_H | ||||
| #define AWDATAENGINEAGGREGATOR_H | ||||
|  | ||||
| #include <Plasma/DataEngine> | ||||
| #include <Plasma/DataEngineConsumer> | ||||
| #include <ksysguard/systemstats/SensorInfo.h> | ||||
|  | ||||
| #include <QHash> | ||||
| #include <QObject> | ||||
| #include <QSet> | ||||
|  | ||||
|  | ||||
| namespace KSysGuard::SystemStats | ||||
| { | ||||
| class DBusInterface; | ||||
| } | ||||
|  | ||||
| class AWDataEngineAggregator : public QObject | ||||
| { | ||||
|     Q_OBJECT | ||||
| @ -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<QString, KSysGuard::SensorInfo> &_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(const KSysGuard::SensorDataList &_data); | ||||
|     void updateSensors(const QHash<QString, KSysGuard::SensorInfo> &_sensors); | ||||
|  | ||||
| private: | ||||
|     void createQueuedConnection(); | ||||
|     Plasma::DataEngineConsumer *m_consumer = nullptr; | ||||
|     QHash<QString, Plasma::DataEngine *> m_dataEngines; | ||||
|     QMetaObject::Connection m_newSourceConnection; | ||||
|     KSysGuard::SystemStats::DBusInterface *m_interface = nullptr; | ||||
|     QHash<QString, KSysGuard::SensorInfo> m_sensors; | ||||
|     QSet<QString> m_subscribed; | ||||
| }; | ||||
|  | ||||
|  | ||||
| #endif /* AWDATAENGINEAGGREGATOR_H */ | ||||
|  | ||||
| @ -17,7 +17,7 @@ | ||||
|  | ||||
| #include "awdataenginemapper.h" | ||||
|  | ||||
| #include <QRegExp> | ||||
| #include <QRegularExpression> | ||||
|  | ||||
| #include "awdebug.h" | ||||
| #include "awformatterhelper.h" | ||||
| @ -76,106 +76,126 @@ 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); | ||||
|             m_formatter[key] = AWKeysAggregator::FormatterType::Integer; | ||||
|             m_formatter[key] = AWKeysAggregator::FormatterType::MemKBFormat; | ||||
|         } | ||||
|     } 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; | ||||
|             m_formatter[key] = AWKeysAggregator::FormatterType::MemKBFormat; | ||||
|         } | ||||
|     } 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,29 +263,29 @@ 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; | ||||
|             m_formatter[key] = AWKeysAggregator::FormatterType::MemKBFormat; | ||||
|             // smart | ||||
|             key = QString("%1%2").arg(type).arg(index); | ||||
|             m_map.insert(_source, key); | ||||
| @ -287,49 +297,49 @@ 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; | ||||
|             m_formatter[key] = AWKeysAggregator::FormatterType::MemKBFormat; | ||||
|             // mb | ||||
|             key = QString("%1tot%2").arg(type).arg(index); | ||||
|             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 | ||||
|             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) { | ||||
|  | ||||
| @ -15,9 +15,9 @@ | ||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
| #pragma once | ||||
|  | ||||
| #ifndef AWDATAENGINEMAPPER_H | ||||
| #define AWDATAENGINEMAPPER_H | ||||
| #include <ksysguard/formatter/Unit.h> | ||||
|  | ||||
| #include <QMultiHash> | ||||
| #include <QObject> | ||||
| @ -38,7 +38,7 @@ public: | ||||
|     [[nodiscard]] AWKeysAggregator::FormatterType formatter(const QString &_key) const; | ||||
|     [[nodiscard]] QStringList keysFromSource(const QString &_source) const; | ||||
|     // set methods | ||||
|     QStringList registerSource(const QString &_source, const QString &_units, const QStringList &_keys); | ||||
|     QStringList registerSource(const QString &_source, const KSysGuard::Unit _units, const QStringList &_keys); | ||||
|     void setDevices(const QHash<QString, QStringList> &_devices); | ||||
|  | ||||
| private: | ||||
| @ -48,6 +48,3 @@ private: | ||||
|     QHash<QString, AWKeysAggregator::FormatterType> m_formatter; | ||||
|     QMultiHash<QString, QString> m_map; | ||||
| }; | ||||
|  | ||||
|  | ||||
| #endif /* AWDATAENGINEMAPPER_H */ | ||||
|  | ||||
| @ -15,9 +15,7 @@ | ||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
|  | ||||
| #ifndef AWDBUSADAPTOR_H | ||||
| #define AWDBUSADAPTOR_H | ||||
| #pragma once | ||||
|  | ||||
| #include <QDBusAbstractAdaptor> | ||||
|  | ||||
| @ -50,6 +48,3 @@ private: | ||||
|     AWKeys *m_plugin = nullptr; | ||||
|     QStringList m_logLevels = {"debug", "info", "warning", "critical"}; | ||||
| }; | ||||
|  | ||||
|  | ||||
| #endif /* AWDBUSADAPTOR_H */ | ||||
|  | ||||
| @ -15,9 +15,7 @@ | ||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
|  | ||||
| #ifndef AWPLUGIN_H | ||||
| #define AWPLUGIN_H | ||||
| #pragma once | ||||
|  | ||||
| #include <QQmlExtensionPlugin> | ||||
|  | ||||
| @ -30,6 +28,3 @@ class AWPlugin : public QQmlExtensionPlugin | ||||
| public: | ||||
|     void registerTypes(const char *uri) override; | ||||
| }; | ||||
|  | ||||
|  | ||||
| #endif /* AWPLUGIN_H */ | ||||
|  | ||||
| @ -15,9 +15,7 @@ | ||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
|  | ||||
| #ifndef AWFORMATTERCONFIG_H | ||||
| #define AWFORMATTERCONFIG_H | ||||
| #pragma once | ||||
|  | ||||
| #include "awabstractpairconfig.h" | ||||
|  | ||||
| @ -30,6 +28,3 @@ public: | ||||
|     explicit AWFormatterConfig(QWidget *_parent = nullptr, const QStringList &_keys = QStringList()); | ||||
|     ~AWFormatterConfig() override; | ||||
| }; | ||||
|  | ||||
|  | ||||
| #endif /* AWFORMATTERCONFIG_H */ | ||||
|  | ||||
| @ -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<QString, AWAbstractFormatter::FormatterClass> 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<QString, AWAbstractFormatter::FormatterClass>(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<AWDateTimeFormatter>(); | ||||
|         return createItem<AWDateTimeFormatter>(_widget); | ||||
|     case AWAbstractFormatter::FormatterClass::Float: | ||||
|         return createItem<AWFloatFormatter>(); | ||||
|         return createItem<AWFloatFormatter>(_widget); | ||||
|     case AWAbstractFormatter::FormatterClass::List: | ||||
|         return createItem<AWListFormatter>(); | ||||
|         return createItem<AWListFormatter>(_widget); | ||||
|     case AWAbstractFormatter::FormatterClass::Script: | ||||
|         return createItem<AWScriptFormatter>(); | ||||
|         return createItem<AWScriptFormatter>(_widget); | ||||
|     case AWAbstractFormatter::FormatterClass::String: | ||||
|         return createItem<AWStringFormatter>(); | ||||
|         return createItem<AWStringFormatter>(_widget); | ||||
|     case AWAbstractFormatter::FormatterClass::Json: | ||||
|         return createItem<AWJsonFormatter>(); | ||||
|         return createItem<AWJsonFormatter>(_widget); | ||||
|     case AWAbstractFormatter::FormatterClass::NoFormat: | ||||
|         return createItem<AWNoFormatter>(); | ||||
|         return createItem<AWNoFormatter>(_widget); | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -15,9 +15,7 @@ | ||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
|  | ||||
| #ifndef AWFORMATTERHELPER_H | ||||
| #define AWFORMATTERHELPER_H | ||||
| #pragma once | ||||
|  | ||||
| #include "abstractextitemaggregator.h" | ||||
| #include "awabstractformatter.h" | ||||
| @ -51,11 +49,8 @@ private: | ||||
|     void initFormatters(); | ||||
|     [[nodiscard]] static QPair<QString, AWAbstractFormatter::FormatterClass> readMetadata(const QString &_filePath); | ||||
|     // parent methods | ||||
|     void doCreateItem() override; | ||||
|     void doCreateItem(QListWidget *_widget) override; | ||||
|     // properties | ||||
|     QHash<QString, AWAbstractFormatter *> m_formatters; | ||||
|     QHash<QString, AWAbstractFormatter *> m_formattersClasses; | ||||
| }; | ||||
|  | ||||
|  | ||||
| #endif /* AWFORMATTERHELPER_H */ | ||||
|  | ||||
| @ -20,6 +20,7 @@ | ||||
|  | ||||
| #include <QDir> | ||||
| #include <QNetworkInterface> | ||||
| #include <QRegularExpression> | ||||
| #include <QSettings> | ||||
| #include <QStandardPaths> | ||||
|  | ||||
| @ -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<QNetworkInterface> 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<QString, QStringList> 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); | ||||
|  | ||||
| @ -15,9 +15,7 @@ | ||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
|  | ||||
| #ifndef AWKEYCACHE_H | ||||
| #define AWKEYCACHE_H | ||||
| #pragma once | ||||
|  | ||||
| #include <QHash> | ||||
| #include <QString> | ||||
| @ -31,6 +29,3 @@ QStringList getRequiredKeys(const QStringList &_keys, const QStringList &_bars, | ||||
|                             const QStringList &_userKeys, const QStringList &_allKeys); | ||||
| QHash<QString, QStringList> loadKeysFromCache(); | ||||
| } // namespace AWKeyCache | ||||
|  | ||||
|  | ||||
| #endif /* AWKEYCACHE_H */ | ||||
|  | ||||
| @ -18,7 +18,7 @@ | ||||
| #include "awkeyoperations.h" | ||||
|  | ||||
| #include <QDir> | ||||
| #include <QRegExp> | ||||
| #include <QRegularExpression> | ||||
| #include <QThread> | ||||
|  | ||||
| #include "awcustomkeyshelper.h" | ||||
| @ -72,7 +72,6 @@ QHash<QString, QStringList> 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,8 +130,7 @@ QStringList AWKeyOperations::dictKeys() const | ||||
|         allKeys.append(QString("up%1").arg(i)); | ||||
|     } | ||||
|     // battery | ||||
|     QStringList allBatteryDevices | ||||
|         = QDir("/sys/class/power_supply") | ||||
|     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)); | ||||
| @ -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); | ||||
|     } | ||||
| } | ||||
|  | ||||
|  | ||||
| @ -15,9 +15,7 @@ | ||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
|  | ||||
| #ifndef AWKEYOPERATIONS_H | ||||
| #define AWKEYOPERATIONS_H | ||||
| #pragma once | ||||
|  | ||||
| #include <QObject> | ||||
|  | ||||
| @ -78,6 +76,3 @@ private: | ||||
|     QHash<QString, QStringList> m_devices; | ||||
|     QString m_pattern; | ||||
| }; | ||||
|  | ||||
|  | ||||
| #endif /* AWKEYOPERATIONS_H */ | ||||
|  | ||||
| @ -21,7 +21,7 @@ | ||||
| #include <QDBusError> | ||||
| #include <QThread> | ||||
| #include <QTimer> | ||||
| #include <QtConcurrent/QtConcurrent> | ||||
| #include <QtConcurrent> | ||||
|  | ||||
| #include "awdataaggregator.h" | ||||
| #include "awdataengineaggregator.h" | ||||
| @ -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,27 +149,7 @@ QStringList AWKeys::dictKeys(const bool _sorted, const QString &_regexp) const | ||||
|     if (_sorted) | ||||
|         allKeys.sort(); | ||||
|  | ||||
|     return allKeys.filter(QRegExp(_regexp)); | ||||
| } | ||||
|  | ||||
|  | ||||
| QVariantList AWKeys::getHddDevices() const | ||||
| { | ||||
|     QStringList hddDevices = m_keyOperator->devices("hdd"); | ||||
|     // required by selector in the UI | ||||
|     hddDevices.insert(0, "disable"); | ||||
|     hddDevices.insert(0, "auto"); | ||||
|  | ||||
|     // build model | ||||
|     QVariantList devices; | ||||
|     for (auto &device : hddDevices) { | ||||
|         QVariantMap model; | ||||
|         model["label"] = device; | ||||
|         model["name"] = device; | ||||
|         devices.append(model); | ||||
|     } | ||||
|  | ||||
|     return devices; | ||||
|     return allKeys.filter(QRegularExpression(_regexp)); | ||||
| } | ||||
|  | ||||
|  | ||||
| @ -185,9 +166,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 +180,18 @@ void AWKeys::editItem(const QString &_type) | ||||
| } | ||||
|  | ||||
|  | ||||
| void AWKeys::dataUpdated(const QString &_sourceName, const Plasma::DataEngine::Data &_data) | ||||
| void AWKeys::dataUpdated(const QHash<QString, KSysGuard::SensorInfo> &_sensors, const KSysGuard::SensorDataList &_data) | ||||
| { | ||||
|     // run concurrent data update | ||||
|     QtConcurrent::run(m_threadPool, this, &AWKeys::setDataBySource, _sourceName, _data); | ||||
|     qCDebug(LOG_AW) << "Update data for" << _data.count() << "items"; | ||||
|  | ||||
|     // though it is better to use QtConcurrent::map here, but it might cause stack corruption | ||||
|     for (auto &data : _data) { | ||||
|         if (!_sensors.contains(data.sensorProperty)) | ||||
|             continue; | ||||
|         auto sensor = _sensors[data.sensorProperty]; | ||||
|         std::ignore = QtConcurrent::run(m_threadPool, &AWKeys::setDataBySource, this, data.sensorProperty, sensor, | ||||
|                                         data.payload); | ||||
|     } | ||||
| } | ||||
|  | ||||
|  | ||||
| @ -239,7 +228,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 +245,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.0 * 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 +271,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.0 * m_values["swapmb"].toDouble() / m_values["swaptotmb"].toDouble(); | ||||
|  | ||||
|     // user defined keys | ||||
|     for (auto &key : m_keyOperator->userKeys()) | ||||
| @ -323,7 +312,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 +332,7 @@ QString AWKeys::parsePattern(QString _pattern) const | ||||
|     } | ||||
|  | ||||
|     // prepare strings | ||||
|     _pattern.replace(QString(0x1d), "$"); | ||||
|     _pattern.replace(QChar(0x1d), "$"); | ||||
|     if (m_wrapNewLines) | ||||
|         _pattern.replace("\n", "<br>"); | ||||
|  | ||||
| @ -351,25 +340,22 @@ 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 QVariant &_value) | ||||
| { | ||||
|     qCDebug(LOG_AW) << "Source" << _sourceName << "with data" << _data; | ||||
|     qCDebug(LOG_AW) << "Source" << _source << _sensor.name << "with data" << _value; | ||||
|  | ||||
|     // 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, _value](const QString &tag) { m_values[tag] = _value; }); | ||||
|     m_mutex.unlock(); | ||||
| } | ||||
|  | ||||
| @ -15,15 +15,13 @@ | ||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
|  | ||||
| #ifndef AWKEYS_H | ||||
| #define AWKEYS_H | ||||
|  | ||||
| #include <Plasma/DataEngine> | ||||
| #pragma once | ||||
|  | ||||
| #include <QMutex> | ||||
| #include <QObject> | ||||
|  | ||||
| #include <ksysguard/systemstats/SensorInfo.h> | ||||
|  | ||||
|  | ||||
| class AWDataAggregator; | ||||
| class AWDataEngineAggregator; | ||||
| @ -48,24 +46,19 @@ public: | ||||
|     Q_INVOKABLE void updateCache(); | ||||
|     // keys | ||||
|     Q_INVOKABLE [[nodiscard]] QStringList dictKeys(bool _sorted = false, const QString &_regexp = "") const; | ||||
|     Q_INVOKABLE [[nodiscard]] QVariantList getHddDevices() const; | ||||
|     // values | ||||
|     Q_INVOKABLE [[nodiscard]] QString infoByKey(const QString &_key) const; | ||||
|     Q_INVOKABLE [[nodiscard]] QString valueByKey(const QString &_key) const; | ||||
|     // configuration | ||||
|     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 *){}; | ||||
|  | ||||
| signals: | ||||
|     void dropSourceFromDataengine(const QString &_source); | ||||
|     void needTextToBeUpdated(const QString &_newText) const; | ||||
|     void needToolTipToBeUpdated(const QString &_newText) const; | ||||
|  | ||||
| private slots: | ||||
|     void dataUpdated(const QHash<QString, KSysGuard::SensorInfo> &_sensors, const KSysGuard::SensorDataList &_data); | ||||
|     void reinitKeys(const QStringList &_currentKeys); | ||||
|     void updateTextData(); | ||||
|  | ||||
| @ -74,7 +67,7 @@ private: | ||||
|     void calculateValues(); | ||||
|     void createDBusInterface(); | ||||
|     [[nodiscard]] QString parsePattern(QString _pattern) const; | ||||
|     void setDataBySource(const QString &_sourceName, const QVariantMap &_data); | ||||
|     void setDataBySource(const QString &_source, const KSysGuard::SensorInfo &_sensor, const QVariant &_value); | ||||
|     // objects | ||||
|     AWDataAggregator *m_dataAggregator = nullptr; | ||||
|     AWDataEngineAggregator *m_dataEngineAggregator = nullptr; | ||||
| @ -91,6 +84,3 @@ private: | ||||
|     QThreadPool *m_threadPool = nullptr; | ||||
|     QMutex m_mutex; | ||||
| }; | ||||
|  | ||||
|  | ||||
| #endif /* AWKEYS_H */ | ||||
|  | ||||
| @ -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,21 +85,24 @@ 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() / GBinBytes, 5, 'f', 1); | ||||
|         break; | ||||
|     case FormatterType::MemMBFormat: | ||||
|         output = QString("%1").arg(_data.toFloat() / 1024.0, 5, 'f', 0); | ||||
|         output = QString("%1").arg(_data.toDouble() / MBinBytes, 5, 'f', 0); | ||||
|         break; | ||||
|     case FormatterType::MemKBFormat: | ||||
|         output = QString("%1").arg(_data.toDouble() / KBinBytes, 5, 'f', 0); | ||||
|         break; | ||||
|     case FormatterType::NetSmartFormat: | ||||
|         output = [](const float value) { | ||||
|             if (value > 1024.0) | ||||
|                 return QString("%1").arg(value / 1024.0, 4, 'f', 1); | ||||
|         output = [](const double value) { | ||||
|             if (value > MBinBytes) | ||||
|                 return QString("%1").arg(value / MBinBytes, 4, 'f', 1); | ||||
|             else | ||||
|                 return QString("%1").arg(value, 4, 'f', 0); | ||||
|         }(_data.toFloat()); | ||||
|                 return QString("%1").arg(value / KBinBytes, 4, 'f', 0); | ||||
|         }(_data.toDouble()); | ||||
|         break; | ||||
|     case FormatterType::NetSmartUnits: | ||||
|         if (_data.toFloat() > 1024.0) | ||||
|         if (_data.toDouble() > MBinBytes) | ||||
|             output = m_translate ? i18n("MB/s") : "MB/s"; | ||||
|         else | ||||
|             output = m_translate ? i18n("KB/s") : "KB/s"; | ||||
| @ -110,29 +113,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 +153,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<int>(_data.toFloat())); | ||||
|               static_cast<int>(_data.toDouble())); | ||||
|         break; | ||||
|     case FormatterType::NoFormat: | ||||
|         output = _data.toString(); | ||||
| @ -234,7 +237,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; | ||||
|  | ||||
| @ -242,24 +246,24 @@ QStringList AWKeysAggregator::registerSource(const QString &_source, const QStri | ||||
| } | ||||
|  | ||||
|  | ||||
| float AWKeysAggregator::temperature(const float temp) const | ||||
| double AWKeysAggregator::temperature(const double temp) const | ||||
| { | ||||
|     qCDebug(LOG_AW) << "Temperature value" << temp; | ||||
|  | ||||
|     float converted = temp; | ||||
|     auto converted = temp; | ||||
|     if (m_tempUnits == "Celsius") { | ||||
|     } else if (m_tempUnits == "Fahrenheit") { | ||||
|         converted = temp * 9.0f / 5.0f + 32.0f; | ||||
|         converted = temp * 9.0f / 5.0 + 32.0; | ||||
|     } else if (m_tempUnits == "Kelvin") { | ||||
|         converted = temp + 273.15f; | ||||
|         converted = temp + 273.15; | ||||
|     } else if (m_tempUnits == "Reaumur") { | ||||
|         converted = temp * 0.8f; | ||||
|         converted = temp * 0.8; | ||||
|     } else if (m_tempUnits == "cm^-1") { | ||||
|         converted = (temp + 273.15f) * 0.695f; | ||||
|         converted = (temp + 273.15) * 0.695; | ||||
|     } else if (m_tempUnits == "kJ/mol") { | ||||
|         converted = (temp + 273.15f) * 8.31f; | ||||
|         converted = (temp + 273.15) * 8.31; | ||||
|     } else if (m_tempUnits == "kcal/mol") { | ||||
|         converted = (temp + 273.15f) * 1.98f; | ||||
|         converted = (temp + 273.15) * 1.98; | ||||
|     } else { | ||||
|         qCWarning(LOG_AW) << "Invalid units" << m_tempUnits; | ||||
|     } | ||||
|  | ||||
| @ -15,9 +15,9 @@ | ||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
| #pragma once | ||||
|  | ||||
| #ifndef AWKEYSAGGREGATOR_H | ||||
| #define AWKEYSAGGREGATOR_H | ||||
| #include <ksysguard/formatter/Unit.h> | ||||
|  | ||||
| #include <QHash> | ||||
| #include <QObject> | ||||
| @ -51,6 +51,7 @@ public: | ||||
|         ACFormat, | ||||
|         MemGBFormat, | ||||
|         MemMBFormat, | ||||
|         MemKBFormat, | ||||
|         NetSmartFormat, | ||||
|         NetSmartUnits, | ||||
|         Quotes, | ||||
| @ -65,6 +66,10 @@ public: | ||||
|         UptimeCustom | ||||
|     }; | ||||
|  | ||||
|     static constexpr double KBinBytes = 1024.0; | ||||
|     static constexpr double MBinBytes = 1024.0 * KBinBytes; | ||||
|     static constexpr double GBinBytes = 1024.0 * MBinBytes; | ||||
|  | ||||
|     explicit AWKeysAggregator(QObject *_parent = nullptr); | ||||
|     ~AWKeysAggregator() override; | ||||
|     void initFormatters(); | ||||
| @ -81,10 +86,10 @@ public: | ||||
|     void setTranslate(bool _translate); | ||||
|  | ||||
| public slots: | ||||
|     QStringList registerSource(const QString &_source, const QString &_units, const QStringList &_keys); | ||||
|     QStringList registerSource(const QString &_source, const KSysGuard::Unit _units, const QStringList &_keys); | ||||
|  | ||||
| private: | ||||
|     [[nodiscard]] float temperature(float temp) const; | ||||
|     [[nodiscard]] double temperature(double temp) const; | ||||
|     AWFormatterHelper *m_customFormatters = nullptr; | ||||
|     AWDataEngineMapper *m_mapper = nullptr; | ||||
|     QStringList m_timeKeys; | ||||
| @ -96,6 +101,3 @@ private: | ||||
|     QString m_tempUnits; | ||||
|     bool m_translate = false; | ||||
| }; | ||||
|  | ||||
|  | ||||
| #endif /* AWKEYSAGGREGATOR_H */ | ||||
|  | ||||
| @ -37,7 +37,7 @@ AWPairConfigFactory::~AWPairConfigFactory() | ||||
|  | ||||
| void AWPairConfigFactory::showFormatterDialog(const QStringList &_keys) | ||||
| { | ||||
|     auto *config = new AWFormatterConfig(nullptr, _keys); | ||||
|     auto config = new AWFormatterConfig(nullptr, _keys); | ||||
|     config->showDialog(); | ||||
|     config->deleteLater(); | ||||
| } | ||||
| @ -45,7 +45,7 @@ void AWPairConfigFactory::showFormatterDialog(const QStringList &_keys) | ||||
|  | ||||
| void AWPairConfigFactory::showKeysDialog(const QStringList &_keys) | ||||
| { | ||||
|     auto *config = new AWCustomKeysConfig(nullptr, _keys); | ||||
|     auto config = new AWCustomKeysConfig(nullptr, _keys); | ||||
|     config->showDialog(); | ||||
|     config->deleteLater(); | ||||
| } | ||||
|  | ||||
| @ -15,9 +15,7 @@ | ||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
|  | ||||
| #ifndef AWPAIRCONFIGFACTORY_H | ||||
| #define AWPAIRCONFIGFACTORY_H | ||||
| #pragma once | ||||
|  | ||||
| #include <QObject> | ||||
|  | ||||
| @ -34,6 +32,3 @@ public: | ||||
|  | ||||
| private: | ||||
| }; | ||||
|  | ||||
|  | ||||
| #endif /* AWPAIRCONFIGFACTORY_H */ | ||||
|  | ||||
| @ -105,9 +105,9 @@ QList<AWPatternFunctions::AWFunction> 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<AWPatternFunctions::AWFunction> 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<AWPatternFunctions::AWFunction> 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<AWPatternFunctions::AWFunction> 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<AWPatternFunctions::AWFunction> 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)); | ||||
|  | ||||
| @ -15,9 +15,7 @@ | ||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
|  | ||||
| #ifndef AWPATTERNFUNCTIONS_H | ||||
| #define AWPATTERNFUNCTIONS_H | ||||
| #pragma once | ||||
|  | ||||
| #include <QString> | ||||
| #include <QVariant> | ||||
| @ -47,6 +45,3 @@ QString insertMacros(QString _code); | ||||
| QStringList findKeys(const QString &_code, const QStringList &_keys, bool _isBars); | ||||
| QStringList findLambdas(const QString &_code); | ||||
| } // namespace AWPatternFunctions | ||||
|  | ||||
|  | ||||
| #endif /* AWPATTERNFUNCTIONS_H */ | ||||
|  | ||||
| @ -126,8 +126,8 @@ void AWTelemetryHandler::uploadTelemetry(const QString &_group, const QString &_ | ||||
|         return; | ||||
|     } | ||||
|  | ||||
|     auto *manager = new QNetworkAccessManager(nullptr); | ||||
|     connect(manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(telemetryReplyRecieved(QNetworkReply *))); | ||||
|     auto manager = new QNetworkAccessManager(nullptr); | ||||
|     connect(manager, &QNetworkAccessManager::finished, this, &AWTelemetryHandler::telemetryReplyReceived); | ||||
|  | ||||
|     QUrl url(REMOTE_TELEMETRY_URL); | ||||
|     QNetworkRequest request(url); | ||||
| @ -140,14 +140,14 @@ void AWTelemetryHandler::uploadTelemetry(const QString &_group, const QString &_ | ||||
|     payload["metadata"] = _value; | ||||
|     payload["type"] = _group; | ||||
|     // convert to QByteArray to send request | ||||
|     QByteArray data = QJsonDocument::fromVariant(payload).toJson(QJsonDocument::Compact); | ||||
|     auto data = QJsonDocument::fromVariant(payload).toJson(QJsonDocument::Compact); | ||||
|     qCInfo(LOG_AW) << "Send request with body" << data.data() << "and size" << data.size(); | ||||
|  | ||||
|     manager->post(request, data); | ||||
| } | ||||
|  | ||||
|  | ||||
| void AWTelemetryHandler::telemetryReplyRecieved(QNetworkReply *_reply) | ||||
| void AWTelemetryHandler::telemetryReplyReceived(QNetworkReply *_reply) | ||||
| { | ||||
|     if (_reply->error() != QNetworkReply::NoError) { | ||||
|         qCWarning(LOG_AW) << "An error occurs" << _reply->error() << "with message" << _reply->errorString(); | ||||
| @ -155,7 +155,7 @@ void AWTelemetryHandler::telemetryReplyRecieved(QNetworkReply *_reply) | ||||
|     } | ||||
|  | ||||
|     QJsonParseError error{}; | ||||
|     QJsonDocument jsonDoc = QJsonDocument::fromJson(_reply->readAll(), &error); | ||||
|     auto jsonDoc = QJsonDocument::fromJson(_reply->readAll(), &error); | ||||
|     if (error.error != QJsonParseError::NoError) { | ||||
|         qCWarning(LOG_AW) << "Parse error" << error.errorString(); | ||||
|         return; | ||||
| @ -163,8 +163,8 @@ void AWTelemetryHandler::telemetryReplyRecieved(QNetworkReply *_reply) | ||||
|     _reply->deleteLater(); | ||||
|  | ||||
|     // convert to map | ||||
|     QVariantMap response = jsonDoc.toVariant().toMap(); | ||||
|     QString message = response["message"].toString(); | ||||
|     auto response = jsonDoc.toVariant().toMap(); | ||||
|     auto message = response["message"].toString(); | ||||
|     qCInfo(LOG_AW) << "Server reply on telemetry" << message; | ||||
|  | ||||
|     return emit(replyReceived(message)); | ||||
|  | ||||
| @ -15,9 +15,7 @@ | ||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
|  | ||||
| #ifndef AWTELEMETRYHANDLER_H | ||||
| #define AWTELEMETRYHANDLER_H | ||||
| #pragma once | ||||
|  | ||||
| #include <QObject> | ||||
|  | ||||
| @ -43,7 +41,7 @@ signals: | ||||
|     void replyReceived(const QString &_message); | ||||
|  | ||||
| private slots: | ||||
|     void telemetryReplyRecieved(QNetworkReply *_reply); | ||||
|     void telemetryReplyReceived(QNetworkReply *_reply); | ||||
|  | ||||
| private: | ||||
|     static QString getKey(int _count); | ||||
| @ -52,6 +50,3 @@ private: | ||||
|     int m_storeCount = 0; | ||||
|     bool m_uploadEnabled = false; | ||||
| }; | ||||
|  | ||||
|  | ||||
| #endif /* AWTELEMETRYHANDLER_H */ | ||||
|  | ||||
| @ -18,12 +18,14 @@ | ||||
| #include "awupdatehelper.h" | ||||
|  | ||||
| #include <KI18n/KLocalizedString> | ||||
| #include <KNotifications/KNotification> | ||||
|  | ||||
| #include <QDesktopServices> | ||||
| #include <QJsonDocument> | ||||
| #include <QNetworkAccessManager> | ||||
| #include <QNetworkReply> | ||||
| #include <QSettings> | ||||
| #include <QStandardPaths> | ||||
|  | ||||
| #include "awdebug.h" | ||||
|  | ||||
| @ -51,9 +53,9 @@ void AWUpdateHelper::checkUpdates(const bool _showAnyway) | ||||
|  | ||||
|     // showAnyway options requires to show message if no updates found on direct | ||||
|     // request. In case of automatic check no message will be shown | ||||
|     auto *manager = new QNetworkAccessManager(nullptr); | ||||
|     auto manager = new QNetworkAccessManager(nullptr); | ||||
|     connect(manager, &QNetworkAccessManager::finished, | ||||
|             [_showAnyway, this](QNetworkReply *reply) { return versionReplyRecieved(reply, _showAnyway); }); | ||||
|             [_showAnyway, this](QNetworkReply *reply) { return versionReplyReceived(reply, _showAnyway); }); | ||||
|  | ||||
|     manager->get(QNetworkRequest(QUrl(VERSION_API))); | ||||
| } | ||||
| @ -62,15 +64,14 @@ void AWUpdateHelper::checkUpdates(const bool _showAnyway) | ||||
| bool AWUpdateHelper::checkVersion() | ||||
| { | ||||
|     QSettings settings(m_genericConfig, QSettings::IniFormat); | ||||
|     QVersionNumber version = QVersionNumber::fromString(settings.value("Version", QString(VERSION)).toString()); | ||||
|     auto version = QVersionNumber::fromString(settings.value("Version", QString(VERSION)).toString()); | ||||
|     // update version | ||||
|     settings.setValue("Version", QString(VERSION)); | ||||
|     settings.sync(); | ||||
|     qCInfo(LOG_AW) << "Found version" << version << "actual one is" << m_foundVersion; | ||||
|  | ||||
|     if ((version != m_foundVersion) && (!QString(CHANGELOG).isEmpty())) { | ||||
|         genMessageBox(i18nc("Changelog of %1", VERSION), QString(CHANGELOG).replace('@', '\n'), QMessageBox::Ok) | ||||
|             ->open(); | ||||
|         sendNotification(i18nc("Changelog of %1", VERSION), QString(CHANGELOG).replace('@', '\n')); | ||||
|         return true; | ||||
|     } else if (version != m_foundVersion) { | ||||
|         qCWarning(LOG_AW) << "No changelog information provided"; | ||||
| @ -83,14 +84,20 @@ bool AWUpdateHelper::checkVersion() | ||||
| } | ||||
|  | ||||
|  | ||||
| void AWUpdateHelper::openReleasesPage() | ||||
| { | ||||
|     QDesktopServices::openUrl(QString(RELEASES) + m_foundVersion.toString()); | ||||
| } | ||||
|  | ||||
|  | ||||
| void AWUpdateHelper::showInfo(const QVersionNumber &_version) | ||||
| { | ||||
|     qCDebug(LOG_AW) << "Version" << _version; | ||||
|  | ||||
|     QString text = i18n("You are using the actual version %1", _version.toString()); | ||||
|     auto text = i18n("You are using the actual version %1", _version.toString()); | ||||
|     if (!QString(COMMIT_SHA).isEmpty()) | ||||
|         text += QString(" (%1)").arg(QString(COMMIT_SHA)); | ||||
|     return genMessageBox(i18n("No new version found"), text, QMessageBox::Ok)->open(); | ||||
|     sendNotification(i18n("No new version found"), text); | ||||
| } | ||||
|  | ||||
|  | ||||
| @ -104,28 +111,13 @@ void AWUpdateHelper::showUpdates(const QVersionNumber &_version) | ||||
|     text += i18n("New version : %1", _version.toString()) + "\n\n"; | ||||
|     text += i18n("Click \"Ok\" to download"); | ||||
|  | ||||
|     genMessageBox(i18n("There are updates"), text, QMessageBox::Ok | QMessageBox::Cancel) | ||||
|         ->open(this, SLOT(userReplyOnUpdates(QAbstractButton *))); | ||||
|     auto event = sendNotification(i18n("There are updates"), text); | ||||
|     auto action = event->addAction(i18n("Details")); | ||||
|     connect(action, &KNotificationAction::activated, this, &AWUpdateHelper::openReleasesPage); | ||||
| } | ||||
|  | ||||
|  | ||||
| void AWUpdateHelper::userReplyOnUpdates(QAbstractButton *_button) | ||||
| { | ||||
|     QMessageBox::ButtonRole ret = dynamic_cast<QMessageBox *>(sender())->buttonRole(_button); | ||||
|     qCInfo(LOG_AW) << "User select" << ret; | ||||
|  | ||||
|     switch (ret) { | ||||
|     case QMessageBox::AcceptRole: | ||||
|         QDesktopServices::openUrl(QString(RELEASES) + m_foundVersion.toString()); | ||||
|         break; | ||||
|     case QMessageBox::RejectRole: | ||||
|     default: | ||||
|         break; | ||||
|     } | ||||
| } | ||||
|  | ||||
|  | ||||
| void AWUpdateHelper::versionReplyRecieved(QNetworkReply *_reply, const bool _showAnyway) | ||||
| void AWUpdateHelper::versionReplyReceived(QNetworkReply *_reply, const bool _showAnyway) | ||||
| { | ||||
|     qCDebug(LOG_AW) << "Show message anyway" << _showAnyway; | ||||
|     if (_reply->error() != QNetworkReply::NoError) { | ||||
| @ -133,8 +125,8 @@ void AWUpdateHelper::versionReplyRecieved(QNetworkReply *_reply, const bool _sho | ||||
|         return; | ||||
|     } | ||||
|  | ||||
|     QJsonParseError error = QJsonParseError(); | ||||
|     QJsonDocument jsonDoc = QJsonDocument::fromJson(_reply->readAll(), &error); | ||||
|     auto error = QJsonParseError(); | ||||
|     auto jsonDoc = QJsonDocument::fromJson(_reply->readAll(), &error); | ||||
|     if (error.error != QJsonParseError::NoError) { | ||||
|         qCWarning(LOG_AW) << "Parse error" << error.errorString(); | ||||
|         return; | ||||
| @ -142,13 +134,13 @@ void AWUpdateHelper::versionReplyRecieved(QNetworkReply *_reply, const bool _sho | ||||
|     _reply->deleteLater(); | ||||
|  | ||||
|     // convert to map | ||||
|     QVariantMap firstRelease = jsonDoc.toVariant().toList().first().toMap(); | ||||
|     QString version = firstRelease["tag_name"].toString(); | ||||
|     auto firstRelease = jsonDoc.toVariant().toList().first().toMap(); | ||||
|     auto version = firstRelease["tag_name"].toString(); | ||||
|     version.remove("V."); | ||||
|     m_foundVersion = QVersionNumber::fromString(version); | ||||
|     qCInfo(LOG_AW) << "Update found version to" << m_foundVersion; | ||||
|  | ||||
|     QVersionNumber oldVersion = QVersionNumber::fromString(VERSION); | ||||
|     auto oldVersion = QVersionNumber::fromString(VERSION); | ||||
|     if (oldVersion < m_foundVersion) | ||||
|         return showUpdates(m_foundVersion); | ||||
|     else if (_showAnyway) | ||||
| @ -157,18 +149,12 @@ void AWUpdateHelper::versionReplyRecieved(QNetworkReply *_reply, const bool _sho | ||||
|  | ||||
|  | ||||
| // additional method which is used to show message box which does not block UI | ||||
| QMessageBox *AWUpdateHelper::genMessageBox(const QString &_title, const QString &_body, | ||||
|                                            const QMessageBox::StandardButtons _buttons) | ||||
| KNotification *AWUpdateHelper::sendNotification(const QString &_title, const QString &_body) | ||||
| { | ||||
|     qCDebug(LOG_AW) << "Construct message box with title" << _title << "and body" << _body; | ||||
|  | ||||
|     auto *msgBox = new QMessageBox(nullptr); | ||||
|     msgBox->setAttribute(Qt::WA_DeleteOnClose); | ||||
|     msgBox->setModal(false); | ||||
|     msgBox->setWindowTitle(_title); | ||||
|     msgBox->setText(_body); | ||||
|     msgBox->setStandardButtons(_buttons); | ||||
|     msgBox->setIcon(QMessageBox::Information); | ||||
|     auto event = KNotification::event("system", _title, _body); | ||||
|     event->setComponentName("plasma-applet-org.kde.plasma.awesome-widget"); | ||||
|  | ||||
|     return msgBox; | ||||
|     return event; | ||||
| } | ||||
|  | ||||
| @ -15,15 +15,13 @@ | ||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
| #pragma once | ||||
|  | ||||
| #ifndef AWUPDATEHELPER_H | ||||
| #define AWUPDATEHELPER_H | ||||
|  | ||||
| #include <QMessageBox> | ||||
| #include <QObject> | ||||
| #include <QVersionNumber> | ||||
|  | ||||
|  | ||||
| class KNotification; | ||||
| class QNetworkReply; | ||||
|  | ||||
| class AWUpdateHelper : public QObject | ||||
| @ -37,17 +35,13 @@ public: | ||||
|     bool checkVersion(); | ||||
|  | ||||
| private slots: | ||||
|     void openReleasesPage(); | ||||
|     static void showInfo(const QVersionNumber &_version); | ||||
|     void showUpdates(const QVersionNumber &_version); | ||||
|     void userReplyOnUpdates(QAbstractButton *_button); | ||||
|     void versionReplyRecieved(QNetworkReply *_reply, bool _showAnyway); | ||||
|     void versionReplyReceived(QNetworkReply *_reply, bool _showAnyway); | ||||
|  | ||||
| private: | ||||
|     static QMessageBox *genMessageBox(const QString &_title, const QString &_body, | ||||
|                                       QMessageBox::StandardButtons _buttons); | ||||
|     static KNotification *sendNotification(const QString &_title, const QString &_body); | ||||
|     QVersionNumber m_foundVersion; | ||||
|     QString m_genericConfig; | ||||
| }; | ||||
|  | ||||
|  | ||||
| #endif /* AWUPDATEHELPER_H */ | ||||
|  | ||||
| @ -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) | ||||
|  | ||||
| @ -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); | ||||
| } | ||||
|  | ||||
|  | ||||
| @ -200,7 +198,7 @@ void AbstractExtItem::setCron(const QString &_cron) | ||||
|     qCDebug(LOG_LIB) << "Cron string" << _cron; | ||||
|     // deinit module first | ||||
|     if (m_scheduler) { | ||||
|         disconnect(m_scheduler, SIGNAL(activated()), this, SIGNAL(requestDataUpdate())); | ||||
|         disconnect(m_scheduler, &QCronScheduler::activated, this, &AbstractExtItem::requestDataUpdate); | ||||
|         delete m_scheduler; | ||||
|     } | ||||
|  | ||||
| @ -211,7 +209,7 @@ void AbstractExtItem::setCron(const QString &_cron) | ||||
|     // init scheduler | ||||
|     m_scheduler = new QCronScheduler(this); | ||||
|     m_scheduler->parse(cron()); | ||||
|     connect(m_scheduler, SIGNAL(activated()), this, SIGNAL(requestDataUpdate())); | ||||
|     connect(m_scheduler, &QCronScheduler::activated, this, &AbstractExtItem::requestDataUpdate); | ||||
| } | ||||
|  | ||||
|  | ||||
| @ -236,7 +234,7 @@ void AbstractExtItem::setName(const QString &_name) | ||||
| void AbstractExtItem::setNumber(int _number) | ||||
| { | ||||
|     qCDebug(LOG_LIB) << "Number" << _number; | ||||
|     bool generateNumber = (_number == -1); | ||||
|     auto generateNumber = (_number == -1); | ||||
|     if (generateNumber) { | ||||
|         _number = []() { | ||||
|             qCWarning(LOG_LIB) << "Number is empty, generate new one"; | ||||
| @ -269,8 +267,8 @@ void AbstractExtItem::deinitSocket() | ||||
|  | ||||
|     m_socket->close(); | ||||
|     QLocalServer::removeServer(socket()); | ||||
|     disconnect(m_socket, &QLocalServer::newConnection, this, &AbstractExtItem::newConnectionReceived); | ||||
|     delete m_socket; | ||||
|     disconnect(m_socket, SIGNAL(newConnection()), this, SLOT(newConnectionReceived())); | ||||
| } | ||||
|  | ||||
|  | ||||
| @ -280,9 +278,9 @@ void AbstractExtItem::initSocket() | ||||
|     deinitSocket(); | ||||
|  | ||||
|     m_socket = new QLocalServer(this); | ||||
|     bool listening = m_socket->listen(socket()); | ||||
|     auto listening = m_socket->listen(socket()); | ||||
|     qCInfo(LOG_LIB) << "Server listening on" << socket() << listening; | ||||
|     connect(m_socket, SIGNAL(newConnection()), this, SLOT(newConnectionReceived())); | ||||
|     connect(m_socket, &QLocalServer::newConnection, this, &AbstractExtItem::newConnectionReceived); | ||||
| } | ||||
|  | ||||
|  | ||||
| @ -305,7 +303,7 @@ void AbstractExtItem::readConfiguration() | ||||
|  | ||||
| bool AbstractExtItem::tryDelete() const | ||||
| { | ||||
|     bool status = QFile::remove(m_fileName); | ||||
|     auto status = QFile::remove(m_fileName); | ||||
|     qCInfo(LOG_LIB) << "Remove file" << m_fileName << status; | ||||
|  | ||||
|     return status; | ||||
|  | ||||
| @ -15,17 +15,16 @@ | ||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
| #ifndef ABSTRACTEXTITEM_H | ||||
| #define ABSTRACTEXTITEM_H | ||||
| #pragma once | ||||
|  | ||||
| #include <QDialog> | ||||
| #include <QVariant> | ||||
|  | ||||
|  | ||||
| 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 +39,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 +77,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 +88,8 @@ private: | ||||
|     QCronScheduler *m_scheduler = nullptr; | ||||
|     QString m_fileName = "/dev/null"; | ||||
|     int m_times = 0; | ||||
|     virtual void translate() = 0; | ||||
|     // FIXME find a better way to do it | ||||
|     virtual void translate(void *_ui) = 0; | ||||
|     // properties | ||||
|     int m_apiVersion = 0; | ||||
|     bool m_active = true; | ||||
| @ -101,6 +101,3 @@ private: | ||||
|     QLocalServer *m_socket = nullptr; | ||||
|     QString m_socketFile = ""; | ||||
| }; | ||||
|  | ||||
|  | ||||
| #endif /* ABSTRACTEXTITEM_H */ | ||||
|  | ||||
| @ -26,65 +26,45 @@ | ||||
| #include <utility> | ||||
|  | ||||
|  | ||||
| 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() | ||||
| void AbstractExtItemAggregator::copyItem(QListWidget *_widget) | ||||
| { | ||||
|     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; | ||||
|  | ||||
|     delete ui; | ||||
| } | ||||
|  | ||||
|  | ||||
| void AbstractExtItemAggregator::copyItem() | ||||
| { | ||||
|     AbstractExtItem *source = itemFromWidget(); | ||||
|     QString fileName = getName(); | ||||
|     int number = uniqNumber(); | ||||
|     QString dir = QString("%1/awesomewidgets/%2") | ||||
|                       .arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)) | ||||
|                       .arg(m_type); | ||||
|     auto source = itemFromWidget(_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<QPushButton *>(_button) == copyButton) | ||||
|             copyItem(ui->listWidget); | ||||
|         else if (dynamic_cast<QPushButton *>(_button) == createButton) | ||||
|             doCreateItem(ui->listWidget); | ||||
|         else if (dynamic_cast<QPushButton *>(_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<QPushButton *>(_button) == copyButton) | ||||
|         return copyItem(); | ||||
|     else if (dynamic_cast<QPushButton *>(_button) == createButton) | ||||
|         return doCreateItem(); | ||||
|     else if (dynamic_cast<QPushButton *>(_button) == deleteButton) | ||||
|         return deleteItem(); | ||||
|     else if (ui->buttonBox->buttonRole(_button) == QDialogButtonBox::AcceptRole) | ||||
|         return editItem(); | ||||
| } | ||||
|  | ||||
| @ -15,10 +15,8 @@ | ||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
| #ifndef ABSTRACTEXTITEMAGGREGATOR_H | ||||
| #define ABSTRACTEXTITEMAGGREGATOR_H | ||||
| #pragma once | ||||
|  | ||||
| #include <QDialog> | ||||
| #include <QStandardPaths> | ||||
|  | ||||
| #include "abstractextitem.h" | ||||
| @ -26,49 +24,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 <class T> void createItem() | ||||
|     void copyItem(QListWidget *_widget); | ||||
|     template <class T> 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,22 +72,10 @@ public: | ||||
|     // set methods | ||||
|     void setConfigArgs(const QVariant &_configArgs); | ||||
|  | ||||
| private slots: | ||||
|     void editItemActivated(QListWidgetItem *); | ||||
|     void editItemButtonPressed(QAbstractButton *_button); | ||||
|  | ||||
| private: | ||||
|     // ui | ||||
|     Ui::AbstractExtItemAggregator *ui = nullptr; | ||||
|     QPushButton *copyButton = nullptr; | ||||
|     QPushButton *createButton = nullptr; | ||||
|     QPushButton *deleteButton = nullptr; | ||||
|     // properties | ||||
|     QVariant m_configArgs; | ||||
|     QString m_type; | ||||
|     // ui methods | ||||
|     virtual void doCreateItem() = 0; | ||||
|     virtual void doCreateItem(QListWidget *_widget) = 0; | ||||
| }; | ||||
|  | ||||
|  | ||||
| #endif /* ABSTRACTEXTITEMAGGREGATOR_H */ | ||||
|  | ||||
| @ -15,8 +15,7 @@ | ||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
| #ifndef ABSTRACTQUOTESPROVIDER_H | ||||
| #define ABSTRACTQUOTESPROVIDER_H | ||||
| #pragma once | ||||
|  | ||||
| #include <QObject> | ||||
| #include <QUrl> | ||||
| @ -40,6 +39,3 @@ public: | ||||
|     }; | ||||
|     [[nodiscard]] virtual QUrl url() const = 0; | ||||
| }; | ||||
|  | ||||
|  | ||||
| #endif /* ABSTRACTQUOTESPROVIDER_H */ | ||||
|  | ||||
| @ -15,8 +15,7 @@ | ||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
| #ifndef ABSTRACTWEATHERPROVIDER_H | ||||
| #define ABSTRACTWEATHERPROVIDER_H | ||||
| #pragma once | ||||
|  | ||||
| #include <QObject> | ||||
| #include <QUrl> | ||||
| @ -40,6 +39,3 @@ public: | ||||
|     }; | ||||
|     [[nodiscard]] virtual QUrl url() const = 0; | ||||
| }; | ||||
|  | ||||
|  | ||||
| #endif /* ABSTRACTWEATHERPROVIDER_H */ | ||||
|  | ||||
| @ -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()); | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
| @ -15,8 +15,9 @@ | ||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
| #ifndef AWABSTRACTFORMATTER_H | ||||
| #define AWABSTRACTFORMATTER_H | ||||
| #pragma once | ||||
|  | ||||
| #include <QRegularExpression> | ||||
|  | ||||
| #include "abstractextitem.h" | ||||
|  | ||||
| @ -30,8 +31,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; | ||||
| @ -50,6 +51,3 @@ private: | ||||
|     // properties | ||||
|     FormatterClass m_type = FormatterClass::NoFormat; | ||||
| }; | ||||
|  | ||||
|  | ||||
| #endif /* AWABSTRACTFORMATTER_H */ | ||||
|  | ||||
| @ -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<QWidget *>(parent()), _fileName); | ||||
|     auto item = new AWDateTimeFormatter(parent(), _fileName); | ||||
|     AWAbstractFormatter::copyDefaults(item); | ||||
|     item->setFormat(format()); | ||||
|     item->setTranslateString(translateString()); | ||||
| @ -114,19 +102,23 @@ 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; | ||||
|     auto ret = dialog->exec(); | ||||
|     if (ret == 1) { | ||||
|         setName(ui->lineEdit_name->text()); | ||||
|         setComment(ui->lineEdit_comment->text()); | ||||
|         setApiVersion(AW_FORMATTER_API); | ||||
| @ -135,6 +127,11 @@ int AWDateTimeFormatter::showConfiguration(const QVariant &_args) | ||||
|         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::AWDateTimeFormatter *>(_ui); | ||||
|  | ||||
|     ui->label_name->setText(i18n("Name")); | ||||
|     ui->label_comment->setText(i18n("Comment")); | ||||
|     ui->label_type->setText(i18n("Type")); | ||||
|  | ||||
| @ -15,19 +15,13 @@ | ||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
| #ifndef AWDATETIMEFORMATTER_H | ||||
| #define AWDATETIMEFORMATTER_H | ||||
| #pragma once | ||||
|  | ||||
| #include <QLocale> | ||||
|  | ||||
| #include "awabstractformatter.h" | ||||
|  | ||||
|  | ||||
| namespace Ui | ||||
| { | ||||
| class AWDateTimeFormatter; | ||||
| } | ||||
|  | ||||
| class AWDateTimeFormatter : public AWAbstractFormatter | ||||
| { | ||||
|     Q_OBJECT | ||||
| @ -35,8 +29,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,18 +40,14 @@ public: | ||||
|  | ||||
| public slots: | ||||
|     void readConfiguration() override; | ||||
|     int showConfiguration(const QVariant &_args) override; | ||||
|     int showConfiguration(QWidget *_parent, const QVariant &_args) override; | ||||
|     void writeConfiguration() const override; | ||||
|  | ||||
| private: | ||||
|     Ui::AWDateTimeFormatter *ui = nullptr; | ||||
|     void initLocale(); | ||||
|     void translate() override; | ||||
|     void translate(void *_ui) override; | ||||
|     // properties | ||||
|     QLocale m_locale; | ||||
|     QString m_format = ""; | ||||
|     bool m_translate = true; | ||||
| }; | ||||
|  | ||||
|  | ||||
| #endif /* AWDATETIMEFORMATTER_H */ | ||||
|  | ||||
| @ -5,120 +5,120 @@ | ||||
|     "image": { | ||||
|         "__comment": "should be described as html image with full path inside", | ||||
|  | ||||
|         "default": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/3200.gif\">", | ||||
|         "default": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/3200.gif\">", | ||||
|  | ||||
|         "800": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/01d.png\">", | ||||
|         "800": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/01d.png\">", | ||||
|  | ||||
|         "801": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/02d.png\">", | ||||
|         "801": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/02d.png\">", | ||||
|  | ||||
|         "802": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/03d.png\">", | ||||
|         "803": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/03d.png\">", | ||||
|         "802": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/03d.png\">", | ||||
|         "803": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/03d.png\">", | ||||
|  | ||||
|         "804": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/04d.png\">", | ||||
|                 "804": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/04d.png\">", | ||||
|  | ||||
|         "300": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/09d.png\">", | ||||
|         "301": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/09d.png\">", | ||||
|         "302": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/09d.png\">", | ||||
|         "310": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/09d.png\">", | ||||
|         "311": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/09d.png\">", | ||||
|         "312": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/09d.png\">", | ||||
|         "313": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/09d.png\">", | ||||
|         "314": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/09d.png\">", | ||||
|         "321": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/09d.png\">", | ||||
|         "520": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/09d.png\">", | ||||
|         "521": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/09d.png\">", | ||||
|         "522": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/09d.png\">", | ||||
|         "531": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/09d.png\">", | ||||
|         "300": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/09d.png\">", | ||||
|         "301": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/09d.png\">", | ||||
|         "302": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/09d.png\">", | ||||
|         "310": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/09d.png\">", | ||||
|         "311": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/09d.png\">", | ||||
|         "312": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/09d.png\">", | ||||
|         "313": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/09d.png\">", | ||||
|         "314": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/09d.png\">", | ||||
|         "321": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/09d.png\">", | ||||
|         "520": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/09d.png\">", | ||||
|         "521": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/09d.png\">", | ||||
|         "522": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/09d.png\">", | ||||
|         "531": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/09d.png\">", | ||||
|  | ||||
|         "500": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/10d.png\">", | ||||
|         "501": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/10d.png\">", | ||||
|         "502": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/10d.png\">", | ||||
|         "503": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/10d.png\">", | ||||
|         "504": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/10d.png\">", | ||||
|         "500": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/10d.png\">", | ||||
|         "501": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/10d.png\">", | ||||
|         "502": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/10d.png\">", | ||||
|         "503": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/10d.png\">", | ||||
|         "504": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/10d.png\">", | ||||
|  | ||||
|         "200": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/11d.png\">", | ||||
|         "201": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/11d.png\">", | ||||
|         "202": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/11d.png\">", | ||||
|         "210": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/11d.png\">", | ||||
|         "211": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/11d.png\">", | ||||
|         "212": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/11d.png\">", | ||||
|         "221": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/11d.png\">", | ||||
|         "230": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/11d.png\">", | ||||
|         "231": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/11d.png\">", | ||||
|         "232": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/11d.png\">", | ||||
|         "200": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/11d.png\">", | ||||
|         "201": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/11d.png\">", | ||||
|         "202": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/11d.png\">", | ||||
|         "210": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/11d.png\">", | ||||
|         "211": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/11d.png\">", | ||||
|         "212": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/11d.png\">", | ||||
|         "221": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/11d.png\">", | ||||
|         "230": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/11d.png\">", | ||||
|         "231": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/11d.png\">", | ||||
|         "232": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/11d.png\">", | ||||
|  | ||||
|         "511": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/13d.png\">", | ||||
|         "600": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/13d.png\">", | ||||
|         "601": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/13d.png\">", | ||||
|         "602": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/13d.png\">", | ||||
|         "611": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/13d.png\">", | ||||
|         "612": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/13d.png\">", | ||||
|         "615": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/13d.png\">", | ||||
|         "616": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/13d.png\">", | ||||
|         "620": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/13d.png\">", | ||||
|         "621": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/13d.png\">", | ||||
|         "622": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/13d.png\">", | ||||
|         "511": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/13d.png\">", | ||||
|         "600": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/13d.png\">", | ||||
|         "601": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/13d.png\">", | ||||
|         "602": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/13d.png\">", | ||||
|         "611": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/13d.png\">", | ||||
|         "612": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/13d.png\">", | ||||
|         "615": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/13d.png\">", | ||||
|         "616": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/13d.png\">", | ||||
|         "620": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/13d.png\">", | ||||
|         "621": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/13d.png\">", | ||||
|         "622": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/13d.png\">", | ||||
|  | ||||
|         "701": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/50d.png\">", | ||||
|         "711": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/50d.png\">", | ||||
|         "721": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/50d.png\">", | ||||
|         "731": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/50d.png\">", | ||||
|         "741": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/50d.png\">", | ||||
|         "751": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/50d.png\">", | ||||
|         "761": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/50d.png\">", | ||||
|         "762": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/50d.png\">", | ||||
|         "771": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/50d.png\">", | ||||
|         "781": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/50d.png\">", | ||||
|         "701": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/50d.png\">", | ||||
|         "711": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/50d.png\">", | ||||
|         "721": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/50d.png\">", | ||||
|         "731": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/50d.png\">", | ||||
|         "741": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/50d.png\">", | ||||
|         "751": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/50d.png\">", | ||||
|         "761": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/50d.png\">", | ||||
|         "762": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/50d.png\">", | ||||
|         "771": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/50d.png\">", | ||||
|         "781": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/50d.png\">", | ||||
|  | ||||
|         "0": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/0.gif\">", | ||||
|         "1": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/1.gif\">", | ||||
|         "2": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/2.gif\">", | ||||
|         "3": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/3.gif\">", | ||||
|         "4": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/4.gif\">", | ||||
|         "5": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/5.gif\">", | ||||
|         "6": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/6.gif\">", | ||||
|         "7": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/7.gif\">", | ||||
|         "8": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/8.gif\">", | ||||
|         "9": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/9.gif\">", | ||||
|         "10": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/10.gif\">", | ||||
|         "11": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/11.gif\">", | ||||
|         "12": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/12.gif\">", | ||||
|         "13": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/13.gif\">", | ||||
|         "14": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/14.gif\">", | ||||
|         "15": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/15.gif\">", | ||||
|         "16": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/16.gif\">", | ||||
|         "17": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/17.gif\">", | ||||
|         "18": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/18.gif\">", | ||||
|         "19": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/19.gif\">", | ||||
|         "20": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/20.gif\">", | ||||
|         "21": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/21.gif\">", | ||||
|         "22": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/22.gif\">", | ||||
|         "23": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/23.gif\">", | ||||
|         "24": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/24.gif\">", | ||||
|         "25": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/25.gif\">", | ||||
|         "26": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/26.gif\">", | ||||
|         "27": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/27.gif\">", | ||||
|         "28": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/28.gif\">", | ||||
|         "29": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/29.gif\">", | ||||
|         "30": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/30.gif\">", | ||||
|         "31": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/31.gif\">", | ||||
|         "32": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/32.gif\">", | ||||
|         "33": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/33.gif\">", | ||||
|         "34": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/34.gif\">", | ||||
|         "35": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/35.gif\">", | ||||
|         "36": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/36.gif\">", | ||||
|         "37": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/37.gif\">", | ||||
|         "38": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/38.gif\">", | ||||
|         "39": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/39.gif\">", | ||||
|         "40": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/40.gif\">", | ||||
|         "41": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/41.gif\">", | ||||
|         "42": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/42.gif\">", | ||||
|         "43": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/43.gif\">", | ||||
|         "44": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/44.gif\">", | ||||
|         "45": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/45.gif\">", | ||||
|         "46": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/46.gif\">", | ||||
|         "47": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/47.gif\">", | ||||
|         "3200": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/3200.gif\">" | ||||
|         "0": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/0.gif\">", | ||||
|         "1": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/1.gif\">", | ||||
|         "2": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/2.gif\">", | ||||
|         "3": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/3.gif\">", | ||||
|         "4": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/4.gif\">", | ||||
|         "5": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/5.gif\">", | ||||
|         "6": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/6.gif\">", | ||||
|         "7": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/7.gif\">", | ||||
|         "8": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/8.gif\">", | ||||
|         "9": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/9.gif\">", | ||||
|         "10": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/10.gif\">", | ||||
|         "11": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/11.gif\">", | ||||
|         "12": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/12.gif\">", | ||||
|         "13": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/13.gif\">", | ||||
|         "14": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/14.gif\">", | ||||
|         "15": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/15.gif\">", | ||||
|         "16": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/16.gif\">", | ||||
|         "17": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/17.gif\">", | ||||
|         "18": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/18.gif\">", | ||||
|         "19": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/19.gif\">", | ||||
|         "20": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/20.gif\">", | ||||
|         "21": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/21.gif\">", | ||||
|         "22": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/22.gif\">", | ||||
|         "23": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/23.gif\">", | ||||
|         "24": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/24.gif\">", | ||||
|         "25": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/25.gif\">", | ||||
|         "26": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/26.gif\">", | ||||
|         "27": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/27.gif\">", | ||||
|         "28": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/28.gif\">", | ||||
|         "29": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/29.gif\">", | ||||
|         "30": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/30.gif\">", | ||||
|         "31": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/31.gif\">", | ||||
|         "32": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/32.gif\">", | ||||
|         "33": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/33.gif\">", | ||||
|         "34": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/34.gif\">", | ||||
|         "35": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/35.gif\">", | ||||
|         "36": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/36.gif\">", | ||||
|         "37": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/37.gif\">", | ||||
|         "38": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/38.gif\">", | ||||
|         "39": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/39.gif\">", | ||||
|         "40": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/40.gif\">", | ||||
|         "41": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/41.gif\">", | ||||
|         "42": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/42.gif\">", | ||||
|         "43": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/43.gif\">", | ||||
|         "44": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/44.gif\">", | ||||
|         "45": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/45.gif\">", | ||||
|         "46": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/46.gif\">", | ||||
|         "47": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/47.gif\">", | ||||
|         "3200": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/3200.gif\">" | ||||
|     }, | ||||
|  | ||||
|     "text": { | ||||
|  | ||||
| @ -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<QWidget *>(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,9 +210,8 @@ int AWFloatFormatter::showConfiguration(const QVariant &_args) | ||||
|     ui->doubleSpinBox_multiplier->setValue(multiplier()); | ||||
|     ui->doubleSpinBox_summand->setValue(summand()); | ||||
|  | ||||
|     int ret = exec(); | ||||
|     if (ret != 1) | ||||
|         return ret; | ||||
|     auto ret = dialog->exec(); | ||||
|     if (ret == 1) { | ||||
|         setName(ui->lineEdit_name->text()); | ||||
|         setComment(ui->lineEdit_comment->text()); | ||||
|         setApiVersion(AW_FORMATTER_API); | ||||
| @ -233,6 +225,11 @@ int AWFloatFormatter::showConfiguration(const QVariant &_args) | ||||
|         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::AWFloatFormatter *>(_ui); | ||||
|  | ||||
|     ui->label_name->setText(i18n("Name")); | ||||
|     ui->label_comment->setText(i18n("Comment")); | ||||
|     ui->label_type->setText(i18n("Type")); | ||||
|  | ||||
| @ -15,17 +15,11 @@ | ||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
| #ifndef AWFLOATFORMATTER_H | ||||
| #define AWFLOATFORMATTER_H | ||||
| #pragma once | ||||
|  | ||||
| #include "awabstractformatter.h" | ||||
|  | ||||
|  | ||||
| namespace Ui | ||||
| { | ||||
| class AWFloatFormatter; | ||||
| } | ||||
|  | ||||
| class AWFloatFormatter : public AWAbstractFormatter | ||||
| { | ||||
|     Q_OBJECT | ||||
| @ -38,8 +32,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 +53,11 @@ public: | ||||
|  | ||||
| public slots: | ||||
|     void readConfiguration() override; | ||||
|     int showConfiguration(const QVariant &_args) override; | ||||
|     int showConfiguration(QWidget *_parent, const QVariant &_args) override; | ||||
|     void writeConfiguration() const override; | ||||
|  | ||||
| private: | ||||
|     Ui::AWFloatFormatter *ui = nullptr; | ||||
|     void translate() override; | ||||
|     void translate(void *_ui) override; | ||||
|     // properties | ||||
|     int m_count = 0; | ||||
|     QChar m_fillChar = QChar(); | ||||
| @ -75,6 +67,3 @@ private: | ||||
|     int m_precision = -1; | ||||
|     double m_summand = 0.0; | ||||
| }; | ||||
|  | ||||
|  | ||||
| #endif /* AWFLOATFORMATTER_H */ | ||||
|  | ||||
| @ -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,7 +41,7 @@ QString AWJsonFormatter::convert(const QVariant &_value) const | ||||
|     qCDebug(LOG_LIB) << "Convert value" << _value; | ||||
|  | ||||
|     // check if _value is string and parse first if required | ||||
|     QJsonDocument json = _value.type() == QVariant::String ? QJsonDocument::fromJson(_value.toString().toUtf8()) | ||||
|     QJsonDocument json = _value.userType() == QMetaType::QString ? QJsonDocument::fromJson(_value.toString().toUtf8()) | ||||
|                                                                  : QJsonDocument::fromVariant(_value); | ||||
|     QVariant converted = json.toVariant(); | ||||
|     for (auto &element : m_splittedPath) | ||||
| @ -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<QWidget *>(parent()), _fileName); | ||||
|     auto item = new AWJsonFormatter(parent(), _fileName); | ||||
|     AWAbstractFormatter::copyDefaults(item); | ||||
|     item->setNumber(_number); | ||||
|     item->setPath(path()); | ||||
| @ -105,18 +93,22 @@ 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; | ||||
|     auto ret = dialog->exec(); | ||||
|     if (ret == 1) { | ||||
|         setName(ui->lineEdit_name->text()); | ||||
|         setComment(ui->lineEdit_comment->text()); | ||||
|         setApiVersion(AW_FORMATTER_API); | ||||
| @ -124,6 +116,11 @@ int AWJsonFormatter::showConfiguration(const QVariant &args) | ||||
|         setPath(ui->lineEdit_path->text()); | ||||
|  | ||||
|         writeConfiguration(); | ||||
|     } | ||||
|  | ||||
|     dialog->deleteLater(); | ||||
|     delete ui; | ||||
|  | ||||
|     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::AWJsonFormatter *>(_ui); | ||||
|  | ||||
|     ui->label_name->setText(i18n("Name")); | ||||
|     ui->label_comment->setText(i18n("Comment")); | ||||
|     ui->label_type->setText(i18n("Type")); | ||||
|  | ||||
| @ -15,25 +15,18 @@ | ||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
| #ifndef AWJSONFORMATTER_H | ||||
| #define AWJSONFORMATTER_H | ||||
| #pragma once | ||||
|  | ||||
| #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,20 +35,16 @@ public: | ||||
|  | ||||
| public slots: | ||||
|     void readConfiguration() override; | ||||
|     int showConfiguration(const QVariant &_args) override; | ||||
|     int showConfiguration(QWidget *_parent, const QVariant &_args) override; | ||||
|     void writeConfiguration() const override; | ||||
|  | ||||
| private: | ||||
|     Ui::AWJsonFormatter *ui = nullptr; | ||||
|     static QVariant getFromJson(const QVariant &_value, const QVariant &_element); | ||||
|     static QVariant getFromList(const QVariant &_value, int _index); | ||||
|     static QVariant getFromMap(const QVariant &_value, const QString &_key); | ||||
|     void initPath(); | ||||
|     void translate() override; | ||||
|     void translate(void *_ui) override; | ||||
|     // properties | ||||
|     QString m_path; | ||||
|     QVariantList m_splittedPath; | ||||
| }; | ||||
|  | ||||
|  | ||||
| #endif /* AWJSONFORMATTER_H */ | ||||
|  | ||||
| @ -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<QWidget *>(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,9 +137,8 @@ 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; | ||||
|     auto ret = dialog->exec(); | ||||
|     if (ret == 1) { | ||||
|         setName(ui->lineEdit_name->text()); | ||||
|         setComment(ui->lineEdit_comment->text()); | ||||
|         setApiVersion(AW_FORMATTER_API); | ||||
| @ -156,6 +148,11 @@ int AWListFormatter::showConfiguration(const QVariant &_args) | ||||
|         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::AWListFormatter *>(_ui); | ||||
|  | ||||
|     ui->label_name->setText(i18n("Name")); | ||||
|     ui->label_comment->setText(i18n("Comment")); | ||||
|     ui->label_type->setText(i18n("Type")); | ||||
|  | ||||
| @ -15,17 +15,11 @@ | ||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
| #ifndef AWLISTFORMATTER_H | ||||
| #define AWLISTFORMATTER_H | ||||
| #pragma once | ||||
|  | ||||
| #include "awabstractformatter.h" | ||||
|  | ||||
|  | ||||
| namespace Ui | ||||
| { | ||||
| class AWListFormatter; | ||||
| } | ||||
|  | ||||
| class AWListFormatter : public AWAbstractFormatter | ||||
| { | ||||
|     Q_OBJECT | ||||
| @ -34,8 +28,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,18 +41,14 @@ public: | ||||
|  | ||||
| public slots: | ||||
|     void readConfiguration() override; | ||||
|     int showConfiguration(const QVariant &_args) override; | ||||
|     int showConfiguration(QWidget *_parent, const QVariant &_args) override; | ||||
|     void writeConfiguration() const override; | ||||
|  | ||||
| private: | ||||
|     Ui::AWListFormatter *ui = nullptr; | ||||
|     void translate() override; | ||||
|     void translate(void *_ui) override; | ||||
|     // properties | ||||
|     QString m_filter = ""; | ||||
|     QString m_separator = ""; | ||||
|     bool m_sorted = false; | ||||
|     QRegExp m_regex; | ||||
|     QRegularExpression m_regex; | ||||
| }; | ||||
|  | ||||
|  | ||||
| #endif /* AWLISTFORMATTER_H */ | ||||
|  | ||||
| @ -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<QWidget *>(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; | ||||
|     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; | ||||
|  | ||||
|     return ret; | ||||
| } | ||||
|  | ||||
|  | ||||
| void AWNoFormatter::translate() | ||||
| void AWNoFormatter::translate(void *_ui) | ||||
| { | ||||
|     auto ui = reinterpret_cast<Ui::AWNoFormatter *>(_ui); | ||||
|  | ||||
|     ui->label_name->setText(i18n("Name")); | ||||
|     ui->label_comment->setText(i18n("Comment")); | ||||
|     ui->label_type->setText(i18n("Type")); | ||||
|  | ||||
| @ -15,35 +15,24 @@ | ||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
| #ifndef AWNOFORMATTER_H | ||||
| #define AWNOFORMATTER_H | ||||
| #pragma once | ||||
|  | ||||
| #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 | ||||
| }; | ||||
|  | ||||
|  | ||||
| #endif /* AWNOFORMATTER_H */ | ||||
|  | ||||
| @ -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<QWidget *>(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,9 +153,8 @@ 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; | ||||
|     int ret = dialog->exec(); | ||||
|     if (ret == 1) { | ||||
|         setName(ui->lineEdit_name->text()); | ||||
|         setComment(ui->lineEdit_comment->text()); | ||||
|         setApiVersion(AW_FORMATTER_API); | ||||
| @ -174,6 +165,11 @@ int AWScriptFormatter::showConfiguration(const QVariant &_args) | ||||
|         initProgram(); | ||||
|  | ||||
|         writeConfiguration(); | ||||
|     } | ||||
|  | ||||
|     dialog->deleteLater(); | ||||
|     delete ui; | ||||
|  | ||||
|     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::AWScriptFormatter *>(_ui); | ||||
|  | ||||
|     ui->label_name->setText(i18n("Name")); | ||||
|     ui->label_comment->setText(i18n("Comment")); | ||||
|     ui->label_type->setText(i18n("Type")); | ||||
|  | ||||
| @ -15,17 +15,11 @@ | ||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
| #ifndef AWSCRIPTFORMATTER_H | ||||
| #define AWSCRIPTFORMATTER_H | ||||
| #pragma once | ||||
|  | ||||
| #include "awabstractformatter.h" | ||||
|  | ||||
|  | ||||
| namespace Ui | ||||
| { | ||||
| class AWScriptFormatter; | ||||
| } | ||||
|  | ||||
| class AWScriptFormatter : public AWAbstractFormatter | ||||
| { | ||||
|     Q_OBJECT | ||||
| @ -35,8 +29,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,19 +43,15 @@ public: | ||||
|  | ||||
| public slots: | ||||
|     void readConfiguration() override; | ||||
|     int showConfiguration(const QVariant &_args) override; | ||||
|     int showConfiguration(QWidget *_parent, const QVariant &_args) override; | ||||
|     void writeConfiguration() const override; | ||||
|  | ||||
| private: | ||||
|     Ui::AWScriptFormatter *ui = nullptr; | ||||
|     void initProgram(); | ||||
|     void translate() override; | ||||
|     void translate(void *_ui) override; | ||||
|     // properties | ||||
|     bool m_appendCode = true; | ||||
|     QString m_code = ""; | ||||
|     bool m_hasReturn = false; | ||||
|     QString m_program; | ||||
| }; | ||||
|  | ||||
|  | ||||
| #endif /* AWSCRIPTFORMATTER_H */ | ||||
|  | ||||
| @ -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<QWidget *>(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,9 +136,8 @@ 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; | ||||
|     auto ret = dialog->exec(); | ||||
|     if (ret == 1) { | ||||
|         setName(ui->lineEdit_name->text()); | ||||
|         setComment(ui->lineEdit_comment->text()); | ||||
|         setApiVersion(AW_FORMATTER_API); | ||||
| @ -155,6 +147,11 @@ int AWStringFormatter::showConfiguration(const QVariant &_args) | ||||
|         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::AWStringFormatter *>(_ui); | ||||
|  | ||||
|     ui->label_name->setText(i18n("Name")); | ||||
|     ui->label_comment->setText(i18n("Comment")); | ||||
|     ui->label_type->setText(i18n("Type")); | ||||
|  | ||||
| @ -15,17 +15,11 @@ | ||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
| #ifndef AWSTRINGFORMATTER_H | ||||
| #define AWSTRINGFORMATTER_H | ||||
| #pragma once | ||||
|  | ||||
| #include "awabstractformatter.h" | ||||
|  | ||||
|  | ||||
| namespace Ui | ||||
| { | ||||
| class AWStringFormatter; | ||||
| } | ||||
|  | ||||
| class AWStringFormatter : public AWAbstractFormatter | ||||
| { | ||||
|     Q_OBJECT | ||||
| @ -34,8 +28,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,17 +41,13 @@ public: | ||||
|  | ||||
| public slots: | ||||
|     void readConfiguration() override; | ||||
|     int showConfiguration(const QVariant &_args) override; | ||||
|     int showConfiguration(QWidget *_parent, const QVariant &_args) override; | ||||
|     void writeConfiguration() const override; | ||||
|  | ||||
| private: | ||||
|     Ui::AWStringFormatter *ui = nullptr; | ||||
|     void translate() override; | ||||
|     void translate(void *_ui) override; | ||||
|     // properties | ||||
|     int m_count = 0; | ||||
|     QChar m_fillChar = QChar(); | ||||
|     bool m_forceWidth = false; | ||||
| }; | ||||
|  | ||||
|  | ||||
| #endif /* AWSTRINGFORMATTER_H */ | ||||
|  | ||||
| @ -15,8 +15,7 @@ | ||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
| #ifndef EXTITEMAGGREGATOR_H | ||||
| #define EXTITEMAGGREGATOR_H | ||||
| #pragma once | ||||
|  | ||||
| #include <KI18n/KLocalizedString> | ||||
|  | ||||
| @ -31,7 +30,7 @@ | ||||
| template <class T> 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 +55,7 @@ public: | ||||
|  | ||||
|     void editItems() | ||||
|     { | ||||
|         repaintList(); | ||||
|         int ret = exec(); | ||||
|         auto ret = exec(); | ||||
|         qCInfo(LOG_LIB) << "Dialog returns" << ret; | ||||
|     }; | ||||
|  | ||||
| @ -67,7 +65,7 @@ public: | ||||
|         m_activeItems.clear(); | ||||
|  | ||||
|         m_items = getItems(); | ||||
|         for (auto &item : m_items) { | ||||
|         for (auto item : m_items) { | ||||
|             if (!item->isActive()) | ||||
|                 continue; | ||||
|             m_activeItems.append(static_cast<T *>(item)); | ||||
| @ -79,7 +77,7 @@ public: | ||||
|         // HACK as soon as per one widget instance we have two objects each of | ||||
|         // them will try to control socket, whereas actually only one of them | ||||
|         // should be owner of the socket | ||||
|         for (auto &item : m_items) | ||||
|         for (auto item : m_items) | ||||
|             item->initSocket(); | ||||
|     } | ||||
|  | ||||
| @ -88,7 +86,7 @@ public: | ||||
|         qCDebug(LOG_LIB) << "Tag" << _tag << "with used type" << _type; | ||||
|  | ||||
|         T *found = nullptr; | ||||
|         for (auto &item : m_items) { | ||||
|         for (auto item : m_items) { | ||||
|             if (item->tag(_type) != _tag) | ||||
|                 continue; | ||||
|             found = static_cast<T *>(item); | ||||
| @ -105,7 +103,7 @@ public: | ||||
|         qCDebug(LOG_LIB) << "Number" << _number; | ||||
|  | ||||
|         T *found = nullptr; | ||||
|         for (auto &item : m_items) { | ||||
|         for (auto item : m_items) { | ||||
|             if (item->number() != _number) | ||||
|                 continue; | ||||
|             found = static_cast<T *>(item); | ||||
| @ -123,7 +121,7 @@ private: | ||||
|     QList<AbstractExtItem *> m_items; | ||||
|     QList<T *> m_activeItems; | ||||
|  | ||||
|     void doCreateItem() override { return createItem<T>(); } | ||||
|     void doCreateItem(QListWidget *_widget) override { return createItem<T>(_widget); } | ||||
|  | ||||
|     QList<AbstractExtItem *> getItems() | ||||
|     { | ||||
| @ -131,13 +129,13 @@ private: | ||||
|  | ||||
|         auto dirs = directories(); | ||||
|         for (auto &dir : dirs) { | ||||
|             QStringList files = QDir(dir).entryList(QDir::Files, QDir::Name); | ||||
|             auto files = QDir(dir).entryList(QDir::Files, QDir::Name); | ||||
|             for (auto &file : files) { | ||||
|                 // check filename | ||||
|                 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,11 +145,7 @@ private: | ||||
|         } | ||||
|  | ||||
|         // sort items | ||||
|         std::sort(items.begin(), items.end(), | ||||
|                   [](const AbstractExtItem *lhs, const AbstractExtItem *rhs) { return lhs->number() < rhs->number(); }); | ||||
|         std::sort(items.begin(), items.end(), [](auto lhs, auto rhs) { return lhs->number() < rhs->number(); }); | ||||
|         return items; | ||||
|     }; | ||||
| }; | ||||
|  | ||||
|  | ||||
| #endif /* EXTITEMAGGREGATOR_H */ | ||||
|  | ||||
| @ -20,34 +20,28 @@ | ||||
|  | ||||
| #include <KI18n/KLocalizedString> | ||||
|  | ||||
| #include <QDir> | ||||
| #include <QSettings> | ||||
| #include <QTextCodec> | ||||
|  | ||||
| #include <qreplytimeout/qreplytimeout.h> | ||||
|  | ||||
| #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")] = ""; | ||||
|  | ||||
|     // 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(networkReplyReceived(QNetworkReply *))); | ||||
|  | ||||
|     connect(this, SIGNAL(requestDataUpdate()), this, SLOT(sendRequest())); | ||||
|     connect(m_manager, &QNetworkAccessManager::finished, this, &ExtNetworkRequest::networkReplyReceived); | ||||
|     connect(this, &ExtNetworkRequest::requestDataUpdate, this, &ExtNetworkRequest::sendRequest); | ||||
| } | ||||
|  | ||||
|  | ||||
| @ -55,11 +49,10 @@ ExtNetworkRequest::~ExtNetworkRequest() | ||||
| { | ||||
|     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; | ||||
|  | ||||
|     disconnect(m_manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(networkReplyReceived(QNetworkReply *))); | ||||
|     disconnect(this, SIGNAL(requestDataUpdate()), this, SLOT(sendRequest())); | ||||
|     disconnect(m_manager, &QNetworkAccessManager::finished, this, &ExtNetworkRequest::networkReplyReceived); | ||||
|     disconnect(this, &ExtNetworkRequest::requestDataUpdate, this, &ExtNetworkRequest::sendRequest); | ||||
|  | ||||
|     m_manager->deleteLater(); | ||||
|     delete ui; | ||||
| } | ||||
|  | ||||
|  | ||||
| @ -67,7 +60,7 @@ ExtNetworkRequest *ExtNetworkRequest::copy(const QString &_fileName, const int _ | ||||
| { | ||||
|     qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number; | ||||
|  | ||||
|     auto *item = new ExtNetworkRequest(dynamic_cast<QWidget *>(parent()), _fileName); | ||||
|     auto item = new ExtNetworkRequest(parent(), _fileName); | ||||
|     copyDefaults(item); | ||||
|     item->setNumber(_number); | ||||
|     item->setStringUrl(stringUrl()); | ||||
| @ -121,10 +114,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,9 +132,8 @@ int ExtNetworkRequest::showConfiguration(const QVariant &_args) | ||||
|     ui->lineEdit_socket->setText(socket()); | ||||
|     ui->spinBox_interval->setValue(interval()); | ||||
|  | ||||
|     int ret = exec(); | ||||
|     if (ret != 1) | ||||
|         return ret; | ||||
|     auto ret = dialog->exec(); | ||||
|     if (ret == 1) { | ||||
|         setName(ui->lineEdit_name->text()); | ||||
|         setComment(ui->lineEdit_comment->text()); | ||||
|         setNumber(ui->label_numberValue->text().toInt()); | ||||
| @ -148,6 +145,11 @@ int ExtNetworkRequest::showConfiguration(const QVariant &_args) | ||||
|         setInterval(ui->spinBox_interval->value()); | ||||
|  | ||||
|         writeConfiguration(); | ||||
|     } | ||||
|  | ||||
|     dialog->deleteLater(); | ||||
|     delete ui; | ||||
|  | ||||
|     return ret; | ||||
| } | ||||
|  | ||||
| @ -174,7 +176,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 +185,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 +196,10 @@ void ExtNetworkRequest::initUrl() | ||||
| } | ||||
|  | ||||
|  | ||||
| void ExtNetworkRequest::translate() | ||||
| void ExtNetworkRequest::translate(void *_ui) | ||||
| { | ||||
|     auto ui = reinterpret_cast<Ui::ExtNetworkRequest *>(_ui); | ||||
|  | ||||
|     ui->label_name->setText(i18n("Name")); | ||||
|     ui->label_comment->setText(i18n("Comment")); | ||||
|     ui->label_number->setText(i18n("Tag")); | ||||
|  | ||||
| @ -15,26 +15,20 @@ | ||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
| #ifndef EXTNETWORKREQUEST_H | ||||
| #define EXTNETWORKREQUEST_H | ||||
| #pragma once | ||||
|  | ||||
| #include <QNetworkReply> | ||||
|  | ||||
| #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 +40,7 @@ public: | ||||
| public slots: | ||||
|     void readConfiguration() override; | ||||
|     QVariantHash run() override; | ||||
|     int showConfiguration(const QVariant &_args) override; | ||||
|     int showConfiguration(QWidget *_parent, const QVariant &_args) override; | ||||
|     void writeConfiguration() const override; | ||||
|  | ||||
| private slots: | ||||
| @ -57,14 +51,10 @@ private: | ||||
|     QNetworkAccessManager *m_manager = nullptr; | ||||
|     QUrl m_url; | ||||
|     bool m_isRunning = false; | ||||
|     Ui::ExtNetworkRequest *ui = nullptr; | ||||
|     void initUrl(); | ||||
|     void translate() override; | ||||
|     void translate(void *_ui) override; | ||||
|     // properties | ||||
|     QString m_stringUrl = "https://httpbin.org/get"; | ||||
|     // values | ||||
|     QVariantHash m_values; | ||||
| }; | ||||
|  | ||||
|  | ||||
| #endif /* EXTNETWORKREQUEST_H */ | ||||
|  | ||||
| @ -20,7 +20,6 @@ | ||||
|  | ||||
| #include <KI18n/KLocalizedString> | ||||
|  | ||||
| #include <QDir> | ||||
| #include <QSettings> | ||||
|  | ||||
| #include <qreplytimeout/qreplytimeout.h> | ||||
| @ -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<QWidget *>(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,9 +138,8 @@ int ExtQuotes::showConfiguration(const QVariant &_args) | ||||
|     ui->lineEdit_socket->setText(socket()); | ||||
|     ui->spinBox_interval->setValue(interval()); | ||||
|  | ||||
|     int ret = exec(); | ||||
|     if (ret != 1) | ||||
|         return ret; | ||||
|     auto ret = dialog->exec(); | ||||
|     if (ret == 1) { | ||||
|         setName(ui->lineEdit_name->text()); | ||||
|         setComment(ui->lineEdit_comment->text()); | ||||
|         setNumber(ui->label_numberValue->text().toInt()); | ||||
| @ -153,6 +151,11 @@ int ExtQuotes::showConfiguration(const QVariant &_args) | ||||
|         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::ExtQuotes *>(_ui); | ||||
|  | ||||
|     ui->label_name->setText(i18n("Name")); | ||||
|     ui->label_comment->setText(i18n("Comment")); | ||||
|     ui->label_number->setText(i18n("Tag")); | ||||
|  | ||||
| @ -15,8 +15,7 @@ | ||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
| #ifndef EXTQUOTES_H | ||||
| #define EXTQUOTES_H | ||||
| #pragma once | ||||
|  | ||||
| #include <QNetworkReply> | ||||
|  | ||||
| @ -24,10 +23,6 @@ | ||||
|  | ||||
|  | ||||
| class AbstractQuotesProvider; | ||||
| namespace Ui | ||||
| { | ||||
| class ExtQuotes; | ||||
| } | ||||
|  | ||||
| class ExtQuotes : public AbstractExtItem | ||||
| { | ||||
| @ -35,7 +30,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 +42,7 @@ public: | ||||
| public slots: | ||||
|     void readConfiguration() override; | ||||
|     QVariantHash run() override; | ||||
|     int showConfiguration(const QVariant &_args) override; | ||||
|     int showConfiguration(QWidget *_parent, const QVariant &_args) override; | ||||
|     void writeConfiguration() const override; | ||||
|  | ||||
| private slots: | ||||
| @ -58,14 +53,10 @@ private: | ||||
|     AbstractQuotesProvider *m_providerObject = nullptr; | ||||
|     QNetworkAccessManager *m_manager = nullptr; | ||||
|     bool m_isRunning = false; | ||||
|     Ui::ExtQuotes *ui = nullptr; | ||||
|     void initProvider(); | ||||
|     void translate() override; | ||||
|     void translate(void *_ui) override; | ||||
|     // properties | ||||
|     QString m_ticker = "EURUSD=X"; | ||||
|     // values | ||||
|     QVariantHash m_values; | ||||
| }; | ||||
|  | ||||
|  | ||||
| #endif /* EXTQUOTES_H */ | ||||
|  | ||||
| @ -24,30 +24,26 @@ | ||||
| #include <QJsonDocument> | ||||
| #include <QSettings> | ||||
| #include <QStandardPaths> | ||||
| #include <QTextCodec> | ||||
|  | ||||
| #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")] = ""; | ||||
|  | ||||
|     m_process = new QProcess(nullptr); | ||||
|     connect(m_process, SIGNAL(finished(int, QProcess::ExitStatus)), this, SLOT(updateValue())); | ||||
|     connect(m_process, &QProcess::finished, [this]() { return updateValue(); }); | ||||
|     m_process->waitForFinished(0); | ||||
|  | ||||
|     connect(this, SIGNAL(requestDataUpdate()), this, SLOT(startProcess())); | ||||
|     connect(this, &ExtScript::requestDataUpdate, this, &ExtScript::startProcess); | ||||
| } | ||||
|  | ||||
|  | ||||
| @ -55,11 +51,9 @@ ExtScript::~ExtScript() | ||||
| { | ||||
|     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; | ||||
|  | ||||
|     disconnect(m_process, SIGNAL(finished(int, QProcess::ExitStatus)), this, SLOT(updateValue())); | ||||
|     m_process->kill(); | ||||
|     m_process->deleteLater(); | ||||
|     disconnect(this, SIGNAL(requestDataUpdate()), this, SLOT(startProcess())); | ||||
|     delete ui; | ||||
|     disconnect(this, &ExtScript::requestDataUpdate, this, &ExtScript::startProcess); | ||||
| } | ||||
|  | ||||
|  | ||||
| @ -67,7 +61,7 @@ ExtScript *ExtScript::copy(const QString &_fileName, const int _number) | ||||
| { | ||||
|     qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number; | ||||
|  | ||||
|     auto *item = new ExtScript(dynamic_cast<QWidget *>(parent()), _fileName); | ||||
|     auto item = new ExtScript(parent(), _fileName); | ||||
|     copyDefaults(item); | ||||
|     item->setExecutable(executable()); | ||||
|     item->setNumber(_number); | ||||
| @ -180,7 +174,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,17 +220,17 @@ 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; | ||||
|         return; | ||||
|     } | ||||
|     QString jsonText = jsonFile.readAll(); | ||||
|     auto jsonText = jsonFile.readAll(); | ||||
|     jsonFile.close(); | ||||
|  | ||||
|     QJsonParseError error{}; | ||||
|     QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonText.toUtf8(), &error); | ||||
|     auto jsonDoc = QJsonDocument::fromJson(jsonText, &error); | ||||
|     if (error.error != QJsonParseError::NoError) { | ||||
|         qCWarning(LOG_LIB) << "Parse error" << error.errorString(); | ||||
|         return; | ||||
| @ -257,10 +251,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,9 +274,8 @@ 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; | ||||
|     int ret = dialog->exec(); | ||||
|     if (ret == 1) { | ||||
|         setName(ui->lineEdit_name->text()); | ||||
|         setComment(ui->lineEdit_comment->text()); | ||||
|         setNumber(ui->label_numberValue->text().toInt()); | ||||
| @ -294,6 +292,11 @@ int ExtScript::showConfiguration(const QVariant &_args) | ||||
|         updateFilter("space", ui->checkBox_spaceFilter->checkState() == Qt::Checked); | ||||
|  | ||||
|         writeConfiguration(); | ||||
|     } | ||||
|  | ||||
|     dialog->deleteLater(); | ||||
|     delete ui; | ||||
|  | ||||
|     return ret; | ||||
| } | ||||
|  | ||||
| @ -325,9 +328,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 +354,10 @@ void ExtScript::updateValue() | ||||
| } | ||||
|  | ||||
|  | ||||
| void ExtScript::translate() | ||||
| void ExtScript::translate(void *_ui) | ||||
| { | ||||
|     auto ui = reinterpret_cast<Ui::ExtScript *>(_ui); | ||||
|  | ||||
|     ui->label_name->setText(i18n("Name")); | ||||
|     ui->label_comment->setText(i18n("Comment")); | ||||
|     ui->label_number->setText(i18n("Tag")); | ||||
|  | ||||
| @ -15,19 +15,13 @@ | ||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
| #ifndef EXTSCRIPT_H | ||||
| #define EXTSCRIPT_H | ||||
| #pragma once | ||||
|  | ||||
| #include <QProcess> | ||||
|  | ||||
| #include "abstractextitem.h" | ||||
|  | ||||
|  | ||||
| namespace Ui | ||||
| { | ||||
| class ExtScript; | ||||
| } | ||||
|  | ||||
| class ExtScript : public AbstractExtItem | ||||
| { | ||||
|     Q_OBJECT | ||||
| @ -38,7 +32,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 +56,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 +65,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(); | ||||
| @ -82,6 +75,3 @@ private: | ||||
|     QVariantMap m_jsonFilters; | ||||
|     QVariantHash m_values; | ||||
| }; | ||||
|  | ||||
|  | ||||
| #endif /* EXTSCRIPT_H */ | ||||
|  | ||||
| @ -21,29 +21,25 @@ | ||||
| #include <KI18n/KLocalizedString> | ||||
|  | ||||
| #include <QSettings> | ||||
| #include <QTextCodec> | ||||
|  | ||||
| #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; | ||||
|  | ||||
|     m_process = new QProcess(nullptr); | ||||
|     connect(m_process, SIGNAL(finished(int)), this, SLOT(updateValue())); | ||||
|     connect(m_process, &QProcess::finished, [this]() { return updateValue(); }); | ||||
|     m_process->waitForFinished(0); | ||||
|  | ||||
|     connect(this, SIGNAL(requestDataUpdate()), this, SLOT(startProcess())); | ||||
|     connect(this, &ExtUpgrade::requestDataUpdate, this, &ExtUpgrade::startProcess); | ||||
| } | ||||
|  | ||||
|  | ||||
| @ -53,8 +49,7 @@ ExtUpgrade::~ExtUpgrade() | ||||
|  | ||||
|     m_process->kill(); | ||||
|     m_process->deleteLater(); | ||||
|     disconnect(this, SIGNAL(requestDataUpdate()), this, SLOT(startProcess())); | ||||
|     delete ui; | ||||
|     disconnect(this, &ExtUpgrade::requestDataUpdate, this, &ExtUpgrade::startProcess); | ||||
| } | ||||
|  | ||||
|  | ||||
| @ -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<QWidget *>(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,9 +165,8 @@ int ExtUpgrade::showConfiguration(const QVariant &_args) | ||||
|     ui->lineEdit_socket->setText(socket()); | ||||
|     ui->spinBox_interval->setValue(interval()); | ||||
|  | ||||
|     int ret = exec(); | ||||
|     if (ret != 1) | ||||
|         return ret; | ||||
|     auto ret = dialog->exec(); | ||||
|     if (ret == 1) { | ||||
|         setName(ui->lineEdit_name->text()); | ||||
|         setComment(ui->lineEdit_comment->text()); | ||||
|         setNumber(ui->label_numberValue->text().toInt()); | ||||
| @ -181,6 +180,11 @@ int ExtUpgrade::showConfiguration(const QVariant &_args) | ||||
|         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::ExtUpgrade *>(_ui); | ||||
|  | ||||
|     ui->label_name->setText(i18n("Name")); | ||||
|     ui->label_comment->setText(i18n("Comment")); | ||||
|     ui->label_number->setText(i18n("Tag")); | ||||
|  | ||||
| @ -15,19 +15,13 @@ | ||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
| #ifndef EXTUPGRADE_H | ||||
| #define EXTUPGRADE_H | ||||
| #pragma once | ||||
|  | ||||
| #include <QProcess> | ||||
|  | ||||
| #include "abstractextitem.h" | ||||
|  | ||||
|  | ||||
| namespace Ui | ||||
| { | ||||
| class ExtUpgrade; | ||||
| } | ||||
|  | ||||
| class ExtUpgrade : public AbstractExtItem | ||||
| { | ||||
|     Q_OBJECT | ||||
| @ -36,7 +30,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 +46,7 @@ public: | ||||
| public slots: | ||||
|     void readConfiguration() override; | ||||
|     QVariantHash run() override; | ||||
|     int showConfiguration(const QVariant &_args) override; | ||||
|     int showConfiguration(QWidget *_parent, const QVariant &_args) override; | ||||
|     void writeConfiguration() const override; | ||||
|  | ||||
| private slots: | ||||
| @ -61,8 +55,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 = ""; | ||||
| @ -70,6 +63,3 @@ private: | ||||
|     // internal properties | ||||
|     QVariantHash m_values; | ||||
| }; | ||||
|  | ||||
|  | ||||
| #endif /* EXTUPGRADE_H */ | ||||
|  | ||||
| @ -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")] = ""; | ||||
| @ -53,9 +49,8 @@ ExtWeather::ExtWeather(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(weatherReplyReceived(QNetworkReply *))); | ||||
|  | ||||
|     connect(this, SIGNAL(requestDataUpdate()), this, SLOT(sendRequest())); | ||||
|     connect(m_manager, &QNetworkAccessManager::finished, this, &ExtWeather::weatherReplyReceived); | ||||
|     connect(this, &ExtWeather::requestDataUpdate, this, &ExtWeather::sendRequest); | ||||
| } | ||||
|  | ||||
|  | ||||
| @ -63,11 +58,10 @@ ExtWeather::~ExtWeather() | ||||
| { | ||||
|     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; | ||||
|  | ||||
|     disconnect(m_manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(weatherReplyReceived(QNetworkReply *))); | ||||
|     disconnect(this, SIGNAL(requestDataUpdate()), this, SLOT(sendRequest())); | ||||
|     disconnect(m_manager, &QNetworkAccessManager::finished, this, &ExtWeather::weatherReplyReceived); | ||||
|     disconnect(this, &ExtWeather::requestDataUpdate, this, &ExtWeather::sendRequest); | ||||
|  | ||||
|     m_manager->deleteLater(); | ||||
|     delete ui; | ||||
| } | ||||
|  | ||||
|  | ||||
| @ -75,7 +69,7 @@ ExtWeather *ExtWeather::copy(const QString &_fileName, const int _number) | ||||
| { | ||||
|     qCDebug(LOG_LIB) << "File" << _fileName << "number" << _number; | ||||
|  | ||||
|     auto *item = new ExtWeather(dynamic_cast<QWidget *>(parent()), _fileName); | ||||
|     auto item = new ExtWeather(parent(), _fileName); | ||||
|     copyDefaults(item); | ||||
|     item->setCity(city()); | ||||
|     item->setCountry(country()); | ||||
| @ -102,7 +96,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(); | ||||
| } | ||||
|  | ||||
| @ -155,7 +149,7 @@ int ExtWeather::ts() const | ||||
|  | ||||
| QString ExtWeather::uniq() const | ||||
| { | ||||
|     return QString("%1 (%2) at %3").arg(city()).arg(country()).arg(ts()); | ||||
|     return QString("%1 (%2) at %3").arg(city(), country()).arg(ts()); | ||||
| } | ||||
|  | ||||
|  | ||||
| @ -236,17 +230,17 @@ 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; | ||||
|         return; | ||||
|     } | ||||
|     QString jsonText = jsonFile.readAll(); | ||||
|     auto jsonText = jsonFile.readAll(); | ||||
|     jsonFile.close(); | ||||
|  | ||||
|     QJsonParseError error{}; | ||||
|     QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonText.toUtf8(), &error); | ||||
|     auto jsonDoc = QJsonDocument::fromJson(jsonText, &error); | ||||
|     if (error.error != QJsonParseError::NoError) { | ||||
|         qCWarning(LOG_LIB) << "Parse error" << error.errorString(); | ||||
|         return; | ||||
| @ -267,10 +261,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,9 +283,8 @@ int ExtWeather::showConfiguration(const QVariant &_args) | ||||
|     ui->lineEdit_socket->setText(socket()); | ||||
|     ui->spinBox_interval->setValue(interval()); | ||||
|  | ||||
|     int ret = exec(); | ||||
|     if (ret != 1) | ||||
|         return ret; | ||||
|     int ret = dialog->exec(); | ||||
|     if (ret == 1) { | ||||
|         setName(ui->lineEdit_name->text()); | ||||
|         setComment(ui->lineEdit_comment->text()); | ||||
|         setNumber(ui->label_numberValue->text().toInt()); | ||||
| @ -302,6 +300,11 @@ int ExtWeather::showConfiguration(const QVariant &_args) | ||||
|         setInterval(ui->spinBox_interval->value()); | ||||
|  | ||||
|         writeConfiguration(); | ||||
|     } | ||||
|  | ||||
|     dialog->deleteLater(); | ||||
|     delete ui; | ||||
|  | ||||
|     return ret; | ||||
| } | ||||
|  | ||||
| @ -328,7 +331,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 +345,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 +373,10 @@ void ExtWeather::initProvider() | ||||
| } | ||||
|  | ||||
|  | ||||
| void ExtWeather::translate() | ||||
| void ExtWeather::translate(void *_ui) | ||||
| { | ||||
|     auto ui = reinterpret_cast<Ui::ExtWeather *>(_ui); | ||||
|  | ||||
|     ui->label_name->setText(i18n("Name")); | ||||
|     ui->label_comment->setText(i18n("Comment")); | ||||
|     ui->label_number->setText(i18n("Tag")); | ||||
|  | ||||
| @ -15,8 +15,7 @@ | ||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
| #ifndef EXTWEATHER_H | ||||
| #define EXTWEATHER_H | ||||
| #pragma once | ||||
|  | ||||
| #include <QNetworkReply> | ||||
|  | ||||
| @ -42,7 +41,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 +66,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 +77,8 @@ private: | ||||
|     AbstractWeatherProvider *m_providerObject = nullptr; | ||||
|     QNetworkAccessManager *m_manager = nullptr; | ||||
|     bool m_isRunning = false; | ||||
|     Ui::ExtWeather *ui = nullptr; | ||||
|     void initProvider(); | ||||
|     void translate() override; | ||||
|     void translate(void *_ui) override; | ||||
|     // properties | ||||
|     QString m_city = "London"; | ||||
|     QString m_country = "uk"; | ||||
| @ -91,6 +89,3 @@ private: | ||||
|     // values | ||||
|     QVariantHash m_values; | ||||
| }; | ||||
|  | ||||
|  | ||||
| #endif /* EXTWEATHER_H */ | ||||
|  | ||||
| @ -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<QWidget *>(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("<img src=\"data:image/png;base64,%1\"/>").arg(QString(byteArray.toBase64())); | ||||
|     auto url = QString("<img src=\"data:image/png;base64,%1\"/>").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,9 +471,8 @@ 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; | ||||
|     int ret = dialog->exec(); | ||||
|     if (ret == 1) { | ||||
|         setName(ui->lineEdit_name->text()); | ||||
|         setComment(ui->lineEdit_comment->text()); | ||||
|         setApiVersion(AW_GRAPHITEM_API); | ||||
| @ -495,6 +489,11 @@ int GraphicalItem::showConfiguration(const QVariant &_args) | ||||
|         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::GraphicalItem *>(_ui); | ||||
|  | ||||
|     ui->label_name->setText(i18n("Name")); | ||||
|     ui->label_comment->setText(i18n("Comment")); | ||||
|     ui->label_number->setText(i18n("Tag")); | ||||
|  | ||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user