mirror of
				https://github.com/arcan1s/awesome-widgets.git
				synced 2025-10-27 11:53:40 +00:00 
			
		
		
		
	Compare commits
	
		
			17 Commits
		
	
	
		
			f1a01fbb32
			...
			4.0.0alpha
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 63f1aa8125 | |||
| 3c8bf1baf1 | |||
| 3f20aa8878 | |||
| 4fcea42e8e | |||
| 0b2b58bd33 | |||
| 7b60e8a42f | |||
| 161ff64293 | |||
| 115bef3dbe | |||
| b6ade7310a | |||
| 0555185044 | |||
| 23e197789f | |||
| 67640cccdc | |||
| 33a41bb6c0 | |||
| 42c11a6b60 | |||
| 423597dbd9 | |||
| 0fcfb7d7e4 | |||
| 5fd3a4a21a | 
							
								
								
									
										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 \ | ||||
|         -DCMAKE_BUILD_TYPE=Optimization \ | ||||
|         -DCMAKE_INSTALL_PREFIX=/usr \ | ||||
|         -DBUILD_FUTURE=ON \ | ||||
|         "../${_pkgname}" | ||||
|   make | ||||
|     cmake -B build -S "${_pkgname}" \ | ||||
|           -DCMAKE_BUILD_TYPE=Optimization \ | ||||
|           -DBUILD_FUTURE=ON \ | ||||
|           -DBUILD_TESTING=OFF | ||||
|     cmake --build build | ||||
| } | ||||
|  | ||||
| package() { | ||||
|   cd "${srcdir}/build" | ||||
|   make DESTDIR="${pkgdir}" install | ||||
|       DESTDIR="$pkgdir" cmake --install build | ||||
| } | ||||
|  | ||||
| sha256sums=('b2a7b07a1df6f710f4e0d6e5898933f4ddb131818b922dc4b8e48afe3e98a664') | ||||
|  | ||||
							
								
								
									
										75
									
								
								sources/3rdparty/fontdialog/fontdialog.cpp
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										75
									
								
								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); | ||||
|  | ||||
							
								
								
									
										5
									
								
								sources/3rdparty/fontdialog/fontdialog.h
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								sources/3rdparty/fontdialog/fontdialog.h
									
									
									
									
										vendored
									
									
								
							| @ -34,11 +34,6 @@ public: | ||||
|     // color properties | ||||
|     QColor color(); | ||||
|     void setCurrentColor(const QColor color); | ||||
|     // html weight properties | ||||
|     static int html2QFont(const int htmlWeight); | ||||
|     static int qFont2html(const int weight); | ||||
|     int htmlWeight(); | ||||
|     void setHtmlWeight(const int htmlWeight); | ||||
|     // conversion to QFont | ||||
|     static CFont fromQFont(const QFont font, | ||||
|                            const QColor color = QColor(QString("#000000"))); | ||||
|  | ||||
| @ -14,9 +14,9 @@ project(awesomewidgets) | ||||
| set(PROJECT_AUTHOR "Evgeniy Alekseev") | ||||
| set(PROJECT_CONTACT "esalexeev@gmail.com") | ||||
| set(PROJECT_LICENSE "GPL3") | ||||
| set(PROJECT_VERSION_MAJOR "3") | ||||
| set(PROJECT_VERSION_MINOR "5") | ||||
| set(PROJECT_VERSION_PATCH "1") | ||||
| set(PROJECT_VERSION_MAJOR "4") | ||||
| set(PROJECT_VERSION_MINOR "0") | ||||
| set(PROJECT_VERSION_PATCH "0") | ||||
| set(PROJECT_VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}") | ||||
| # append git version if any | ||||
| set(PROJECT_COMMIT_SHA "Commit hash" CACHE INTERNAL "") | ||||
|  | ||||
| @ -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,21 @@ | ||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
| import QtQuick 2.0 | ||||
| import QtQuick 2.15 | ||||
| import org.kde.kcmutils as KCM | ||||
|  | ||||
| import org.kde.plasma.private.awesomewidget 1.0 | ||||
|  | ||||
|  | ||||
| Item { | ||||
| KCM.SimpleKCM { | ||||
|     id: aboutPage | ||||
|  | ||||
|     // backend | ||||
|     AWActions { | ||||
|         id: awActions | ||||
|     } | ||||
|  | ||||
|     width: childrenRect.width | ||||
|     height: childrenRect.height | ||||
|  | ||||
|     property bool debug: awActions.isDebugEnabled() | ||||
|  | ||||
|     AboutTab { | ||||
|         textProvider: awActions | ||||
|     } | ||||
|  | ||||
|     Component.onCompleted: { | ||||
|         if (debug) console.debug() | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -15,26 +15,21 @@ | ||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
| import QtQuick 2.0 | ||||
| import QtQuick.Controls 1.3 as QtControls | ||||
| import QtQuick 2.15 | ||||
| import QtQuick.Controls | ||||
| import org.kde.kcmutils as KCM | ||||
|  | ||||
| import org.kde.plasma.private.awesomewidget 1.0 | ||||
|  | ||||
|  | ||||
| Item { | ||||
| KCM.SimpleKCM { | ||||
|     id: advancedPage | ||||
|  | ||||
|     // backend | ||||
|     AWActions { | ||||
|         id: awActions | ||||
|     } | ||||
|  | ||||
|     width: childrenRect.width | ||||
|     height: childrenRect.height | ||||
|     implicitWidth: pageColumn.implicitWidth | ||||
|     implicitHeight: pageColumn.implicitHeight | ||||
|  | ||||
|     property bool debug: awActions.isDebugEnabled() | ||||
|  | ||||
|     property alias cfg_background: background.checked | ||||
|     property alias cfg_translateStrings: translate.checked | ||||
|     property alias cfg_wrapNewLines: wrapNewLines.checked | ||||
| @ -55,7 +50,6 @@ Item { | ||||
|     property alias cfg_telemetryRemote: telemetryRemote.checked | ||||
|     property alias cfg_telemetryId: telemetryId.value | ||||
|  | ||||
|  | ||||
|     Column { | ||||
|         id: pageColumn | ||||
|         anchors.fill: parent | ||||
| @ -135,37 +129,37 @@ Item { | ||||
|             id: tempUnits | ||||
|             model: [ | ||||
|                 { | ||||
|                     'label': i18n("Celsius"), | ||||
|                     'name': "Celsius" | ||||
|                     "label": i18n("Celsius"), | ||||
|                     "name": "Celsius" | ||||
|                 }, | ||||
|                 { | ||||
|                     'label': i18n("Fahrenheit"), | ||||
|                     'name': "Fahrenheit" | ||||
|                     "label": i18n("Fahrenheit"), | ||||
|                     "name": "Fahrenheit" | ||||
|                 }, | ||||
|                 { | ||||
|                     'label': i18n("Kelvin"), | ||||
|                     'name': "Kelvin" | ||||
|                     "label": i18n("Kelvin"), | ||||
|                     "name": "Kelvin" | ||||
|                 }, | ||||
|                 { | ||||
|                     'label': i18n("Reaumur"), | ||||
|                     'name': "Reaumur" | ||||
|                     "label": i18n("Reaumur"), | ||||
|                     "name": "Reaumur" | ||||
|                 }, | ||||
|                 { | ||||
|                     'label': i18n("cm^-1"), | ||||
|                     'name': "cm^-1" | ||||
|                     "label": i18n("cm^-1"), | ||||
|                     "name": "cm^-1" | ||||
|                 }, | ||||
|                 { | ||||
|                     'label': i18n("kJ/mol"), | ||||
|                     'name': "kJ/mol" | ||||
|                     "label": i18n("kJ/mol"), | ||||
|                     "name": "kJ/mol" | ||||
|                 }, | ||||
|                 { | ||||
|                     'label': i18n("kcal/mol"), | ||||
|                     'name': "kcal/mol" | ||||
|                     "label": i18n("kcal/mol"), | ||||
|                     "name": "kcal/mol" | ||||
|                 } | ||||
|             ] | ||||
|             text: i18n("Temperature units") | ||||
|             value: plasmoid.configuration.tempUnits | ||||
|             onValueEdited: cfg_tempUnits = newValue | ||||
|             onValueEdited: newValue => cfg_tempUnits = newValue | ||||
|         } | ||||
|  | ||||
|         LineSelector { | ||||
| @ -192,18 +186,20 @@ Item { | ||||
|             value: plasmoid.configuration.acOffline | ||||
|         } | ||||
|  | ||||
|         QtControls.GroupBox { | ||||
|             height: implicitHeight | ||||
|         GroupBox { | ||||
|             width: parent.width | ||||
|             height: implicitHeight | ||||
|             title: i18n("Actions") | ||||
|  | ||||
|             Column { | ||||
|                 height: implicitHeight | ||||
|                 width: parent.width | ||||
|  | ||||
|                 ButtonSelector { | ||||
|                     value: i18n("Drop key cache") | ||||
|                     onButtonActivated: awActions.dropCache() | ||||
|                 } | ||||
|  | ||||
|                 ButtonSelector { | ||||
|                     ExportDialog { | ||||
|                         id: saveConfigAs | ||||
| @ -212,11 +208,12 @@ Item { | ||||
|                     value: i18n("Export configuration") | ||||
|                     onButtonActivated: saveConfigAs.open() | ||||
|                 } | ||||
|  | ||||
|                 ButtonSelector { | ||||
|                     ImportDialog { | ||||
|                         id: loadConfigFrom | ||||
|                         onConfigurationReceived: { | ||||
|                             for (var key in configuration) | ||||
|                             for (const key in configuration) | ||||
|                                 plasmoid.configuration[key] = configuration[key] | ||||
|                         } | ||||
|                     } | ||||
| @ -226,7 +223,7 @@ Item { | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         QtControls.GroupBox { | ||||
|         GroupBox { | ||||
|             height: implicitHeight | ||||
|             width: parent.width | ||||
|             title: i18n("Telemetry") | ||||
| @ -234,10 +231,12 @@ Item { | ||||
|             Column { | ||||
|                 height: implicitHeight | ||||
|                 width: parent.width | ||||
|  | ||||
|                 CheckBoxSelector { | ||||
|                     id: telemetryRemote | ||||
|                     text: i18n("Enable remote telemetry") | ||||
|                 } | ||||
|  | ||||
|                 IntegerSelector { | ||||
|                     id: telemetryCount | ||||
|                     maximumValue: 10000 | ||||
| @ -246,6 +245,7 @@ Item { | ||||
|                     text: i18n("History count") | ||||
|                     value: plasmoid.configuration.telemetryCount | ||||
|                 } | ||||
|  | ||||
|                 LineSelector { | ||||
|                     id: telemetryId | ||||
|                     text: i18n("Telemetry ID") | ||||
| @ -254,9 +254,4 @@ Item { | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|  | ||||
|     Component.onCompleted: { | ||||
|         if (debug) console.debug() | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -15,31 +15,22 @@ | ||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
| import QtQuick 2.0 | ||||
| import QtQuick 2.15 | ||||
| import org.kde.kcmutils as KCM | ||||
|  | ||||
| import org.kde.plasma.private.awesomewidget 1.0 | ||||
| import "." | ||||
|  | ||||
|  | ||||
| Item { | ||||
| KCM.SimpleKCM { | ||||
|     id: appearancePage | ||||
|     // backend | ||||
|     AWActions { | ||||
|         id: awActions | ||||
|     } | ||||
|  | ||||
|     width: childrenRect.width | ||||
|     height: childrenRect.height | ||||
|     implicitWidth: pageColumn.implicitWidth | ||||
|     implicitHeight: pageColumn.implicitHeight | ||||
|  | ||||
|     property bool debug: awActions.isDebugEnabled() | ||||
|     property variant weight: { | ||||
|         25: 0, | ||||
|         50: 1, | ||||
|         63: 3, | ||||
|         75: 4, | ||||
|         87: 5 | ||||
|         87: 5, | ||||
|     } | ||||
|  | ||||
|     property alias cfg_fontFamily: font.value | ||||
| @ -50,7 +41,6 @@ Item { | ||||
|     property alias cfg_textStyleColor: selectStyleColor.value | ||||
|     property string cfg_textStyle: textStyle.value | ||||
|  | ||||
|  | ||||
|     Column { | ||||
|         id: pageColumn | ||||
|         anchors.fill: parent | ||||
| @ -75,7 +65,7 @@ Item { | ||||
|             model: General.fontWeightModel | ||||
|             text: i18n("Font weight") | ||||
|             value: plasmoid.configuration.fontWeight | ||||
|             onValueEdited: cfg_fontWeight = newValue | ||||
|             onValueEdited: newValue => cfg_fontWeight = newValue | ||||
|         } | ||||
|  | ||||
|         ComboBoxSelector { | ||||
| @ -83,7 +73,7 @@ Item { | ||||
|             model: General.fontStyleModel | ||||
|             text: i18n("Font style") | ||||
|             value: plasmoid.configuration.fontStyle | ||||
|             onValueEdited: cfg_fontStyle = newValue | ||||
|             onValueEdited: newValue => cfg_fontStyle = newValue | ||||
|         } | ||||
|  | ||||
|         ColorSelector { | ||||
| @ -97,7 +87,7 @@ Item { | ||||
|             model: General.textStyleModel | ||||
|             text: i18n("Style") | ||||
|             value: plasmoid.configuration.textStyle | ||||
|             onValueEdited: cfg_textStyle = newValue | ||||
|             onValueEdited: newValue => cfg_textStyle = newValue | ||||
|         } | ||||
|  | ||||
|         ColorSelector { | ||||
| @ -106,9 +96,4 @@ Item { | ||||
|             value: plasmoid.configuration.textStyleColor | ||||
|         } | ||||
|     } | ||||
|  | ||||
|  | ||||
|     Component.onCompleted: { | ||||
|         if (debug) console.debug() | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -15,105 +15,46 @@ | ||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
| import QtQuick 2.0 | ||||
| import QtQuick.Controls 1.3 as QtControls | ||||
| import QtQuick.Dialogs 1.1 as QtDialogs | ||||
| import QtQuick 2.15 | ||||
| import QtQuick.Controls | ||||
| import org.kde.kcmutils as KCM | ||||
|  | ||||
| import org.kde.plasma.private.awesomewidget 1.0 | ||||
|  | ||||
|  | ||||
| Item { | ||||
| KCM.SimpleKCM { | ||||
|     id: dataenginePage | ||||
|  | ||||
|     // backend | ||||
|     AWKeys { | ||||
|         id: awKeys | ||||
|     } | ||||
|     AWActions { | ||||
|         id: awActions | ||||
|     } | ||||
|     AWConfigHelper { | ||||
|         id: awConfig | ||||
|     } | ||||
|  | ||||
|     width: childrenRect.width | ||||
|     height: childrenRect.height | ||||
|     implicitWidth: pageColumn.implicitWidth | ||||
|     implicitHeight: pageColumn.implicitHeight | ||||
|  | ||||
|     property bool debug: awActions.isDebugEnabled() | ||||
|  | ||||
|     property variant cfg_dataengine: awConfig.readDataEngineConfiguration() | ||||
|  | ||||
|  | ||||
|     Column { | ||||
|         id: pageColumn | ||||
|         anchors.fill: parent | ||||
|         QtControls.GroupBox { | ||||
|  | ||||
|         GroupBox { | ||||
|             height: implicitHeight | ||||
|             width: parent.width | ||||
|             title: i18n("ACPI") | ||||
|             LineSelector { | ||||
|                 text: i18n("ACPI path") | ||||
|                 value: cfg_dataengine["ACPIPATH"] | ||||
|                 onValueEdited: cfg_dataengine["ACPIPATH"] = newValue | ||||
|                 onValueEdited: newValue => cfg_dataengine["ACPIPATH"] = newValue | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         QtControls.GroupBox { | ||||
|             height: implicitHeight | ||||
|             width: parent.width | ||||
|             title: i18n("GPU") | ||||
|             ComboBoxSelector { | ||||
|                 model: [ | ||||
|                     { | ||||
|                         'label': "auto", | ||||
|                         'name': "auto" | ||||
|                     }, | ||||
|                     { | ||||
|                         'label': "disable", | ||||
|                         'name': "disable" | ||||
|                     }, | ||||
|                     { | ||||
|                         'label': "ati", | ||||
|                         'name': "ati" | ||||
|                     }, | ||||
|                     { | ||||
|                         'label': "nvidia", | ||||
|                         'name': "nvidia" | ||||
|                     } | ||||
|                 ] | ||||
|                 text: i18n("GPU device") | ||||
|                 value: cfg_dataengine["GPUDEV"] | ||||
|                 onValueEdited: cfg_dataengine["GPUDEV"] = newValue | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         QtControls.GroupBox { | ||||
|             height: implicitHeight | ||||
|             width: parent.width | ||||
|             title: i18n("HDD temperature") | ||||
|             Column { | ||||
|                 height: implicitHeight | ||||
|                 width: parent.width | ||||
|                 ComboBoxSelector { | ||||
|                     id: hdd | ||||
|                     text: i18n("HDD") | ||||
|                     value: cfg_dataengine["HDDDEV"] | ||||
|                     onValueEdited: cfg_dataengine["HDDDEV"] = newValue | ||||
|                 } | ||||
|  | ||||
|                 LineSelector { | ||||
|                     text: i18n("hddtemp cmd") | ||||
|                     value: cfg_dataengine["HDDTEMPCMD"] | ||||
|                     onValueEdited: cfg_dataengine["HDDTEMPCMD"] = newValue | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         QtControls.GroupBox { | ||||
|         GroupBox { | ||||
|             height: implicitHeight | ||||
|             width: parent.width | ||||
|             title: i18n("Player") | ||||
|  | ||||
|             Column { | ||||
|                 height: implicitHeight | ||||
|                 width: parent.width | ||||
| @ -123,27 +64,27 @@ Item { | ||||
|                     stepSize: 1 | ||||
|                     text: i18n("Player data symbols") | ||||
|                     value: cfg_dataengine["PLAYERSYMBOLS"] | ||||
|                     onValueEdited: cfg_dataengine["PLAYERSYMBOLS"] = newValue | ||||
|                     onValueEdited: newValue => cfg_dataengine["PLAYERSYMBOLS"] = newValue | ||||
|                 } | ||||
|  | ||||
|                 ComboBoxSelector { | ||||
|                     model: [ | ||||
|                         { | ||||
|                             'label': "disable", | ||||
|                             'name': "disable" | ||||
|                             "label": "disable", | ||||
|                             "name": "disable" | ||||
|                         }, | ||||
|                         { | ||||
|                             'label': "mpris", | ||||
|                             'name': "mpris" | ||||
|                             "label": "mpris", | ||||
|                             "name": "mpris" | ||||
|                         }, | ||||
|                         { | ||||
|                             'label': "mpd", | ||||
|                             'name': "mpd" | ||||
|                             "label": "mpd", | ||||
|                             "name": "mpd" | ||||
|                         } | ||||
|                     ] | ||||
|                     text: i18n("Music player") | ||||
|                     value: cfg_dataengine["PLAYER"] | ||||
|                     onValueEdited: cfg_dataengine["PLAYER"] = newValue | ||||
|                     onValueEdited: newValue => cfg_dataengine["PLAYER"] = newValue | ||||
|                 } | ||||
|  | ||||
|                 ComboBoxSelector { | ||||
| @ -151,40 +92,40 @@ Item { | ||||
|                     editable: true | ||||
|                     model: [ | ||||
|                         { | ||||
|                             'label': 'auto', | ||||
|                             'name': 'auto' | ||||
|                             "label": "auto", | ||||
|                             "name": "auto" | ||||
|                         }, | ||||
|                         { | ||||
|                             'label': 'amarok', | ||||
|                             'name': 'amarok' | ||||
|                             "label": "amarok", | ||||
|                             "name": "amarok" | ||||
|                         }, | ||||
|                         { | ||||
|                             'label': 'audacious', | ||||
|                             'name': 'audacious' | ||||
|                             "label": "audacious", | ||||
|                             "name": "audacious" | ||||
|                         }, | ||||
|                         { | ||||
|                             'label': 'clementine', | ||||
|                             'name': 'clementine' | ||||
|                             "label": "clementine", | ||||
|                             "name": "clementine" | ||||
|                         }, | ||||
|                         { | ||||
|                             'label': 'DeaDBeeF', | ||||
|                             'name': 'DeaDBeeF' | ||||
|                             "label": "DeaDBeeF", | ||||
|                             "name": "DeaDBeeF" | ||||
|                         }, | ||||
|                         { | ||||
|                             'label': 'vlc', | ||||
|                             'name': 'vlc' | ||||
|                             "label": "vlc", | ||||
|                             "name": "vlc" | ||||
|                         }, | ||||
|                         { | ||||
|                             'label': 'qmmp', | ||||
|                             'name': 'qmmp' | ||||
|                             "label": "qmmp", | ||||
|                             "name": "qmmp" | ||||
|                         }, | ||||
|                         { | ||||
|                             'label': 'xmms2', | ||||
|                             'name': 'xmms2' | ||||
|                             "label": "xmms2", | ||||
|                             "name": "xmms2" | ||||
|                         }, | ||||
|                         { | ||||
|                             'label': cfg_dataengine["MPRIS"], | ||||
|                             'name': cfg_dataengine["MPRIS"] | ||||
|                             "label": cfg_dataengine["MPRIS"], | ||||
|                             "name": cfg_dataengine["MPRIS"] | ||||
|                         } | ||||
|                     ] | ||||
|                     text: i18n("MPRIS player name") | ||||
| @ -194,7 +135,7 @@ Item { | ||||
|                 LineSelector { | ||||
|                     text: i18n("MPD address") | ||||
|                     value: cfg_dataengine["MPDADDRESS"] | ||||
|                     onValueEdited: cfg_dataengine["MPDADDRESS"] = newValue | ||||
|                     onValueEdited: newValue => cfg_dataengine["MPDADDRESS"] = newValue | ||||
|                 } | ||||
|  | ||||
|                 IntegerSelector { | ||||
| @ -203,18 +144,20 @@ Item { | ||||
|                     stepSize: 1 | ||||
|                     text: i18n("MPD port") | ||||
|                     value: cfg_dataengine["MPDPORT"] | ||||
|                     onValueEdited: cfg_dataengine["MPDPORT"] = newValue | ||||
|                     onValueEdited: newValue => cfg_dataengine["MPDPORT"] = newValue | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         QtControls.GroupBox { | ||||
|         GroupBox { | ||||
|             height: implicitHeight | ||||
|             width: parent.width | ||||
|             title: i18n("Extensions") | ||||
|  | ||||
|             Column { | ||||
|                 height: implicitHeight | ||||
|                 width: parent.width | ||||
|  | ||||
|                 ButtonSelector { | ||||
|                     value: i18n("Custom scripts") | ||||
|                     onButtonActivated: awKeys.editItem("extscript") | ||||
| @ -245,8 +188,6 @@ Item { | ||||
|  | ||||
|  | ||||
|     Component.onCompleted: { | ||||
|         if (debug) console.debug() | ||||
|  | ||||
|         // init submodule | ||||
|         awKeys.updateCache() | ||||
|  | ||||
| @ -256,8 +197,6 @@ Item { | ||||
|     } | ||||
|  | ||||
|     Component.onDestruction: { | ||||
|         if (debug) console.debug() | ||||
|  | ||||
|         cfg_dataengine["MPRIS"] = mpris.editText | ||||
|         awConfig.writeDataEngineConfiguration(cfg_dataengine) | ||||
|     } | ||||
|  | ||||
| @ -15,20 +15,20 @@ | ||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
| import QtQuick 2.4 | ||||
| import QtQuick.Controls 1.3 as QtControls | ||||
| import QtQuick.Dialogs 1.2 as QtDialogs | ||||
| import QtQuick.Layouts 1.1 | ||||
| import QtQuick 2.15 | ||||
| import QtQuick.Controls | ||||
| import QtQuick.Dialogs | ||||
| import QtQuick.Layouts | ||||
| import org.kde.plasma.core as PlasmaCore | ||||
| import org.kde.plasma.plasmoid 2.0 | ||||
| import org.kde.plasma.core 2.0 as PlasmaCore | ||||
| import org.kde.plasma.components 2.0 as PlasmaComponents | ||||
|  | ||||
| import org.kde.plasma.private.awesomewidget 1.0 | ||||
| import "." | ||||
|  | ||||
|  | ||||
| Item { | ||||
| PlasmoidItem { | ||||
|     id: main | ||||
|  | ||||
|     // backend | ||||
|     AWKeys { | ||||
|         id: awKeys | ||||
| @ -43,7 +43,6 @@ Item { | ||||
|         id: bugReport | ||||
|     } | ||||
|  | ||||
|     property bool debug: awActions.isDebugEnabled() | ||||
|     property variant tooltipSettings: { | ||||
|         "tooltipNumber": plasmoid.configuration.tooltipNumber, | ||||
|         "useTooltipBackground": plasmoid.configuration.useTooltipBackground, | ||||
| @ -73,19 +72,12 @@ Item { | ||||
|     signal needToolTipUpdate(string newText) | ||||
|     signal sizeUpdate | ||||
|  | ||||
|  | ||||
|     // init | ||||
|     Plasmoid.preferredRepresentation: Plasmoid.fullRepresentation | ||||
|     Plasmoid.compactRepresentation: Plasmoid.fullRepresentation | ||||
|  | ||||
|     Layout.fillWidth: plasmoid.formFactor != PlasmaCore.Planar | ||||
|     Layout.fillHeight: plasmoid.formFactor != PlasmaCore.Planar | ||||
|     Layout.fillWidth: PlasmoidItem.formFactor !== PlasmaCore.Planar | ||||
|     Layout.fillHeight: PlasmoidItem.formFactor !== PlasmaCore.Planar | ||||
|     Layout.alignment: Qt.AlignVCenter | Qt.AlignHCenter | ||||
|  | ||||
|     Plasmoid.icon: "utilities-system-monitor" | ||||
|     Plasmoid.backgroundHints: plasmoid.configuration.background ? "DefaultBackground" : "NoBackground" | ||||
|     Plasmoid.associatedApplication: "ksysguard" | ||||
|  | ||||
|  | ||||
|     // ui | ||||
|     Text { | ||||
| @ -100,7 +92,7 @@ Item { | ||||
|  | ||||
|         color: plasmoid.configuration.fontColor | ||||
|         font.family: plasmoid.configuration.fontFamily | ||||
|         font.italic: plasmoid.configuration.fontStyle == "italic" ? true : false | ||||
|         font.italic: plasmoid.configuration.fontStyle === "italic" ? true : false | ||||
|         font.pointSize: plasmoid.configuration.fontSize | ||||
|         font.weight: General.fontWeight[plasmoid.configuration.fontWeight] | ||||
|  | ||||
| @ -119,19 +111,19 @@ Item { | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     QtDialogs.Dialog { | ||||
|     Dialog { | ||||
|         id: tagSelector | ||||
|         title: i18n("Select tag") | ||||
|  | ||||
|         QtControls.ComboBox { | ||||
|         ComboBox { | ||||
|             id: tagSelectorBox | ||||
|             width: parent.width | ||||
|             editable: true | ||||
|         } | ||||
|  | ||||
|         onAccepted: { | ||||
|             var tag = tagSelectorBox.editText | ||||
|             var message = i18n("Tag: %1", tag) | ||||
|             const tag = tagSelectorBox.editText | ||||
|             let message = i18n("Tag: %1", tag) | ||||
|             message += "<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); | ||||
|         }); | ||||
|     } | ||||
|  | ||||
| @ -15,25 +15,15 @@ | ||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
| import QtQuick 2.0 | ||||
| import QtQuick.Controls 1.3 as QtControls | ||||
| import QtQuick 2.15 | ||||
| import QtQuick.Controls | ||||
| import org.kde.kcmutils as KCM | ||||
|  | ||||
| import org.kde.plasma.private.awesomewidget 1.0 | ||||
|  | ||||
|  | ||||
| Item { | ||||
| KCM.SimpleKCM { | ||||
|     id: tooltipPage | ||||
|     // backend | ||||
|     AWActions { | ||||
|         id: awActions | ||||
|     } | ||||
|  | ||||
|     width: childrenRect.width | ||||
|     height: childrenRect.height | ||||
|     implicitWidth: pageColumn.implicitWidth | ||||
|     implicitHeight: pageColumn.implicitHeight | ||||
|  | ||||
|     property bool debug: awActions.isDebugEnabled() | ||||
|  | ||||
|     property alias cfg_tooltipNumber: tooltipNumber.value | ||||
|     property alias cfg_useTooltipBackground: useTooltipBackground.checked | ||||
| @ -46,18 +36,18 @@ Item { | ||||
|     property alias cfg_memTooltipColor: memTooltipColor.value | ||||
|     property alias cfg_swapTooltip: swapTooltip.checked | ||||
|     property alias cfg_swapTooltipColor: swapTooltipColor.value | ||||
|     property alias cfg_downkbTooltip: downkbTooltip.checked | ||||
|     property alias cfg_downkbTooltip: networkTooltip.checked | ||||
|     property alias cfg_downkbTooltipColor: downkbTooltipColor.value | ||||
|     property alias cfg_upkbTooltipColor: upkbTooltipColor.value | ||||
|     property alias cfg_batTooltip: batTooltip.checked | ||||
|     property alias cfg_batTooltipColor: batTooltipColor.value | ||||
|     property alias cfg_batInTooltipColor: batInTooltipColor.value | ||||
|  | ||||
|  | ||||
|     Column { | ||||
|         id: pageColumn | ||||
|         anchors.fill: parent | ||||
|         QtControls.Label { | ||||
|  | ||||
|         Label { | ||||
|           width: parent.width | ||||
|           horizontalAlignment: Text.AlignHCenter | ||||
|           verticalAlignment: Text.AlignVCenter | ||||
| @ -74,85 +64,116 @@ Item { | ||||
|             value: plasmoid.configuration.tooltipNumber | ||||
|         } | ||||
|  | ||||
|         QtControls.GroupBox { | ||||
|         GroupBox { | ||||
|             id: useTooltipBackground | ||||
|             height: implicitHeight | ||||
|             width: parent.width | ||||
|             checkable: true | ||||
|             title: i18n("Background") | ||||
|  | ||||
|             property alias checked: useTooltipBackgroundLabel.checked | ||||
|             label: CheckBox { | ||||
|                 id: useTooltipBackgroundLabel | ||||
|                 text: i18n("Background") | ||||
|             } | ||||
|  | ||||
|             ColorSelector { | ||||
|                 id: tooltipBackground | ||||
|                 enabled: useTooltipBackgroundLabel.checked | ||||
|                 text: i18n("Background color") | ||||
|                 value: plasmoid.configuration.tooltipBackground | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         QtControls.GroupBox { | ||||
|         GroupBox { | ||||
|             id: cpuTooltip | ||||
|             height: implicitHeight | ||||
|             width: parent.width | ||||
|             checkable: true | ||||
|             title: i18n("CPU") | ||||
|  | ||||
|             property alias checked: cpuTooltipLabel.checked | ||||
|             label: CheckBox { | ||||
|                 id: cpuTooltipLabel | ||||
|                 text: i18n("CPU") | ||||
|             } | ||||
|  | ||||
|             ColorSelector { | ||||
|                 id: cpuTooltipColor | ||||
|                 enabled: cpuTooltipLabel.checked | ||||
|                 text: i18n("CPU color") | ||||
|                 value: plasmoid.configuration.cpuTooltipColor | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         QtControls.GroupBox { | ||||
|         GroupBox { | ||||
|             id: cpuclTooltip | ||||
|             height: implicitHeight | ||||
|             width: parent.width | ||||
|             checkable: true | ||||
|             title: i18n("CPU clock") | ||||
|  | ||||
|             property alias checked: cpuclTooltipLabel.checked | ||||
|             label: CheckBox { | ||||
|                 id: cpuclTooltipLabel | ||||
|                 text: i18n("CPU clock") | ||||
|             } | ||||
|  | ||||
|             ColorSelector { | ||||
|                 id: cpuclTooltipColor | ||||
|                 enabled: cpuclTooltipLabel.checked | ||||
|                 text: i18n("CPU clock color") | ||||
|                 value: plasmoid.configuration.cpuclTooltipColor | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         QtControls.GroupBox { | ||||
|         GroupBox { | ||||
|             id: memTooltip | ||||
|             height: implicitHeight | ||||
|             width: parent.width | ||||
|             checkable: true | ||||
|             title: i18n("Memory") | ||||
|  | ||||
|             property alias checked: memTooltipLabel.checked | ||||
|             label: CheckBox { | ||||
|                 id: memTooltipLabel | ||||
|                 text: i18n("Memory") | ||||
|             } | ||||
|  | ||||
|             ColorSelector { | ||||
|                 id: memTooltipColor | ||||
|                 enabled: memTooltipLabel.checked | ||||
|                 text: i18n("Memory color") | ||||
|                 value: plasmoid.configuration.memTooltipColor | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         QtControls.GroupBox { | ||||
|         GroupBox { | ||||
|             id: swapTooltip | ||||
|             height: implicitHeight | ||||
|             width: parent.width | ||||
|             checkable: true | ||||
|             title: i18n("Swap") | ||||
|  | ||||
|             property alias checked: swapTooltipLabel.checked | ||||
|             label: CheckBox { | ||||
|                 id: swapTooltipLabel | ||||
|                 text: i18n("Swap") | ||||
|             } | ||||
|  | ||||
|             ColorSelector { | ||||
|                 id: swapTooltipColor | ||||
|                 enabled: swapTooltipLabel.checked | ||||
|                 text: i18n("Swap color") | ||||
|                 value: plasmoid.configuration.swapTooltipColor | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         QtControls.GroupBox { | ||||
|             id: downkbTooltip | ||||
|             height: implicitHeight | ||||
|         GroupBox { | ||||
|             id: networkTooltip | ||||
|             width: parent.width | ||||
|             checkable: true | ||||
|             title: i18n("Network") | ||||
|  | ||||
|             property alias checked: networkTooltipLabel.checked | ||||
|             label: CheckBox { | ||||
|                 id: networkTooltipLabel | ||||
|                 text: i18n("Network") | ||||
|             } | ||||
|  | ||||
|             Column { | ||||
|                 height: implicitHeight | ||||
|                 width: parent.width | ||||
|                 enabled: networkTooltipLabel.checked | ||||
|  | ||||
|                 ColorSelector { | ||||
|                     id: downkbTooltipColor | ||||
|                     text: i18n("Download speed color") | ||||
|                     value: plasmoid.configuration.downkbTooltipColor | ||||
|                 } | ||||
|  | ||||
|                 ColorSelector { | ||||
|                     id: upkbTooltipColor | ||||
|                     text: i18n("Upload speed color") | ||||
| @ -161,20 +182,26 @@ Item { | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         QtControls.GroupBox { | ||||
|         GroupBox { | ||||
|             id: batTooltip | ||||
|             height: implicitHeight | ||||
|             width: parent.width | ||||
|             checkable: true | ||||
|             title: i18n("Battery") | ||||
|  | ||||
|             property alias checked: batteryTooltipLabel.checked | ||||
|             label: CheckBox { | ||||
|                 id: batteryTooltipLabel | ||||
|                 text: i18n("Battery") | ||||
|             } | ||||
|  | ||||
|             Column { | ||||
|                 height: implicitHeight | ||||
|                 width: parent.width | ||||
|                 enabled: batteryTooltipLabel.checked | ||||
|  | ||||
|                 ColorSelector { | ||||
|                     id: batTooltipColor | ||||
|                     text: i18n("Battery active color") | ||||
|                     value: plasmoid.configuration.batTooltipColor | ||||
|                 } | ||||
|  | ||||
|                 ColorSelector { | ||||
|                     id: batInTooltipColor | ||||
|                     text: i18n("Battery inactive color") | ||||
| @ -183,9 +210,4 @@ Item { | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|  | ||||
|     Component.onCompleted: { | ||||
|         if (debug) console.debug() | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -15,14 +15,17 @@ | ||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
| import QtQuick 2.2 | ||||
| import QtQuick 2.15 | ||||
| import QtQuick.Controls | ||||
| import org.kde.kcmutils as KCM | ||||
|  | ||||
| import org.kde.plasma.private.awesomewidget 1.0 | ||||
| import "." | ||||
|  | ||||
|  | ||||
| Item { | ||||
| KCM.SimpleKCM { | ||||
|     id: widgetPage | ||||
|  | ||||
|     // backend | ||||
|     AWKeys { | ||||
|         id: awKeys | ||||
| @ -31,19 +34,11 @@ Item { | ||||
|         id: awActions | ||||
|     } | ||||
|  | ||||
|     width: childrenRect.width | ||||
|     height: childrenRect.height | ||||
|     implicitWidth: pageColumn.implicitWidth | ||||
|     implicitHeight: pageColumn.implicitHeight | ||||
|  | ||||
|     property bool debug: awActions.isDebugEnabled() | ||||
|  | ||||
|     property alias cfg_text: textPattern.text | ||||
|     property bool lock: true | ||||
|  | ||||
|     signal needTextUpdate(string newText) | ||||
|  | ||||
|  | ||||
|     Column { | ||||
|         id: pageColumn | ||||
|         anchors.fill: parent | ||||
| @ -74,10 +69,7 @@ Item { | ||||
|         } | ||||
|     } | ||||
|  | ||||
|  | ||||
|     Component.onCompleted: { | ||||
|         if (debug) console.debug() | ||||
|  | ||||
|         awKeys.needTextToBeUpdated.connect(needTextUpdate) | ||||
|         // init submodule | ||||
|         awKeys.initKeys(plasmoid.configuration.text, plasmoid.configuration.interval, | ||||
| @ -90,9 +82,8 @@ Item { | ||||
|         awKeys.setAggregatorProperty("translate", plasmoid.configuration.translateStrings) | ||||
|     } | ||||
|  | ||||
|     onNeedTextUpdate: { | ||||
|     onNeedTextUpdate: newText => { | ||||
|         if (lock) return | ||||
|         if (debug) console.debug() | ||||
|  | ||||
|         extensions.showMessage(newText) | ||||
|         lock = true | ||||
|  | ||||
| @ -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}) | ||||
|  | ||||
| @ -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; | ||||
|  | ||||
| @ -34,7 +34,6 @@ 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(); | ||||
|  | ||||
| @ -21,7 +21,6 @@ | ||||
| #include <QQmlPropertyMap> | ||||
| #include <QSettings> | ||||
| #include <QStandardPaths> | ||||
| #include <QTextCodec> | ||||
|  | ||||
| #include "awdebug.h" | ||||
|  | ||||
| @ -171,9 +170,6 @@ QVariantMap AWConfigHelper::readDataEngineConfiguration() | ||||
|  | ||||
|     settings.beginGroup("Configuration"); | ||||
|     configuration["ACPIPATH"] = settings.value("ACPIPATH", "/sys/class/power_supply/"); | ||||
|     configuration["GPUDEV"] = settings.value("GPUDEV", "auto"); | ||||
|     configuration["HDDDEV"] = settings.value("HDDDEV", "all"); | ||||
|     configuration["HDDTEMPCMD"] = settings.value("HDDTEMPCMD", "sudo smartctl -a"); | ||||
|     configuration["MPDADDRESS"] = settings.value("MPDADDRESS", "localhost"); | ||||
|     configuration["MPDPORT"] = settings.value("MPDPORT", "6600"); | ||||
|     configuration["MPRIS"] = settings.value("MPRIS", "auto"); | ||||
| @ -198,9 +194,6 @@ bool AWConfigHelper::writeDataEngineConfiguration(const QVariantMap &_configurat | ||||
|  | ||||
|     settings.beginGroup("Configuration"); | ||||
|     settings.setValue("ACPIPATH", _configuration["ACPIPATH"]); | ||||
|     settings.setValue("GPUDEV", _configuration["GPUDEV"]); | ||||
|     settings.setValue("HDDDEV", _configuration["HDDDEV"]); | ||||
|     settings.setValue("HDDTEMPCMD", _configuration["HDDTEMPCMD"]); | ||||
|     settings.setValue("MPDADDRESS", _configuration["MPDADDRESS"]); | ||||
|     settings.setValue("MPDPORT", _configuration["MPDPORT"]); | ||||
|     settings.setValue("MPRIS", _configuration["MPRIS"]); | ||||
| @ -285,7 +278,6 @@ void AWConfigHelper::writeFile(QSettings &_settings, const QString &_key, const | ||||
|     QFile file(_fileName); | ||||
|     if (file.open(QIODevice::WriteOnly | QIODevice::Text)) { | ||||
|         QTextStream out(&file); | ||||
|         out.setCodec("UTF-8"); | ||||
|         out << _settings.value(_key).toString().toUtf8(); | ||||
|         out.flush(); | ||||
|         file.close(); | ||||
|  | ||||
| @ -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()); | ||||
| } | ||||
|  | ||||
|  | ||||
| void AWDataEngineAggregator::createQueuedConnection() | ||||
| { | ||||
|     // 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); | ||||
|         } | ||||
|     if (m_subscribed.contains(_source)) { | ||||
|         m_interface->unsubscribe({_source}).waitForFinished(); | ||||
|         m_subscribed.remove(_source); | ||||
|     } | ||||
| } | ||||
|  | ||||
|  | ||||
| void AWDataEngineAggregator::sensorAdded(const QString &_sensor) | ||||
| { | ||||
|     qCDebug(LOG_AW) << "New sensor added" << _sensor; | ||||
|  | ||||
|     // check if sensor is actually valid | ||||
|     auto response = m_interface->sensors({_sensor}); | ||||
|     response.waitForFinished(); | ||||
|  | ||||
|     auto info = response.value().value(_sensor); | ||||
|     if (!isValidSensor(info)) | ||||
|         return; | ||||
|  | ||||
|     m_sensors[_sensor] = info; | ||||
|     dropSource(_sensor); // force reconnect | ||||
|     if (!m_subscribed.contains(_sensor)) { | ||||
|         m_interface->subscribe({_sensor}).waitForFinished(); | ||||
|         m_subscribed.insert(_sensor); | ||||
|     } | ||||
|  | ||||
|     // notify about new device | ||||
|     emit(deviceAdded(_sensor)); | ||||
| } | ||||
|  | ||||
|  | ||||
| void AWDataEngineAggregator::sensorRemoved(const QString &_sensor) | ||||
| { | ||||
|     qCDebug(LOG_AW) << "Sensor" << _sensor << "has been removed"; | ||||
|  | ||||
|     m_sensors.remove(_sensor); | ||||
|     dropSource(_sensor); | ||||
| } | ||||
|  | ||||
|  | ||||
| void AWDataEngineAggregator::updateData(KSysGuard::SensorDataList _data) | ||||
| { | ||||
|     emit(dataUpdated(m_sensors, _data)); | ||||
| } | ||||
|  | ||||
|  | ||||
| void AWDataEngineAggregator::updateSensors(const QHash<QString, KSysGuard::SensorInfo> &_sensors) | ||||
| { | ||||
|     for (auto sensor = _sensors.cbegin(); sensor != _sensors.cend(); ++sensor) { | ||||
|         if (!isValidSensor(sensor.value())) | ||||
|             continue; | ||||
|         m_sensors.insert(sensor.key(), sensor.value()); | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -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(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,76 +76,80 @@ QStringList AWDataEngineMapper::keysFromSource(const QString &_source) const | ||||
|  | ||||
| // HACK units required to define should the value be calculated as temperature | ||||
| // or fan data | ||||
| QStringList AWDataEngineMapper::registerSource(const QString &_source, const QString &_units, const QStringList &_keys) | ||||
| QStringList AWDataEngineMapper::registerSource(const QString &_source, const KSysGuard::Unit _units, | ||||
|                                                const QStringList &_keys) | ||||
| { | ||||
|     qCDebug(LOG_AW) << "Source" << _source << "with units" << _units; | ||||
|  | ||||
|     // regular expressions | ||||
|     QRegExp cpuRegExp = QRegExp("cpu/cpu.*/TotalLoad"); | ||||
|     QRegExp cpuclRegExp = QRegExp("cpu/cpu.*/clock"); | ||||
|     QRegExp hddrRegExp = QRegExp("disk/.*/Rate/rblk"); | ||||
|     QRegExp hddwRegExp = QRegExp("disk/.*/Rate/wblk"); | ||||
|     QRegExp mountFillRegExp = QRegExp("partitions/.*/filllevel"); | ||||
|     QRegExp mountFreeRegExp = QRegExp("partitions/.*/freespace"); | ||||
|     QRegExp mountUsedRegExp = QRegExp("partitions/.*/usedspace"); | ||||
|     QRegExp netRegExp = QRegExp("network/interfaces/.*/(receiver|transmitter)/data$"); | ||||
|     QRegExp netTotalRegExp = QRegExp("network/interfaces/.*/(receiver|transmitter)/dataTotal$"); | ||||
|     auto cpuRegExp = QRegularExpression("^cpu/cpu.*/usage$"); | ||||
|     auto cpuclRegExp = QRegularExpression("^cpu/cpu.*/frequency$"); | ||||
|     auto cpuTempRegExp = QRegularExpression("^cpu/cpu.*/temperature$"); | ||||
|     auto gpuRegExp = QRegularExpression("^gpu/gpu.*/usage$"); | ||||
|     auto gpuTempRegExp = QRegularExpression("^gpu/gpu.*/temperature$"); | ||||
|     auto hddrRegExp = QRegularExpression("^disk/.*/read$"); | ||||
|     auto hddwRegExp = QRegularExpression("^disk/.*/write$"); | ||||
|     auto mountFillRegExp = QRegularExpression("^disk/.*/usedPercent$"); | ||||
|     auto mountFreeRegExp = QRegularExpression("^disk/.*/free$"); | ||||
|     auto mountUsedRegExp = QRegularExpression("^disk/.*/used$"); | ||||
|     auto netRegExp = QRegularExpression("^network/.*/(download|upload)$"); | ||||
|     auto netTotalRegExp = QRegularExpression("^network/.*/(totalDownload|totalUpload)$"); | ||||
|  | ||||
|     if (_source == "battery/ac") { | ||||
|     if (_source == "extsysmon/battery/ac") { | ||||
|         // AC | ||||
|         m_map.insert(_source, "ac"); | ||||
|         m_formatter["ac"] = AWKeysAggregator::FormatterType::ACFormat; | ||||
|     } else if (_source.startsWith("battery/")) { | ||||
|     } else if (_source.startsWith("extsysmon/battery/")) { | ||||
|         // battery stats | ||||
|         QString key = _source; | ||||
|         key.remove("battery/"); | ||||
|         auto key = _source; | ||||
|         key.remove("extsysmon/battery/"); | ||||
|         m_map.insert(_source, key); | ||||
|         m_formatter[key] = _source.contains("rate") ? AWKeysAggregator::FormatterType::Float | ||||
|                                                     : AWKeysAggregator::FormatterType::IntegerThree; | ||||
|     } else if (_source == "cpu/system/TotalLoad") { | ||||
|     } else if (_source == "cpu/all/usage") { | ||||
|         // cpu | ||||
|         m_map.insert(_source, "cpu"); | ||||
|         m_formatter["cpu"] = AWKeysAggregator::FormatterType::Float; | ||||
|     } else if (_source.contains(cpuRegExp)) { | ||||
|         // cpus | ||||
|         QString key = _source; | ||||
|         key.remove("cpu/").remove("/TotalLoad"); | ||||
|         auto key = _source; | ||||
|         key.remove("cpu/").remove("/usage"); | ||||
|         m_map.insert(_source, key); | ||||
|         m_formatter[key] = AWKeysAggregator::FormatterType::Float; | ||||
|     } else if (_source == "cpu/system/AverageClock") { | ||||
|     } else if (_source == "cpu/all/averageFrequency") { | ||||
|         // cpucl | ||||
|         m_map.insert(_source, "cpucl"); | ||||
|         m_formatter["cpucl"] = AWKeysAggregator::FormatterType::Integer; | ||||
|     } else if (_source.contains(cpuclRegExp)) { | ||||
|         // cpucls | ||||
|         QString key = _source; | ||||
|         key.remove("cpu/cpu").remove("/clock"); | ||||
|         auto key = _source; | ||||
|         key.remove("cpu/cpu").remove("/frequency"); | ||||
|         key = QString("cpucl%1").arg(key); | ||||
|         m_map.insert(_source, key); | ||||
|         m_formatter[key] = AWKeysAggregator::FormatterType::Integer; | ||||
|     } else if (_source.startsWith("custom")) { | ||||
|     } else if (_source.startsWith("extsysmon/custom")) { | ||||
|         // custom | ||||
|         QString key = _source; | ||||
|         key.remove("custom/"); | ||||
|         auto key = _source; | ||||
|         key.remove("extsysmon/custom/"); | ||||
|         m_map.insert(_source, key); | ||||
|         m_formatter[key] = AWKeysAggregator::FormatterType::NoFormat; | ||||
|     } else if (_source == "desktop/current/name") { | ||||
|     } else if (_source == "extsysmon/desktop/name") { | ||||
|         // current desktop name | ||||
|         m_map.insert(_source, "desktop"); | ||||
|         m_formatter["desktop"] = AWKeysAggregator::FormatterType::NoFormat; | ||||
|     } else if (_source == "desktop/current/number") { | ||||
|     } else if (_source == "extsysmon/desktop/number") { | ||||
|         // current desktop number | ||||
|         m_map.insert(_source, "ndesktop"); | ||||
|         m_formatter["ndesktop"] = AWKeysAggregator::FormatterType::NoFormat; | ||||
|     } else if (_source == "desktop/total/number") { | ||||
|     } else if (_source == "extsysmon/desktop/count") { | ||||
|         // desktop count | ||||
|         m_map.insert(_source, "tdesktops"); | ||||
|         m_formatter["tdesktops"] = AWKeysAggregator::FormatterType::NoFormat; | ||||
|     } else if (_source.contains(hddrRegExp)) { | ||||
|         // read speed | ||||
|         QString device = _source; | ||||
|         device.remove("/Rate/rblk"); | ||||
|         int index = m_devices["disk"].indexOf(device); | ||||
|         auto device = _source; | ||||
|         device.remove("disk/").remove("/read"); | ||||
|         auto index = m_devices["disk"].indexOf(device); | ||||
|         if (index > -1) { | ||||
|             QString key = QString("hddr%1").arg(index); | ||||
|             m_map.insert(_source, key); | ||||
| @ -153,29 +157,45 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const QSt | ||||
|         } | ||||
|     } else if (_source.contains(hddwRegExp)) { | ||||
|         // write speed | ||||
|         QString device = _source; | ||||
|         device.remove("/Rate/wblk"); | ||||
|         int index = m_devices["disk"].indexOf(device); | ||||
|         auto device = _source; | ||||
|         device.remove("disk/").remove("/write"); | ||||
|         auto index = m_devices["disk"].indexOf(device); | ||||
|         if (index > -1) { | ||||
|             QString key = QString("hddw%1").arg(index); | ||||
|             m_map.insert(_source, key); | ||||
|             m_formatter[key] = AWKeysAggregator::FormatterType::Integer; | ||||
|         } | ||||
|     } else if (_source == "gpu/load") { | ||||
|     } else if (_source == "gpu/all/usage") { | ||||
|         // gpu load | ||||
|         m_map.insert(_source, "gpu"); | ||||
|         m_formatter["gpu"] = AWKeysAggregator::FormatterType::Float; | ||||
|     } else if (_source == "gpu/temperature") { | ||||
|         // gpu temperature | ||||
|         m_map.insert(_source, "gputemp"); | ||||
|         m_formatter["gputemp"] = AWKeysAggregator::FormatterType::Temperature; | ||||
|     } else if (_source.contains(gpuRegExp)) { | ||||
|         // gpus | ||||
|         auto device = _source; | ||||
|         device.remove("gpu/").remove("/usage"); | ||||
|         auto index = m_devices["gpu"].indexOf(device); | ||||
|         if (index > -1) { | ||||
|             auto key = QString("gpu%1").arg(index); | ||||
|             m_map.insert(_source, key); | ||||
|             m_formatter[key] = AWKeysAggregator::FormatterType::Float; | ||||
|         } | ||||
|     } else if (_source.contains(gpuTempRegExp)) { | ||||
|         // gpus temps | ||||
|         auto device = _source; | ||||
|         device.remove("gpu/").remove("/temperature"); | ||||
|         auto index = m_devices["gpu"].indexOf(device); | ||||
|         if (index > -1) { | ||||
|             auto key = QString("gputemp%1").arg(index); | ||||
|             m_map.insert(_source, key); | ||||
|             m_formatter[key] = AWKeysAggregator::FormatterType::Temperature; | ||||
|         } | ||||
|     } else if (_source.contains(mountFillRegExp)) { | ||||
|         // fill level | ||||
|         QString device = _source; | ||||
|         device.remove("partitions").remove("/filllevel"); | ||||
|         int index = m_devices["mount"].indexOf(device); | ||||
|         auto device = _source; | ||||
|         device.remove("disk/").remove("/usedPercent"); | ||||
|         auto index = m_devices["mount"].indexOf(device); | ||||
|         if (index > -1) { | ||||
|             QString key = QString("hdd%1").arg(index); | ||||
|             auto key = QString("hdd%1").arg(index); | ||||
|             m_map.insert(_source, key); | ||||
|             m_formatter[key] = AWKeysAggregator::FormatterType::Float; | ||||
|             // additional keys | ||||
| @ -184,9 +204,9 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const QSt | ||||
|         } | ||||
|     } else if (_source.contains(mountFreeRegExp)) { | ||||
|         // free space | ||||
|         QString device = _source; | ||||
|         device.remove("partitions").remove("/freespace"); | ||||
|         int index = m_devices["mount"].indexOf(device); | ||||
|         auto device = _source; | ||||
|         device.remove("disk/").remove("/free"); | ||||
|         auto index = m_devices["mount"].indexOf(device); | ||||
|         if (index > -1) { | ||||
|             // mb | ||||
|             QString key = QString("hddfreemb%1").arg(index); | ||||
| @ -199,9 +219,9 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const QSt | ||||
|         } | ||||
|     } else if (_source.contains(mountUsedRegExp)) { | ||||
|         // used | ||||
|         QString device = _source; | ||||
|         device.remove("partitions").remove("/usedspace"); | ||||
|         int index = m_devices["mount"].indexOf(device); | ||||
|         auto device = _source; | ||||
|         device.remove("disk/").remove("/used"); | ||||
|         auto index = m_devices["mount"].indexOf(device); | ||||
|         if (index > -1) { | ||||
|             // mb | ||||
|             QString key = QString("hddmb%1").arg(index); | ||||
| @ -212,24 +232,14 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const QSt | ||||
|             m_map.insert(_source, key); | ||||
|             m_formatter[key] = AWKeysAggregator::FormatterType::MemGBFormat; | ||||
|         } | ||||
|     } else if (_source.startsWith("hdd/temperature")) { | ||||
|         // hdd temperature | ||||
|         QString device = _source; | ||||
|         device.remove("hdd/temperature"); | ||||
|         int index = m_devices["hdd"].indexOf(device); | ||||
|         if (index > -1) { | ||||
|             QString key = QString("hddtemp%1").arg(index); | ||||
|             m_map.insert(_source, key); | ||||
|             m_formatter[key] = AWKeysAggregator::FormatterType::Temperature; | ||||
|         } | ||||
|     } else if (_source.startsWith("cpu/system/loadavg")) { | ||||
|     } else if (_source.startsWith("cpu/loadaverages/loadaverage")) { | ||||
|         // load average | ||||
|         QString time = _source; | ||||
|         time.remove("cpu/system/loadavg"); | ||||
|         QString key = QString("la%1").arg(time); | ||||
|         auto time = _source; | ||||
|         time.remove("cpu/loadaverages/loadaverage"); | ||||
|         auto key = QString("la%1").arg(time); | ||||
|         m_map.insert(_source, key); | ||||
|         m_formatter[key] = AWKeysAggregator::FormatterType::FloatTwoSymbols; | ||||
|     } else if (_source == "mem/physical/application") { | ||||
|     } else if (_source == "memory/physical/application") { | ||||
|         // app memory | ||||
|         // mb | ||||
|         m_map.insert(_source, "memmb"); | ||||
| @ -237,7 +247,7 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const QSt | ||||
|         // gb | ||||
|         m_map.insert(_source, "memgb"); | ||||
|         m_formatter["memgb"] = AWKeysAggregator::FormatterType::MemGBFormat; | ||||
|     } else if (_source == "mem/physical/free") { | ||||
|     } else if (_source == "memory/physical/free") { | ||||
|         // free memory | ||||
|         // mb | ||||
|         m_map.insert(_source, "memfreemb"); | ||||
| @ -245,7 +255,7 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const QSt | ||||
|         // gb | ||||
|         m_map.insert(_source, "memfreegb"); | ||||
|         m_formatter["memfreegb"] = AWKeysAggregator::FormatterType::MemGBFormat; | ||||
|     } else if (_source == "mem/physical/used") { | ||||
|     } else if (_source == "memory/physical/used") { | ||||
|         // used memory | ||||
|         // mb | ||||
|         m_map.insert(_source, "memusedmb"); | ||||
| @ -253,27 +263,27 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const QSt | ||||
|         // gb | ||||
|         m_map.insert(_source, "memusedgb"); | ||||
|         m_formatter["memusedgb"] = AWKeysAggregator::FormatterType::MemGBFormat; | ||||
|     } else if (_source == "network/current/name") { | ||||
|     } else if (_source == "extsysmon/network/device") { | ||||
|         // network device | ||||
|         m_map.insert(_source, "netdev"); | ||||
|         m_formatter["netdev"] = AWKeysAggregator::FormatterType::NoFormat; | ||||
|     } else if (_source == "network/current/ssid") { | ||||
|     } else if (_source == "extsysmon/network/ssid") { | ||||
|         // current ssid | ||||
|         m_map.insert(_source, "ssid"); | ||||
|         m_formatter["ssid"] = AWKeysAggregator::FormatterType::NoFormat; | ||||
|     } else if (_source.startsWith("network/response")) { | ||||
|     } else if (_source.startsWith("extsysmon/requests/response")) { | ||||
|         // network response | ||||
|         QString key = _source; | ||||
|         key.remove("network/"); | ||||
|         auto key = _source; | ||||
|         key.remove("extsysmon/requests/"); | ||||
|         m_map.insert(_source, key); | ||||
|         m_formatter[key] = AWKeysAggregator::FormatterType::NoFormat; | ||||
|     } else if (_source.contains(netRegExp)) { | ||||
|         // network speed | ||||
|         QString type = _source.contains("receiver") ? "down" : "up"; | ||||
|         int index = m_devices["net"].indexOf(_source.split('/')[2]); | ||||
|         auto type = _source.endsWith("download") ? "down" : "up"; | ||||
|         auto index = m_devices["net"].indexOf(_source.split('/')[1]); | ||||
|         if (index > -1) { | ||||
|             // kb | ||||
|             QString key = QString("%1kb%2").arg(type).arg(index); | ||||
|             auto key = QString("%1kb%2").arg(type).arg(index); | ||||
|             m_map.insert(_source, key); | ||||
|             m_formatter[key] = AWKeysAggregator::FormatterType::Integer; | ||||
|             // smart | ||||
| @ -287,11 +297,11 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const QSt | ||||
|         } | ||||
|     } else if (_source.contains(netTotalRegExp)) { | ||||
|         // network data total | ||||
|         QString type = _source.contains("receiver") ? "down" : "up"; | ||||
|         int index = m_devices["net"].indexOf(_source.split('/')[2]); | ||||
|         auto type = _source.endsWith("Download") ? "down" : "up"; | ||||
|         auto index = m_devices["net"].indexOf(_source.split('/')[1]); | ||||
|         if (index > -1) { | ||||
|             // kb | ||||
|             QString key = QString("%1totkb%2").arg(type).arg(index); | ||||
|             auto key = QString("%1totkb%2").arg(type).arg(index); | ||||
|             m_map.insert(_source, key); | ||||
|             m_formatter[key] = AWKeysAggregator::FormatterType::Integer; | ||||
|             // mb | ||||
| @ -299,37 +309,37 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const QSt | ||||
|             m_map.insert(_source, key); | ||||
|             m_formatter[key] = AWKeysAggregator::FormatterType::MemMBFormat; | ||||
|         } | ||||
|     } else if (_source.startsWith("upgrade")) { | ||||
|     } else if (_source.startsWith("extsysmon/upgrade")) { | ||||
|         // package manager | ||||
|         QString key = _source; | ||||
|         key.remove("upgrade/"); | ||||
|         auto key = _source; | ||||
|         key.remove("extsysmon/upgrade/"); | ||||
|         m_map.insert(_source, key); | ||||
|         m_formatter[key] = AWKeysAggregator::FormatterType::IntegerThree; | ||||
|     } else if (_source.startsWith("player")) { | ||||
|     } else if (_source.startsWith("extsysmon/player")) { | ||||
|         // player | ||||
|         QString key = _source; | ||||
|         key.remove("player/"); | ||||
|         auto key = _source; | ||||
|         key.remove("extsysmon/player/"); | ||||
|         m_map.insert(_source, key); | ||||
|         m_formatter[key] = AWKeysAggregator::FormatterType::NoFormat; | ||||
|     } else if (_source == "ps/running/count") { | ||||
|     } else if (_source == "extsysmon/ps/running") { | ||||
|         // running processes count | ||||
|         m_map.insert(_source, "pscount"); | ||||
|         m_formatter["pscount"] = AWKeysAggregator::FormatterType::NoFormat; | ||||
|     } else if (_source == "ps/running/list") { | ||||
|     } else if (_source == "extsysmon/ps/list") { | ||||
|         // list of running processes | ||||
|         m_map.insert(_source, "ps"); | ||||
|         m_formatter["ps"] = AWKeysAggregator::FormatterType::List; | ||||
|     } else if (_source == "ps/total/count") { | ||||
|     } else if (_source == "extsysmon/ps/count") { | ||||
|         // total processes count | ||||
|         m_map.insert(_source, "pstot"); | ||||
|         m_formatter["pstot"] = AWKeysAggregator::FormatterType::NoFormat; | ||||
|     } else if (_source.startsWith("quotes")) { | ||||
|     } else if (_source.startsWith("extsysmon/quotes")) { | ||||
|         // quotes | ||||
|         QString key = _source; | ||||
|         key.remove("quotes/"); | ||||
|         auto key = _source; | ||||
|         key.remove("extsysmon/quotes/"); | ||||
|         m_map.insert(_source, key); | ||||
|         m_formatter[key] = AWKeysAggregator::FormatterType::Quotes; | ||||
|     } else if (_source == "mem/swap/free") { | ||||
|     } else if (_source == "memory/swap/free") { | ||||
|         // free swap | ||||
|         // mb | ||||
|         m_map.insert(_source, "swapfreemb"); | ||||
| @ -337,7 +347,7 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const QSt | ||||
|         // gb | ||||
|         m_map.insert(_source, "swapfreegb"); | ||||
|         m_formatter["swapfreegb"] = AWKeysAggregator::FormatterType::MemGBFormat; | ||||
|     } else if (_source == "mem/swap/used") { | ||||
|     } else if (_source == "memory/swap/used") { | ||||
|         // used swap | ||||
|         // mb | ||||
|         m_map.insert(_source, "swapmb"); | ||||
| @ -345,19 +355,20 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const QSt | ||||
|         // gb | ||||
|         m_map.insert(_source, "swapgb"); | ||||
|         m_formatter["swapgb"] = AWKeysAggregator::FormatterType::MemGBFormat; | ||||
|     } else if (_source.startsWith("lmsensors/")) { | ||||
|     } else if (_source.startsWith("lmsensors/") || _source.contains(cpuTempRegExp) | ||||
|                || _source == "cpu/all/averageTemperature") { | ||||
|         // temperature | ||||
|         int index = m_devices["temp"].indexOf(_source); | ||||
|         auto index = m_devices["temp"].indexOf(_source); | ||||
|         // HACK on DE initialization there are no units key | ||||
|         if (_units.isEmpty()) | ||||
|         if (_units == KSysGuard::UnitInvalid) | ||||
|             return QStringList({QString("temp%1").arg(index)}); | ||||
|         if (index > -1) { | ||||
|             QString key = QString("temp%1").arg(index); | ||||
|             auto key = QString("temp%1").arg(index); | ||||
|             m_map.insert(_source, key); | ||||
|             m_formatter[key] = _units == "°C" ? AWKeysAggregator::FormatterType::Temperature | ||||
|                                               : AWKeysAggregator::FormatterType::Integer; | ||||
|             m_formatter[key] = _units == KSysGuard::UnitCelsius ? AWKeysAggregator::FormatterType::Temperature | ||||
|                                                                 : AWKeysAggregator::FormatterType::Integer; | ||||
|         } | ||||
|     } else if (_source == "Local") { | ||||
|     } else if (_source == "extsysmon/time/now") { | ||||
|         // time | ||||
|         m_map.insert(_source, "time"); | ||||
|         m_formatter["time"] = AWKeysAggregator::FormatterType::Time; | ||||
| @ -376,40 +387,40 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const QSt | ||||
|         // timestamp | ||||
|         m_map.insert(_source, "tstime"); | ||||
|         m_formatter["tstime"] = AWKeysAggregator::FormatterType::Timestamp; | ||||
|     } else if (_source == "system/brightness") { | ||||
|     } else if (_source == "extsysmon/system/brightness") { | ||||
|         m_map.insert(_source, "brightness"); | ||||
|         m_formatter["brightness"] = AWKeysAggregator::FormatterType::IntegerThree; | ||||
|     } else if (_source == "system/volume") { | ||||
|     } else if (_source == "extsysmon/system/volume") { | ||||
|         m_map.insert(_source, "volume"); | ||||
|         m_formatter["volume"] = AWKeysAggregator::FormatterType::IntegerThree; | ||||
|     } else if (_source == "system/uptime") { | ||||
|     } else if (_source == "os/system/uptime") { | ||||
|         // uptime | ||||
|         m_map.insert(_source, "uptime"); | ||||
|         m_formatter["uptime"] = AWKeysAggregator::FormatterType::Uptime; | ||||
|         // custom uptime | ||||
|         m_map.insert(_source, "cuptime"); | ||||
|         m_formatter["cuptime"] = AWKeysAggregator::FormatterType::UptimeCustom; | ||||
|     } else if (_source.startsWith("weather/temperature")) { | ||||
|     } else if (_source.startsWith("extsysmon/weather/temperature")) { | ||||
|         // temperature | ||||
|         QString key = _source; | ||||
|         key.remove("weather/"); | ||||
|         auto key = _source; | ||||
|         key.remove("extsysmon/weather/"); | ||||
|         m_map.insert(_source, key); | ||||
|         m_formatter[key] = AWKeysAggregator::FormatterType::Temperature; | ||||
|     } else if (_source.startsWith("weather/")) { | ||||
|     } else if (_source.startsWith("extsysmon/weather/")) { | ||||
|         // other weather | ||||
|         QString key = _source; | ||||
|         key.remove("weather/"); | ||||
|         auto key = _source; | ||||
|         key.remove("extsysmon/weather/"); | ||||
|         m_map.insert(_source, key); | ||||
|         m_formatter[key] = AWKeysAggregator::FormatterType::NoFormat; | ||||
|     } else if (_source.startsWith("load/load")) { | ||||
|     } else if (_source.startsWith("extsysmon/load/load")) { | ||||
|         // load source | ||||
|         QString key = _source; | ||||
|         key.remove("load/"); | ||||
|         auto key = _source; | ||||
|         key.remove("extsysmon/load/"); | ||||
|         m_map.insert(_source, key); | ||||
|         m_formatter[key] = AWKeysAggregator::FormatterType::Temperature; | ||||
|     } | ||||
|  | ||||
|     QStringList foundKeys = keysFromSource(_source); | ||||
|     auto foundKeys = keysFromSource(_source); | ||||
|  | ||||
|     // rewrite formatters for custom ones | ||||
|     QStringList customFormattersKeys; | ||||
| @ -424,7 +435,7 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const QSt | ||||
|  | ||||
|     // drop key from dictionary if no one user requested key required it | ||||
|     qCInfo(LOG_AW) << "Looking for keys" << foundKeys << "in" << _keys; | ||||
|     bool required = _keys.isEmpty() || std::any_of(foundKeys.cbegin(), foundKeys.cend(), [&_keys](const QString &key) { | ||||
|     auto required = _keys.isEmpty() || std::any_of(foundKeys.cbegin(), foundKeys.cend(), [&_keys](const QString &key) { | ||||
|                         return _keys.contains(key); | ||||
|                     }); | ||||
|     if (!required) { | ||||
|  | ||||
| @ -19,6 +19,8 @@ | ||||
| #ifndef AWDATAENGINEMAPPER_H | ||||
| #define AWDATAENGINEMAPPER_H | ||||
|  | ||||
| #include <ksysguard/formatter/Unit.h> | ||||
|  | ||||
| #include <QMultiHash> | ||||
| #include <QObject> | ||||
|  | ||||
| @ -38,7 +40,7 @@ public: | ||||
|     [[nodiscard]] AWKeysAggregator::FormatterType formatter(const QString &_key) const; | ||||
|     [[nodiscard]] QStringList keysFromSource(const QString &_source) const; | ||||
|     // set methods | ||||
|     QStringList registerSource(const QString &_source, const QString &_units, const QStringList &_keys); | ||||
|     QStringList registerSource(const QString &_source, const KSysGuard::Unit _units, const QStringList &_keys); | ||||
|     void setDevices(const QHash<QString, QStringList> &_devices); | ||||
|  | ||||
| private: | ||||
|  | ||||
| @ -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); | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -51,7 +51,7 @@ 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; | ||||
|  | ||||
| @ -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); | ||||
|  | ||||
| @ -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,9 +130,8 @@ QStringList AWKeyOperations::dictKeys() const | ||||
|         allKeys.append(QString("up%1").arg(i)); | ||||
|     } | ||||
|     // battery | ||||
|     QStringList allBatteryDevices | ||||
|         = QDir("/sys/class/power_supply") | ||||
|               .entryList(QStringList({"BAT*"}), QDir::Dirs | QDir::NoDotAndDotDot, QDir::Name); | ||||
|     auto allBatteryDevices = QDir("/sys/class/power_supply") | ||||
|                                  .entryList(QStringList({"BAT*"}), QDir::Dirs | QDir::NoDotAndDotDot, QDir::Name); | ||||
|     for (int i = 0; i < allBatteryDevices.count(); i++) { | ||||
|         allKeys.append(QString("bat%1").arg(i)); | ||||
|         allKeys.append(QString("batleft%1").arg(i)); | ||||
| @ -205,52 +205,48 @@ QString AWKeyOperations::infoByKey(const QString &_key) const | ||||
| { | ||||
|     qCDebug(LOG_AW) << "Requested key" << _key; | ||||
|  | ||||
|     QString stripped = _key; | ||||
|     stripped.remove(QRegExp("\\d+")); | ||||
|     auto stripped = _key; | ||||
|     stripped.remove(QRegularExpression("\\d+")); | ||||
|     QString output; | ||||
|  | ||||
|     if (_key.startsWith("bar")) { | ||||
|         AbstractExtItem *item = m_graphicalItems->itemByTag(_key, stripped); | ||||
|         auto *item = m_graphicalItems->itemByTag(_key, stripped); | ||||
|         if (item) | ||||
|             output = item->uniq(); | ||||
|     } else if (_key.startsWith("custom")) { | ||||
|         AbstractExtItem *item = m_extScripts->itemByTag(_key, stripped); | ||||
|         auto *item = m_extScripts->itemByTag(_key, stripped); | ||||
|         if (item) | ||||
|             output = item->uniq(); | ||||
|     } else if (_key.contains(QRegExp("^hdd[rw]"))) { | ||||
|         QString index = _key; | ||||
|         index.remove(QRegExp("hdd[rw]")); | ||||
|     } else if (_key.contains(QRegularExpression("^hdd[rw]"))) { | ||||
|         auto index = _key; | ||||
|         index.remove(QRegularExpression("hdd[rw]")); | ||||
|         output = m_devices["disk"][index.toInt()]; | ||||
|     } else if (_key.contains(QRegExp("^hdd([0-9]|mb|gb|freemb|freegb|totmb|totgb)"))) { | ||||
|         QString index = _key; | ||||
|         index.remove(QRegExp("^hdd(|mb|gb|freemb|freegb|totmb|totgb)")); | ||||
|     } else if (_key.contains(QRegularExpression("^hdd([0-9]|mb|gb|freemb|freegb|totmb|totgb)"))) { | ||||
|         auto index = _key; | ||||
|         index.remove(QRegularExpression("^hdd(|mb|gb|freemb|freegb|totmb|totgb)")); | ||||
|         output = m_devices["mount"][index.toInt()]; | ||||
|     } else if (_key.startsWith("hddtemp")) { | ||||
|         QString index = _key; | ||||
|         index.remove("hddtemp"); | ||||
|         output = m_devices["hdd"][index.toInt()]; | ||||
|     } else if (_key.contains(QRegExp("^(down|up)[0-9]"))) { | ||||
|         QString index = _key; | ||||
|         index.remove(QRegExp("^(down|up)")); | ||||
|     } else if (_key.contains(QRegularExpression("^(down|up)[0-9]"))) { | ||||
|         auto index = _key; | ||||
|         index.remove(QRegularExpression("^(down|up)")); | ||||
|         output = m_devices["net"][index.toInt()]; | ||||
|     } else if (_key.startsWith("pkgcount")) { | ||||
|         AbstractExtItem *item = m_extUpgrade->itemByTag(_key, stripped); | ||||
|         auto *item = m_extUpgrade->itemByTag(_key, stripped); | ||||
|         if (item) | ||||
|             output = item->uniq(); | ||||
|     } else if (_key.contains(QRegExp("(^|perc)(ask|bid|price)(chg|)"))) { | ||||
|         AbstractExtItem *item = m_extQuotes->itemByTag(_key, stripped); | ||||
|     } else if (_key.contains(QRegularExpression("(^|perc)(ask|bid|price)(chg|)"))) { | ||||
|         auto *item = m_extQuotes->itemByTag(_key, stripped); | ||||
|         if (item) | ||||
|             output = item->uniq(); | ||||
|     } else if (_key.contains(QRegExp("(weather|weatherId|humidity|pressure|temperature)"))) { | ||||
|         AbstractExtItem *item = m_extWeather->itemByTag(_key, stripped); | ||||
|     } else if (_key.contains(QRegularExpression("(weather|weatherId|humidity|pressure|temperature)"))) { | ||||
|         auto *item = m_extWeather->itemByTag(_key, stripped); | ||||
|         if (item) | ||||
|             output = item->uniq(); | ||||
|     } else if (_key.startsWith("temp")) { | ||||
|         QString index = _key; | ||||
|         auto index = _key; | ||||
|         index.remove("temp"); | ||||
|         output = m_devices["temp"][index.toInt()]; | ||||
|     } else if (_key.startsWith("response")) { | ||||
|         AbstractExtItem *item = m_extNetRequest->itemByTag(_key, stripped); | ||||
|         auto *item = m_extNetRequest->itemByTag(_key, stripped); | ||||
|         if (item) | ||||
|             output = item->uniq(); | ||||
|     } else { | ||||
| @ -280,7 +276,7 @@ void AWKeyOperations::editItem(const QString &_type) | ||||
|     qCDebug(LOG_AW) << "Item type" << _type; | ||||
|  | ||||
|     if (_type == "graphicalitem") { | ||||
|         QStringList keys = dictKeys().filter(QRegExp("^(cpu(?!cl).*|gpu$|mem$|swap$|hdd[0-9].*|bat.*)")); | ||||
|         QStringList keys = dictKeys().filter(QRegularExpression("^(cpu(?!cl).*|gpu$|mem$|swap$|hdd[0-9].*|bat.*)")); | ||||
|         keys.sort(); | ||||
|         m_graphicalItems->setConfigArgs(keys); | ||||
|         return m_graphicalItems->editItems(); | ||||
| @ -302,19 +298,26 @@ void AWKeyOperations::addDevice(const QString &_source) | ||||
| { | ||||
|     qCDebug(LOG_AW) << "Source" << _source; | ||||
|  | ||||
|     QRegExp diskRegexp = QRegExp("disk/(?:md|sd|hd)[a-z|0-9]_.*/Rate/(?:rblk)"); | ||||
|     QRegExp mountRegexp = QRegExp("partitions/.*/filllevel"); | ||||
|     auto diskRegexp = QRegularExpression("^disk/.*/read$"); | ||||
|     auto mountRegexp = QRegularExpression("^disk/.*/usedPercent$"); | ||||
|     auto cpuTempRegExp = QRegularExpression("^cpu/cpu.*/temperature$"); | ||||
|     auto gpuRegExp = QRegularExpression("^gpu/gpu.*/usage$"); | ||||
|  | ||||
|     if (_source.contains(diskRegexp)) { | ||||
|         QString device = _source; | ||||
|         device.remove("/Rate/rblk"); | ||||
|         auto device = _source; | ||||
|         device.remove("disk/").remove("/read"); | ||||
|         addKeyToCache("disk", device); | ||||
|     } else if (_source.contains(mountRegexp)) { | ||||
|         QString device = _source; | ||||
|         device.remove("partitions").remove("/filllevel"); | ||||
|         auto device = _source; | ||||
|         device.remove("disk/").remove("/usedPercent"); | ||||
|         addKeyToCache("mount", device); | ||||
|     } else if (_source.startsWith("lmsensors")) { | ||||
|     } else if (_source.startsWith("lmsensors") || _source.contains(cpuTempRegExp) | ||||
|                || _source == "cpu/all/averageTemperature") { | ||||
|         addKeyToCache("temp", _source); | ||||
|     } else if (_source.contains(gpuRegExp)) { | ||||
|         auto device = _source; | ||||
|         device.remove("gpu/").remove("/usage"); | ||||
|         addKeyToCache("gpu", device); | ||||
|     } | ||||
| } | ||||
|  | ||||
|  | ||||
| @ -56,16 +56,17 @@ AWKeys::AWKeys(QObject *_parent) | ||||
|     createDBusInterface(); | ||||
|  | ||||
|     // update key data if required | ||||
|     connect(m_keyOperator, SIGNAL(updateKeys(const QStringList &)), this, SLOT(reinitKeys(const QStringList &))); | ||||
|     connect(m_timer, SIGNAL(timeout()), this, SLOT(updateTextData())); | ||||
|     connect(m_keyOperator, &AWKeyOperations::updateKeys, this, &AWKeys::reinitKeys); | ||||
|     connect(m_timer, &QTimer::timeout, this, &AWKeys::updateTextData); | ||||
|  | ||||
|     // transfer signal from AWDataAggregator object to QML ui | ||||
|     connect(m_dataAggregator, SIGNAL(toolTipPainted(const QString &)), this, | ||||
|             SIGNAL(needToolTipToBeUpdated(const QString &))); | ||||
|     connect(this, SIGNAL(dropSourceFromDataengine(const QString &)), m_dataEngineAggregator, | ||||
|             SLOT(dropSource(const QString &))); | ||||
|     connect(m_dataAggregator, &AWDataAggregator::toolTipPainted, | ||||
|             [this](const QString &_tooltip) { emit(needToolTipToBeUpdated(_tooltip)); }); | ||||
|  | ||||
|     connect(this, &AWKeys::dropSourceFromDataengine, m_dataEngineAggregator, &AWDataEngineAggregator::dropSource); | ||||
|     connect(m_dataEngineAggregator, &AWDataEngineAggregator::dataUpdated, this, &AWKeys::dataUpdated); | ||||
|     // transfer signal from dataengine to update source list | ||||
|     connect(m_dataEngineAggregator, SIGNAL(deviceAdded(const QString &)), m_keyOperator, | ||||
|             SLOT(addDevice(const QString &))); | ||||
|     connect(m_dataEngineAggregator, &AWDataEngineAggregator::deviceAdded, m_keyOperator, &AWKeyOperations::addDevice); | ||||
| } | ||||
|  | ||||
|  | ||||
| @ -102,7 +103,7 @@ void AWKeys::initKeys(const QString &_currentPattern, const int _interval, const | ||||
|     m_aggregator->initFormatters(); | ||||
|     m_keyOperator->setPattern(_currentPattern); | ||||
|     m_keyOperator->updateCache(); | ||||
|     m_dataEngineAggregator->reconnectSources(_interval); | ||||
|     m_dataEngineAggregator->loadSources(); | ||||
|  | ||||
|     // timer | ||||
|     m_timer->setInterval(_interval); | ||||
| @ -148,7 +149,7 @@ QStringList AWKeys::dictKeys(const bool _sorted, const QString &_regexp) const | ||||
|     if (_sorted) | ||||
|         allKeys.sort(); | ||||
|  | ||||
|     return allKeys.filter(QRegExp(_regexp)); | ||||
|     return allKeys.filter(QRegularExpression(_regexp)); | ||||
| } | ||||
|  | ||||
|  | ||||
| @ -185,9 +186,9 @@ QString AWKeys::valueByKey(const QString &_key) const | ||||
| { | ||||
|     qCDebug(LOG_AW) << "Requested value for key" << _key; | ||||
|  | ||||
|     QString trueKey = _key.startsWith("bar") ? m_keyOperator->infoByKey(_key) : _key; | ||||
|     auto realKey = _key.startsWith("bar") ? m_keyOperator->infoByKey(_key) : _key; | ||||
|  | ||||
|     return m_aggregator->formatter(m_values[trueKey], trueKey, true); | ||||
|     return m_aggregator->formatter(m_values[realKey], realKey, true); | ||||
| } | ||||
|  | ||||
|  | ||||
| @ -199,10 +200,15 @@ void AWKeys::editItem(const QString &_type) | ||||
| } | ||||
|  | ||||
|  | ||||
| void AWKeys::dataUpdated(const QString &_sourceName, const Plasma::DataEngine::Data &_data) | ||||
| void AWKeys::dataUpdated(const QHash<QString, KSysGuard::SensorInfo> &_sensors, const KSysGuard::SensorDataList &_data) | ||||
| { | ||||
|     // run concurrent data update | ||||
|     QtConcurrent::run(m_threadPool, this, &AWKeys::setDataBySource, _sourceName, _data); | ||||
|     for (auto &single : _data) { | ||||
|         if (_sensors.contains(single.sensorProperty)) { | ||||
|             setDataBySource(single.sensorProperty, _sensors.value(single.sensorProperty), single); | ||||
|         } | ||||
|         // TODO use QtConcurrent::map or something like that | ||||
|         //        QtConcurrent::run(m_threadPool, this, &AWKeys::setDataBySource, "ss", sensor); | ||||
|     } | ||||
| } | ||||
|  | ||||
|  | ||||
| @ -239,7 +245,7 @@ void AWKeys::updateTextData() | ||||
|     // do not do it in parallel to avoid race condition | ||||
|     m_mutex.lock(); | ||||
|     calculateValues(); | ||||
|     QString text = parsePattern(m_keyOperator->pattern()); | ||||
|     auto text = parsePattern(m_keyOperator->pattern()); | ||||
|     // update tooltip values under lock | ||||
|     m_dataAggregator->dataUpdate(m_values); | ||||
|     m_mutex.unlock(); | ||||
| @ -256,17 +262,17 @@ void AWKeys::calculateValues() | ||||
|     QStringList mountDevices = m_keyOperator->devices("mount"); | ||||
|     for (auto &device : mountDevices) { | ||||
|         int index = mountDevices.indexOf(device); | ||||
|         m_values[QString("hddtotmb%1").arg(index)] | ||||
|             = m_values[QString("hddfreemb%1").arg(index)].toFloat() + m_values[QString("hddmb%1").arg(index)].toFloat(); | ||||
|         m_values[QString("hddtotgb%1").arg(index)] | ||||
|             = m_values[QString("hddfreegb%1").arg(index)].toFloat() + m_values[QString("hddgb%1").arg(index)].toFloat(); | ||||
|         m_values[QString("hddtotmb%1").arg(index)] = m_values[QString("hddfreemb%1").arg(index)].toDouble() | ||||
|                                                      + m_values[QString("hddmb%1").arg(index)].toDouble(); | ||||
|         m_values[QString("hddtotgb%1").arg(index)] = m_values[QString("hddfreegb%1").arg(index)].toDouble() | ||||
|                                                      + m_values[QString("hddgb%1").arg(index)].toDouble(); | ||||
|     } | ||||
|  | ||||
|     // memtot* | ||||
|     m_values["memtotmb"] = m_values["memusedmb"].toInt() + m_values["memfreemb"].toInt(); | ||||
|     m_values["memtotgb"] = m_values["memusedgb"].toFloat() + m_values["memfreegb"].toFloat(); | ||||
|     m_values["memtotmb"] = m_values["memusedmb"].toLongLong() + m_values["memfreemb"].toLongLong(); | ||||
|     m_values["memtotgb"] = m_values["memusedgb"].toDouble() + m_values["memfreegb"].toDouble(); | ||||
|     // mem | ||||
|     m_values["mem"] = 100.0f * m_values["memmb"].toFloat() / m_values["memtotmb"].toFloat(); | ||||
|     m_values["mem"] = 100.0f * m_values["memmb"].toDouble() / m_values["memtotmb"].toDouble(); | ||||
|  | ||||
|     // up, down, upkb, downkb, upunits, downunits | ||||
|     int netIndex = m_keyOperator->devices("net").indexOf(m_values["netdev"].toString()); | ||||
| @ -282,10 +288,10 @@ void AWKeys::calculateValues() | ||||
|     m_values["upunits"] = m_values[QString("upunits%1").arg(netIndex)]; | ||||
|  | ||||
|     // swaptot* | ||||
|     m_values["swaptotmb"] = m_values["swapmb"].toInt() + m_values["swapfreemb"].toInt(); | ||||
|     m_values["swaptotgb"] = m_values["swapgb"].toFloat() + m_values["swapfreegb"].toFloat(); | ||||
|     m_values["swaptotmb"] = m_values["swapmb"].toLongLong() + m_values["swapfreemb"].toLongLong(); | ||||
|     m_values["swaptotgb"] = m_values["swapgb"].toDouble() + m_values["swapfreegb"].toDouble(); | ||||
|     // swap | ||||
|     m_values["swap"] = 100.0f * m_values["swapmb"].toFloat() / m_values["swaptotmb"].toFloat(); | ||||
|     m_values["swap"] = 100.0f * m_values["swapmb"].toDouble() / m_values["swaptotmb"].toDouble(); | ||||
|  | ||||
|     // user defined keys | ||||
|     for (auto &key : m_keyOperator->userKeys()) | ||||
| @ -323,7 +329,7 @@ void AWKeys::createDBusInterface() | ||||
| QString AWKeys::parsePattern(QString _pattern) const | ||||
| { | ||||
|     // screen sign | ||||
|     _pattern.replace("$$", QString(0x1d)); | ||||
|     _pattern.replace("$$", QChar(0x1d)); | ||||
|  | ||||
|     // lambdas | ||||
|     for (auto &key : m_foundLambdas) | ||||
| @ -343,7 +349,7 @@ QString AWKeys::parsePattern(QString _pattern) const | ||||
|     } | ||||
|  | ||||
|     // prepare strings | ||||
|     _pattern.replace(QString(0x1d), "$"); | ||||
|     _pattern.replace(QChar(0x1d), "$"); | ||||
|     if (m_wrapNewLines) | ||||
|         _pattern.replace("\n", "<br>"); | ||||
|  | ||||
| @ -351,25 +357,23 @@ QString AWKeys::parsePattern(QString _pattern) const | ||||
| } | ||||
|  | ||||
|  | ||||
| void AWKeys::setDataBySource(const QString &_sourceName, const QVariantMap &_data) | ||||
| void AWKeys::setDataBySource(const QString &_source, const KSysGuard::SensorInfo &_sensor, | ||||
|                              const KSysGuard::SensorData &_data) | ||||
| { | ||||
|     qCDebug(LOG_AW) << "Source" << _sourceName << "with data" << _data; | ||||
|     qCDebug(LOG_AW) << "Source" << _source << _sensor.name << "with data" << _data.payload; | ||||
|  | ||||
|     // first list init | ||||
|     QStringList tags = m_aggregator->keysFromSource(_sourceName); | ||||
|     auto tags = m_aggregator->keysFromSource(_source); | ||||
|     if (tags.isEmpty()) | ||||
|         tags = m_aggregator->registerSource(_sourceName, _data["units"].toString(), m_requiredKeys); | ||||
|         tags = m_aggregator->registerSource(_source, _sensor.unit, m_requiredKeys); | ||||
|  | ||||
|     // update data or drop source if there are no matches and exit | ||||
|     if (tags.isEmpty()) { | ||||
|         qCInfo(LOG_AW) << "Source" << _sourceName << "not found"; | ||||
|         return emit(dropSourceFromDataengine(_sourceName)); | ||||
|         qCInfo(LOG_AW) << "Sensor" << _source << "not found"; | ||||
|         return emit(dropSourceFromDataengine(_source)); | ||||
|     } | ||||
|  | ||||
|     m_mutex.lock(); | ||||
|     // HACK workaround for time values which are stored in the different path | ||||
|     std::for_each(tags.cbegin(), tags.cend(), [this, &_data, &_sourceName](const QString &tag) { | ||||
|         m_values[tag] = _sourceName == "Local" ? _data["DateTime"] : _data["value"]; | ||||
|     }); | ||||
|     std::for_each(tags.cbegin(), tags.cend(), [this, &_data](const QString &tag) { m_values[tag] = _data.payload; }); | ||||
|     m_mutex.unlock(); | ||||
| } | ||||
|  | ||||
| @ -19,11 +19,11 @@ | ||||
| #ifndef AWKEYS_H | ||||
| #define AWKEYS_H | ||||
|  | ||||
| #include <Plasma/DataEngine> | ||||
|  | ||||
| #include <QMutex> | ||||
| #include <QObject> | ||||
|  | ||||
| #include <ksysguard/systemstats/SensorInfo.h> | ||||
|  | ||||
|  | ||||
| class AWDataAggregator; | ||||
| class AWDataEngineAggregator; | ||||
| @ -56,9 +56,7 @@ public: | ||||
|     Q_INVOKABLE void editItem(const QString &_type); | ||||
|  | ||||
| public slots: | ||||
|     void dataUpdated(const QString &_sourceName, const Plasma::DataEngine::Data &_data); | ||||
|     // dummy method required by DataEngine connections | ||||
|     static void modelChanged(const QString &, QAbstractItemModel *){}; | ||||
|     void dataUpdated(const QHash<QString, KSysGuard::SensorInfo> &_sensors, const KSysGuard::SensorDataList &_data); | ||||
|  | ||||
| signals: | ||||
|     void dropSourceFromDataengine(const QString &_source); | ||||
| @ -74,7 +72,8 @@ private: | ||||
|     void calculateValues(); | ||||
|     void createDBusInterface(); | ||||
|     [[nodiscard]] QString parsePattern(QString _pattern) const; | ||||
|     void setDataBySource(const QString &_sourceName, const QVariantMap &_data); | ||||
|     void setDataBySource(const QString &_source, const KSysGuard::SensorInfo &_sensor, | ||||
|                          const KSysGuard::SensorData &_data); | ||||
|     // objects | ||||
|     AWDataAggregator *m_dataAggregator = nullptr; | ||||
|     AWDataEngineAggregator *m_dataEngineAggregator = nullptr; | ||||
|  | ||||
| @ -64,19 +64,19 @@ QString AWKeysAggregator::formatter(const QVariant &_data, const QString &_key, | ||||
|     // case block | ||||
|     switch (m_mapper->formatter(_key)) { | ||||
|     case FormatterType::Float: | ||||
|         output = QString("%1").arg(_data.toFloat(), 5, 'f', 1); | ||||
|         output = QString("%1").arg(_data.toDouble(), 5, 'f', 1); | ||||
|         break; | ||||
|     case FormatterType::FloatTwoSymbols: | ||||
|         output = QString("%1").arg(_data.toFloat(), 5, 'f', 2); | ||||
|         output = QString("%1").arg(_data.toDouble(), 5, 'f', 2); | ||||
|         break; | ||||
|     case FormatterType::Integer: | ||||
|         output = QString("%1").arg(_data.toFloat(), 4, 'f', 0); | ||||
|         output = QString("%1").arg(_data.toDouble(), 4, 'f', 0); | ||||
|         break; | ||||
|     case FormatterType::IntegerFive: | ||||
|         output = QString("%1").arg(_data.toFloat(), 5, 'f', 0); | ||||
|         output = QString("%1").arg(_data.toDouble(), 5, 'f', 0); | ||||
|         break; | ||||
|     case FormatterType::IntegerThree: | ||||
|         output = QString("%1").arg(_data.toFloat(), 3, 'f', 0); | ||||
|         output = QString("%1").arg(_data.toDouble(), 3, 'f', 0); | ||||
|         break; | ||||
|     case FormatterType::List: | ||||
|         output = _data.toStringList().join(','); | ||||
| @ -85,10 +85,10 @@ QString AWKeysAggregator::formatter(const QVariant &_data, const QString &_key, | ||||
|         output = _data.toBool() ? m_acOnline : m_acOffline; | ||||
|         break; | ||||
|     case FormatterType::MemGBFormat: | ||||
|         output = QString("%1").arg(_data.toFloat() / (1024.0 * 1024.0), 5, 'f', 1); | ||||
|         output = QString("%1").arg(_data.toDouble() / (1024.0 * 1024.0), 5, 'f', 1); | ||||
|         break; | ||||
|     case FormatterType::MemMBFormat: | ||||
|         output = QString("%1").arg(_data.toFloat() / 1024.0, 5, 'f', 0); | ||||
|         output = QString("%1").arg(_data.toDouble() / 1024.0, 5, 'f', 0); | ||||
|         break; | ||||
|     case FormatterType::NetSmartFormat: | ||||
|         output = [](const float value) { | ||||
| @ -96,10 +96,10 @@ QString AWKeysAggregator::formatter(const QVariant &_data, const QString &_key, | ||||
|                 return QString("%1").arg(value / 1024.0, 4, 'f', 1); | ||||
|             else | ||||
|                 return QString("%1").arg(value, 4, 'f', 0); | ||||
|         }(_data.toFloat()); | ||||
|         }(_data.toDouble()); | ||||
|         break; | ||||
|     case FormatterType::NetSmartUnits: | ||||
|         if (_data.toFloat() > 1024.0) | ||||
|         if (_data.toDouble() > 1024.0) | ||||
|             output = m_translate ? i18n("MB/s") : "MB/s"; | ||||
|         else | ||||
|             output = m_translate ? i18n("KB/s") : "KB/s"; | ||||
| @ -110,29 +110,29 @@ QString AWKeysAggregator::formatter(const QVariant &_data, const QString &_key, | ||||
|         output = output.rightJustified(8, QLatin1Char(' '), true); | ||||
|         break; | ||||
|     case FormatterType::Temperature: | ||||
|         output = QString("%1").arg(temperature(_data.toFloat()), 5, 'f', 1); | ||||
|         output = QString("%1").arg(temperature(_data.toDouble()), 5, 'f', 1); | ||||
|         break; | ||||
|     case FormatterType::Time: | ||||
|         output = _data.toDateTime().toString(); | ||||
|         output = QDateTime::fromSecsSinceEpoch(_data.toLongLong()).toString(); | ||||
|         break; | ||||
|     case FormatterType::TimeCustom: | ||||
|         output = m_customTime; | ||||
|         [&output, loc, this](const QDateTime &dt) { | ||||
|             for (auto &key : m_timeKeys) | ||||
|                 output.replace(QString("$%1").arg(key), loc.toString(dt, key)); | ||||
|         }(_data.toDateTime()); | ||||
|         }(QDateTime::fromSecsSinceEpoch(_data.toLongLong())); | ||||
|         break; | ||||
|     case FormatterType::TimeISO: | ||||
|         output = _data.toDateTime().toString(Qt::ISODate); | ||||
|         output = QDateTime::fromSecsSinceEpoch(_data.toLongLong()).toString(Qt::ISODate); | ||||
|         break; | ||||
|     case FormatterType::TimeLong: | ||||
|         output = loc.toString(_data.toDateTime(), QLocale::LongFormat); | ||||
|         output = loc.toString(QDateTime::fromSecsSinceEpoch(_data.toLongLong()), QLocale::LongFormat); | ||||
|         break; | ||||
|     case FormatterType::TimeShort: | ||||
|         output = loc.toString(_data.toDateTime(), QLocale::ShortFormat); | ||||
|         output = loc.toString(QDateTime::fromSecsSinceEpoch(_data.toLongLong()), QLocale::ShortFormat); | ||||
|         break; | ||||
|     case FormatterType::Timestamp: | ||||
|         output = QString("%1").arg(_data.toDateTime().toMSecsSinceEpoch() / 1000.0, 10, 'f', 0); | ||||
|         output = _data.toString(); | ||||
|         break; | ||||
|     case FormatterType::Uptime: | ||||
|     case FormatterType::UptimeCustom: | ||||
| @ -150,7 +150,7 @@ QString AWKeysAggregator::formatter(const QVariant &_data, const QString &_key, | ||||
|                 source.replace("$m", QString("%1").arg(minutes)); | ||||
|                 return source; | ||||
|             }(m_mapper->formatter(_key) == FormatterType::Uptime ? "$ddd$hhh$mmm" : m_customUptime, | ||||
|               static_cast<int>(_data.toFloat())); | ||||
|               static_cast<int>(_data.toDouble())); | ||||
|         break; | ||||
|     case FormatterType::NoFormat: | ||||
|         output = _data.toString(); | ||||
| @ -234,7 +234,8 @@ void AWKeysAggregator::setTranslate(const bool _translate) | ||||
| } | ||||
|  | ||||
|  | ||||
| QStringList AWKeysAggregator::registerSource(const QString &_source, const QString &_units, const QStringList &_keys) | ||||
| QStringList AWKeysAggregator::registerSource(const QString &_source, const KSysGuard::Unit &_units, | ||||
|                                              const QStringList &_keys) | ||||
| { | ||||
|     qCDebug(LOG_AW) << "Source" << _source << "with units" << _units; | ||||
|  | ||||
|  | ||||
| @ -19,6 +19,8 @@ | ||||
| #ifndef AWKEYSAGGREGATOR_H | ||||
| #define AWKEYSAGGREGATOR_H | ||||
|  | ||||
| #include <ksysguard/formatter/Unit.h> | ||||
|  | ||||
| #include <QHash> | ||||
| #include <QObject> | ||||
|  | ||||
| @ -81,7 +83,7 @@ public: | ||||
|     void setTranslate(bool _translate); | ||||
|  | ||||
| public slots: | ||||
|     QStringList registerSource(const QString &_source, const QString &_units, const QStringList &_keys); | ||||
|     QStringList registerSource(const QString &_source, const KSysGuard::Unit &_units, const QStringList &_keys); | ||||
|  | ||||
| private: | ||||
|     [[nodiscard]] float temperature(float temp) const; | ||||
|  | ||||
| @ -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)); | ||||
|  | ||||
| @ -24,6 +24,7 @@ | ||||
| #include <QNetworkAccessManager> | ||||
| #include <QNetworkReply> | ||||
| #include <QSettings> | ||||
| #include <QStandardPaths> | ||||
|  | ||||
| #include "awdebug.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); | ||||
| } | ||||
|  | ||||
|  | ||||
| @ -269,8 +267,8 @@ void AbstractExtItem::deinitSocket() | ||||
|  | ||||
|     m_socket->close(); | ||||
|     QLocalServer::removeServer(socket()); | ||||
|     delete m_socket; | ||||
|     disconnect(m_socket, SIGNAL(newConnection()), this, SLOT(newConnectionReceived())); | ||||
|     delete m_socket; | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
| @ -18,14 +18,14 @@ | ||||
| #ifndef ABSTRACTEXTITEM_H | ||||
| #define ABSTRACTEXTITEM_H | ||||
|  | ||||
| #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 +40,7 @@ class AbstractExtItem : public QDialog | ||||
|     Q_PROPERTY(QString uniq READ uniq) | ||||
|  | ||||
| public: | ||||
|     explicit AbstractExtItem(QWidget *_parent = nullptr, const QString &_filePath = ""); | ||||
|     explicit AbstractExtItem(QObject *_parent = nullptr, const QString &_filePath = ""); | ||||
|     ~AbstractExtItem() override; | ||||
|     virtual void bumpApi(int _newVer); | ||||
|     virtual AbstractExtItem *copy(const QString &_fileName, int _number) = 0; | ||||
| @ -78,7 +78,7 @@ public slots: | ||||
|     virtual void initSocket(); | ||||
|     virtual void readConfiguration(); | ||||
|     virtual QVariantHash run() = 0; | ||||
|     virtual int showConfiguration(const QVariant &_args) = 0; | ||||
|     virtual int showConfiguration(QWidget *_parent, const QVariant &_args) = 0; | ||||
|     [[nodiscard]] virtual bool tryDelete() const; | ||||
|     virtual void writeConfiguration() const; | ||||
|  | ||||
| @ -89,7 +89,8 @@ private: | ||||
|     QCronScheduler *m_scheduler = nullptr; | ||||
|     QString m_fileName = "/dev/null"; | ||||
|     int m_times = 0; | ||||
|     virtual void translate() = 0; | ||||
|     // FIXME find a better way to do it | ||||
|     virtual void translate(void *_ui) = 0; | ||||
|     // properties | ||||
|     int m_apiVersion = 0; | ||||
|     bool m_active = true; | ||||
|  | ||||
| @ -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(); | ||||
| } | ||||
|  | ||||
| @ -18,7 +18,6 @@ | ||||
| #ifndef ABSTRACTEXTITEMAGGREGATOR_H | ||||
| #define ABSTRACTEXTITEMAGGREGATOR_H | ||||
|  | ||||
| #include <QDialog> | ||||
| #include <QStandardPaths> | ||||
|  | ||||
| #include "abstractextitem.h" | ||||
| @ -26,49 +25,45 @@ | ||||
|  | ||||
|  | ||||
| class QAbstractButton; | ||||
| class QListWidget; | ||||
| class QListWidgetItem; | ||||
| namespace Ui | ||||
| { | ||||
| class AbstractExtItemAggregator; | ||||
| } | ||||
|  | ||||
| class AbstractExtItemAggregator : public QDialog | ||||
| class AbstractExtItemAggregator : public QObject | ||||
| { | ||||
|     Q_OBJECT | ||||
|     Q_PROPERTY(QVariant configArgs READ configArgs WRITE setConfigArgs) | ||||
|     Q_PROPERTY(QVariant type READ type) | ||||
|  | ||||
| public: | ||||
|     explicit AbstractExtItemAggregator(QWidget *_parent, QString _type); | ||||
|     ~AbstractExtItemAggregator() override; | ||||
|     explicit AbstractExtItemAggregator(QObject *_parent, QString _type); | ||||
|     // methods | ||||
|     void copyItem(); | ||||
|     template <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,21 +73,12 @@ public: | ||||
|     // set methods | ||||
|     void setConfigArgs(const QVariant &_configArgs); | ||||
|  | ||||
| private slots: | ||||
|     void editItemActivated(QListWidgetItem *); | ||||
|     void editItemButtonPressed(QAbstractButton *_button); | ||||
|  | ||||
| private: | ||||
|     // ui | ||||
|     Ui::AbstractExtItemAggregator *ui = nullptr; | ||||
|     QPushButton *copyButton = nullptr; | ||||
|     QPushButton *createButton = nullptr; | ||||
|     QPushButton *deleteButton = nullptr; | ||||
|     // properties | ||||
|     QVariant m_configArgs; | ||||
|     QString m_type; | ||||
|     // ui methods | ||||
|     virtual void doCreateItem() = 0; | ||||
|     virtual void doCreateItem(QListWidget *_widget) = 0; | ||||
| }; | ||||
|  | ||||
|  | ||||
|  | ||||
| @ -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()); | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
| @ -18,6 +18,8 @@ | ||||
| #ifndef AWABSTRACTFORMATTER_H | ||||
| #define AWABSTRACTFORMATTER_H | ||||
|  | ||||
| #include <QRegularExpression> | ||||
|  | ||||
| #include "abstractextitem.h" | ||||
|  | ||||
|  | ||||
| @ -30,8 +32,8 @@ class AWAbstractFormatter : public AbstractExtItem | ||||
| public: | ||||
|     enum class FormatterClass { DateTime, Float, List, Script, String, NoFormat, Json }; | ||||
|  | ||||
|     explicit AWAbstractFormatter(QWidget *_parent = nullptr, const QString &_filePath = ""); | ||||
|     ~AWAbstractFormatter() override; | ||||
|     explicit AWAbstractFormatter(QObject *_parent = nullptr, const QString &_filePath = ""); | ||||
|     ~AWAbstractFormatter() override = default; | ||||
|     [[nodiscard]] virtual QString convert(const QVariant &_value) const = 0; | ||||
|     void copyDefaults(AbstractExtItem *_other) const override; | ||||
|     [[nodiscard]] QString uniq() const override; | ||||
|  | ||||
| @ -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,27 +102,36 @@ void AWDateTimeFormatter::readConfiguration() | ||||
| } | ||||
|  | ||||
|  | ||||
| int AWDateTimeFormatter::showConfiguration(const QVariant &_args) | ||||
| int AWDateTimeFormatter::showConfiguration(QWidget *_parent, const QVariant &_args) | ||||
| { | ||||
|     Q_UNUSED(_args) | ||||
|  | ||||
|     auto dialog = new QDialog(_parent); | ||||
|     auto ui = new Ui::AWDateTimeFormatter(); | ||||
|     ui->setupUi(dialog); | ||||
|     translate(ui); | ||||
|  | ||||
|     ui->lineEdit_name->setText(name()); | ||||
|     ui->lineEdit_comment->setText(comment()); | ||||
|     ui->label_typeValue->setText("DateTime"); | ||||
|     ui->lineEdit_format->setText(format()); | ||||
|     ui->checkBox_translate->setCheckState(translateString() ? Qt::Checked : Qt::Unchecked); | ||||
|  | ||||
|     int ret = exec(); | ||||
|     if (ret != 1) | ||||
|         return ret; | ||||
|     setName(ui->lineEdit_name->text()); | ||||
|     setComment(ui->lineEdit_comment->text()); | ||||
|     setApiVersion(AW_FORMATTER_API); | ||||
|     setStrType(ui->label_typeValue->text()); | ||||
|     setFormat(ui->lineEdit_format->text()); | ||||
|     setTranslateString(ui->checkBox_translate->checkState() == Qt::Checked); | ||||
|     auto ret = dialog->exec(); | ||||
|     if (ret == 1) { | ||||
|         setName(ui->lineEdit_name->text()); | ||||
|         setComment(ui->lineEdit_comment->text()); | ||||
|         setApiVersion(AW_FORMATTER_API); | ||||
|         setStrType(ui->label_typeValue->text()); | ||||
|         setFormat(ui->lineEdit_format->text()); | ||||
|         setTranslateString(ui->checkBox_translate->checkState() == Qt::Checked); | ||||
|  | ||||
|         writeConfiguration(); | ||||
|     } | ||||
|  | ||||
|     dialog->deleteLater(); | ||||
|     delete ui; | ||||
|  | ||||
|     writeConfiguration(); | ||||
|     return ret; | ||||
| } | ||||
|  | ||||
| @ -160,9 +157,10 @@ void AWDateTimeFormatter::initLocale() | ||||
|     m_locale = m_translate ? QLocale::system() : QLocale::c(); | ||||
| } | ||||
|  | ||||
|  | ||||
| void AWDateTimeFormatter::translate() | ||||
| void AWDateTimeFormatter::translate(void *_ui) | ||||
| { | ||||
|     auto ui = reinterpret_cast<Ui::AWDateTimeFormatter *>(_ui); | ||||
|  | ||||
|     ui->label_name->setText(i18n("Name")); | ||||
|     ui->label_comment->setText(i18n("Comment")); | ||||
|     ui->label_type->setText(i18n("Type")); | ||||
|  | ||||
| @ -23,11 +23,6 @@ | ||||
| #include "awabstractformatter.h" | ||||
|  | ||||
|  | ||||
| namespace Ui | ||||
| { | ||||
| class AWDateTimeFormatter; | ||||
| } | ||||
|  | ||||
| class AWDateTimeFormatter : public AWAbstractFormatter | ||||
| { | ||||
|     Q_OBJECT | ||||
| @ -35,8 +30,7 @@ class AWDateTimeFormatter : public AWAbstractFormatter | ||||
|     Q_PROPERTY(bool translateString READ translateString WRITE setTranslateString) | ||||
|  | ||||
| public: | ||||
|     explicit AWDateTimeFormatter(QWidget *_parent = nullptr, const QString &_filePath = ""); | ||||
|     ~AWDateTimeFormatter() override; | ||||
|     explicit AWDateTimeFormatter(QObject *_parent = nullptr, const QString &_filePath = ""); | ||||
|     [[nodiscard]] QString convert(const QVariant &_value) const override; | ||||
|     AWDateTimeFormatter *copy(const QString &_fileName, int _number) override; | ||||
|     // properties | ||||
| @ -47,13 +41,12 @@ public: | ||||
|  | ||||
| public slots: | ||||
|     void readConfiguration() override; | ||||
|     int showConfiguration(const QVariant &_args) override; | ||||
|     int showConfiguration(QWidget *_parent, const QVariant &_args) override; | ||||
|     void writeConfiguration() const override; | ||||
|  | ||||
| private: | ||||
|     Ui::AWDateTimeFormatter *ui = nullptr; | ||||
|     void initLocale(); | ||||
|     void translate() override; | ||||
|     void translate(void *_ui) override; | ||||
|     // properties | ||||
|     QLocale m_locale; | ||||
|     QString m_format = ""; | ||||
|  | ||||
| @ -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,22 +210,26 @@ int AWFloatFormatter::showConfiguration(const QVariant &_args) | ||||
|     ui->doubleSpinBox_multiplier->setValue(multiplier()); | ||||
|     ui->doubleSpinBox_summand->setValue(summand()); | ||||
|  | ||||
|     int ret = exec(); | ||||
|     if (ret != 1) | ||||
|         return ret; | ||||
|     setName(ui->lineEdit_name->text()); | ||||
|     setComment(ui->lineEdit_comment->text()); | ||||
|     setApiVersion(AW_FORMATTER_API); | ||||
|     setStrType(ui->label_typeValue->text()); | ||||
|     setFormat(ui->comboBox_format->currentText().at(0).toLatin1()); | ||||
|     setPrecision(ui->spinBox_precision->value()); | ||||
|     setCount(ui->spinBox_width->value()); | ||||
|     setFillChar(ui->lineEdit_fill->text().at(0)); | ||||
|     setForceWidth(ui->checkBox_forceWidth->checkState() == Qt::Checked); | ||||
|     setMultiplier(ui->doubleSpinBox_multiplier->value()); | ||||
|     setSummand(ui->doubleSpinBox_summand->value()); | ||||
|     auto ret = dialog->exec(); | ||||
|     if (ret == 1) { | ||||
|         setName(ui->lineEdit_name->text()); | ||||
|         setComment(ui->lineEdit_comment->text()); | ||||
|         setApiVersion(AW_FORMATTER_API); | ||||
|         setStrType(ui->label_typeValue->text()); | ||||
|         setFormat(ui->comboBox_format->currentText().at(0).toLatin1()); | ||||
|         setPrecision(ui->spinBox_precision->value()); | ||||
|         setCount(ui->spinBox_width->value()); | ||||
|         setFillChar(ui->lineEdit_fill->text().at(0)); | ||||
|         setForceWidth(ui->checkBox_forceWidth->checkState() == Qt::Checked); | ||||
|         setMultiplier(ui->doubleSpinBox_multiplier->value()); | ||||
|         setSummand(ui->doubleSpinBox_summand->value()); | ||||
|  | ||||
|         writeConfiguration(); | ||||
|     } | ||||
|  | ||||
|     dialog->deleteLater(); | ||||
|     delete ui; | ||||
|  | ||||
|     writeConfiguration(); | ||||
|     return ret; | ||||
| } | ||||
|  | ||||
| @ -258,8 +255,10 @@ void AWFloatFormatter::writeConfiguration() const | ||||
| } | ||||
|  | ||||
|  | ||||
| void AWFloatFormatter::translate() | ||||
| void AWFloatFormatter::translate(void *_ui) | ||||
| { | ||||
|     auto ui = reinterpret_cast<Ui::AWFloatFormatter *>(_ui); | ||||
|  | ||||
|     ui->label_name->setText(i18n("Name")); | ||||
|     ui->label_comment->setText(i18n("Comment")); | ||||
|     ui->label_type->setText(i18n("Type")); | ||||
|  | ||||
| @ -21,11 +21,6 @@ | ||||
| #include "awabstractformatter.h" | ||||
|  | ||||
|  | ||||
| namespace Ui | ||||
| { | ||||
| class AWFloatFormatter; | ||||
| } | ||||
|  | ||||
| class AWFloatFormatter : public AWAbstractFormatter | ||||
| { | ||||
|     Q_OBJECT | ||||
| @ -38,8 +33,7 @@ class AWFloatFormatter : public AWAbstractFormatter | ||||
|     Q_PROPERTY(double summand READ summand WRITE setSummand) | ||||
|  | ||||
| public: | ||||
|     explicit AWFloatFormatter(QWidget *_parent = nullptr, const QString &_filePath = ""); | ||||
|     ~AWFloatFormatter() override; | ||||
|     explicit AWFloatFormatter(QObject *_parent = nullptr, const QString &_filePath = ""); | ||||
|     [[nodiscard]] QString convert(const QVariant &_value) const override; | ||||
|     AWFloatFormatter *copy(const QString &_fileName, int _number) override; | ||||
|     // properties | ||||
| @ -60,12 +54,11 @@ public: | ||||
|  | ||||
| public slots: | ||||
|     void readConfiguration() override; | ||||
|     int showConfiguration(const QVariant &_args) override; | ||||
|     int showConfiguration(QWidget *_parent, const QVariant &_args) override; | ||||
|     void writeConfiguration() const override; | ||||
|  | ||||
| private: | ||||
|     Ui::AWFloatFormatter *ui = nullptr; | ||||
|     void translate() override; | ||||
|     void translate(void *_ui) override; | ||||
|     // properties | ||||
|     int m_count = 0; | ||||
|     QChar m_fillChar = QChar(); | ||||
|  | ||||
| @ -15,7 +15,6 @@ | ||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
|  | ||||
| #include "awjsonformatter.h" | ||||
| #include "ui_awjsonformatter.h" | ||||
|  | ||||
| @ -27,24 +26,13 @@ | ||||
| #include "awdebug.h" | ||||
|  | ||||
|  | ||||
| AWJsonFormatter::AWJsonFormatter(QWidget *_parent, const QString &_filePath) | ||||
| AWJsonFormatter::AWJsonFormatter(QObject *_parent, const QString &_filePath) | ||||
|     : AWAbstractFormatter(_parent, _filePath) | ||||
|     , ui(new Ui::AWJsonFormatter) | ||||
| { | ||||
|     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; | ||||
|  | ||||
|     if (!_filePath.isEmpty()) | ||||
|         AWJsonFormatter::readConfiguration(); | ||||
|     ui->setupUi(this); | ||||
|     AWJsonFormatter::translate(); | ||||
| } | ||||
|  | ||||
|  | ||||
| AWJsonFormatter::~AWJsonFormatter() | ||||
| { | ||||
|     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; | ||||
|  | ||||
|     delete ui; | ||||
| } | ||||
|  | ||||
|  | ||||
| @ -53,8 +41,8 @@ QString AWJsonFormatter::convert(const QVariant &_value) const | ||||
|     qCDebug(LOG_LIB) << "Convert value" << _value; | ||||
|  | ||||
|     // check if _value is string and parse first if required | ||||
|     QJsonDocument json = _value.type() == QVariant::String ? QJsonDocument::fromJson(_value.toString().toUtf8()) | ||||
|                                                            : QJsonDocument::fromVariant(_value); | ||||
|     QJsonDocument json = _value.userType() == QMetaType::QString ? QJsonDocument::fromJson(_value.toString().toUtf8()) | ||||
|                                                                  : QJsonDocument::fromVariant(_value); | ||||
|     QVariant converted = json.toVariant(); | ||||
|     for (auto &element : m_splittedPath) | ||||
|         converted = getFromJson(converted, element); | ||||
| @ -67,7 +55,7 @@ AWJsonFormatter *AWJsonFormatter::copy(const QString &_fileName, const int _numb | ||||
| { | ||||
|     qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number; | ||||
|  | ||||
|     auto *item = new AWJsonFormatter(dynamic_cast<QWidget *>(parent()), _fileName); | ||||
|     auto item = new AWJsonFormatter(parent(), _fileName); | ||||
|     AWAbstractFormatter::copyDefaults(item); | ||||
|     item->setNumber(_number); | ||||
|     item->setPath(path()); | ||||
| @ -105,25 +93,34 @@ void AWJsonFormatter::readConfiguration() | ||||
| } | ||||
|  | ||||
|  | ||||
| int AWJsonFormatter::showConfiguration(const QVariant &args) | ||||
| int AWJsonFormatter::showConfiguration(QWidget *_parent, const QVariant &args) | ||||
| { | ||||
|     Q_UNUSED(args) | ||||
|  | ||||
|     auto dialog = new QDialog(_parent); | ||||
|     auto ui = new Ui::AWJsonFormatter(); | ||||
|     ui->setupUi(dialog); | ||||
|     translate(ui); | ||||
|  | ||||
|     ui->lineEdit_name->setText(name()); | ||||
|     ui->lineEdit_comment->setText(comment()); | ||||
|     ui->label_typeValue->setText("Json"); | ||||
|     ui->lineEdit_path->setText(path()); | ||||
|  | ||||
|     int ret = exec(); | ||||
|     if (ret != 1) | ||||
|         return ret; | ||||
|     setName(ui->lineEdit_name->text()); | ||||
|     setComment(ui->lineEdit_comment->text()); | ||||
|     setApiVersion(AW_FORMATTER_API); | ||||
|     setStrType(ui->label_typeValue->text()); | ||||
|     setPath(ui->lineEdit_path->text()); | ||||
|     auto ret = dialog->exec(); | ||||
|     if (ret == 1) { | ||||
|         setName(ui->lineEdit_name->text()); | ||||
|         setComment(ui->lineEdit_comment->text()); | ||||
|         setApiVersion(AW_FORMATTER_API); | ||||
|         setStrType(ui->label_typeValue->text()); | ||||
|         setPath(ui->lineEdit_path->text()); | ||||
|  | ||||
|         writeConfiguration(); | ||||
|     } | ||||
|  | ||||
|     dialog->deleteLater(); | ||||
|     delete ui; | ||||
|  | ||||
|     writeConfiguration(); | ||||
|     return ret; | ||||
| } | ||||
|  | ||||
| @ -147,9 +144,9 @@ QVariant AWJsonFormatter::getFromJson(const QVariant &_value, const QVariant &_e | ||||
| { | ||||
|     qCDebug(LOG_LIB) << "Looking for element" << _element << "in" << _value; | ||||
|  | ||||
|     if (_element.type() == QVariant::String) { | ||||
|     if (_element.userType() == QMetaType::QString) { | ||||
|         return getFromMap(_value, _element.toString()); | ||||
|     } else if (_element.type() == QVariant::Int) { | ||||
|     } else if (_element.userType() == QMetaType::Int) { | ||||
|         return getFromList(_value, _element.toInt()); | ||||
|     } else { | ||||
|         qCWarning(LOG_LIB) << "Unknown type" << _element.typeName(); | ||||
| @ -187,8 +184,10 @@ void AWJsonFormatter::initPath() | ||||
| } | ||||
|  | ||||
|  | ||||
| void AWJsonFormatter::translate() | ||||
| void AWJsonFormatter::translate(void *_ui) | ||||
| { | ||||
|     auto ui = reinterpret_cast<Ui::AWJsonFormatter *>(_ui); | ||||
|  | ||||
|     ui->label_name->setText(i18n("Name")); | ||||
|     ui->label_comment->setText(i18n("Comment")); | ||||
|     ui->label_type->setText(i18n("Type")); | ||||
|  | ||||
| @ -21,19 +21,13 @@ | ||||
| #include "awabstractformatter.h" | ||||
|  | ||||
|  | ||||
| namespace Ui | ||||
| { | ||||
| class AWJsonFormatter; | ||||
| } | ||||
|  | ||||
| class AWJsonFormatter : public AWAbstractFormatter | ||||
| { | ||||
|     Q_OBJECT | ||||
|     Q_PROPERTY(QString path READ path WRITE setPath) | ||||
|  | ||||
| public: | ||||
|     explicit AWJsonFormatter(QWidget *_parent = nullptr, const QString &_filePath = ""); | ||||
|     ~AWJsonFormatter() override; | ||||
|     explicit AWJsonFormatter(QObject *_parent = nullptr, const QString &_filePath = ""); | ||||
|     [[nodiscard]] QString convert(const QVariant &_value) const override; | ||||
|     AWJsonFormatter *copy(const QString &_fileName, int _number) override; | ||||
|     // properties | ||||
| @ -42,16 +36,15 @@ public: | ||||
|  | ||||
| public slots: | ||||
|     void readConfiguration() override; | ||||
|     int showConfiguration(const QVariant &_args) override; | ||||
|     int showConfiguration(QWidget *_parent, const QVariant &_args) override; | ||||
|     void writeConfiguration() const override; | ||||
|  | ||||
| private: | ||||
|     Ui::AWJsonFormatter *ui = nullptr; | ||||
|     static QVariant getFromJson(const QVariant &_value, const QVariant &_element); | ||||
|     static QVariant getFromList(const QVariant &_value, int _index); | ||||
|     static QVariant getFromMap(const QVariant &_value, const QString &_key); | ||||
|     void initPath(); | ||||
|     void translate() override; | ||||
|     void translate(void *_ui) override; | ||||
|     // properties | ||||
|     QString m_path; | ||||
|     QVariantList m_splittedPath; | ||||
|  | ||||
| @ -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,18 +137,22 @@ int AWListFormatter::showConfiguration(const QVariant &_args) | ||||
|     ui->lineEdit_separator->setText(separator()); | ||||
|     ui->checkBox_sorted->setCheckState(isSorted() ? Qt::Checked : Qt::Unchecked); | ||||
|  | ||||
|     int ret = exec(); | ||||
|     if (ret != 1) | ||||
|         return ret; | ||||
|     setName(ui->lineEdit_name->text()); | ||||
|     setComment(ui->lineEdit_comment->text()); | ||||
|     setApiVersion(AW_FORMATTER_API); | ||||
|     setStrType(ui->label_typeValue->text()); | ||||
|     setFilter(ui->lineEdit_filter->text()); | ||||
|     setSeparator(ui->lineEdit_separator->text()); | ||||
|     setSorted(ui->checkBox_sorted->checkState() == Qt::Checked); | ||||
|     auto ret = dialog->exec(); | ||||
|     if (ret == 1) { | ||||
|         setName(ui->lineEdit_name->text()); | ||||
|         setComment(ui->lineEdit_comment->text()); | ||||
|         setApiVersion(AW_FORMATTER_API); | ||||
|         setStrType(ui->label_typeValue->text()); | ||||
|         setFilter(ui->lineEdit_filter->text()); | ||||
|         setSeparator(ui->lineEdit_separator->text()); | ||||
|         setSorted(ui->checkBox_sorted->checkState() == Qt::Checked); | ||||
|  | ||||
|         writeConfiguration(); | ||||
|     } | ||||
|  | ||||
|     dialog->deleteLater(); | ||||
|     delete ui; | ||||
|  | ||||
|     writeConfiguration(); | ||||
|     return ret; | ||||
| } | ||||
|  | ||||
| @ -177,8 +174,10 @@ void AWListFormatter::writeConfiguration() const | ||||
| } | ||||
|  | ||||
|  | ||||
| void AWListFormatter::translate() | ||||
| void AWListFormatter::translate(void *_ui) | ||||
| { | ||||
|     auto ui = reinterpret_cast<Ui::AWListFormatter *>(_ui); | ||||
|  | ||||
|     ui->label_name->setText(i18n("Name")); | ||||
|     ui->label_comment->setText(i18n("Comment")); | ||||
|     ui->label_type->setText(i18n("Type")); | ||||
|  | ||||
| @ -21,11 +21,6 @@ | ||||
| #include "awabstractformatter.h" | ||||
|  | ||||
|  | ||||
| namespace Ui | ||||
| { | ||||
| class AWListFormatter; | ||||
| } | ||||
|  | ||||
| class AWListFormatter : public AWAbstractFormatter | ||||
| { | ||||
|     Q_OBJECT | ||||
| @ -34,8 +29,7 @@ class AWListFormatter : public AWAbstractFormatter | ||||
|     Q_PROPERTY(bool sorted READ isSorted WRITE setSorted) | ||||
|  | ||||
| public: | ||||
|     explicit AWListFormatter(QWidget *_parent = nullptr, const QString &_filePath = ""); | ||||
|     ~AWListFormatter() override; | ||||
|     explicit AWListFormatter(QObject *_parent = nullptr, const QString &_filePath = ""); | ||||
|     [[nodiscard]] QString convert(const QVariant &_value) const override; | ||||
|     AWListFormatter *copy(const QString &_fileName, int _number) override; | ||||
|     // properties | ||||
| @ -48,17 +42,16 @@ 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; | ||||
| }; | ||||
|  | ||||
|  | ||||
|  | ||||
| @ -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; | ||||
|     setName(ui->lineEdit_name->text()); | ||||
|     setComment(ui->lineEdit_comment->text()); | ||||
|     setApiVersion(AW_FORMATTER_API); | ||||
|     setStrType(ui->label_typeValue->text()); | ||||
|     auto ret = dialog->exec(); | ||||
|     if (ret == 1) { | ||||
|         setName(ui->lineEdit_name->text()); | ||||
|         setComment(ui->lineEdit_comment->text()); | ||||
|         setApiVersion(AW_FORMATTER_API); | ||||
|         setStrType(ui->label_typeValue->text()); | ||||
|  | ||||
|         writeConfiguration(); | ||||
|     } | ||||
|  | ||||
|     dialog->deleteLater(); | ||||
|     delete ui; | ||||
|  | ||||
|     writeConfiguration(); | ||||
|     return ret; | ||||
| } | ||||
|  | ||||
|  | ||||
| void AWNoFormatter::translate() | ||||
| void AWNoFormatter::translate(void *_ui) | ||||
| { | ||||
|     auto ui = reinterpret_cast<Ui::AWNoFormatter *>(_ui); | ||||
|  | ||||
|     ui->label_name->setText(i18n("Name")); | ||||
|     ui->label_comment->setText(i18n("Comment")); | ||||
|     ui->label_type->setText(i18n("Type")); | ||||
|  | ||||
| @ -21,27 +21,20 @@ | ||||
| #include "awabstractformatter.h" | ||||
|  | ||||
|  | ||||
| namespace Ui | ||||
| { | ||||
| class AWNoFormatter; | ||||
| } | ||||
|  | ||||
| class AWNoFormatter : public AWAbstractFormatter | ||||
| { | ||||
|     Q_OBJECT | ||||
|  | ||||
| public: | ||||
|     explicit AWNoFormatter(QWidget *_parent = nullptr, const QString &_filePath = ""); | ||||
|     ~AWNoFormatter() override; | ||||
|     explicit AWNoFormatter(QObject *_parent = nullptr, const QString &_filePath = ""); | ||||
|     [[nodiscard]] QString convert(const QVariant &_value) const override; | ||||
|     AWNoFormatter *copy(const QString &_fileName, int _number) override; | ||||
|  | ||||
| public slots: | ||||
|     int showConfiguration(const QVariant &_args) override; | ||||
|     int showConfiguration(QWidget *_parent, const QVariant &_args) override; | ||||
|  | ||||
| private: | ||||
|     Ui::AWNoFormatter *ui = nullptr; | ||||
|     void translate() override; | ||||
|     void translate(void *_ui) override; | ||||
|     // properties | ||||
| }; | ||||
|  | ||||
|  | ||||
| @ -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,19 +153,23 @@ int AWScriptFormatter::showConfiguration(const QVariant &_args) | ||||
|     ui->checkBox_hasReturn->setCheckState(hasReturn() ? Qt::Checked : Qt::Unchecked); | ||||
|     ui->textEdit_code->setPlainText(code()); | ||||
|  | ||||
|     int ret = exec(); | ||||
|     if (ret != 1) | ||||
|         return ret; | ||||
|     setName(ui->lineEdit_name->text()); | ||||
|     setComment(ui->lineEdit_comment->text()); | ||||
|     setApiVersion(AW_FORMATTER_API); | ||||
|     setStrType(ui->label_typeValue->text()); | ||||
|     setAppendCode(ui->checkBox_appendCode->checkState() == Qt::Checked); | ||||
|     setHasReturn(ui->checkBox_hasReturn->checkState() == Qt::Checked); | ||||
|     setCode(ui->textEdit_code->toPlainText()); | ||||
|     initProgram(); | ||||
|     int ret = dialog->exec(); | ||||
|     if (ret == 1) { | ||||
|         setName(ui->lineEdit_name->text()); | ||||
|         setComment(ui->lineEdit_comment->text()); | ||||
|         setApiVersion(AW_FORMATTER_API); | ||||
|         setStrType(ui->label_typeValue->text()); | ||||
|         setAppendCode(ui->checkBox_appendCode->checkState() == Qt::Checked); | ||||
|         setHasReturn(ui->checkBox_hasReturn->checkState() == Qt::Checked); | ||||
|         setCode(ui->textEdit_code->toPlainText()); | ||||
|         initProgram(); | ||||
|  | ||||
|         writeConfiguration(); | ||||
|     } | ||||
|  | ||||
|     dialog->deleteLater(); | ||||
|     delete ui; | ||||
|  | ||||
|     writeConfiguration(); | ||||
|     return ret; | ||||
| } | ||||
|  | ||||
| @ -199,7 +195,7 @@ void AWScriptFormatter::initProgram() | ||||
| { | ||||
|     // init JS code | ||||
|     if (appendCode()) | ||||
|         m_program = QString("(function(value) { %1%2 })").arg(code()).arg(hasReturn() ? "" : "; return output;"); | ||||
|         m_program = QString("(function(value) { %1%2 })").arg(code(), hasReturn() ? "" : "; return output;"); | ||||
|     else | ||||
|         m_program = code(); | ||||
|  | ||||
| @ -207,8 +203,10 @@ void AWScriptFormatter::initProgram() | ||||
| } | ||||
|  | ||||
|  | ||||
| void AWScriptFormatter::translate() | ||||
| void AWScriptFormatter::translate(void *_ui) | ||||
| { | ||||
|     auto ui = reinterpret_cast<Ui::AWScriptFormatter *>(_ui); | ||||
|  | ||||
|     ui->label_name->setText(i18n("Name")); | ||||
|     ui->label_comment->setText(i18n("Comment")); | ||||
|     ui->label_type->setText(i18n("Type")); | ||||
|  | ||||
| @ -21,11 +21,6 @@ | ||||
| #include "awabstractformatter.h" | ||||
|  | ||||
|  | ||||
| namespace Ui | ||||
| { | ||||
| class AWScriptFormatter; | ||||
| } | ||||
|  | ||||
| class AWScriptFormatter : public AWAbstractFormatter | ||||
| { | ||||
|     Q_OBJECT | ||||
| @ -35,8 +30,7 @@ class AWScriptFormatter : public AWAbstractFormatter | ||||
|     Q_PROPERTY(QString program READ program) | ||||
|  | ||||
| public: | ||||
|     explicit AWScriptFormatter(QWidget *_parent = nullptr, const QString &_filePath = ""); | ||||
|     ~AWScriptFormatter() override; | ||||
|     explicit AWScriptFormatter(QObject *_parent = nullptr, const QString &_filePath = ""); | ||||
|     [[nodiscard]] QString convert(const QVariant &_value) const override; | ||||
|     AWScriptFormatter *copy(const QString &_fileName, int _number) override; | ||||
|     // properties | ||||
| @ -50,13 +44,12 @@ public: | ||||
|  | ||||
| public slots: | ||||
|     void readConfiguration() override; | ||||
|     int showConfiguration(const QVariant &_args) override; | ||||
|     int showConfiguration(QWidget *_parent, const QVariant &_args) override; | ||||
|     void writeConfiguration() const override; | ||||
|  | ||||
| private: | ||||
|     Ui::AWScriptFormatter *ui = nullptr; | ||||
|     void initProgram(); | ||||
|     void translate() override; | ||||
|     void translate(void *_ui) override; | ||||
|     // properties | ||||
|     bool m_appendCode = true; | ||||
|     QString m_code = ""; | ||||
|  | ||||
| @ -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,18 +136,22 @@ int AWStringFormatter::showConfiguration(const QVariant &_args) | ||||
|     ui->lineEdit_fill->setText(QString(fillChar())); | ||||
|     ui->checkBox_forceWidth->setCheckState(forceWidth() ? Qt::Checked : Qt::Unchecked); | ||||
|  | ||||
|     int ret = exec(); | ||||
|     if (ret != 1) | ||||
|         return ret; | ||||
|     setName(ui->lineEdit_name->text()); | ||||
|     setComment(ui->lineEdit_comment->text()); | ||||
|     setApiVersion(AW_FORMATTER_API); | ||||
|     setStrType(ui->label_typeValue->text()); | ||||
|     setCount(ui->spinBox_width->value()); | ||||
|     setFillChar(ui->lineEdit_fill->text().at(0)); | ||||
|     setForceWidth(ui->checkBox_forceWidth->checkState() == Qt::Checked); | ||||
|     auto ret = dialog->exec(); | ||||
|     if (ret == 1) { | ||||
|         setName(ui->lineEdit_name->text()); | ||||
|         setComment(ui->lineEdit_comment->text()); | ||||
|         setApiVersion(AW_FORMATTER_API); | ||||
|         setStrType(ui->label_typeValue->text()); | ||||
|         setCount(ui->spinBox_width->value()); | ||||
|         setFillChar(ui->lineEdit_fill->text().at(0)); | ||||
|         setForceWidth(ui->checkBox_forceWidth->checkState() == Qt::Checked); | ||||
|  | ||||
|         writeConfiguration(); | ||||
|     } | ||||
|  | ||||
|     dialog->deleteLater(); | ||||
|     delete ui; | ||||
|  | ||||
|     writeConfiguration(); | ||||
|     return ret; | ||||
| } | ||||
|  | ||||
| @ -176,8 +173,10 @@ void AWStringFormatter::writeConfiguration() const | ||||
| } | ||||
|  | ||||
|  | ||||
| void AWStringFormatter::translate() | ||||
| void AWStringFormatter::translate(void *_ui) | ||||
| { | ||||
|     auto ui = reinterpret_cast<Ui::AWStringFormatter *>(_ui); | ||||
|  | ||||
|     ui->label_name->setText(i18n("Name")); | ||||
|     ui->label_comment->setText(i18n("Comment")); | ||||
|     ui->label_type->setText(i18n("Type")); | ||||
|  | ||||
| @ -21,11 +21,6 @@ | ||||
| #include "awabstractformatter.h" | ||||
|  | ||||
|  | ||||
| namespace Ui | ||||
| { | ||||
| class AWStringFormatter; | ||||
| } | ||||
|  | ||||
| class AWStringFormatter : public AWAbstractFormatter | ||||
| { | ||||
|     Q_OBJECT | ||||
| @ -34,8 +29,7 @@ class AWStringFormatter : public AWAbstractFormatter | ||||
|     Q_PROPERTY(bool forceWidth READ forceWidth WRITE setForceWidth) | ||||
|  | ||||
| public: | ||||
|     explicit AWStringFormatter(QWidget *_parent = nullptr, const QString &_filePath = ""); | ||||
|     ~AWStringFormatter() override; | ||||
|     explicit AWStringFormatter(QObject *_parent = nullptr, const QString &_filePath = ""); | ||||
|     [[nodiscard]] QString convert(const QVariant &_value) const override; | ||||
|     AWStringFormatter *copy(const QString &_fileName, int _number) override; | ||||
|     // properties | ||||
| @ -48,12 +42,11 @@ public: | ||||
|  | ||||
| public slots: | ||||
|     void readConfiguration() override; | ||||
|     int showConfiguration(const QVariant &_args) override; | ||||
|     int showConfiguration(QWidget *_parent, const QVariant &_args) override; | ||||
|     void writeConfiguration() const override; | ||||
|  | ||||
| private: | ||||
|     Ui::AWStringFormatter *ui = nullptr; | ||||
|     void translate() override; | ||||
|     void translate(void *_ui) override; | ||||
|     // properties | ||||
|     int m_count = 0; | ||||
|     QChar m_fillChar = QChar(); | ||||
|  | ||||
| @ -31,7 +31,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 +56,7 @@ public: | ||||
|  | ||||
|     void editItems() | ||||
|     { | ||||
|         repaintList(); | ||||
|         int ret = exec(); | ||||
|         auto ret = exec(); | ||||
|         qCInfo(LOG_LIB) << "Dialog returns" << ret; | ||||
|     }; | ||||
|  | ||||
| @ -123,7 +122,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() | ||||
|     { | ||||
| @ -137,7 +136,7 @@ private: | ||||
|                 if (!file.endsWith(".desktop")) | ||||
|                     continue; | ||||
|                 qCInfo(LOG_LIB) << "Found file" << file << "in" << dir; | ||||
|                 QString filePath = QString("%1/%2").arg(dir).arg(file); | ||||
|                 auto filePath = QString("%1/%2").arg(dir, file); | ||||
|                 // check if already exists | ||||
|                 if (std::any_of(items.cbegin(), items.cend(), | ||||
|                                 [&filePath](AbstractExtItem *item) { return (item->fileName() == filePath); })) | ||||
| @ -147,8 +146,7 @@ private: | ||||
|         } | ||||
|  | ||||
|         // sort items | ||||
|         std::sort(items.begin(), items.end(), | ||||
|                   [](const AbstractExtItem *lhs, const AbstractExtItem *rhs) { return lhs->number() < rhs->number(); }); | ||||
|         std::sort(items.begin(), items.end(), [](auto *lhs, auto *rhs) { return lhs->number() < rhs->number(); }); | ||||
|         return items; | ||||
|     }; | ||||
| }; | ||||
|  | ||||
| @ -20,25 +20,20 @@ | ||||
|  | ||||
| #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")] = ""; | ||||
|  | ||||
| @ -59,7 +54,6 @@ ExtNetworkRequest::~ExtNetworkRequest() | ||||
|     disconnect(this, SIGNAL(requestDataUpdate()), this, SLOT(sendRequest())); | ||||
|  | ||||
|     m_manager->deleteLater(); | ||||
|     delete ui; | ||||
| } | ||||
|  | ||||
|  | ||||
| @ -67,7 +61,7 @@ ExtNetworkRequest *ExtNetworkRequest::copy(const QString &_fileName, const int _ | ||||
| { | ||||
|     qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number; | ||||
|  | ||||
|     auto *item = new ExtNetworkRequest(dynamic_cast<QWidget *>(parent()), _fileName); | ||||
|     auto item = new ExtNetworkRequest(parent(), _fileName); | ||||
|     copyDefaults(item); | ||||
|     item->setNumber(_number); | ||||
|     item->setStringUrl(stringUrl()); | ||||
| @ -121,10 +115,15 @@ QVariantHash ExtNetworkRequest::run() | ||||
| } | ||||
|  | ||||
|  | ||||
| int ExtNetworkRequest::showConfiguration(const QVariant &_args) | ||||
| int ExtNetworkRequest::showConfiguration(QWidget *_parent, const QVariant &_args) | ||||
| { | ||||
|     Q_UNUSED(_args) | ||||
|  | ||||
|     auto dialog = new QDialog(_parent); | ||||
|     auto ui = new Ui::ExtNetworkRequest(); | ||||
|     ui->setupUi(dialog); | ||||
|     translate(ui); | ||||
|  | ||||
|     ui->lineEdit_name->setText(name()); | ||||
|     ui->lineEdit_comment->setText(comment()); | ||||
|     ui->label_numberValue->setText(QString("%1").arg(number())); | ||||
| @ -134,20 +133,24 @@ int ExtNetworkRequest::showConfiguration(const QVariant &_args) | ||||
|     ui->lineEdit_socket->setText(socket()); | ||||
|     ui->spinBox_interval->setValue(interval()); | ||||
|  | ||||
|     int ret = exec(); | ||||
|     if (ret != 1) | ||||
|         return ret; | ||||
|     setName(ui->lineEdit_name->text()); | ||||
|     setComment(ui->lineEdit_comment->text()); | ||||
|     setNumber(ui->label_numberValue->text().toInt()); | ||||
|     setApiVersion(AW_EXTNETREQUEST_API); | ||||
|     setStringUrl(ui->lineEdit_url->text()); | ||||
|     setActive(ui->checkBox_active->checkState() == Qt::Checked); | ||||
|     setCron(ui->lineEdit_schedule->text()); | ||||
|     setSocket(ui->lineEdit_socket->text()); | ||||
|     setInterval(ui->spinBox_interval->value()); | ||||
|     auto ret = dialog->exec(); | ||||
|     if (ret == 1) { | ||||
|         setName(ui->lineEdit_name->text()); | ||||
|         setComment(ui->lineEdit_comment->text()); | ||||
|         setNumber(ui->label_numberValue->text().toInt()); | ||||
|         setApiVersion(AW_EXTNETREQUEST_API); | ||||
|         setStringUrl(ui->lineEdit_url->text()); | ||||
|         setActive(ui->checkBox_active->checkState() == Qt::Checked); | ||||
|         setCron(ui->lineEdit_schedule->text()); | ||||
|         setSocket(ui->lineEdit_socket->text()); | ||||
|         setInterval(ui->spinBox_interval->value()); | ||||
|  | ||||
|         writeConfiguration(); | ||||
|     } | ||||
|  | ||||
|     dialog->deleteLater(); | ||||
|     delete ui; | ||||
|  | ||||
|     writeConfiguration(); | ||||
|     return ret; | ||||
| } | ||||
|  | ||||
| @ -174,7 +177,7 @@ void ExtNetworkRequest::networkReplyReceived(QNetworkReply *_reply) | ||||
|     } | ||||
|  | ||||
|     m_isRunning = false; | ||||
|     m_values[tag("response")] = QTextCodec::codecForMib(106)->toUnicode(_reply->readAll()).trimmed(); | ||||
|     m_values[tag("response")] = QString::fromUtf8(_reply->readAll()).trimmed(); | ||||
|  | ||||
|     emit(dataReceived(m_values)); | ||||
| } | ||||
| @ -183,7 +186,7 @@ void ExtNetworkRequest::networkReplyReceived(QNetworkReply *_reply) | ||||
| void ExtNetworkRequest::sendRequest() | ||||
| { | ||||
|     m_isRunning = true; | ||||
|     QNetworkReply *reply = m_manager->get(QNetworkRequest(m_url)); | ||||
|     auto reply = m_manager->get(QNetworkRequest(m_url)); | ||||
|     new QReplyTimeout(reply, REQUEST_TIMEOUT); | ||||
| } | ||||
|  | ||||
| @ -194,8 +197,10 @@ void ExtNetworkRequest::initUrl() | ||||
| } | ||||
|  | ||||
|  | ||||
| void ExtNetworkRequest::translate() | ||||
| void ExtNetworkRequest::translate(void *_ui) | ||||
| { | ||||
|     auto ui = reinterpret_cast<Ui::ExtNetworkRequest *>(_ui); | ||||
|  | ||||
|     ui->label_name->setText(i18n("Name")); | ||||
|     ui->label_comment->setText(i18n("Comment")); | ||||
|     ui->label_number->setText(i18n("Tag")); | ||||
|  | ||||
| @ -23,18 +23,13 @@ | ||||
| #include "abstractextitem.h" | ||||
|  | ||||
|  | ||||
| namespace Ui | ||||
| { | ||||
| class ExtNetworkRequest; | ||||
| } | ||||
|  | ||||
| class ExtNetworkRequest : public AbstractExtItem | ||||
| { | ||||
|     Q_OBJECT | ||||
|     Q_PROPERTY(QString stringUrl READ stringUrl WRITE setStringUrl) | ||||
|  | ||||
| public: | ||||
|     explicit ExtNetworkRequest(QWidget *_parent = nullptr, const QString &_filePath = ""); | ||||
|     explicit ExtNetworkRequest(QObject *_parent = nullptr, const QString &_filePath = ""); | ||||
|     ~ExtNetworkRequest() override; | ||||
|     ExtNetworkRequest *copy(const QString &_fileName, int _number) override; | ||||
|     // get methods | ||||
| @ -46,7 +41,7 @@ public: | ||||
| public slots: | ||||
|     void readConfiguration() override; | ||||
|     QVariantHash run() override; | ||||
|     int showConfiguration(const QVariant &_args) override; | ||||
|     int showConfiguration(QWidget *_parent, const QVariant &_args) override; | ||||
|     void writeConfiguration() const override; | ||||
|  | ||||
| private slots: | ||||
| @ -57,9 +52,8 @@ private: | ||||
|     QNetworkAccessManager *m_manager = nullptr; | ||||
|     QUrl m_url; | ||||
|     bool m_isRunning = false; | ||||
|     Ui::ExtNetworkRequest *ui = nullptr; | ||||
|     void initUrl(); | ||||
|     void translate() override; | ||||
|     void translate(void *_ui) override; | ||||
|     // properties | ||||
|     QString m_stringUrl = "https://httpbin.org/get"; | ||||
|     // values | ||||
|  | ||||
| @ -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,20 +138,24 @@ int ExtQuotes::showConfiguration(const QVariant &_args) | ||||
|     ui->lineEdit_socket->setText(socket()); | ||||
|     ui->spinBox_interval->setValue(interval()); | ||||
|  | ||||
|     int ret = exec(); | ||||
|     if (ret != 1) | ||||
|         return ret; | ||||
|     setName(ui->lineEdit_name->text()); | ||||
|     setComment(ui->lineEdit_comment->text()); | ||||
|     setNumber(ui->label_numberValue->text().toInt()); | ||||
|     setApiVersion(AW_EXTQUOTES_API); | ||||
|     setTicker(ui->lineEdit_ticker->text()); | ||||
|     setActive(ui->checkBox_active->checkState() == Qt::Checked); | ||||
|     setCron(ui->lineEdit_schedule->text()); | ||||
|     setSocket(ui->lineEdit_socket->text()); | ||||
|     setInterval(ui->spinBox_interval->value()); | ||||
|     auto ret = dialog->exec(); | ||||
|     if (ret == 1) { | ||||
|         setName(ui->lineEdit_name->text()); | ||||
|         setComment(ui->lineEdit_comment->text()); | ||||
|         setNumber(ui->label_numberValue->text().toInt()); | ||||
|         setApiVersion(AW_EXTQUOTES_API); | ||||
|         setTicker(ui->lineEdit_ticker->text()); | ||||
|         setActive(ui->checkBox_active->checkState() == Qt::Checked); | ||||
|         setCron(ui->lineEdit_schedule->text()); | ||||
|         setSocket(ui->lineEdit_socket->text()); | ||||
|         setInterval(ui->spinBox_interval->value()); | ||||
|  | ||||
|         writeConfiguration(); | ||||
|     } | ||||
|  | ||||
|     dialog->deleteLater(); | ||||
|     delete ui; | ||||
|  | ||||
|     writeConfiguration(); | ||||
|     return ret; | ||||
| } | ||||
|  | ||||
| @ -182,7 +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")); | ||||
|  | ||||
| @ -24,10 +24,6 @@ | ||||
|  | ||||
|  | ||||
| class AbstractQuotesProvider; | ||||
| namespace Ui | ||||
| { | ||||
| class ExtQuotes; | ||||
| } | ||||
|  | ||||
| class ExtQuotes : public AbstractExtItem | ||||
| { | ||||
| @ -35,7 +31,7 @@ class ExtQuotes : public AbstractExtItem | ||||
|     Q_PROPERTY(QString ticker READ ticker WRITE setTicker) | ||||
|  | ||||
| public: | ||||
|     explicit ExtQuotes(QWidget *_parent = nullptr, const QString &_filePath = ""); | ||||
|     explicit ExtQuotes(QObject *_parent = nullptr, const QString &_filePath = ""); | ||||
|     ~ExtQuotes() override; | ||||
|     ExtQuotes *copy(const QString &_fileName, int _number) override; | ||||
|     // get methods | ||||
| @ -47,7 +43,7 @@ public: | ||||
| public slots: | ||||
|     void readConfiguration() override; | ||||
|     QVariantHash run() override; | ||||
|     int showConfiguration(const QVariant &_args) override; | ||||
|     int showConfiguration(QWidget *_parent, const QVariant &_args) override; | ||||
|     void writeConfiguration() const override; | ||||
|  | ||||
| private slots: | ||||
| @ -58,9 +54,8 @@ private: | ||||
|     AbstractQuotesProvider *m_providerObject = nullptr; | ||||
|     QNetworkAccessManager *m_manager = nullptr; | ||||
|     bool m_isRunning = false; | ||||
|     Ui::ExtQuotes *ui = nullptr; | ||||
|     void initProvider(); | ||||
|     void translate() override; | ||||
|     void translate(void *_ui) override; | ||||
|     // properties | ||||
|     QString m_ticker = "EURUSD=X"; | ||||
|     // values | ||||
|  | ||||
| @ -24,22 +24,18 @@ | ||||
| #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")] = ""; | ||||
|  | ||||
| @ -59,7 +55,6 @@ ExtScript::~ExtScript() | ||||
|     m_process->kill(); | ||||
|     m_process->deleteLater(); | ||||
|     disconnect(this, SIGNAL(requestDataUpdate()), this, SLOT(startProcess())); | ||||
|     delete ui; | ||||
| } | ||||
|  | ||||
|  | ||||
| @ -67,7 +62,7 @@ ExtScript *ExtScript::copy(const QString &_fileName, const int _number) | ||||
| { | ||||
|     qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number; | ||||
|  | ||||
|     auto *item = new ExtScript(dynamic_cast<QWidget *>(parent()), _fileName); | ||||
|     auto item = new ExtScript(parent(), _fileName); | ||||
|     copyDefaults(item); | ||||
|     item->setExecutable(executable()); | ||||
|     item->setNumber(_number); | ||||
| @ -180,7 +175,7 @@ QString ExtScript::applyFilters(QString _value) const | ||||
|  | ||||
|     for (auto &filt : filters()) { | ||||
|         qCInfo(LOG_LIB) << "Found filter" << filt; | ||||
|         QVariantMap filter = m_jsonFilters[filt].toMap(); | ||||
|         auto filter = m_jsonFilters[filt].toMap(); | ||||
|         if (filter.isEmpty()) { | ||||
|             qCWarning(LOG_LIB) << "Could not find filter" << _value << "in the json"; | ||||
|             continue; | ||||
| @ -226,7 +221,7 @@ void ExtScript::readConfiguration() | ||||
|  | ||||
| void ExtScript::readJsonFilters() | ||||
| { | ||||
|     QString fileName = jsonFiltersFile(); | ||||
|     auto fileName = jsonFiltersFile(); | ||||
|     QFile jsonFile(fileName); | ||||
|     if (!jsonFile.open(QIODevice::ReadOnly | QIODevice::Text)) { | ||||
|         qCWarning(LOG_LIB) << "Could not open" << fileName; | ||||
| @ -236,7 +231,7 @@ void ExtScript::readJsonFilters() | ||||
|     jsonFile.close(); | ||||
|  | ||||
|     QJsonParseError error{}; | ||||
|     QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonText.toUtf8(), &error); | ||||
|     auto jsonDoc = QJsonDocument::fromJson(jsonText.toUtf8(), &error); | ||||
|     if (error.error != QJsonParseError::NoError) { | ||||
|         qCWarning(LOG_LIB) << "Parse error" << error.errorString(); | ||||
|         return; | ||||
| @ -257,10 +252,15 @@ QVariantHash ExtScript::run() | ||||
| } | ||||
|  | ||||
|  | ||||
| int ExtScript::showConfiguration(const QVariant &_args) | ||||
| int ExtScript::showConfiguration(QWidget *_parent, const QVariant &_args) | ||||
| { | ||||
|     Q_UNUSED(_args) | ||||
|  | ||||
|     auto dialog = new QDialog(_parent); | ||||
|     auto ui = new Ui::ExtScript(); | ||||
|     ui->setupUi(dialog); | ||||
|     translate(ui); | ||||
|  | ||||
|     ui->lineEdit_name->setText(name()); | ||||
|     ui->lineEdit_comment->setText(comment()); | ||||
|     ui->label_numberValue->setText(QString("%1").arg(number())); | ||||
| @ -275,25 +275,29 @@ int ExtScript::showConfiguration(const QVariant &_args) | ||||
|     ui->checkBox_linesFilter->setCheckState(filters().contains("newline") ? Qt::Checked : Qt::Unchecked); | ||||
|     ui->checkBox_spaceFilter->setCheckState(filters().contains("space") ? Qt::Checked : Qt::Unchecked); | ||||
|  | ||||
|     int ret = exec(); | ||||
|     if (ret != 1) | ||||
|         return ret; | ||||
|     setName(ui->lineEdit_name->text()); | ||||
|     setComment(ui->lineEdit_comment->text()); | ||||
|     setNumber(ui->label_numberValue->text().toInt()); | ||||
|     setApiVersion(AW_EXTSCRIPT_API); | ||||
|     setExecutable(ui->lineEdit_command->text()); | ||||
|     setActive(ui->checkBox_active->checkState() == Qt::Checked); | ||||
|     setRedirect(static_cast<Redirect>(ui->comboBox_redirect->currentIndex())); | ||||
|     setCron(ui->lineEdit_schedule->text()); | ||||
|     setSocket(ui->lineEdit_socket->text()); | ||||
|     setInterval(ui->spinBox_interval->value()); | ||||
|     // filters | ||||
|     updateFilter("color", ui->checkBox_colorFilter->checkState() == Qt::Checked); | ||||
|     updateFilter("newline", ui->checkBox_linesFilter->checkState() == Qt::Checked); | ||||
|     updateFilter("space", ui->checkBox_spaceFilter->checkState() == Qt::Checked); | ||||
|     int ret = dialog->exec(); | ||||
|     if (ret == 1) { | ||||
|         setName(ui->lineEdit_name->text()); | ||||
|         setComment(ui->lineEdit_comment->text()); | ||||
|         setNumber(ui->label_numberValue->text().toInt()); | ||||
|         setApiVersion(AW_EXTSCRIPT_API); | ||||
|         setExecutable(ui->lineEdit_command->text()); | ||||
|         setActive(ui->checkBox_active->checkState() == Qt::Checked); | ||||
|         setRedirect(static_cast<Redirect>(ui->comboBox_redirect->currentIndex())); | ||||
|         setCron(ui->lineEdit_schedule->text()); | ||||
|         setSocket(ui->lineEdit_socket->text()); | ||||
|         setInterval(ui->spinBox_interval->value()); | ||||
|         // filters | ||||
|         updateFilter("color", ui->checkBox_colorFilter->checkState() == Qt::Checked); | ||||
|         updateFilter("newline", ui->checkBox_linesFilter->checkState() == Qt::Checked); | ||||
|         updateFilter("space", ui->checkBox_spaceFilter->checkState() == Qt::Checked); | ||||
|  | ||||
|         writeConfiguration(); | ||||
|     } | ||||
|  | ||||
|     dialog->deleteLater(); | ||||
|     delete ui; | ||||
|  | ||||
|     writeConfiguration(); | ||||
|     return ret; | ||||
| } | ||||
|  | ||||
| @ -325,9 +329,9 @@ void ExtScript::startProcess() | ||||
| void ExtScript::updateValue() | ||||
| { | ||||
|     qCInfo(LOG_LIB) << "Cmd returns" << m_process->exitCode(); | ||||
|     QString qdebug = QTextCodec::codecForMib(106)->toUnicode(m_process->readAllStandardError()).trimmed(); | ||||
|     auto qdebug = QString::fromUtf8(m_process->readAllStandardError()).trimmed(); | ||||
|     qCInfo(LOG_LIB) << "Error" << qdebug; | ||||
|     QString qoutput = QTextCodec::codecForMib(106)->toUnicode(m_process->readAllStandardOutput()).trimmed(); | ||||
|     auto qoutput = QString::fromUtf8(m_process->readAllStandardOutput()).trimmed(); | ||||
|     qCInfo(LOG_LIB) << "Output" << qoutput; | ||||
|     QString strValue; | ||||
|  | ||||
| @ -351,8 +355,10 @@ void ExtScript::updateValue() | ||||
| } | ||||
|  | ||||
|  | ||||
| void ExtScript::translate() | ||||
| void ExtScript::translate(void *_ui) | ||||
| { | ||||
|     auto ui = reinterpret_cast<Ui::ExtScript *>(_ui); | ||||
|  | ||||
|     ui->label_name->setText(i18n("Name")); | ||||
|     ui->label_comment->setText(i18n("Comment")); | ||||
|     ui->label_number->setText(i18n("Tag")); | ||||
|  | ||||
| @ -23,11 +23,6 @@ | ||||
| #include "abstractextitem.h" | ||||
|  | ||||
|  | ||||
| namespace Ui | ||||
| { | ||||
| class ExtScript; | ||||
| } | ||||
|  | ||||
| class ExtScript : public AbstractExtItem | ||||
| { | ||||
|     Q_OBJECT | ||||
| @ -38,7 +33,7 @@ class ExtScript : public AbstractExtItem | ||||
| public: | ||||
|     enum class Redirect { stdout2stderr = 0, nothing = 1, stderr2stdout = 2, swap = 3 }; | ||||
|  | ||||
|     explicit ExtScript(QWidget *_parent = nullptr, const QString &_filePath = ""); | ||||
|     explicit ExtScript(QObject *_parent = nullptr, const QString &_filePath = ""); | ||||
|     ~ExtScript() override; | ||||
|     ExtScript *copy(const QString &_fileName, int _number) override; | ||||
|     static QString jsonFiltersFile(); | ||||
| @ -62,7 +57,7 @@ public slots: | ||||
|     void readConfiguration() override; | ||||
|     void readJsonFilters(); | ||||
|     QVariantHash run() override; | ||||
|     int showConfiguration(const QVariant &_args) override; | ||||
|     int showConfiguration(QWidget *_parent, const QVariant &_args) override; | ||||
|     void writeConfiguration() const override; | ||||
|  | ||||
| private slots: | ||||
| @ -71,8 +66,7 @@ private slots: | ||||
|  | ||||
| private: | ||||
|     QProcess *m_process = nullptr; | ||||
|     Ui::ExtScript *ui = nullptr; | ||||
|     void translate() override; | ||||
|     void translate(void *_ui) override; | ||||
|     // properties | ||||
|     QString m_executable = "/usr/bin/true"; | ||||
|     QStringList m_filters = QStringList(); | ||||
|  | ||||
| @ -21,21 +21,17 @@ | ||||
| #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; | ||||
|  | ||||
| @ -54,7 +50,6 @@ ExtUpgrade::~ExtUpgrade() | ||||
|     m_process->kill(); | ||||
|     m_process->deleteLater(); | ||||
|     disconnect(this, SIGNAL(requestDataUpdate()), this, SLOT(startProcess())); | ||||
|     delete ui; | ||||
| } | ||||
|  | ||||
|  | ||||
| @ -62,7 +57,7 @@ ExtUpgrade *ExtUpgrade::copy(const QString &_fileName, const int _number) | ||||
| { | ||||
|     qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number; | ||||
|  | ||||
|     auto *item = new ExtUpgrade(dynamic_cast<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,22 +165,26 @@ int ExtUpgrade::showConfiguration(const QVariant &_args) | ||||
|     ui->lineEdit_socket->setText(socket()); | ||||
|     ui->spinBox_interval->setValue(interval()); | ||||
|  | ||||
|     int ret = exec(); | ||||
|     if (ret != 1) | ||||
|         return ret; | ||||
|     setName(ui->lineEdit_name->text()); | ||||
|     setComment(ui->lineEdit_comment->text()); | ||||
|     setNumber(ui->label_numberValue->text().toInt()); | ||||
|     setApiVersion(AW_EXTUPGRADE_API); | ||||
|     setExecutable(ui->lineEdit_command->text()); | ||||
|     setFilter(ui->lineEdit_filter->text()); | ||||
|     setActive(ui->checkBox_active->checkState() == Qt::Checked); | ||||
|     setNull(ui->spinBox_null->value()); | ||||
|     setCron(ui->lineEdit_schedule->text()); | ||||
|     setSocket(ui->lineEdit_socket->text()); | ||||
|     setInterval(ui->spinBox_interval->value()); | ||||
|     auto ret = dialog->exec(); | ||||
|     if (ret == 1) { | ||||
|         setName(ui->lineEdit_name->text()); | ||||
|         setComment(ui->lineEdit_comment->text()); | ||||
|         setNumber(ui->label_numberValue->text().toInt()); | ||||
|         setApiVersion(AW_EXTUPGRADE_API); | ||||
|         setExecutable(ui->lineEdit_command->text()); | ||||
|         setFilter(ui->lineEdit_filter->text()); | ||||
|         setActive(ui->checkBox_active->checkState() == Qt::Checked); | ||||
|         setNull(ui->spinBox_null->value()); | ||||
|         setCron(ui->lineEdit_schedule->text()); | ||||
|         setSocket(ui->lineEdit_socket->text()); | ||||
|         setInterval(ui->spinBox_interval->value()); | ||||
|  | ||||
|         writeConfiguration(); | ||||
|     } | ||||
|  | ||||
|     dialog->deleteLater(); | ||||
|     delete ui; | ||||
|  | ||||
|     writeConfiguration(); | ||||
|     return ret; | ||||
| } | ||||
|  | ||||
| @ -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")); | ||||
|  | ||||
| @ -23,11 +23,6 @@ | ||||
| #include "abstractextitem.h" | ||||
|  | ||||
|  | ||||
| namespace Ui | ||||
| { | ||||
| class ExtUpgrade; | ||||
| } | ||||
|  | ||||
| class ExtUpgrade : public AbstractExtItem | ||||
| { | ||||
|     Q_OBJECT | ||||
| @ -36,7 +31,7 @@ class ExtUpgrade : public AbstractExtItem | ||||
|     Q_PROPERTY(int null READ null WRITE setNull) | ||||
|  | ||||
| public: | ||||
|     explicit ExtUpgrade(QWidget *_parent = nullptr, const QString &_filePath = ""); | ||||
|     explicit ExtUpgrade(QObject *_parent = nullptr, const QString &_filePath = ""); | ||||
|     ~ExtUpgrade() override; | ||||
|     ExtUpgrade *copy(const QString &_fileName, int _number) override; | ||||
|     // get methods | ||||
| @ -52,7 +47,7 @@ public: | ||||
| public slots: | ||||
|     void readConfiguration() override; | ||||
|     QVariantHash run() override; | ||||
|     int showConfiguration(const QVariant &_args) override; | ||||
|     int showConfiguration(QWidget *_parent, const QVariant &_args) override; | ||||
|     void writeConfiguration() const override; | ||||
|  | ||||
| private slots: | ||||
| @ -61,8 +56,7 @@ private slots: | ||||
|  | ||||
| private: | ||||
|     QProcess *m_process = nullptr; | ||||
|     Ui::ExtUpgrade *ui = nullptr; | ||||
|     void translate() override; | ||||
|     void translate(void *_ui) override; | ||||
|     // properties | ||||
|     QString m_executable = "/usr/bin/true"; | ||||
|     QString m_filter = ""; | ||||
|  | ||||
| @ -29,20 +29,16 @@ | ||||
|  | ||||
| #include "awdebug.h" | ||||
| #include "owmweatherprovider.h" | ||||
| #include "yahooweatherprovider.h" | ||||
|  | ||||
|  | ||||
| ExtWeather::ExtWeather(QWidget *_parent, const QString &_filePath) | ||||
| ExtWeather::ExtWeather(QObject *_parent, const QString &_filePath) | ||||
|     : AbstractExtItem(_parent, _filePath) | ||||
|     , ui(new Ui::ExtWeather) | ||||
| { | ||||
|     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; | ||||
|  | ||||
|     if (!_filePath.isEmpty()) | ||||
|         ExtWeather::readConfiguration(); | ||||
|     readJsonMap(); | ||||
|     ui->setupUi(this); | ||||
|     ExtWeather::translate(); | ||||
|  | ||||
|     m_values[tag("weatherId")] = 0; | ||||
|     m_values[tag("weather")] = ""; | ||||
| @ -67,7 +63,6 @@ ExtWeather::~ExtWeather() | ||||
|     disconnect(this, SIGNAL(requestDataUpdate()), this, SLOT(sendRequest())); | ||||
|  | ||||
|     m_manager->deleteLater(); | ||||
|     delete ui; | ||||
| } | ||||
|  | ||||
|  | ||||
| @ -75,7 +70,7 @@ ExtWeather *ExtWeather::copy(const QString &_fileName, const int _number) | ||||
| { | ||||
|     qCDebug(LOG_LIB) << "File" << _fileName << "number" << _number; | ||||
|  | ||||
|     auto *item = new ExtWeather(dynamic_cast<QWidget *>(parent()), _fileName); | ||||
|     auto item = new ExtWeather(parent(), _fileName); | ||||
|     copyDefaults(item); | ||||
|     item->setCity(city()); | ||||
|     item->setCountry(country()); | ||||
| @ -102,7 +97,7 @@ QString ExtWeather::weatherFromInt(const int _id) const | ||||
| { | ||||
|     qCDebug(LOG_LIB) << "Weather ID" << _id; | ||||
|  | ||||
|     QVariantMap map = m_jsonMap[m_image ? "image" : "text"].toMap(); | ||||
|     auto map = m_jsonMap[m_image ? "image" : "text"].toMap(); | ||||
|     return map.value(QString::number(_id), map["default"]).toString(); | ||||
| } | ||||
|  | ||||
| @ -236,7 +231,7 @@ void ExtWeather::readConfiguration() | ||||
|  | ||||
| void ExtWeather::readJsonMap() | ||||
| { | ||||
|     QString fileName = jsonMapFile(); | ||||
|     auto fileName = jsonMapFile(); | ||||
|     QFile jsonFile(fileName); | ||||
|     if (!jsonFile.open(QIODevice::ReadOnly | QIODevice::Text)) { | ||||
|         qCWarning(LOG_LIB) << "Could not open" << fileName; | ||||
| @ -246,7 +241,7 @@ void ExtWeather::readJsonMap() | ||||
|     jsonFile.close(); | ||||
|  | ||||
|     QJsonParseError error{}; | ||||
|     QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonText.toUtf8(), &error); | ||||
|     auto jsonDoc = QJsonDocument::fromJson(jsonText.toUtf8(), &error); | ||||
|     if (error.error != QJsonParseError::NoError) { | ||||
|         qCWarning(LOG_LIB) << "Parse error" << error.errorString(); | ||||
|         return; | ||||
| @ -267,10 +262,15 @@ QVariantHash ExtWeather::run() | ||||
| } | ||||
|  | ||||
|  | ||||
| int ExtWeather::showConfiguration(const QVariant &_args) | ||||
| int ExtWeather::showConfiguration(QWidget *_parent, const QVariant &_args) | ||||
| { | ||||
|     Q_UNUSED(_args) | ||||
|  | ||||
|     auto dialog = new QDialog(_parent); | ||||
|     auto ui = new Ui::ExtWeather(); | ||||
|     ui->setupUi(dialog); | ||||
|     translate(ui); | ||||
|  | ||||
|     ui->lineEdit_name->setText(name()); | ||||
|     ui->lineEdit_comment->setText(comment()); | ||||
|     ui->label_numberValue->setText(QString("%1").arg(number())); | ||||
| @ -284,24 +284,28 @@ int ExtWeather::showConfiguration(const QVariant &_args) | ||||
|     ui->lineEdit_socket->setText(socket()); | ||||
|     ui->spinBox_interval->setValue(interval()); | ||||
|  | ||||
|     int ret = exec(); | ||||
|     if (ret != 1) | ||||
|         return ret; | ||||
|     setName(ui->lineEdit_name->text()); | ||||
|     setComment(ui->lineEdit_comment->text()); | ||||
|     setNumber(ui->label_numberValue->text().toInt()); | ||||
|     setApiVersion(AW_EXTWEATHER_API); | ||||
|     setCity(ui->lineEdit_city->text()); | ||||
|     setCountry(ui->lineEdit_country->text()); | ||||
|     setProvider(static_cast<Provider>(ui->comboBox_provider->currentIndex())); | ||||
|     setTs(ui->spinBox_timestamp->value()); | ||||
|     setImage(ui->checkBox_image->checkState() == Qt::Checked); | ||||
|     setActive(ui->checkBox_active->checkState() == Qt::Checked); | ||||
|     setCron(ui->lineEdit_schedule->text()); | ||||
|     setSocket(ui->lineEdit_socket->text()); | ||||
|     setInterval(ui->spinBox_interval->value()); | ||||
|     int ret = dialog->exec(); | ||||
|     if (ret == 1) { | ||||
|         setName(ui->lineEdit_name->text()); | ||||
|         setComment(ui->lineEdit_comment->text()); | ||||
|         setNumber(ui->label_numberValue->text().toInt()); | ||||
|         setApiVersion(AW_EXTWEATHER_API); | ||||
|         setCity(ui->lineEdit_city->text()); | ||||
|         setCountry(ui->lineEdit_country->text()); | ||||
|         setProvider(static_cast<Provider>(ui->comboBox_provider->currentIndex())); | ||||
|         setTs(ui->spinBox_timestamp->value()); | ||||
|         setImage(ui->checkBox_image->checkState() == Qt::Checked); | ||||
|         setActive(ui->checkBox_active->checkState() == Qt::Checked); | ||||
|         setCron(ui->lineEdit_schedule->text()); | ||||
|         setSocket(ui->lineEdit_socket->text()); | ||||
|         setInterval(ui->spinBox_interval->value()); | ||||
|  | ||||
|         writeConfiguration(); | ||||
|     } | ||||
|  | ||||
|     dialog->deleteLater(); | ||||
|     delete ui; | ||||
|  | ||||
|     writeConfiguration(); | ||||
|     return ret; | ||||
| } | ||||
|  | ||||
| @ -328,7 +332,7 @@ void ExtWeather::writeConfiguration() const | ||||
| void ExtWeather::sendRequest() | ||||
| { | ||||
|     m_isRunning = true; | ||||
|     QNetworkReply *reply = m_manager->get(QNetworkRequest(m_providerObject->url())); | ||||
|     auto reply = m_manager->get(QNetworkRequest(m_providerObject->url())); | ||||
|     new QReplyTimeout(reply, REQUEST_TIMEOUT); | ||||
| } | ||||
|  | ||||
| @ -342,14 +346,14 @@ void ExtWeather::weatherReplyReceived(QNetworkReply *_reply) | ||||
|  | ||||
|     m_isRunning = false; | ||||
|     QJsonParseError error{}; | ||||
|     QJsonDocument jsonDoc = QJsonDocument::fromJson(_reply->readAll(), &error); | ||||
|     auto jsonDoc = QJsonDocument::fromJson(_reply->readAll(), &error); | ||||
|     _reply->deleteLater(); | ||||
|     if (error.error != QJsonParseError::NoError) { | ||||
|         qCWarning(LOG_LIB) << "Parse error" << error.errorString(); | ||||
|         return; | ||||
|     } | ||||
|  | ||||
|     QVariantHash data = m_providerObject->parse(jsonDoc.toVariant().toMap()); | ||||
|     auto data = m_providerObject->parse(jsonDoc.toVariant().toMap()); | ||||
|     if (data.isEmpty()) | ||||
|         return; | ||||
|     m_values = data; | ||||
| @ -370,8 +374,10 @@ void ExtWeather::initProvider() | ||||
| } | ||||
|  | ||||
|  | ||||
| void ExtWeather::translate() | ||||
| void ExtWeather::translate(void *_ui) | ||||
| { | ||||
|     auto ui = reinterpret_cast<Ui::ExtWeather *>(_ui); | ||||
|  | ||||
|     ui->label_name->setText(i18n("Name")); | ||||
|     ui->label_comment->setText(i18n("Comment")); | ||||
|     ui->label_number->setText(i18n("Tag")); | ||||
|  | ||||
| @ -42,7 +42,7 @@ class ExtWeather : public AbstractExtItem | ||||
| public: | ||||
|     enum class Provider { OWM = 0, Yahoo = 1 }; | ||||
|  | ||||
|     explicit ExtWeather(QWidget *_parent = nullptr, const QString &_filePath = ""); | ||||
|     explicit ExtWeather(QObject *_parent = nullptr, const QString &_filePath = ""); | ||||
|     ~ExtWeather() override; | ||||
|     ExtWeather *copy(const QString &_fileName, int _number) override; | ||||
|     static QString jsonMapFile(); | ||||
| @ -67,7 +67,7 @@ public slots: | ||||
|     void readConfiguration() override; | ||||
|     void readJsonMap(); | ||||
|     QVariantHash run() override; | ||||
|     int showConfiguration(const QVariant &_args) override; | ||||
|     int showConfiguration(QWidget *_parent, const QVariant &_args) override; | ||||
|     void writeConfiguration() const override; | ||||
|  | ||||
| private slots: | ||||
| @ -78,9 +78,8 @@ private: | ||||
|     AbstractWeatherProvider *m_providerObject = nullptr; | ||||
|     QNetworkAccessManager *m_manager = nullptr; | ||||
|     bool m_isRunning = false; | ||||
|     Ui::ExtWeather *ui = nullptr; | ||||
|     void initProvider(); | ||||
|     void translate() override; | ||||
|     void translate(void *_ui) override; | ||||
|     // properties | ||||
|     QString m_city = "London"; | ||||
|     QString m_country = "uk"; | ||||
|  | ||||
| @ -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,25 +471,29 @@ int GraphicalItem::showConfiguration(const QVariant &_args) | ||||
|     emit(ui->comboBox_type->currentIndexChanged(ui->comboBox_type->currentIndex())); | ||||
|     emit(ui->checkBox_custom->stateChanged(ui->checkBox_custom->checkState())); | ||||
|  | ||||
|     int ret = exec(); | ||||
|     if (ret != 1) | ||||
|         return ret; | ||||
|     setName(ui->lineEdit_name->text()); | ||||
|     setComment(ui->lineEdit_comment->text()); | ||||
|     setApiVersion(AW_GRAPHITEM_API); | ||||
|     setCount(ui->spinBox_count->value()); | ||||
|     setCustom(ui->checkBox_custom->isChecked()); | ||||
|     setBar(m_custom ? ui->lineEdit_customValue->text() : ui->comboBox_value->currentText()); | ||||
|     setMaxValue(static_cast<float>(ui->doubleSpinBox_max->value())); | ||||
|     setMinValue(static_cast<float>(ui->doubleSpinBox_min->value())); | ||||
|     setActiveColor(ui->lineEdit_activeColor->text()); | ||||
|     setInactiveColor(ui->lineEdit_inactiveColor->text()); | ||||
|     setType(static_cast<Type>(ui->comboBox_type->currentIndex())); | ||||
|     setDirection(static_cast<Direction>(ui->comboBox_direction->currentIndex())); | ||||
|     setItemHeight(ui->spinBox_height->value()); | ||||
|     setItemWidth(ui->spinBox_width->value()); | ||||
|     int ret = dialog->exec(); | ||||
|     if (ret == 1) { | ||||
|         setName(ui->lineEdit_name->text()); | ||||
|         setComment(ui->lineEdit_comment->text()); | ||||
|         setApiVersion(AW_GRAPHITEM_API); | ||||
|         setCount(ui->spinBox_count->value()); | ||||
|         setCustom(ui->checkBox_custom->isChecked()); | ||||
|         setBar(m_custom ? ui->lineEdit_customValue->text() : ui->comboBox_value->currentText()); | ||||
|         setMaxValue(static_cast<float>(ui->doubleSpinBox_max->value())); | ||||
|         setMinValue(static_cast<float>(ui->doubleSpinBox_min->value())); | ||||
|         setActiveColor(ui->lineEdit_activeColor->text()); | ||||
|         setInactiveColor(ui->lineEdit_inactiveColor->text()); | ||||
|         setType(static_cast<Type>(ui->comboBox_type->currentIndex())); | ||||
|         setDirection(static_cast<Direction>(ui->comboBox_direction->currentIndex())); | ||||
|         setItemHeight(ui->spinBox_height->value()); | ||||
|         setItemWidth(ui->spinBox_width->value()); | ||||
|  | ||||
|         writeConfiguration(); | ||||
|     } | ||||
|  | ||||
|     dialog->deleteLater(); | ||||
|     delete ui; | ||||
|  | ||||
|     writeConfiguration(); | ||||
|     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")); | ||||
|  | ||||
| @ -52,8 +52,7 @@ public: | ||||
|     enum class Direction { LeftToRight = 0, RightToLeft = 1 }; | ||||
|     enum class Type { Horizontal = 0, Vertical = 1, Circle = 2, Graph = 3, Bars = 4 }; | ||||
|  | ||||
|     explicit GraphicalItem(QWidget *_parent = nullptr, const QString &_filePath = ""); | ||||
|     ~GraphicalItem() override; | ||||
|     explicit GraphicalItem(QObject *_parent = nullptr, const QString &_filePath = ""); | ||||
|     GraphicalItem *copy(const QString &_fileName, int _number) override; | ||||
|     QString image(const QVariant &value); | ||||
|     void initScene(); | ||||
| @ -92,20 +91,19 @@ public: | ||||
| public slots: | ||||
|     void readConfiguration() override; | ||||
|     QVariantHash run() override { return {}; }; | ||||
|     int showConfiguration(const QVariant &_args) override; | ||||
|     int showConfiguration(QWidget *_parent, const QVariant &_args) override; | ||||
|     void writeConfiguration() const override; | ||||
|  | ||||
| private slots: | ||||
|     void changeColor(); | ||||
|     void changeCountState(int _state); | ||||
|     void changeValue(int _state); | ||||
|     void changeColor(Ui::GraphicalItem *_ui); | ||||
|     void changeCountState(Ui::GraphicalItem *_ui, int _state); | ||||
|     void changeValue(Ui::GraphicalItem *_ui, int _state); | ||||
|  | ||||
| private: | ||||
|     GraphicalItemHelper *m_helper = nullptr; | ||||
|     QGraphicsScene *m_scene = nullptr; | ||||
|     QGraphicsView *m_view = nullptr; | ||||
|     Ui::GraphicalItem *ui = nullptr; | ||||
|     void translate() override; | ||||
|     void translate(void *_ui) override; | ||||
|     // properties | ||||
|     QString m_bar = "cpu"; | ||||
|     int m_count = 100; | ||||
|  | ||||
| @ -93,13 +93,13 @@ QVariantHash OWMWeatherProvider::parseSingleJson(const QVariantMap &_json) const | ||||
|     // main data | ||||
|     QVariantMap mainWeather = _json["main"].toMap(); | ||||
|     if (!weather.isEmpty()) { | ||||
|         output[tag("humidity")] = mainWeather["humidity"].toFloat(); | ||||
|         output[tag("pressure")] = mainWeather["pressure"].toFloat(); | ||||
|         output[tag("temperature")] = mainWeather["temp"].toFloat(); | ||||
|         output[tag("humidity")] = mainWeather["humidity"].toDouble(); | ||||
|         output[tag("pressure")] = mainWeather["pressure"].toDouble(); | ||||
|         output[tag("temperature")] = mainWeather["temp"].toDouble(); | ||||
|     } | ||||
|  | ||||
|     // timestamp | ||||
|     output[tag("timestamp")] = QDateTime::fromTime_t(_json["dt"].toUInt()).toUTC(); | ||||
|     output[tag("timestamp")] = QDateTime::fromSecsSinceEpoch(_json["dt"].toUInt()).toUTC(); | ||||
|  | ||||
|     return output; | ||||
| } | ||||
|  | ||||
| @ -1,8 +1,8 @@ | ||||
| [Desktop Entry] | ||||
| Encoding=UTF-8 | ||||
| Name=AAPL.NASDAQ | ||||
| Name=AAPL | ||||
| Comment=Apple Inc | ||||
| X-AW-Ticker="AAPL" | ||||
| X-AW-Ticker="AAPL.US" | ||||
| X-AW-Active=false | ||||
| X-AW-ApiVersion=5 | ||||
| X-AW-Interval=60 | ||||
|  | ||||
| @ -1,8 +1,8 @@ | ||||
| [Desktop Entry] | ||||
| Encoding=UTF-8 | ||||
| Name=GOOG.NASDAQ | ||||
| Name=GOOG | ||||
| Comment=Google Inc | ||||
| X-AW-Ticker="GOOG" | ||||
| X-AW-Ticker="GOOG.US" | ||||
| X-AW-Active=false | ||||
| X-AW-ApiVersion=5 | ||||
| X-AW-Interval=60 | ||||
|  | ||||
| @ -1,8 +1,8 @@ | ||||
| [Desktop Entry] | ||||
| Encoding=UTF-8 | ||||
| Name=MSFT.NASDAQ | ||||
| Name=MSFT | ||||
| Comment=Microsoft Corp | ||||
| X-AW-Ticker="MSFT" | ||||
| X-AW-Ticker="MSFT.US" | ||||
| X-AW-Active=false | ||||
| X-AW-ApiVersion=5 | ||||
| X-AW-Interval=60 | ||||
|  | ||||
| @ -17,7 +17,6 @@ | ||||
|  | ||||
| #include "stooqquotesprovider.h" | ||||
|  | ||||
| #include <QTextCodec> | ||||
| #include <QUrlQuery> | ||||
|  | ||||
| #include "awdebug.h" | ||||
| @ -55,7 +54,7 @@ QVariantHash StooqQuotesProvider::parse(const QByteArray &_source, const QVarian | ||||
|  | ||||
|     QVariantHash values; | ||||
|  | ||||
|     QStringList sourceValues = QTextCodec::codecForMib(106)->toUnicode(_source).trimmed().split(','); | ||||
|     auto sourceValues = QString::fromUtf8(_source).trimmed().split(','); | ||||
|     if (sourceValues.count() != 2) { | ||||
|         qCWarning(LOG_LIB) << "Parse error" << sourceValues; | ||||
|         return values; | ||||
| @ -68,12 +67,12 @@ QVariantHash StooqQuotesProvider::parse(const QByteArray &_source, const QVarian | ||||
|     // last trade | ||||
|     auto price = sourceValues.at(0).toDouble(); | ||||
|     values[tag("pricechg")] = oldPrice == 0.0 ? 0.0 : price - oldPrice; | ||||
|     values[tag("percpricechg")] = 100.0 * values[tag("pricechg")].toDouble() / price; | ||||
|     values[tag("percpricechg")] = 100.0 * values[tag("pricechg")].toDouble() / oldPrice; | ||||
|     values[tag("price")] = price; | ||||
|     // volume | ||||
|     auto volume = sourceValues.at(1).toInt(); | ||||
|     values[tag("volumechg")] = oldVolume == 0 ? 0 : volume - oldVolume; | ||||
|     values[tag("percvolumechg")] = 100.0 * values[tag("volumechg")].toDouble() / volume; | ||||
|     values[tag("percvolumechg")] = 100.0 * values[tag("volumechg")].toDouble() / oldVolume; | ||||
|     values[tag("volume")] = volume; | ||||
|  | ||||
|     return values; | ||||
|  | ||||
| @ -86,7 +86,7 @@ QVariantHash YahooWeatherProvider::parseCurrent(const QVariantMap &_json, const | ||||
|     values[tag("timestamp")] = condition["date"].toString(); | ||||
|     values[tag("humidity")] = _atmosphere["humidity"].toInt(); | ||||
|     // HACK temporary fix of invalid values on Yahoo! side | ||||
|     values[tag("pressure")] = static_cast<int>(_atmosphere["pressure"].toFloat() / 33.863753); | ||||
|     values[tag("pressure")] = static_cast<int>(_atmosphere["pressure"].toDouble() / 33.863753); | ||||
|  | ||||
|     return values; | ||||
| } | ||||
| @ -103,7 +103,7 @@ QVariantHash YahooWeatherProvider::parseForecast(const QVariantMap &_json) const | ||||
|     values[tag("weatherId")] = id; | ||||
|     values[tag("timestamp")] = weatherMap["date"].toString(); | ||||
|     // yahoo provides high and low temperatures. Lets calculate average one | ||||
|     values[tag("temperature")] = (weatherMap["high"].toFloat() + weatherMap["low"].toFloat()) / 2.0; | ||||
|     values[tag("temperature")] = (weatherMap["high"].toDouble() + weatherMap["low"].toDouble()) / 2.0; | ||||
|     // ... and no forecast data for humidity and pressure | ||||
|     values[tag("humidity")] = 0; | ||||
|     values[tag("pressure")] = 0.0; | ||||
|  | ||||
| @ -1,7 +1,7 @@ | ||||
| set(SUBPROJECT plasma_applet_desktop-panel) | ||||
| message(STATUS "Subproject ${SUBPROJECT}") | ||||
|  | ||||
| configure_file(metadata.desktop ${CMAKE_CURRENT_SOURCE_DIR}/package/metadata.desktop) | ||||
| configure_file(metadata.json ${CMAKE_CURRENT_SOURCE_DIR}/package/metadata.json) | ||||
|  | ||||
| add_subdirectory(plugin) | ||||
| plasma_install_package(package org.kde.plasma.desktoppanel) | ||||
|  | ||||
| @ -1,26 +0,0 @@ | ||||
| [Desktop Entry] | ||||
| Encoding=UTF-8 | ||||
| Name=Desktop Panel | ||||
| Comment=A minimalistic Plasmoid | ||||
| Comment[en]=A minimalistic Plasmoid | ||||
| Comment[es]=Un plasmoide minimalista | ||||
| Comment[es]=Un script Plasmoïde minimaliste | ||||
| Comment[pt_BR]=Um script Plasmoid | ||||
| Comment[ru]=Минималистичный плазмоид | ||||
| Comment[uk]=Мінімалістичний плазмоїд | ||||
| X-KDE-ServiceTypes=Plasma/Applet | ||||
| Type=Service | ||||
| Icon=utilities-system-monitor | ||||
|  | ||||
| X-KDE-ServiceTypes=Plasma/Applet | ||||
| X-Plasma-API=declarativeappletscript | ||||
| X-Plasma-MainScript=ui/main.qml | ||||
|  | ||||
| X-KDE-PluginInfo-Author=Evgeniy Alekseev aka arcanis | ||||
| X-KDE-PluginInfo-Email=esalexeev@gmail.com | ||||
| X-KDE-PluginInfo-Name=org.kde.plasma.desktoppanel | ||||
| X-KDE-PluginInfo-Version=@PROJECT_VERSION@ | ||||
| X-KDE-PluginInfo-Website=https://arcanis.me/projects/awesome-widgets/ | ||||
| X-KDE-PluginInfo-Category=System Information | ||||
| X-KDE-PluginInfo-License=GPLv3 | ||||
| X-KDE-PluginInfo-EnabledByDefault=true | ||||
							
								
								
									
										26
									
								
								sources/desktop-panel/metadata.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								sources/desktop-panel/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.desktoppanel", | ||||
|         "License": "GPLv3", | ||||
|         "Name": "Desktop Panel", | ||||
|         "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,88 +7,88 @@ | ||||
|  | ||||
|     <group name="Widget"> | ||||
|         <!--   widget --> | ||||
|         <entry name="text" type="string"> | ||||
|         <entry name="text" type="String"> | ||||
|             <default>[$mark$number/$total: $name]</default> | ||||
|         </entry> | ||||
|     </group> | ||||
|  | ||||
|     <group name="Advanced"> | ||||
|         <!--   advanced --> | ||||
|         <entry name="background" type="bool"> | ||||
|         <entry name="background" type="Bool"> | ||||
|             <default>true</default> | ||||
|         </entry> | ||||
|         <entry name="verticalLayout" type="bool"> | ||||
|         <entry name="verticalLayout" type="Bool"> | ||||
|             <default>false</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="mark" type="string"> | ||||
|         <entry name="mark" type="String"> | ||||
|             <default>¤</default> | ||||
|         </entry> | ||||
|         <entry name="tooltipType" type="string"> | ||||
|         <entry name="tooltipType" type="String"> | ||||
|             <default>contours</default> | ||||
|         </entry> | ||||
|         <entry name="tooltipWidth" type="int"> | ||||
|         <entry name="tooltipWidth" type="Int"> | ||||
|             <default>200</default> | ||||
|         </entry> | ||||
|         <entry name="tooltipColor" type="string"> | ||||
|         <entry name="tooltipColor" type="String"> | ||||
|             <default>#ffffff</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> | ||||
|         <!--   current --> | ||||
|         <entry name="currentTextAlign" type="string"> | ||||
|         <entry name="currentTextAlign" type="String"> | ||||
|             <default>center</default> | ||||
|         </entry> | ||||
|         <entry name="currentFontFamily" type="string"> | ||||
|         <entry name="currentFontFamily" type="String"> | ||||
|             <default>Terminus</default> | ||||
|         </entry> | ||||
|         <entry name="currentFontSize" type="int"> | ||||
|         <entry name="currentFontSize" type="Int"> | ||||
|             <default>12</default> | ||||
|         </entry> | ||||
|         <entry name="currentFontColor" type="string"> | ||||
|         <entry name="currentFontColor" type="String"> | ||||
|             <default>#ff0000</default> | ||||
|         </entry> | ||||
|         <entry name="currentFontWeight" type="string"> | ||||
|         <entry name="currentFontWeight" type="String"> | ||||
|             <default>normal</default> | ||||
|         </entry> | ||||
|         <entry name="currentFontStyle" type="string"> | ||||
|         <entry name="currentFontStyle" type="String"> | ||||
|             <default>normal</default> | ||||
|         </entry> | ||||
|         <entry name="currentTextStyle" type="string"> | ||||
|         <entry name="currentTextStyle" type="String"> | ||||
|             <default>normal</default> | ||||
|         </entry> | ||||
|         <entry name="currentTextStyleColor" type="string"> | ||||
|         <entry name="currentTextStyleColor" type="String"> | ||||
|             <default>#000000</default> | ||||
|         </entry> | ||||
|     </group> | ||||
|  | ||||
| @ -15,28 +15,21 @@ | ||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
| import QtQuick 2.0 | ||||
| import QtQuick 2.15 | ||||
| import org.kde.kcmutils as KCM | ||||
|  | ||||
| import org.kde.plasma.private.desktoppanel 1.0 | ||||
|  | ||||
|  | ||||
| Item { | ||||
| KCM.SimpleKCM { | ||||
|     id: aboutPage | ||||
|  | ||||
|     // backend | ||||
|     DPAdds { | ||||
|         id: dpAdds | ||||
|     } | ||||
|  | ||||
|     width: childrenRect.width | ||||
|     height: childrenRect.height | ||||
|  | ||||
|     property bool debug: awActions.isDebugEnabled() | ||||
|  | ||||
|     AboutTab { | ||||
|         textProvider: dpAdds | ||||
|     } | ||||
|  | ||||
|     Component.onCompleted: { | ||||
|         if (debug) console.debug() | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -15,25 +15,15 @@ | ||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
| import QtQuick 2.0 | ||||
| import QtQuick 2.15 | ||||
| import org.kde.kcmutils as KCM | ||||
|  | ||||
| import org.kde.plasma.private.desktoppanel 1.0 | ||||
| import "." | ||||
|  | ||||
|  | ||||
| Item { | ||||
| KCM.SimpleKCM { | ||||
|     id: activeAppearancePage | ||||
|     // backend | ||||
|     DPAdds { | ||||
|         id: dpAdds | ||||
|     } | ||||
|  | ||||
|     width: childrenRect.width | ||||
|     height: childrenRect.height | ||||
|     implicitWidth: pageColumn.implicitWidth | ||||
|     implicitHeight: pageColumn.implicitHeight | ||||
|  | ||||
|     property bool debug: dpAdds.isDebugEnabled() | ||||
|  | ||||
|     property alias cfg_currentFontFamily: font.value | ||||
|     property alias cfg_currentFontSize: fontSize.value | ||||
| @ -43,7 +33,6 @@ Item { | ||||
|     property alias cfg_currentTextStyleColor: selectStyleColor.value | ||||
|     property string cfg_currentTextStyle: textStyle.value | ||||
|  | ||||
|  | ||||
|     Column { | ||||
|         id: pageColumn | ||||
|         anchors.fill: parent | ||||
| @ -99,9 +88,4 @@ Item { | ||||
|             value: plasmoid.configuration.currentTextStyleColor | ||||
|         } | ||||
|     } | ||||
|  | ||||
|  | ||||
|     Component.onCompleted: { | ||||
|         if (debug) console.debug() | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -15,25 +15,15 @@ | ||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
| import QtQuick 2.0 | ||||
| import QtQuick.Controls 1.3 as QtControls | ||||
| import QtQuick 2.15 | ||||
| import QtQuick.Controls | ||||
| import org.kde.kcmutils as KCM | ||||
|  | ||||
| import org.kde.plasma.private.desktoppanel 1.0 | ||||
|  | ||||
|  | ||||
| Item { | ||||
| KCM.SimpleKCM { | ||||
|     id: advancedPage | ||||
|     // backend | ||||
|     DPAdds { | ||||
|         id: dpAdds | ||||
|     } | ||||
|  | ||||
|     width: childrenRect.width | ||||
|     height: childrenRect.height | ||||
|     implicitWidth: pageColumn.implicitWidth | ||||
|     implicitHeight: pageColumn.implicitHeight | ||||
|  | ||||
|     property bool debug: dpAdds.isDebugEnabled() | ||||
|  | ||||
|     property alias cfg_background: background.checked | ||||
|     property alias cfg_verticalLayout: verticalLayout.checked | ||||
| @ -44,7 +34,6 @@ Item { | ||||
|     property alias cfg_tooltipWidth: tooltipWidth.value | ||||
|     property alias cfg_tooltipColor: tooltipColor.value | ||||
|  | ||||
|  | ||||
|     Column { | ||||
|         id: pageColumn | ||||
|         anchors.fill: parent | ||||
| @ -82,48 +71,48 @@ Item { | ||||
|             editable: true | ||||
|             model: [ | ||||
|                 { | ||||
|                     'label': '#', | ||||
|                     'name': '#' | ||||
|                     "label": "#", | ||||
|                     "name": "#" | ||||
|                 }, | ||||
|                 { | ||||
|                     'label': '$', | ||||
|                     'name': '$' | ||||
|                     "label": "$", | ||||
|                     "name": "$" | ||||
|                 }, | ||||
|                 { | ||||
|                     'label': '%', | ||||
|                     'name': '%' | ||||
|                     "label": "%", | ||||
|                     "name": "%" | ||||
|                 }, | ||||
|                 { | ||||
|                     'label': '&', | ||||
|                     'name': '&' | ||||
|                     "label": "&", | ||||
|                     "name": "&" | ||||
|                 }, | ||||
|                 { | ||||
|                     'label': '*', | ||||
|                     'name': '*' | ||||
|                     "label": "*", | ||||
|                     "name": "*" | ||||
|                 }, | ||||
|                 { | ||||
|                     'label': '@', | ||||
|                     'name': '@' | ||||
|                     "label": "@", | ||||
|                     "name": "@" | ||||
|                 }, | ||||
|                 { | ||||
|                     'label': '¤', | ||||
|                     'name': '¤' | ||||
|                     "label": "¤", | ||||
|                     "name": "¤" | ||||
|                 }, | ||||
|                 { | ||||
|                     'label': '¶', | ||||
|                     'name': '¶' | ||||
|                     "label": "¶", | ||||
|                     "name": "¶" | ||||
|                 }, | ||||
|                 { | ||||
|                     'label': '·', | ||||
|                     'name': '·' | ||||
|                     "label": "·", | ||||
|                     "name": "·" | ||||
|                 }, | ||||
|                 { | ||||
|                     'label': 'º', | ||||
|                     'name': 'º' | ||||
|                     "label": "º", | ||||
|                     "name": "º" | ||||
|                 }, | ||||
|                 { | ||||
|                     'label': plasmoid.configuration.mark, | ||||
|                     'name': plasmoid.configuration.mark | ||||
|                     "label": plasmoid.configuration.mark, | ||||
|                     "name": plasmoid.configuration.mark | ||||
|                 } | ||||
|             ] | ||||
|             text: i18n("Mark") | ||||
| @ -131,7 +120,7 @@ Item { | ||||
|             onValueEdited: cfg_mark = newValue | ||||
|         } | ||||
|  | ||||
|         QtControls.GroupBox { | ||||
|         GroupBox { | ||||
|             height: implicitHeight | ||||
|             width: parent.width | ||||
|             title: i18n("Tooltip") | ||||
| @ -144,16 +133,16 @@ Item { | ||||
|                     id: tooltipType | ||||
|                     model: [ | ||||
|                         { | ||||
|                             'label': i18n("contours"), | ||||
|                             'name': "contours" | ||||
|                             "label": i18n("contours"), | ||||
|                             "name": "contours" | ||||
|                         }, | ||||
|                         { | ||||
|                             'label': i18n("names"), | ||||
|                             'name': "names" | ||||
|                             "label": i18n("names"), | ||||
|                             "name": "names" | ||||
|                         }, | ||||
|                         { | ||||
|                             'label': i18n("none"), | ||||
|                             'name': "none" | ||||
|                             "label": i18n("none"), | ||||
|                             "name": "none" | ||||
|                         } | ||||
|                     ] | ||||
|                     text: i18n("Tooltip type") | ||||
| @ -178,8 +167,4 @@ Item { | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     Component.onCompleted: { | ||||
|         if (debug) console.debug() | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -15,25 +15,15 @@ | ||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
| import QtQuick 2.0 | ||||
| import QtQuick 2.15 | ||||
| import org.kde.kcmutils as KCM | ||||
|  | ||||
| import org.kde.plasma.private.desktoppanel 1.0 | ||||
| import "." | ||||
|  | ||||
|  | ||||
| Item { | ||||
| KCM.SimpleKCM { | ||||
|     id: inactiveAppearancePage | ||||
|     // backend | ||||
|     DPAdds { | ||||
|         id: dpAdds | ||||
|     } | ||||
|  | ||||
|     width: childrenRect.width | ||||
|     height: childrenRect.height | ||||
|     implicitWidth: pageColumn.implicitWidth | ||||
|     implicitHeight: pageColumn.implicitHeight | ||||
|  | ||||
|     property bool debug: dpAdds.isDebugEnabled() | ||||
|  | ||||
|     property alias cfg_fontFamily: font.value | ||||
|     property alias cfg_fontSize: fontSize.value | ||||
| @ -43,7 +33,6 @@ Item { | ||||
|     property alias cfg_textStyleColor: selectStyleColor.value | ||||
|     property string cfg_textStyle: textStyle.value | ||||
|  | ||||
|  | ||||
|     Column { | ||||
|         id: pageColumn | ||||
|         anchors.fill: parent | ||||
| @ -99,9 +88,4 @@ Item { | ||||
|             value: plasmoid.configuration.textStyleColor | ||||
|         } | ||||
|     } | ||||
|  | ||||
|  | ||||
|     Component.onCompleted: { | ||||
|         if (debug) console.debug() | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -15,25 +15,23 @@ | ||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
| import QtQuick 2.4 | ||||
| import QtQuick.Controls 1.3 as QtControls | ||||
| import QtQuick.Layouts 1.1 | ||||
| import QtQuick 2.15 | ||||
| import QtQuick.Controls | ||||
| import QtQuick.Layouts | ||||
| import org.kde.plasma.core as PlasmaCore | ||||
| import org.kde.plasma.plasmoid 2.0 | ||||
| import org.kde.plasma.core 2.0 as PlasmaCore | ||||
| import org.kde.plasma.components 2.0 as PlasmaComponents | ||||
|  | ||||
| import org.kde.plasma.private.desktoppanel 1.0 | ||||
| import "." | ||||
|  | ||||
|  | ||||
| Item { | ||||
| PlasmoidItem { | ||||
|     id: main | ||||
|     // backend | ||||
|     DPAdds { | ||||
|         id: dpAdds | ||||
|     } | ||||
|  | ||||
|     property bool debug: dpAdds.isDebugEnabled() | ||||
|     property variant tooltipSettings: { | ||||
|         "tooltipColor": plasmoid.configuration.tooltipColor, | ||||
|         "tooltipType": plasmoid.configuration.tooltipType, | ||||
| @ -44,17 +42,12 @@ Item { | ||||
|     signal needTooltipUpdate | ||||
|     signal sizeUpdate | ||||
|  | ||||
|  | ||||
|     // init | ||||
|     Plasmoid.preferredRepresentation: Plasmoid.fullRepresentation | ||||
|     Plasmoid.compactRepresentation: Plasmoid.fullRepresentation | ||||
|  | ||||
|     Layout.alignment: Qt.AlignVCenter | Qt.AlignHCenter | ||||
|  | ||||
|     Plasmoid.icon: "utilities-system-monitor" | ||||
|     Plasmoid.backgroundHints: plasmoid.configuration.background ? "DefaultBackground" : "NoBackground" | ||||
|  | ||||
|  | ||||
|     // ui | ||||
|     GridLayout { | ||||
|         anchors.fill: parent | ||||
| @ -101,7 +94,6 @@ Item { | ||||
|         } | ||||
|     } | ||||
|  | ||||
|  | ||||
|     Timer { | ||||
|         id: timer | ||||
|         interval: 1000 | ||||
| @ -109,19 +101,16 @@ Item { | ||||
|     } | ||||
|  | ||||
|     onNeedUpdate: { | ||||
|         if (debug) console.debug() | ||||
|  | ||||
|         for (var i=0; i<repeater.count; i++) { | ||||
|         for (let i = 0; i < repeater.count; i++) { | ||||
|             if (!repeater.itemAt(i)) { | ||||
|                 if (debug) console.info("Nothing to do here yet", i) | ||||
|                 timer.start() | ||||
|                 return | ||||
|             } | ||||
|             repeater.itemAt(i).text = dpAdds.parsePattern(plasmoid.configuration.text, i) | ||||
|             if (dpAdds.currentDesktop() == i) { | ||||
|             if (dpAdds.currentDesktop() === i) { | ||||
|                 repeater.itemAt(i).color = plasmoid.configuration.currentFontColor | ||||
|                 repeater.itemAt(i).font.family = plasmoid.configuration.currentFontFamily | ||||
|                 repeater.itemAt(i).font.italic = plasmoid.configuration.currentFontStyle == "italic" | ||||
|                 repeater.itemAt(i).font.italic = plasmoid.configuration.currentFontStyle === "italic" | ||||
|                 repeater.itemAt(i).font.pointSize = plasmoid.configuration.currentFontSize | ||||
|                 repeater.itemAt(i).font.weight = General.fontWeight[plasmoid.configuration.currentFontWeight] | ||||
|                 repeater.itemAt(i).style = General.textStyle[plasmoid.configuration.currentTextStyle] | ||||
| @ -129,7 +118,7 @@ Item { | ||||
|             } else { | ||||
|                 repeater.itemAt(i).color = plasmoid.configuration.fontColor | ||||
|                 repeater.itemAt(i).font.family = plasmoid.configuration.fontFamily | ||||
|                 repeater.itemAt(i).font.italic = plasmoid.configuration.fontStyle == "italic" | ||||
|                 repeater.itemAt(i).font.italic = plasmoid.configuration.fontStyle === "italic" | ||||
|                 repeater.itemAt(i).font.pointSize = plasmoid.configuration.fontSize | ||||
|                 repeater.itemAt(i).font.weight = General.fontWeight[plasmoid.configuration.fontWeight] | ||||
|                 repeater.itemAt(i).style = General.textStyle[plasmoid.configuration.textStyle] | ||||
| @ -143,13 +132,11 @@ Item { | ||||
|     } | ||||
|  | ||||
|     onNeedTooltipUpdate: { | ||||
|         if (debug) console.debug() | ||||
|  | ||||
|         for (var i=0; i<repeater.count; i++) { | ||||
|         for (let i = 0; i < repeater.count; i++) { | ||||
|             repeater.itemAt(i).tooltip.text = dpAdds.toolTipImage(i) | ||||
|             // resize text tooltip to content size | ||||
|             // this hack does not work for images-based tooltips | ||||
|             if (tooltipSettings.tooltipType == "names") { | ||||
|             if (tooltipSettings.tooltipType === "names") { | ||||
|                 repeater.itemAt(i).tooltip.height = repeater.itemAt(i).tooltip.implicitHeight | ||||
|                 repeater.itemAt(i).tooltip.width = repeater.itemAt(i).tooltip.implicitWidth | ||||
|             } | ||||
| @ -157,11 +144,9 @@ Item { | ||||
|     } | ||||
|  | ||||
|     onSizeUpdate: { | ||||
|         if (debug) console.debug() | ||||
|  | ||||
|         if (plasmoid.configuration.height == 0) { | ||||
|             var newHeight = 0 | ||||
|             for (var i=0; i<repeater.count; i++) | ||||
|         if (plasmoid.configuration.height === 0) { | ||||
|             let newHeight = 0 | ||||
|             for (let i = 0; i < repeater.count; i++) | ||||
|                 newHeight += repeater.itemAt(i).contentHeight | ||||
|             Layout.minimumHeight = newHeight | ||||
|             Layout.maximumHeight = -1 | ||||
| @ -169,9 +154,9 @@ Item { | ||||
|             Layout.minimumHeight = plasmoid.configuration.height | ||||
|             Layout.maximumHeight = plasmoid.configuration.height | ||||
|         } | ||||
|         if (plasmoid.configuration.width == 0) { | ||||
|             var newWidth = 0 | ||||
|             for (var i=0; i<repeater.count; i++) | ||||
|         if (plasmoid.configuration.width === 0) { | ||||
|             let newWidth = 0 | ||||
|             for (let i = 0; i < repeater.count; i++) | ||||
|                 newWidth += repeater.itemAt(i).contentWidth | ||||
|             Layout.minimumWidth = newWidth | ||||
|             Layout.maximumWidth = -1 | ||||
| @ -183,7 +168,6 @@ Item { | ||||
|  | ||||
|     Plasmoid.onUserConfiguringChanged: { | ||||
|         if (plasmoid.userConfiguring) return | ||||
|         if (debug) console.debug() | ||||
|  | ||||
|         dpAdds.setMark(plasmoid.configuration.mark) | ||||
|         dpAdds.setToolTipData(tooltipSettings) | ||||
| @ -192,8 +176,6 @@ Item { | ||||
|     } | ||||
|  | ||||
|     Component.onCompleted: { | ||||
|         if (debug) console.debug() | ||||
|  | ||||
|         // init submodule | ||||
|         Plasmoid.userConfiguringChanged(false) | ||||
|         dpAdds.desktopChanged.connect(needUpdate) | ||||
|  | ||||
| @ -15,29 +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.desktoppanel 1.0 | ||||
| import "." | ||||
|  | ||||
|  | ||||
| Item { | ||||
| KCM.SimpleKCM { | ||||
|     id: widgetPage | ||||
|     // backend | ||||
|     DPAdds { | ||||
|         id: dpAdds | ||||
|     } | ||||
|  | ||||
|     width: childrenRect.width | ||||
|     height: childrenRect.height | ||||
|     implicitWidth: pageColumn.implicitWidth | ||||
|     implicitHeight: pageColumn.implicitHeight | ||||
|  | ||||
|     property bool debug: dpAdds.isDebugEnabled() | ||||
|  | ||||
|     property alias cfg_text: textPattern.text | ||||
|  | ||||
|  | ||||
|     Column { | ||||
|         id: pageColumn | ||||
|         anchors.fill: parent | ||||
| @ -60,9 +53,4 @@ Item { | ||||
|             backend: dpAdds | ||||
|         } | ||||
|     } | ||||
|  | ||||
|  | ||||
|     Component.onCompleted: { | ||||
|         if (debug) console.debug() | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -1,26 +0,0 @@ | ||||
| [Desktop Entry] | ||||
| Encoding=UTF-8 | ||||
| Name=Desktop Panel | ||||
| Comment=A minimalistic Plasmoid | ||||
| Comment[en]=A minimalistic Plasmoid | ||||
| Comment[es]=Un plasmoide minimalista | ||||
| Comment[es]=Un script Plasmoïde minimaliste | ||||
| Comment[pt_BR]=Um script Plasmoid | ||||
| Comment[ru]=Минималистичный плазмоид | ||||
| Comment[uk]=Мінімалістичний плазмоїд | ||||
| X-KDE-ServiceTypes=Plasma/Applet | ||||
| Type=Service | ||||
| Icon=utilities-system-monitor | ||||
|  | ||||
| X-KDE-ServiceTypes=Plasma/Applet | ||||
| X-Plasma-API=declarativeappletscript | ||||
| X-Plasma-MainScript=ui/main.qml | ||||
|  | ||||
| X-KDE-PluginInfo-Author=Evgeniy Alekseev aka arcanis | ||||
| X-KDE-PluginInfo-Email=esalexeev@gmail.com | ||||
| X-KDE-PluginInfo-Name=org.kde.plasma.desktoppanel | ||||
| X-KDE-PluginInfo-Version=3.5.1 | ||||
| X-KDE-PluginInfo-Website=https://arcanis.me/projects/awesome-widgets/ | ||||
| X-KDE-PluginInfo-Category=System Information | ||||
| X-KDE-PluginInfo-License=GPLv3 | ||||
| X-KDE-PluginInfo-EnabledByDefault=true | ||||
							
								
								
									
										26
									
								
								sources/desktop-panel/package/metadata.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								sources/desktop-panel/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.desktoppanel", | ||||
|         "License": "GPLv3", | ||||
|         "Name": "Desktop Panel", | ||||
|         "Version": "4.0.0", | ||||
|         "Website": "https://arcanis.me/projects/awesome-widgets/" | ||||
|     }, | ||||
|     "X-Plasma-API-Minimum-Version": "6.0" | ||||
| } | ||||
| @ -6,15 +6,15 @@ include_directories( | ||||
|         ${CMAKE_BINARY_DIR} | ||||
|         ${PROJECT_TRDPARTY_DIR} | ||||
|         ${Qt_INCLUDE} | ||||
|         ${Kf5_INCLUDE} | ||||
|         ${Kf6_INCLUDE} | ||||
| ) | ||||
|  | ||||
| file(GLOB SUBPROJECT_SOURCE *.cpp ${PROJECT_TRDPARTY_DIR}/fontdialog/*.cpp ${CMAKE_SOURCE_DIR}/*.cpp) | ||||
| file(GLOB SUBPROJECT_NOTIFY *.notifyrc) | ||||
|  | ||||
| add_library(${PLUGIN_NAME} SHARED ${SUBPROJECT_SOURCE}) | ||||
| target_link_libraries(${PLUGIN_NAME} ${Qt_LIBRARIES} ${Kf5_LIBRARIES}) | ||||
| target_link_libraries(${PLUGIN_NAME} ${Qt_LIBRARIES} ${Kf6_LIBRARIES}) | ||||
|  | ||||
| install(TARGETS ${PLUGIN_NAME} DESTINATION ${QML_INSTALL_DIR}/org/kde/plasma/private/desktoppanel) | ||||
| install(FILES qmldir DESTINATION ${QML_INSTALL_DIR}/org/kde/plasma/private/desktoppanel) | ||||
| install(FILES ${SUBPROJECT_NOTIFY} DESTINATION ${KNOTIFYRC_INSTALL_DIR}) | ||||
| install(TARGETS ${PLUGIN_NAME} DESTINATION ${KDE_INSTALL_QMLDIR}/org/kde/plasma/private/desktoppanel) | ||||
| install(FILES qmldir DESTINATION ${KDE_INSTALL_QMLDIR}/org/kde/plasma/private/desktoppanel) | ||||
| install(FILES ${SUBPROJECT_NOTIFY} DESTINATION ${KDE_INSTALL_KNOTIFYRCDIR}) | ||||
|  | ||||
| @ -49,9 +49,7 @@ DPAdds::DPAdds(QObject *_parent) | ||||
|     m_vdi = new TaskManager::VirtualDesktopInfo(this); | ||||
|     m_taskModel = new TaskManager::WindowTasksModel(this); | ||||
|  | ||||
|     connect(m_vdi, SIGNAL(currentDesktopChanged()), this, SIGNAL(desktopChanged())); | ||||
|     connect(KWindowSystem::self(), SIGNAL(windowAdded(WId)), this, SIGNAL(windowListChanged())); | ||||
|     connect(KWindowSystem::self(), SIGNAL(windowRemoved(WId)), this, SIGNAL(windowListChanged())); | ||||
|     connect(m_vdi, &TaskManager::VirtualDesktopInfo::currentDesktopChanged, this, &DPAdds::desktopChanged); | ||||
| } | ||||
|  | ||||
|  | ||||
| @ -64,13 +62,6 @@ DPAdds::~DPAdds() | ||||
| } | ||||
|  | ||||
|  | ||||
| // HACK: since QML could not use QLoggingCategory I need this hack | ||||
| bool DPAdds::isDebugEnabled() | ||||
| { | ||||
|     return LOG_DP().isDebugEnabled(); | ||||
| } | ||||
|  | ||||
|  | ||||
| int DPAdds::currentDesktop() const | ||||
| { | ||||
|     auto current = m_vdi->currentDesktop(); | ||||
| @ -92,7 +83,7 @@ QStringList DPAdds::dictKeys(const bool _sorted, const QString &_regexp) | ||||
|     if (_sorted) | ||||
|         allKeys.sort(); | ||||
|  | ||||
|     return allKeys.filter(QRegExp(_regexp)); | ||||
|     return allKeys.filter(QRegularExpression(_regexp)); | ||||
| } | ||||
|  | ||||
|  | ||||
| @ -223,7 +214,7 @@ QString DPAdds::valueByKey(const QString &_key, int _desktop) const | ||||
|  | ||||
|     QString currentMark = currentDesktop() == _desktop ? m_mark : ""; | ||||
|     if (_key == "mark") | ||||
|         return QString("%1").arg(currentMark, m_mark.count(), QLatin1Char(' ')).replace(" ", " "); | ||||
|         return QString("%1").arg(currentMark, m_mark.size(), QLatin1Char(' ')).replace(" ", " "); | ||||
|     else if (_key == "name") { | ||||
|         auto name = m_vdi->desktopNames().at(_desktop); | ||||
|         return name.replace(" ", " "); | ||||
|  | ||||
| @ -46,7 +46,6 @@ class DPAdds : public QObject | ||||
| public: | ||||
|     explicit DPAdds(QObject *_parent = nullptr); | ||||
|     ~DPAdds() override; | ||||
|     Q_INVOKABLE static bool isDebugEnabled(); | ||||
|     Q_INVOKABLE [[nodiscard]] int currentDesktop() const; | ||||
|     Q_INVOKABLE static QStringList dictKeys(bool _sorted = true, const QString &_regexp = ""); | ||||
|     Q_INVOKABLE [[nodiscard]] int numberOfDesktops() const; | ||||
|  | ||||
| @ -1,4 +1,4 @@ | ||||
| set(SUBPROJECT plasma_dataengine_extsysmon) | ||||
| set(SUBPROJECT ksystemstats_plugin_extsysmon) | ||||
| message(STATUS "Subproject ${SUBPROJECT}") | ||||
| add_definitions(-DTRANSLATION_DOMAIN=\"plasma_applet_org.kde.plasma.awesomewidget\") | ||||
|  | ||||
| @ -9,27 +9,19 @@ include_directories( | ||||
|         ${CMAKE_CURRENT_SOURCE_DIR}/../${PROJECT_MONITORSOURCES}/ | ||||
|         ${PROJECT_TRDPARTY_DIR} | ||||
|         ${Qt_INCLUDE} | ||||
|         ${Kf5_INCLUDE} | ||||
|         ${Kf6_INCLUDE} | ||||
| ) | ||||
|  | ||||
| file(GLOB SUBPROJECT_DESKTOP_IN *.desktop) | ||||
| file(RELATIVE_PATH SUBPROJECT_DESKTOP ${CMAKE_SOURCE_DIR} ${SUBPROJECT_DESKTOP_IN}) | ||||
| file(GLOB SUBPROJECT_SOURCE *.cpp ${CMAKE_SOURCE_DIR}/*.cpp) | ||||
| file(GLOB SUBPROJECT_HEADER *.h) | ||||
| file(GLOB SUBPROJECT_CONF *.conf) | ||||
|  | ||||
| # prepare | ||||
| configure_file(${SUBPROJECT_DESKTOP_IN} ${CMAKE_CURRENT_BINARY_DIR}/${SUBPROJECT_DESKTOP}) | ||||
|  | ||||
| # make | ||||
| add_library(${SUBPROJECT} MODULE ${SUBPROJECT_SOURCE} ${SUBPROJECT_HEADER}) | ||||
| target_link_libraries(${SUBPROJECT}  | ||||
|         ${PROJECT_LIBRARY} ${PROJECT_MONITORSOURCES}  | ||||
|         ${Qt_LIBRARIES} ${Kf5_LIBRARIES}) | ||||
| kcoreaddons_desktop_to_json(${SUBPROJECT} ${CMAKE_CURRENT_BINARY_DIR}/${SUBPROJECT_DESKTOP} | ||||
|                             SERVICE_TYPES plasma-dataengine.desktop) | ||||
|         ${Qt_LIBRARIES} ${Kf6_LIBRARIES}) | ||||
|  | ||||
| # install | ||||
| install(TARGETS ${SUBPROJECT} DESTINATION ${PLUGIN_INSTALL_DIR}/plasma/dataengine) | ||||
| install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${SUBPROJECT_DESKTOP} DESTINATION ${SERVICES_INSTALL_DIR}) | ||||
| install(FILES ${SUBPROJECT_CONF} DESTINATION ${CONFIG_INSTALL_DIR}) | ||||
| install(TARGETS ${SUBPROJECT} DESTINATION ${KDE_INSTALL_PLUGINDIR}/ksystemstats) | ||||
| install(FILES ${SUBPROJECT_CONF} DESTINATION /${KDE_INSTALL_CONFDIR}) | ||||
|  | ||||
| @ -17,85 +17,40 @@ | ||||
|  | ||||
| #include "extsysmon.h" | ||||
|  | ||||
| #include <KPluginFactory> | ||||
|  | ||||
| #include <QDBusMetaType> | ||||
| #include <QFile> | ||||
| #include <QRegularExpression> | ||||
| #include <QSettings> | ||||
| #include <QStandardPaths> | ||||
|  | ||||
| #include "awdebug.h" | ||||
| #include "extsysmonaggregator.h" | ||||
| #include "gpuloadsource.h" | ||||
| #include "hddtempsource.h" | ||||
|  | ||||
|  | ||||
| ExtendedSysMon::ExtendedSysMon(QObject *_parent, const QVariantList &_args) | ||||
|     : Plasma::DataEngine(_parent, _args) | ||||
|     : KSysGuard::SensorPlugin(_parent, _args) | ||||
| { | ||||
|     Q_UNUSED(_args) | ||||
|     qSetMessagePattern(AWDebug::LOG_FORMAT); | ||||
|     qCDebug(LOG_ESM) << __PRETTY_FUNCTION__; | ||||
|     for (auto &metadata : AWDebug::getBuildData()) | ||||
|         qCDebug(LOG_ESM) << metadata; | ||||
|  | ||||
|     setMinimumPollingInterval(333); | ||||
|     readConfiguration(); | ||||
|  | ||||
|     // init aggregator | ||||
|     m_aggregator = new ExtSysMonAggregator(this, m_configuration); | ||||
|     for (auto &source : m_aggregator->sources()) | ||||
|         setData(source, m_aggregator->initialData(source)); | ||||
| } | ||||
|  | ||||
|  | ||||
| ExtendedSysMon::~ExtendedSysMon() | ||||
| { | ||||
|     qCDebug(LOG_ESM) << __PRETTY_FUNCTION__; | ||||
| } | ||||
|  | ||||
|  | ||||
| QStringList ExtendedSysMon::sources() const | ||||
| { | ||||
|     return m_aggregator->sources(); | ||||
| } | ||||
|  | ||||
|  | ||||
| bool ExtendedSysMon::sourceRequestEvent(const QString &_source) | ||||
| { | ||||
|     qCDebug(LOG_ESM) << "Source" << _source; | ||||
|  | ||||
|     return updateSourceEvent(_source); | ||||
| } | ||||
|  | ||||
|  | ||||
| bool ExtendedSysMon::updateSourceEvent(const QString &_source) | ||||
| { | ||||
|     qCDebug(LOG_ESM) << "Source" << _source; | ||||
|  | ||||
|     if (m_aggregator->hasSource(_source)) { | ||||
|         QVariant data = m_aggregator->data(_source); | ||||
|         if (data.isNull()) | ||||
|             return false; | ||||
|         setData(_source, "value", data); | ||||
|     } else { | ||||
|         qCWarning(LOG_ESM) << "Unknown source" << _source; | ||||
|         return false; | ||||
|     } | ||||
|  | ||||
|     return true; | ||||
|     addContainer(new ExtSysMonAggregator("extsysmon", "Extended system monitor", this, m_configuration)); | ||||
| } | ||||
|  | ||||
|  | ||||
| void ExtendedSysMon::readConfiguration() | ||||
| { | ||||
|     QString fileName = QStandardPaths::locate(QStandardPaths::ConfigLocation, "plasma-dataengine-extsysmon.conf"); | ||||
|     auto fileName = QStandardPaths::locate(QStandardPaths::ConfigLocation, "plasma-dataengine-extsysmon.conf"); | ||||
|     qCInfo(LOG_ESM) << "Configuration file" << fileName; | ||||
|     QSettings settings(fileName, QSettings::IniFormat); | ||||
|     QHash<QString, QString> rawConfig; | ||||
|  | ||||
|     settings.beginGroup("Configuration"); | ||||
|     rawConfig["ACPIPATH"] = settings.value("ACPIPATH", "/sys/class/power_supply/").toString(); | ||||
|     rawConfig["GPUDEV"] = settings.value("GPUDEV", "auto").toString(); | ||||
|     rawConfig["HDDDEV"] = settings.value("HDDDEV", "all").toString(); | ||||
|     rawConfig["HDDTEMPCMD"] = settings.value("HDDTEMPCMD", "sudo smartctl -a").toString(); | ||||
|     rawConfig["MPDADDRESS"] = settings.value("MPDADDRESS", "localhost").toString(); | ||||
|     rawConfig["MPDPORT"] = settings.value("MPDPORT", "6600").toString(); | ||||
|     rawConfig["MPRIS"] = settings.value("MPRIS", "auto").toString(); | ||||
| @ -111,31 +66,6 @@ QHash<QString, QString> ExtendedSysMon::updateConfiguration(QHash<QString, QStri | ||||
| { | ||||
|     qCDebug(LOG_ESM) << "Raw configuration" << _rawConfig; | ||||
|  | ||||
|     // gpudev | ||||
|     if (_rawConfig["GPUDEV"] == "disable") | ||||
|         ; | ||||
|     else if (_rawConfig["GPUDEV"] == "auto") | ||||
|         _rawConfig["GPUDEV"] = GPULoadSource::autoGpu(); | ||||
|     else if ((_rawConfig["GPUDEV"] != "ati") && (_rawConfig["GPUDEV"] != "nvidia")) | ||||
|         _rawConfig["GPUDEV"] = GPULoadSource::autoGpu(); | ||||
|     // hdddev | ||||
|     QStringList allHddDevices = HDDTemperatureSource::allHdd(); | ||||
|     if (_rawConfig["HDDDEV"] == "all") { | ||||
|         _rawConfig["HDDDEV"] = allHddDevices.join(','); | ||||
|     } else if (_rawConfig["HDDDEV"] == "disable") { | ||||
|         _rawConfig["HDDDEV"] = ""; | ||||
|     } else { | ||||
|         QStringList deviceList = _rawConfig["HDDDEV"].split(',', Qt::SkipEmptyParts); | ||||
|         QStringList devices; | ||||
|         QRegExp diskRegexp = QRegExp("^/dev/[hms]d[a-z]$"); | ||||
|         for (auto &device : deviceList) | ||||
|             if ((QFile::exists(device)) && (device.contains(diskRegexp))) | ||||
|                 devices.append(device); | ||||
|         if (devices.isEmpty()) | ||||
|             _rawConfig["HDDDEV"] = allHddDevices.join(','); | ||||
|         else | ||||
|             _rawConfig["HDDDEV"] = devices.join(','); | ||||
|     } | ||||
|     // player | ||||
|     if ((_rawConfig["PLAYER"] != "mpd") && (_rawConfig["PLAYER"] != "mpris") && (_rawConfig["PLAYER"] != "disable")) | ||||
|         _rawConfig["PLAYER"] = "mpris"; | ||||
| @ -149,6 +79,6 @@ QHash<QString, QString> ExtendedSysMon::updateConfiguration(QHash<QString, QStri | ||||
| } | ||||
|  | ||||
|  | ||||
| K_EXPORT_PLASMA_DATAENGINE_WITH_JSON(extsysmon, ExtendedSysMon, "plasma-dataengine-extsysmon.json") | ||||
| K_PLUGIN_CLASS_WITH_JSON(ExtendedSysMon, "metadata.json") | ||||
|  | ||||
| #include "extsysmon.moc" | ||||
|  | ||||
| @ -18,27 +18,19 @@ | ||||
| #ifndef EXTSYSMON_H | ||||
| #define EXTSYSMON_H | ||||
|  | ||||
| #include <Plasma/DataEngine> | ||||
| #include <ksysguard/systemstats/SensorPlugin.h> | ||||
|  | ||||
|  | ||||
| class ExtSysMonAggregator; | ||||
|  | ||||
| class ExtendedSysMon : public Plasma::DataEngine | ||||
| class ExtendedSysMon : public KSysGuard::SensorPlugin | ||||
| { | ||||
|     Q_OBJECT | ||||
|  | ||||
| public: | ||||
|     explicit ExtendedSysMon(QObject *_parent, const QVariantList &_args); | ||||
|     ~ExtendedSysMon() override; | ||||
|  | ||||
| protected: | ||||
|     [[nodiscard]] QStringList sources() const override; | ||||
|     bool sourceRequestEvent(const QString &_source) override; | ||||
|     bool updateSourceEvent(const QString &_source) override; | ||||
|     [[nodiscard]] QString providerName() const override { return QStringLiteral("extsysmon"); } | ||||
|  | ||||
| private: | ||||
|     // configuration | ||||
|     ExtSysMonAggregator *m_aggregator = nullptr; | ||||
|     QHash<QString, QString> m_configuration; | ||||
|     // methods | ||||
|     void readConfiguration(); | ||||
|  | ||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user