mirror of
				https://github.com/arcan1s/awesome-widgets.git
				synced 2025-10-31 05:13:40 +00:00 
			
		
		
		
	Compare commits
	
		
			1 Commits
		
	
	
		
			4.0.0alpha
			...
			803d6d631a
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 803d6d631a | 
							
								
								
									
										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 |       run: pacman -Sy --noconfirm base-devel cmake extra-cmake-modules python util-linux-libs xorg-server-xvfb | ||||||
|      |      | ||||||
|     - name: install dependencies |     - name: install dependencies | ||||||
|       run: pacman -S --noconfirm plasma-workspace |       run: pacman -S --noconfirm plasma-workspace ksysguard | ||||||
|      |      | ||||||
|     - name: configure cmake |     - name: configure cmake | ||||||
|       run: cmake -B build -S sources -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DBUILD_FUTURE=ON -DBUILD_TESTING=ON |       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 | ||||||
|      |      | ||||||
|     - name: build |     - name: build | ||||||
|       working-directory: /repo/build |       working-directory: /repo/build | ||||||
|  | |||||||
							
								
								
									
										24
									
								
								.github/workflows/release.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										24
									
								
								.github/workflows/release.yml
									
									
									
									
										vendored
									
									
								
							| @ -25,17 +25,17 @@ jobs: | |||||||
|         env: |         env: | ||||||
|           VERSION: ${{ steps.version.outputs.VERSION }} |           VERSION: ${{ steps.version.outputs.VERSION }} | ||||||
|  |  | ||||||
| #      - name: build debian package |       - name: build debian package | ||||||
| #        run: | |         run: | | ||||||
| #          sudo apt update && \ |           sudo apt update && \ | ||||||
| #          sudo apt install -yq cmake extra-cmake-modules g++ git gettext make && \ |           sudo apt install -yq cmake extra-cmake-modules g++ git gettext make && \ | ||||||
| #          sudo apt install -yq libkf5i18n-dev libkf5notifications-dev libkf5service-dev \ |           sudo apt install -yq libkf5i18n-dev libkf5notifications-dev libkf5service-dev \ | ||||||
| #            libkf5windowsystem-dev libkf5plasma-dev qtbase5-dev qtdeclarative5-dev \ |             libkf5windowsystem-dev libkf5plasma-dev qtbase5-dev qtdeclarative5-dev \ | ||||||
| #            plasma-workspace-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 && \ |           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 && \ |           cd build-deb && \ | ||||||
| #          make package && \ |           make package && \ | ||||||
| #          cd .. |           cd .. | ||||||
|  |  | ||||||
|       - name: release |       - name: release | ||||||
|         uses: softprops/action-gh-release@v1 |         uses: softprops/action-gh-release@v1 | ||||||
| @ -45,7 +45,7 @@ jobs: | |||||||
|             ${{ steps.changelog.outputs.changelog }} |             ${{ steps.changelog.outputs.changelog }} | ||||||
|           files: | |           files: | | ||||||
|             awesome-widgets-*-src.tar.xz |             awesome-widgets-*-src.tar.xz | ||||||
| #            build-deb/plasma-widget-awesome-widgets-*.deb |             build-deb/plasma-widget-awesome-widgets-*.deb | ||||||
|           fail_on_unmatched_files: true |           fail_on_unmatched_files: true | ||||||
|         env: |         env: | ||||||
|           GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |           GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||||||
|  | |||||||
| @ -1,6 +1,3 @@ | |||||||
| Ver.4.0.0: |  | ||||||
| * migration to plasma 6 |  | ||||||
|  |  | ||||||
| Ver.3.5.0: | Ver.3.5.0: | ||||||
| + wayland support | + wayland support | ||||||
| * update code to latest standards | * update code to latest standards | ||||||
| @ -15,6 +12,7 @@ Ver.3.4.2: | |||||||
| * update to new qt api | * update to new qt api | ||||||
| - fix non printable spaces (#142, #143) | - fix non printable spaces (#142, #143) | ||||||
|  |  | ||||||
|  |  | ||||||
| Ver.3.3.3: | Ver.3.3.3: | ||||||
| + add custom keys support (#101) | + add custom keys support (#101) | ||||||
| * DBus interface improvements | * DBus interface improvements | ||||||
|  | |||||||
| @ -1,30 +1,41 @@ | |||||||
| # Maintainer: Evgeniy Alekseev <arcanis at archlinux dot org> | # Maintainer: Evgeniy Alekseev <arcanis at archlinux dot org> | ||||||
|  |  | ||||||
| pkgname=plasma6-applet-awesome-widgets | pkgname=plasma5-applet-awesome-widgets | ||||||
| _pkgname=awesome-widgets | _pkgname=awesome-widgets | ||||||
| pkgver=4.0.0alpha2 | pkgver=3.4.3 | ||||||
| pkgrel=1 | pkgrel=1 | ||||||
| pkgdesc="Collection of minimalistic Plasmoids which look like Awesome WM widgets (ex-PyTextMonitor)" | pkgdesc="Collection of minimalistic Plasmoids which look like Awesome WM widgets (ex-PyTextMonitor)" | ||||||
| arch=('x86_64') | arch=('i686' 'x86_64') | ||||||
| url="https://arcanis.me/projects/awesome-widgets" | url="https://arcanis.me/projects/awesome-widgets" | ||||||
| license=('GPL3') | license=('GPL3') | ||||||
| depends=('plasma-workspace') | depends=('ksysguard' 'plasma-framework') | ||||||
| optdepends=("mpd: for music player monitor") | 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") | ||||||
| makedepends=('cmake' 'extra-cmake-modules' 'python') | makedepends=('cmake' 'extra-cmake-modules' 'python') | ||||||
| source=(https://github.com/arcan1s/awesome-widgets/releases/download/${pkgver}/${_pkgname}-${pkgver}-src.tar.xz) | source=(https://github.com/arcan1s/awesome-widgets/releases/download/V.${pkgver}/${_pkgname}-${pkgver}-src.tar.xz) | ||||||
| install="$pkgname.install" | install=${pkgname}.install | ||||||
|  | md5sums=('5953ba518191bb6fff83cdb8633c735c') | ||||||
| backup=('etc/xdg/plasma-dataengine-extsysmon.conf') | backup=('etc/xdg/plasma-dataengine-extsysmon.conf') | ||||||
|  |  | ||||||
|  | prepare() { | ||||||
|  |   rm -rf "${srcdir}/build" | ||||||
|  |   mkdir "${srcdir}/build" | ||||||
|  | } | ||||||
|  |  | ||||||
| build () { | build () { | ||||||
|     cmake -B build -S "${_pkgname}" \ |   cd "${srcdir}/build" | ||||||
|           -DCMAKE_BUILD_TYPE=Optimization \ |   cmake -DKDE_INSTALL_USE_QT_SYS_PATHS=ON \ | ||||||
|           -DBUILD_FUTURE=ON \ |         -DCMAKE_BUILD_TYPE=Optimization \ | ||||||
|           -DBUILD_TESTING=OFF |         -DCMAKE_INSTALL_PREFIX=/usr \ | ||||||
|     cmake --build build |         -DBUILD_FUTURE=ON \ | ||||||
|  |         "../${_pkgname}" | ||||||
|  |   make | ||||||
| } | } | ||||||
|  |  | ||||||
| package() { | package() { | ||||||
|       DESTDIR="$pkgdir" cmake --install build |   cd "${srcdir}/build" | ||||||
|  |   make DESTDIR="${pkgdir}" install | ||||||
| } | } | ||||||
|  |  | ||||||
| sha256sums=('b2a7b07a1df6f710f4e0d6e5898933f4ddb131818b922dc4b8e48afe3e98a664') |  | ||||||
|  | |||||||
							
								
								
									
										75
									
								
								sources/3rdparty/fontdialog/fontdialog.cpp
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										75
									
								
								sources/3rdparty/fontdialog/fontdialog.cpp
									
									
									
									
										vendored
									
									
								
							| @ -39,6 +39,81 @@ 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) | CFont CFont::fromQFont(const QFont font, const QColor color) | ||||||
| { | { | ||||||
|     return CFont(font.family(), font.pointSize(), font.weight(), font.italic(), 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,6 +34,11 @@ public: | |||||||
|     // color properties |     // color properties | ||||||
|     QColor color(); |     QColor color(); | ||||||
|     void setCurrentColor(const 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 |     // conversion to QFont | ||||||
|     static CFont fromQFont(const QFont font, |     static CFont fromQFont(const QFont font, | ||||||
|                            const QColor color = QColor(QString("#000000"))); |                            const QColor color = QColor(QString("#000000"))); | ||||||
|  | |||||||
| @ -14,9 +14,9 @@ project(awesomewidgets) | |||||||
| set(PROJECT_AUTHOR "Evgeniy Alekseev") | set(PROJECT_AUTHOR "Evgeniy Alekseev") | ||||||
| set(PROJECT_CONTACT "esalexeev@gmail.com") | set(PROJECT_CONTACT "esalexeev@gmail.com") | ||||||
| set(PROJECT_LICENSE "GPL3") | set(PROJECT_LICENSE "GPL3") | ||||||
| set(PROJECT_VERSION_MAJOR "4") | set(PROJECT_VERSION_MAJOR "3") | ||||||
| set(PROJECT_VERSION_MINOR "0") | set(PROJECT_VERSION_MINOR "5") | ||||||
| set(PROJECT_VERSION_PATCH "0") | set(PROJECT_VERSION_PATCH "1") | ||||||
| set(PROJECT_VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}") | set(PROJECT_VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}") | ||||||
| # append git version if any | # append git version if any | ||||||
| set(PROJECT_COMMIT_SHA "Commit hash" CACHE INTERNAL "") | set(PROJECT_COMMIT_SHA "Commit hash" CACHE INTERNAL "") | ||||||
|  | |||||||
| @ -1,7 +1,7 @@ | |||||||
| set(SUBPROJECT plasma_applet_awesome-widget) | set(SUBPROJECT plasma_applet_awesome-widget) | ||||||
| message(STATUS "Subproject ${SUBPROJECT}") | message(STATUS "Subproject ${SUBPROJECT}") | ||||||
|  |  | ||||||
| configure_file(metadata.json ${CMAKE_CURRENT_SOURCE_DIR}/package/metadata.json) | configure_file(metadata.desktop ${CMAKE_CURRENT_SOURCE_DIR}/package/metadata.desktop) | ||||||
|  |  | ||||||
| add_subdirectory(plugin) | add_subdirectory(plugin) | ||||||
| plasma_install_package(package org.kde.plasma.awesomewidget) | plasma_install_package(package org.kde.plasma.awesomewidget) | ||||||
|  | |||||||
							
								
								
									
										26
									
								
								sources/awesome-widget/metadata.desktop
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								sources/awesome-widget/metadata.desktop
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,26 @@ | |||||||
|  | [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 | ||||||
| @ -1,5 +1,4 @@ | |||||||
| { | { | ||||||
|     "KPackageStructure": "Plasma/Applet", |  | ||||||
|     "KPlugin": { |     "KPlugin": { | ||||||
|         "Authors": [ |         "Authors": [ | ||||||
|             { |             { | ||||||
| @ -19,8 +18,12 @@ | |||||||
|         "Id": "org.kde.plasma.awesomewidget", |         "Id": "org.kde.plasma.awesomewidget", | ||||||
|         "License": "GPLv3", |         "License": "GPLv3", | ||||||
|         "Name": "Awesome Widget", |         "Name": "Awesome Widget", | ||||||
|  |         "ServiceTypes": [ | ||||||
|  |             "Plasma/Applet" | ||||||
|  |         ], | ||||||
|         "Version": "@PROJECT_VERSION@", |         "Version": "@PROJECT_VERSION@", | ||||||
|         "Website": "https://arcanis.me/projects/awesome-widgets/" |         "Website": "https://arcanis.me/projects/awesome-widgets/" | ||||||
|     }, |     }, | ||||||
|     "X-Plasma-API-Minimum-Version": "6.0" |     "X-Plasma-API": "declarativeappletscript", | ||||||
|  |     "X-Plasma-MainScript": "ui/main.qml" | ||||||
| } | } | ||||||
|  | |||||||
| @ -15,7 +15,7 @@ | |||||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * |  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||||
|  ***************************************************************************/ |  ***************************************************************************/ | ||||||
|  |  | ||||||
| import QtQuick 2.15 | import QtQuick 2.0 | ||||||
|  |  | ||||||
| import org.kde.plasma.configuration 2.0 | import org.kde.plasma.configuration 2.0 | ||||||
|  |  | ||||||
|  | |||||||
| @ -7,150 +7,150 @@ | |||||||
|  |  | ||||||
|     <group name="Widget"> |     <group name="Widget"> | ||||||
|         <!--   widget --> |         <!--   widget --> | ||||||
|         <entry name="text" type="String"> |         <entry name="text" type="string"> | ||||||
|             <default>[cpu: $cpu%] [mem: $mem%] [swap: $swap%] [$netdev: $down/$upKB/s]</default> |             <default>[cpu: $cpu%] [mem: $mem%] [swap: $swap%] [$netdev: $down/$upKB/s]</default> | ||||||
|         </entry> |         </entry> | ||||||
|     </group> |     </group> | ||||||
|  |  | ||||||
|     <group name="Advanced"> |     <group name="Advanced"> | ||||||
|         <!--   advanced --> |         <!--   advanced --> | ||||||
|         <entry name="background" type="Bool"> |         <entry name="background" type="bool"> | ||||||
|             <default>true</default> |             <default>true</default> | ||||||
|         </entry> |         </entry> | ||||||
|         <entry name="translateStrings" type="Bool"> |         <entry name="translateStrings" type="bool"> | ||||||
|             <default>true</default> |             <default>true</default> | ||||||
|         </entry> |         </entry> | ||||||
|         <entry name="wrapNewLines" type="Bool"> |         <entry name="wrapNewLines" type="bool"> | ||||||
|             <default>false</default> |             <default>false</default> | ||||||
|         </entry> |         </entry> | ||||||
|         <entry name="wrapText" type="Bool"> |         <entry name="wrapText" type="bool"> | ||||||
|             <default>false</default> |             <default>false</default> | ||||||
|         </entry> |         </entry> | ||||||
|         <entry name="notify" type="Bool"> |         <entry name="notify" type="bool"> | ||||||
|             <default>true</default> |             <default>true</default> | ||||||
|         </entry> |         </entry> | ||||||
|         <entry name="checkUpdates" type="Bool"> |         <entry name="checkUpdates" type="bool"> | ||||||
|             <default>true</default> |             <default>true</default> | ||||||
|         </entry> |         </entry> | ||||||
|         <entry name="optimize" type="Bool"> |         <entry name="optimize" type="bool"> | ||||||
|             <default>true</default> |             <default>true</default> | ||||||
|         </entry> |         </entry> | ||||||
|         <entry name="height" type="Int"> |         <entry name="height" type="int"> | ||||||
|             <default>0</default> |             <default>0</default> | ||||||
|         </entry> |         </entry> | ||||||
|         <entry name="width" type="Int"> |         <entry name="width" type="int"> | ||||||
|             <default>0</default> |             <default>0</default> | ||||||
|         </entry> |         </entry> | ||||||
|         <entry name="interval" type="Int"> |         <entry name="interval" type="int"> | ||||||
|             <default>1000</default> |             <default>1000</default> | ||||||
|         </entry> |         </entry> | ||||||
|         <entry name="queueLimit" type="Int"> |         <entry name="queueLimit" type="int"> | ||||||
|             <default>0</default> |             <default>0</default> | ||||||
|         </entry> |         </entry> | ||||||
|         <entry name="tempUnits" type="String"> |         <entry name="tempUnits" type="string"> | ||||||
|             <default>Celsius</default> |             <default>Celsius</default> | ||||||
|         </entry> |         </entry> | ||||||
|         <entry name="customTime" type="String"> |         <entry name="customTime" type="string"> | ||||||
|             <default>$hh:$mm</default> |             <default>$hh:$mm</default> | ||||||
|         </entry> |         </entry> | ||||||
|         <entry name="customUptime" type="String"> |         <entry name="customUptime" type="string"> | ||||||
|             <default>$dd,$hh,$mm</default> |             <default>$dd,$hh,$mm</default> | ||||||
|         </entry> |         </entry> | ||||||
|         <entry name="acOnline" type="String"> |         <entry name="acOnline" type="string"> | ||||||
|             <default>(*)</default> |             <default>(*)</default> | ||||||
|         </entry> |         </entry> | ||||||
|         <entry name="acOffline" type="String"> |         <entry name="acOffline" type="string"> | ||||||
|             <default>( )</default> |             <default>( )</default> | ||||||
|         </entry> |         </entry> | ||||||
|         <entry name="telemetryCount" type="Int"> |         <entry name="telemetryCount" type="int"> | ||||||
|             <default>100</default> |             <default>100</default> | ||||||
|         </entry> |         </entry> | ||||||
|         <entry name="telemetryRemote" type="Bool"> |         <entry name="telemetryRemote" type="bool"> | ||||||
|             <default>false</default> |             <default>false</default> | ||||||
|         </entry> |         </entry> | ||||||
|         <entry name="telemetryId" type="String"> |         <entry name="telemetryId" type="string"> | ||||||
|             <default></default> |             <default></default> | ||||||
|         </entry> |         </entry> | ||||||
|     </group> |     </group> | ||||||
|  |  | ||||||
|     <group name="Tooltip"> |     <group name="Tooltip"> | ||||||
|         <entry name="tooltipNumber" type="Int"> |         <entry name="tooltipNumber" type="int"> | ||||||
|             <default>100</default> |             <default>100</default> | ||||||
|         </entry> |         </entry> | ||||||
|         <entry name="useTooltipBackground" type="Bool"> |         <entry name="useTooltipBackground" type="bool"> | ||||||
|             <default>true</default> |             <default>true</default> | ||||||
|         </entry> |         </entry> | ||||||
|         <entry name="tooltipBackground" type="String"> |         <entry name="tooltipBackground" type="string"> | ||||||
|             <default>#ffffff</default> |             <default>#ffffff</default> | ||||||
|         </entry> |         </entry> | ||||||
|         <entry name="cpuTooltip" type="Bool"> |         <entry name="cpuTooltip" type="bool"> | ||||||
|             <default>true</default> |             <default>true</default> | ||||||
|         </entry> |         </entry> | ||||||
|         <entry name="cpuTooltipColor" type="String"> |         <entry name="cpuTooltipColor" type="string"> | ||||||
|             <default>#ff0000</default> |             <default>#ff0000</default> | ||||||
|         </entry> |         </entry> | ||||||
|         <entry name="cpuclTooltip" type="Bool"> |         <entry name="cpuclTooltip" type="bool"> | ||||||
|             <default>true</default> |             <default>true</default> | ||||||
|         </entry> |         </entry> | ||||||
|         <entry name="cpuclTooltipColor" type="String"> |         <entry name="cpuclTooltipColor" type="string"> | ||||||
|             <default>#00ff00</default> |             <default>#00ff00</default> | ||||||
|         </entry> |         </entry> | ||||||
|         <entry name="memTooltip" type="Bool"> |         <entry name="memTooltip" type="bool"> | ||||||
|             <default>true</default> |             <default>true</default> | ||||||
|         </entry> |         </entry> | ||||||
|         <entry name="memTooltipColor" type="String"> |         <entry name="memTooltipColor" type="string"> | ||||||
|             <default>#0000ff</default> |             <default>#0000ff</default> | ||||||
|         </entry> |         </entry> | ||||||
|         <entry name="swapTooltip" type="Bool"> |         <entry name="swapTooltip" type="bool"> | ||||||
|             <default>true</default> |             <default>true</default> | ||||||
|         </entry> |         </entry> | ||||||
|         <entry name="swapTooltipColor" type="String"> |         <entry name="swapTooltipColor" type="string"> | ||||||
|             <default>#ffff00</default> |             <default>#ffff00</default> | ||||||
|         </entry> |         </entry> | ||||||
|         <entry name="downkbTooltip" type="Bool"> |         <entry name="downkbTooltip" type="bool"> | ||||||
|             <default>true</default> |             <default>true</default> | ||||||
|         </entry> |         </entry> | ||||||
|         <entry name="downkbTooltipColor" type="String"> |         <entry name="downkbTooltipColor" type="string"> | ||||||
|             <default>#00ffff</default> |             <default>#00ffff</default> | ||||||
|         </entry> |         </entry> | ||||||
|         <entry name="upkbTooltipColor" type="String"> |         <entry name="upkbTooltipColor" type="string"> | ||||||
|             <default>#ff00ff</default> |             <default>#ff00ff</default> | ||||||
|         </entry> |         </entry> | ||||||
|         <entry name="batTooltip" type="Bool"> |         <entry name="batTooltip" type="bool"> | ||||||
|             <default>true</default> |             <default>true</default> | ||||||
|         </entry> |         </entry> | ||||||
|         <entry name="batTooltipColor" type="String"> |         <entry name="batTooltipColor" type="string"> | ||||||
|             <default>#008800</default> |             <default>#008800</default> | ||||||
|         </entry> |         </entry> | ||||||
|         <entry name="batInTooltipColor" type="String"> |         <entry name="batInTooltipColor" type="string"> | ||||||
|             <default>#880000</default> |             <default>#880000</default> | ||||||
|         </entry> |         </entry> | ||||||
|     </group> |     </group> | ||||||
|  |  | ||||||
|     <group name="Appearance"> |     <group name="Appearance"> | ||||||
|         <!--   appearance --> |         <!--   appearance --> | ||||||
|         <entry name="textAlign" type="String"> |         <entry name="textAlign" type="string"> | ||||||
|             <default>center</default> |             <default>center</default> | ||||||
|         </entry> |         </entry> | ||||||
|         <entry name="fontFamily" type="String"> |         <entry name="fontFamily" type="string"> | ||||||
|             <default>Terminus</default> |             <default>Terminus</default> | ||||||
|         </entry> |         </entry> | ||||||
|         <entry name="fontSize" type="Int"> |         <entry name="fontSize" type="int"> | ||||||
|             <default>12</default> |             <default>12</default> | ||||||
|         </entry> |         </entry> | ||||||
|         <entry name="fontColor" type="String"> |         <entry name="fontColor" type="string"> | ||||||
|             <default>#000000</default> |             <default>#000000</default> | ||||||
|         </entry> |         </entry> | ||||||
|         <entry name="fontWeight" type="String"> |         <entry name="fontWeight" type="string"> | ||||||
|             <default>normal</default> |             <default>normal</default> | ||||||
|         </entry> |         </entry> | ||||||
|         <entry name="fontStyle" type="String"> |         <entry name="fontStyle" type="string"> | ||||||
|             <default>normal</default> |             <default>normal</default> | ||||||
|         </entry> |         </entry> | ||||||
|         <entry name="textStyle" type="String"> |         <entry name="textStyle" type="string"> | ||||||
|             <default>normal</default> |             <default>normal</default> | ||||||
|         </entry> |         </entry> | ||||||
|         <entry name="textStyleColor" type="String"> |         <entry name="textStyleColor" type="string"> | ||||||
|             <default>#000000</default> |             <default>#000000</default> | ||||||
|         </entry> |         </entry> | ||||||
|     </group> |     </group> | ||||||
|  | |||||||
| @ -15,21 +15,28 @@ | |||||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * |  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||||
|  ***************************************************************************/ |  ***************************************************************************/ | ||||||
|  |  | ||||||
| import QtQuick 2.15 | import QtQuick 2.0 | ||||||
| import org.kde.kcmutils as KCM |  | ||||||
|  |  | ||||||
| import org.kde.plasma.private.awesomewidget 1.0 | import org.kde.plasma.private.awesomewidget 1.0 | ||||||
|  |  | ||||||
|  |  | ||||||
| KCM.SimpleKCM { | Item { | ||||||
|     id: aboutPage |     id: aboutPage | ||||||
|  |  | ||||||
|     // backend |     // backend | ||||||
|     AWActions { |     AWActions { | ||||||
|         id: awActions |         id: awActions | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     width: childrenRect.width | ||||||
|  |     height: childrenRect.height | ||||||
|  |  | ||||||
|  |     property bool debug: awActions.isDebugEnabled() | ||||||
|  |  | ||||||
|     AboutTab { |     AboutTab { | ||||||
|         textProvider: awActions |         textProvider: awActions | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     Component.onCompleted: { | ||||||
|  |         if (debug) console.debug() | ||||||
|  |     } | ||||||
| } | } | ||||||
|  | |||||||
| @ -15,21 +15,26 @@ | |||||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * |  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||||
|  ***************************************************************************/ |  ***************************************************************************/ | ||||||
|  |  | ||||||
| import QtQuick 2.15 | import QtQuick 2.0 | ||||||
| import QtQuick.Controls | import QtQuick.Controls 1.3 as QtControls | ||||||
| import org.kde.kcmutils as KCM |  | ||||||
|  |  | ||||||
| import org.kde.plasma.private.awesomewidget 1.0 | import org.kde.plasma.private.awesomewidget 1.0 | ||||||
|  |  | ||||||
|  |  | ||||||
| KCM.SimpleKCM { | Item { | ||||||
|     id: advancedPage |     id: advancedPage | ||||||
|  |  | ||||||
|     // backend |     // backend | ||||||
|     AWActions { |     AWActions { | ||||||
|         id: 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_background: background.checked | ||||||
|     property alias cfg_translateStrings: translate.checked |     property alias cfg_translateStrings: translate.checked | ||||||
|     property alias cfg_wrapNewLines: wrapNewLines.checked |     property alias cfg_wrapNewLines: wrapNewLines.checked | ||||||
| @ -50,6 +55,7 @@ KCM.SimpleKCM { | |||||||
|     property alias cfg_telemetryRemote: telemetryRemote.checked |     property alias cfg_telemetryRemote: telemetryRemote.checked | ||||||
|     property alias cfg_telemetryId: telemetryId.value |     property alias cfg_telemetryId: telemetryId.value | ||||||
|  |  | ||||||
|  |  | ||||||
|     Column { |     Column { | ||||||
|         id: pageColumn |         id: pageColumn | ||||||
|         anchors.fill: parent |         anchors.fill: parent | ||||||
| @ -129,37 +135,37 @@ KCM.SimpleKCM { | |||||||
|             id: tempUnits |             id: tempUnits | ||||||
|             model: [ |             model: [ | ||||||
|                 { |                 { | ||||||
|                     "label": i18n("Celsius"), |                     'label': i18n("Celsius"), | ||||||
|                     "name": "Celsius" |                     'name': "Celsius" | ||||||
|                 }, |                 }, | ||||||
|                 { |                 { | ||||||
|                     "label": i18n("Fahrenheit"), |                     'label': i18n("Fahrenheit"), | ||||||
|                     "name": "Fahrenheit" |                     'name': "Fahrenheit" | ||||||
|                 }, |                 }, | ||||||
|                 { |                 { | ||||||
|                     "label": i18n("Kelvin"), |                     'label': i18n("Kelvin"), | ||||||
|                     "name": "Kelvin" |                     'name': "Kelvin" | ||||||
|                 }, |                 }, | ||||||
|                 { |                 { | ||||||
|                     "label": i18n("Reaumur"), |                     'label': i18n("Reaumur"), | ||||||
|                     "name": "Reaumur" |                     'name': "Reaumur" | ||||||
|                 }, |                 }, | ||||||
|                 { |                 { | ||||||
|                     "label": i18n("cm^-1"), |                     'label': i18n("cm^-1"), | ||||||
|                     "name": "cm^-1" |                     'name': "cm^-1" | ||||||
|                 }, |                 }, | ||||||
|                 { |                 { | ||||||
|                     "label": i18n("kJ/mol"), |                     'label': i18n("kJ/mol"), | ||||||
|                     "name": "kJ/mol" |                     'name': "kJ/mol" | ||||||
|                 }, |                 }, | ||||||
|                 { |                 { | ||||||
|                     "label": i18n("kcal/mol"), |                     'label': i18n("kcal/mol"), | ||||||
|                     "name": "kcal/mol" |                     'name': "kcal/mol" | ||||||
|                 } |                 } | ||||||
|             ] |             ] | ||||||
|             text: i18n("Temperature units") |             text: i18n("Temperature units") | ||||||
|             value: plasmoid.configuration.tempUnits |             value: plasmoid.configuration.tempUnits | ||||||
|             onValueEdited: newValue => cfg_tempUnits = newValue |             onValueEdited: cfg_tempUnits = newValue | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         LineSelector { |         LineSelector { | ||||||
| @ -186,20 +192,18 @@ KCM.SimpleKCM { | |||||||
|             value: plasmoid.configuration.acOffline |             value: plasmoid.configuration.acOffline | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         GroupBox { |         QtControls.GroupBox { | ||||||
|             width: parent.width |  | ||||||
|             height: implicitHeight |             height: implicitHeight | ||||||
|  |             width: parent.width | ||||||
|             title: i18n("Actions") |             title: i18n("Actions") | ||||||
|  |  | ||||||
|             Column { |             Column { | ||||||
|                 height: implicitHeight |                 height: implicitHeight | ||||||
|                 width: parent.width |                 width: parent.width | ||||||
|  |  | ||||||
|                 ButtonSelector { |                 ButtonSelector { | ||||||
|                     value: i18n("Drop key cache") |                     value: i18n("Drop key cache") | ||||||
|                     onButtonActivated: awActions.dropCache() |                     onButtonActivated: awActions.dropCache() | ||||||
|                 } |                 } | ||||||
|  |  | ||||||
|                 ButtonSelector { |                 ButtonSelector { | ||||||
|                     ExportDialog { |                     ExportDialog { | ||||||
|                         id: saveConfigAs |                         id: saveConfigAs | ||||||
| @ -208,12 +212,11 @@ KCM.SimpleKCM { | |||||||
|                     value: i18n("Export configuration") |                     value: i18n("Export configuration") | ||||||
|                     onButtonActivated: saveConfigAs.open() |                     onButtonActivated: saveConfigAs.open() | ||||||
|                 } |                 } | ||||||
|  |  | ||||||
|                 ButtonSelector { |                 ButtonSelector { | ||||||
|                     ImportDialog { |                     ImportDialog { | ||||||
|                         id: loadConfigFrom |                         id: loadConfigFrom | ||||||
|                         onConfigurationReceived: { |                         onConfigurationReceived: { | ||||||
|                             for (const key in configuration) |                             for (var key in configuration) | ||||||
|                                 plasmoid.configuration[key] = configuration[key] |                                 plasmoid.configuration[key] = configuration[key] | ||||||
|                         } |                         } | ||||||
|                     } |                     } | ||||||
| @ -223,7 +226,7 @@ KCM.SimpleKCM { | |||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         GroupBox { |         QtControls.GroupBox { | ||||||
|             height: implicitHeight |             height: implicitHeight | ||||||
|             width: parent.width |             width: parent.width | ||||||
|             title: i18n("Telemetry") |             title: i18n("Telemetry") | ||||||
| @ -231,12 +234,10 @@ KCM.SimpleKCM { | |||||||
|             Column { |             Column { | ||||||
|                 height: implicitHeight |                 height: implicitHeight | ||||||
|                 width: parent.width |                 width: parent.width | ||||||
|  |  | ||||||
|                 CheckBoxSelector { |                 CheckBoxSelector { | ||||||
|                     id: telemetryRemote |                     id: telemetryRemote | ||||||
|                     text: i18n("Enable remote telemetry") |                     text: i18n("Enable remote telemetry") | ||||||
|                 } |                 } | ||||||
|  |  | ||||||
|                 IntegerSelector { |                 IntegerSelector { | ||||||
|                     id: telemetryCount |                     id: telemetryCount | ||||||
|                     maximumValue: 10000 |                     maximumValue: 10000 | ||||||
| @ -245,7 +246,6 @@ KCM.SimpleKCM { | |||||||
|                     text: i18n("History count") |                     text: i18n("History count") | ||||||
|                     value: plasmoid.configuration.telemetryCount |                     value: plasmoid.configuration.telemetryCount | ||||||
|                 } |                 } | ||||||
|  |  | ||||||
|                 LineSelector { |                 LineSelector { | ||||||
|                     id: telemetryId |                     id: telemetryId | ||||||
|                     text: i18n("Telemetry ID") |                     text: i18n("Telemetry ID") | ||||||
| @ -254,4 +254,9 @@ KCM.SimpleKCM { | |||||||
|             } |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |     Component.onCompleted: { | ||||||
|  |         if (debug) console.debug() | ||||||
|  |     } | ||||||
| } | } | ||||||
|  | |||||||
| @ -15,22 +15,31 @@ | |||||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * |  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||||
|  ***************************************************************************/ |  ***************************************************************************/ | ||||||
|  |  | ||||||
| import QtQuick 2.15 | import QtQuick 2.0 | ||||||
| import org.kde.kcmutils as KCM |  | ||||||
|  |  | ||||||
| import org.kde.plasma.private.awesomewidget 1.0 | import org.kde.plasma.private.awesomewidget 1.0 | ||||||
| import "." | import "." | ||||||
|  |  | ||||||
|  |  | ||||||
| KCM.SimpleKCM { | Item { | ||||||
|     id: appearancePage |     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: { |     property variant weight: { | ||||||
|         25: 0, |         25: 0, | ||||||
|         50: 1, |         50: 1, | ||||||
|         63: 3, |         63: 3, | ||||||
|         75: 4, |         75: 4, | ||||||
|         87: 5, |         87: 5 | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     property alias cfg_fontFamily: font.value |     property alias cfg_fontFamily: font.value | ||||||
| @ -41,6 +50,7 @@ KCM.SimpleKCM { | |||||||
|     property alias cfg_textStyleColor: selectStyleColor.value |     property alias cfg_textStyleColor: selectStyleColor.value | ||||||
|     property string cfg_textStyle: textStyle.value |     property string cfg_textStyle: textStyle.value | ||||||
|  |  | ||||||
|  |  | ||||||
|     Column { |     Column { | ||||||
|         id: pageColumn |         id: pageColumn | ||||||
|         anchors.fill: parent |         anchors.fill: parent | ||||||
| @ -65,7 +75,7 @@ KCM.SimpleKCM { | |||||||
|             model: General.fontWeightModel |             model: General.fontWeightModel | ||||||
|             text: i18n("Font weight") |             text: i18n("Font weight") | ||||||
|             value: plasmoid.configuration.fontWeight |             value: plasmoid.configuration.fontWeight | ||||||
|             onValueEdited: newValue => cfg_fontWeight = newValue |             onValueEdited: cfg_fontWeight = newValue | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         ComboBoxSelector { |         ComboBoxSelector { | ||||||
| @ -73,7 +83,7 @@ KCM.SimpleKCM { | |||||||
|             model: General.fontStyleModel |             model: General.fontStyleModel | ||||||
|             text: i18n("Font style") |             text: i18n("Font style") | ||||||
|             value: plasmoid.configuration.fontStyle |             value: plasmoid.configuration.fontStyle | ||||||
|             onValueEdited: newValue => cfg_fontStyle = newValue |             onValueEdited: cfg_fontStyle = newValue | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         ColorSelector { |         ColorSelector { | ||||||
| @ -87,7 +97,7 @@ KCM.SimpleKCM { | |||||||
|             model: General.textStyleModel |             model: General.textStyleModel | ||||||
|             text: i18n("Style") |             text: i18n("Style") | ||||||
|             value: plasmoid.configuration.textStyle |             value: plasmoid.configuration.textStyle | ||||||
|             onValueEdited: newValue => cfg_textStyle = newValue |             onValueEdited: cfg_textStyle = newValue | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         ColorSelector { |         ColorSelector { | ||||||
| @ -96,4 +106,9 @@ KCM.SimpleKCM { | |||||||
|             value: plasmoid.configuration.textStyleColor |             value: plasmoid.configuration.textStyleColor | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |     Component.onCompleted: { | ||||||
|  |         if (debug) console.debug() | ||||||
|  |     } | ||||||
| } | } | ||||||
|  | |||||||
| @ -15,46 +15,105 @@ | |||||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * |  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||||
|  ***************************************************************************/ |  ***************************************************************************/ | ||||||
|  |  | ||||||
| import QtQuick 2.15 | import QtQuick 2.0 | ||||||
| import QtQuick.Controls | import QtQuick.Controls 1.3 as QtControls | ||||||
| import org.kde.kcmutils as KCM | import QtQuick.Dialogs 1.1 as QtDialogs | ||||||
|  |  | ||||||
| import org.kde.plasma.private.awesomewidget 1.0 | import org.kde.plasma.private.awesomewidget 1.0 | ||||||
|  |  | ||||||
|  |  | ||||||
| KCM.SimpleKCM { | Item { | ||||||
|     id: dataenginePage |     id: dataenginePage | ||||||
|  |  | ||||||
|     // backend |     // backend | ||||||
|     AWKeys { |     AWKeys { | ||||||
|         id: awKeys |         id: awKeys | ||||||
|     } |     } | ||||||
|  |     AWActions { | ||||||
|  |         id: awActions | ||||||
|  |     } | ||||||
|     AWConfigHelper { |     AWConfigHelper { | ||||||
|         id: awConfig |         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() |     property variant cfg_dataengine: awConfig.readDataEngineConfiguration() | ||||||
|  |  | ||||||
|  |  | ||||||
|     Column { |     Column { | ||||||
|         id: pageColumn |         id: pageColumn | ||||||
|         anchors.fill: parent |         anchors.fill: parent | ||||||
|  |         QtControls.GroupBox { | ||||||
|         GroupBox { |  | ||||||
|             height: implicitHeight |             height: implicitHeight | ||||||
|             width: parent.width |             width: parent.width | ||||||
|             title: i18n("ACPI") |             title: i18n("ACPI") | ||||||
|             LineSelector { |             LineSelector { | ||||||
|                 text: i18n("ACPI path") |                 text: i18n("ACPI path") | ||||||
|                 value: cfg_dataengine["ACPIPATH"] |                 value: cfg_dataengine["ACPIPATH"] | ||||||
|                 onValueEdited: newValue => cfg_dataengine["ACPIPATH"] = newValue |                 onValueEdited: cfg_dataengine["ACPIPATH"] = newValue | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         GroupBox { |         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 { | ||||||
|             height: implicitHeight |             height: implicitHeight | ||||||
|             width: parent.width |             width: parent.width | ||||||
|             title: i18n("Player") |             title: i18n("Player") | ||||||
|  |  | ||||||
|             Column { |             Column { | ||||||
|                 height: implicitHeight |                 height: implicitHeight | ||||||
|                 width: parent.width |                 width: parent.width | ||||||
| @ -64,27 +123,27 @@ KCM.SimpleKCM { | |||||||
|                     stepSize: 1 |                     stepSize: 1 | ||||||
|                     text: i18n("Player data symbols") |                     text: i18n("Player data symbols") | ||||||
|                     value: cfg_dataengine["PLAYERSYMBOLS"] |                     value: cfg_dataengine["PLAYERSYMBOLS"] | ||||||
|                     onValueEdited: newValue => cfg_dataengine["PLAYERSYMBOLS"] = newValue |                     onValueEdited: cfg_dataengine["PLAYERSYMBOLS"] = newValue | ||||||
|                 } |                 } | ||||||
|  |  | ||||||
|                 ComboBoxSelector { |                 ComboBoxSelector { | ||||||
|                     model: [ |                     model: [ | ||||||
|                         { |                         { | ||||||
|                             "label": "disable", |                             'label': "disable", | ||||||
|                             "name": "disable" |                             'name': "disable" | ||||||
|                         }, |                         }, | ||||||
|                         { |                         { | ||||||
|                             "label": "mpris", |                             'label': "mpris", | ||||||
|                             "name": "mpris" |                             'name': "mpris" | ||||||
|                         }, |                         }, | ||||||
|                         { |                         { | ||||||
|                             "label": "mpd", |                             'label': "mpd", | ||||||
|                             "name": "mpd" |                             'name': "mpd" | ||||||
|                         } |                         } | ||||||
|                     ] |                     ] | ||||||
|                     text: i18n("Music player") |                     text: i18n("Music player") | ||||||
|                     value: cfg_dataengine["PLAYER"] |                     value: cfg_dataengine["PLAYER"] | ||||||
|                     onValueEdited: newValue => cfg_dataengine["PLAYER"] = newValue |                     onValueEdited: cfg_dataengine["PLAYER"] = newValue | ||||||
|                 } |                 } | ||||||
|  |  | ||||||
|                 ComboBoxSelector { |                 ComboBoxSelector { | ||||||
| @ -92,40 +151,40 @@ KCM.SimpleKCM { | |||||||
|                     editable: true |                     editable: true | ||||||
|                     model: [ |                     model: [ | ||||||
|                         { |                         { | ||||||
|                             "label": "auto", |                             'label': 'auto', | ||||||
|                             "name": "auto" |                             'name': 'auto' | ||||||
|                         }, |                         }, | ||||||
|                         { |                         { | ||||||
|                             "label": "amarok", |                             'label': 'amarok', | ||||||
|                             "name": "amarok" |                             'name': 'amarok' | ||||||
|                         }, |                         }, | ||||||
|                         { |                         { | ||||||
|                             "label": "audacious", |                             'label': 'audacious', | ||||||
|                             "name": "audacious" |                             'name': 'audacious' | ||||||
|                         }, |                         }, | ||||||
|                         { |                         { | ||||||
|                             "label": "clementine", |                             'label': 'clementine', | ||||||
|                             "name": "clementine" |                             'name': 'clementine' | ||||||
|                         }, |                         }, | ||||||
|                         { |                         { | ||||||
|                             "label": "DeaDBeeF", |                             'label': 'DeaDBeeF', | ||||||
|                             "name": "DeaDBeeF" |                             'name': 'DeaDBeeF' | ||||||
|                         }, |                         }, | ||||||
|                         { |                         { | ||||||
|                             "label": "vlc", |                             'label': 'vlc', | ||||||
|                             "name": "vlc" |                             'name': 'vlc' | ||||||
|                         }, |                         }, | ||||||
|                         { |                         { | ||||||
|                             "label": "qmmp", |                             'label': 'qmmp', | ||||||
|                             "name": "qmmp" |                             'name': 'qmmp' | ||||||
|                         }, |                         }, | ||||||
|                         { |                         { | ||||||
|                             "label": "xmms2", |                             'label': 'xmms2', | ||||||
|                             "name": "xmms2" |                             'name': 'xmms2' | ||||||
|                         }, |                         }, | ||||||
|                         { |                         { | ||||||
|                             "label": cfg_dataengine["MPRIS"], |                             'label': cfg_dataengine["MPRIS"], | ||||||
|                             "name": cfg_dataengine["MPRIS"] |                             'name': cfg_dataengine["MPRIS"] | ||||||
|                         } |                         } | ||||||
|                     ] |                     ] | ||||||
|                     text: i18n("MPRIS player name") |                     text: i18n("MPRIS player name") | ||||||
| @ -135,7 +194,7 @@ KCM.SimpleKCM { | |||||||
|                 LineSelector { |                 LineSelector { | ||||||
|                     text: i18n("MPD address") |                     text: i18n("MPD address") | ||||||
|                     value: cfg_dataengine["MPDADDRESS"] |                     value: cfg_dataengine["MPDADDRESS"] | ||||||
|                     onValueEdited: newValue => cfg_dataengine["MPDADDRESS"] = newValue |                     onValueEdited: cfg_dataengine["MPDADDRESS"] = newValue | ||||||
|                 } |                 } | ||||||
|  |  | ||||||
|                 IntegerSelector { |                 IntegerSelector { | ||||||
| @ -144,20 +203,18 @@ KCM.SimpleKCM { | |||||||
|                     stepSize: 1 |                     stepSize: 1 | ||||||
|                     text: i18n("MPD port") |                     text: i18n("MPD port") | ||||||
|                     value: cfg_dataengine["MPDPORT"] |                     value: cfg_dataengine["MPDPORT"] | ||||||
|                     onValueEdited: newValue => cfg_dataengine["MPDPORT"] = newValue |                     onValueEdited: cfg_dataengine["MPDPORT"] = newValue | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         GroupBox { |         QtControls.GroupBox { | ||||||
|             height: implicitHeight |             height: implicitHeight | ||||||
|             width: parent.width |             width: parent.width | ||||||
|             title: i18n("Extensions") |             title: i18n("Extensions") | ||||||
|  |  | ||||||
|             Column { |             Column { | ||||||
|                 height: implicitHeight |                 height: implicitHeight | ||||||
|                 width: parent.width |                 width: parent.width | ||||||
|  |  | ||||||
|                 ButtonSelector { |                 ButtonSelector { | ||||||
|                     value: i18n("Custom scripts") |                     value: i18n("Custom scripts") | ||||||
|                     onButtonActivated: awKeys.editItem("extscript") |                     onButtonActivated: awKeys.editItem("extscript") | ||||||
| @ -188,6 +245,8 @@ KCM.SimpleKCM { | |||||||
|  |  | ||||||
|  |  | ||||||
|     Component.onCompleted: { |     Component.onCompleted: { | ||||||
|  |         if (debug) console.debug() | ||||||
|  |  | ||||||
|         // init submodule |         // init submodule | ||||||
|         awKeys.updateCache() |         awKeys.updateCache() | ||||||
|  |  | ||||||
| @ -197,6 +256,8 @@ KCM.SimpleKCM { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     Component.onDestruction: { |     Component.onDestruction: { | ||||||
|  |         if (debug) console.debug() | ||||||
|  |  | ||||||
|         cfg_dataengine["MPRIS"] = mpris.editText |         cfg_dataengine["MPRIS"] = mpris.editText | ||||||
|         awConfig.writeDataEngineConfiguration(cfg_dataengine) |         awConfig.writeDataEngineConfiguration(cfg_dataengine) | ||||||
|     } |     } | ||||||
|  | |||||||
| @ -15,20 +15,20 @@ | |||||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * |  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||||
|  ***************************************************************************/ |  ***************************************************************************/ | ||||||
|  |  | ||||||
| import QtQuick 2.15 | import QtQuick 2.4 | ||||||
| import QtQuick.Controls | import QtQuick.Controls 1.3 as QtControls | ||||||
| import QtQuick.Dialogs | import QtQuick.Dialogs 1.2 as QtDialogs | ||||||
| import QtQuick.Layouts | import QtQuick.Layouts 1.1 | ||||||
| import org.kde.plasma.core as PlasmaCore |  | ||||||
| import org.kde.plasma.plasmoid 2.0 | 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 org.kde.plasma.private.awesomewidget 1.0 | ||||||
| import "." | import "." | ||||||
|  |  | ||||||
|  |  | ||||||
| PlasmoidItem { | Item { | ||||||
|     id: main |     id: main | ||||||
|  |  | ||||||
|     // backend |     // backend | ||||||
|     AWKeys { |     AWKeys { | ||||||
|         id: awKeys |         id: awKeys | ||||||
| @ -43,6 +43,7 @@ PlasmoidItem { | |||||||
|         id: bugReport |         id: bugReport | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     property bool debug: awActions.isDebugEnabled() | ||||||
|     property variant tooltipSettings: { |     property variant tooltipSettings: { | ||||||
|         "tooltipNumber": plasmoid.configuration.tooltipNumber, |         "tooltipNumber": plasmoid.configuration.tooltipNumber, | ||||||
|         "useTooltipBackground": plasmoid.configuration.useTooltipBackground, |         "useTooltipBackground": plasmoid.configuration.useTooltipBackground, | ||||||
| @ -72,12 +73,19 @@ PlasmoidItem { | |||||||
|     signal needToolTipUpdate(string newText) |     signal needToolTipUpdate(string newText) | ||||||
|     signal sizeUpdate |     signal sizeUpdate | ||||||
|  |  | ||||||
|     Layout.fillWidth: PlasmoidItem.formFactor !== PlasmaCore.Planar |  | ||||||
|     Layout.fillHeight: PlasmoidItem.formFactor !== PlasmaCore.Planar |     // init | ||||||
|  |     Plasmoid.preferredRepresentation: Plasmoid.fullRepresentation | ||||||
|  |     Plasmoid.compactRepresentation: Plasmoid.fullRepresentation | ||||||
|  |  | ||||||
|  |     Layout.fillWidth: plasmoid.formFactor != PlasmaCore.Planar | ||||||
|  |     Layout.fillHeight: plasmoid.formFactor != PlasmaCore.Planar | ||||||
|     Layout.alignment: Qt.AlignVCenter | Qt.AlignHCenter |     Layout.alignment: Qt.AlignVCenter | Qt.AlignHCenter | ||||||
|  |  | ||||||
|     Plasmoid.icon: "utilities-system-monitor" |     Plasmoid.icon: "utilities-system-monitor" | ||||||
|     Plasmoid.backgroundHints: plasmoid.configuration.background ? "DefaultBackground" : "NoBackground" |     Plasmoid.backgroundHints: plasmoid.configuration.background ? "DefaultBackground" : "NoBackground" | ||||||
|  |     Plasmoid.associatedApplication: "ksysguard" | ||||||
|  |  | ||||||
|  |  | ||||||
|     // ui |     // ui | ||||||
|     Text { |     Text { | ||||||
| @ -92,7 +100,7 @@ PlasmoidItem { | |||||||
|  |  | ||||||
|         color: plasmoid.configuration.fontColor |         color: plasmoid.configuration.fontColor | ||||||
|         font.family: plasmoid.configuration.fontFamily |         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.pointSize: plasmoid.configuration.fontSize | ||||||
|         font.weight: General.fontWeight[plasmoid.configuration.fontWeight] |         font.weight: General.fontWeight[plasmoid.configuration.fontWeight] | ||||||
|  |  | ||||||
| @ -111,19 +119,19 @@ PlasmoidItem { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     Dialog { |     QtDialogs.Dialog { | ||||||
|         id: tagSelector |         id: tagSelector | ||||||
|         title: i18n("Select tag") |         title: i18n("Select tag") | ||||||
|  |  | ||||||
|         ComboBox { |         QtControls.ComboBox { | ||||||
|             id: tagSelectorBox |             id: tagSelectorBox | ||||||
|             width: parent.width |             width: parent.width | ||||||
|             editable: true |             editable: true | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         onAccepted: { |         onAccepted: { | ||||||
|             const tag = tagSelectorBox.editText |             var tag = tagSelectorBox.editText | ||||||
|             let message = i18n("Tag: %1", tag) |             var message = i18n("Tag: %1", tag) | ||||||
|             message += "<br>" |             message += "<br>" | ||||||
|             message += i18n("Value: %1", awKeys.valueByKey(tag)) |             message += i18n("Value: %1", awKeys.valueByKey(tag)) | ||||||
|             message += "<br>" |             message += "<br>" | ||||||
| @ -132,37 +140,17 @@ PlasmoidItem { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     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: { |     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 |         // init submodule | ||||||
|         Plasmoid.userConfiguringChanged(false) |         Plasmoid.userConfiguringChanged(false) | ||||||
|         // connect data |         // connect data | ||||||
| @ -172,26 +160,32 @@ PlasmoidItem { | |||||||
|         if (plasmoid.configuration.checkUpdates) return awActions.checkUpdates(false) |         if (plasmoid.configuration.checkUpdates) return awActions.checkUpdates(false) | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     onNeedTextUpdate: newText => { |     onNeedTextUpdate: { | ||||||
|  |         if (debug) console.debug() | ||||||
|  |  | ||||||
|         text.text = newText |         text.text = newText | ||||||
|         sizeUpdate() |         sizeUpdate() | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     onNeedToolTipUpdate: newText => { |     onNeedToolTipUpdate: { | ||||||
|  |         if (debug) console.debug() | ||||||
|  |  | ||||||
|         tooltip.text = newText |         tooltip.text = newText | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     onSizeUpdate: { |     onSizeUpdate: { | ||||||
|  |         if (debug) console.debug() | ||||||
|         // 16 is a magic number |         // 16 is a magic number | ||||||
|         // in other case plasmoid will increase own size on each update |         // 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.minimumHeight = text.contentHeight - 16 | ||||||
|             Layout.maximumHeight = -1 |             Layout.maximumHeight = -1 | ||||||
|         } else { |         } else { | ||||||
|             Layout.minimumHeight = plasmoid.configuration.height |             Layout.minimumHeight = plasmoid.configuration.height | ||||||
|             Layout.maximumHeight = plasmoid.configuration.height |             Layout.maximumHeight = plasmoid.configuration.height | ||||||
|         } |         } | ||||||
|         if (plasmoid.configuration.width === 0) { |         if (plasmoid.configuration.width == 0) { | ||||||
|             Layout.minimumWidth = text.contentWidth - 16 |             Layout.minimumWidth = text.contentWidth - 16 | ||||||
|             Layout.maximumWidth = -1 |             Layout.maximumWidth = -1 | ||||||
|         } else { |         } else { | ||||||
| @ -202,6 +196,7 @@ PlasmoidItem { | |||||||
|  |  | ||||||
|     Plasmoid.onUserConfiguringChanged: { |     Plasmoid.onUserConfiguringChanged: { | ||||||
|         if (plasmoid.userConfiguring) return |         if (plasmoid.userConfiguring) return | ||||||
|  |         if (debug) console.debug() | ||||||
|  |  | ||||||
|         // init submodule |         // init submodule | ||||||
|         awKeys.initDataAggregator(tooltipSettings) |         awKeys.initDataAggregator(tooltipSettings) | ||||||
| @ -216,7 +211,7 @@ PlasmoidItem { | |||||||
|         awKeys.setAggregatorProperty("tempUnits", plasmoid.configuration.tempUnits) |         awKeys.setAggregatorProperty("tempUnits", plasmoid.configuration.tempUnits) | ||||||
|         awKeys.setAggregatorProperty("translate", plasmoid.configuration.translateStrings) |         awKeys.setAggregatorProperty("translate", plasmoid.configuration.translateStrings) | ||||||
|         // update telemetry ID |         // update telemetry ID | ||||||
|         if (plasmoid.configuration.telemetryId.length === 0) |         if (plasmoid.configuration.telemetryId.length == 0) | ||||||
|             plasmoid.configuration.telemetryId = generateUuid() |             plasmoid.configuration.telemetryId = generateUuid() | ||||||
|         // save telemetry |         // save telemetry | ||||||
|         awTelemetryHandler.init(plasmoid.configuration.telemetryCount, |         awTelemetryHandler.init(plasmoid.configuration.telemetryCount, | ||||||
| @ -226,10 +221,37 @@ PlasmoidItem { | |||||||
|             awTelemetryHandler.uploadTelemetry("awwidgetconfig", plasmoid.configuration.text) |             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 |     // code from http://stackoverflow.com/questions/105034/create-guid-uuid-in-javascript | ||||||
|     function generateUuid() { |     function generateUuid() { | ||||||
|         return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(c) { |         return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { | ||||||
|             let r = Math.random() * 16 | 0, v = c === "x" ? r : (r & 0x3 | 0x8); |             var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8); | ||||||
|             return v.toString(16); |             return v.toString(16); | ||||||
|         }); |         }); | ||||||
|     } |     } | ||||||
|  | |||||||
| @ -3,25 +3,25 @@ | |||||||
|  |  | ||||||
|  |  | ||||||
| # common QML constants | # common QML constants | ||||||
| singleton General 1.0 file:///usr/share/awesomewidgets/qml/General.qml | singleton General 1.0 file:///usr//awesomewidgets/qml/General.qml | ||||||
|  |  | ||||||
| # custom QML UI classes | # custom QML UI classes | ||||||
| AboutTab file:///usr/share/awesomewidgets/qml/AboutTab.qml | AboutTab file:///usr//awesomewidgets/qml/AboutTab.qml | ||||||
| AWExtensions file:///usr/share/awesomewidgets/qml/AWExtensions.qml | AWExtensions file:///usr//awesomewidgets/qml/AWExtensions.qml | ||||||
| AWInfoLabel file:///usr/share/awesomewidgets/qml/AWInfoLabel.qml | AWInfoLabel file:///usr//awesomewidgets/qml/AWInfoLabel.qml | ||||||
| AWTagSelector file:///usr/share/awesomewidgets/qml/AWTagSelector.qml | AWTagSelector file:///usr//awesomewidgets/qml/AWTagSelector.qml | ||||||
| AWTextEditor file:///usr/share/awesomewidgets/qml/AWTextEditor.qml | AWTextEditor file:///usr//awesomewidgets/qml/AWTextEditor.qml | ||||||
| BugReport file:///usr/share/awesomewidgets/qml/BugReport.qml | BugReport file:///usr//awesomewidgets/qml/BugReport.qml | ||||||
| ButtonSelector file:///usr/share/awesomewidgets/qml/ButtonSelector.qml | ButtonSelector file:///usr//awesomewidgets/qml/ButtonSelector.qml | ||||||
| CheckBoxSelector file:///usr/share/awesomewidgets/qml/CheckBoxSelector.qml | CheckBoxSelector file:///usr//awesomewidgets/qml/CheckBoxSelector.qml | ||||||
| ColorSelector file:///usr/share/awesomewidgets/qml/ColorSelector.qml | ColorSelector file:///usr//awesomewidgets/qml/ColorSelector.qml | ||||||
| ComboBoxSelector file:///usr/share/awesomewidgets/qml/ComboBoxSelector.qml | ComboBoxSelector file:///usr//awesomewidgets/qml/ComboBoxSelector.qml | ||||||
| ExportDialog file:///usr/share/awesomewidgets/qml/ExportDialog.qml | ExportDialog file:///usr//awesomewidgets/qml/ExportDialog.qml | ||||||
| FontSelector file:///usr/share/awesomewidgets/qml/FontSelector.qml | FontSelector file:///usr//awesomewidgets/qml/FontSelector.qml | ||||||
| HtmlDefaultFunctionsBar file:///usr/share/awesomewidgets/qml/HtmlDefaultFunctionsBar.qml | HtmlDefaultFunctionsBar file:///usr//awesomewidgets/qml/HtmlDefaultFunctionsBar.qml | ||||||
| HtmlEditorButton file:///usr/share/awesomewidgets/qml/HtmlEditorButton.qml | HtmlEditorButton file:///usr//awesomewidgets/qml/HtmlEditorButton.qml | ||||||
| HtmlEditorColor file:///usr/share/awesomewidgets/qml/HtmlEditorColor.qml | HtmlEditorColor file:///usr//awesomewidgets/qml/HtmlEditorColor.qml | ||||||
| HtmlEditorFont file:///usr/share/awesomewidgets/qml/HtmlEditorFont.qml | HtmlEditorFont file:///usr//awesomewidgets/qml/HtmlEditorFont.qml | ||||||
| ImportDialog file:///usr/share/awesomewidgets/qml/ImportDialog.qml | ImportDialog file:///usr//awesomewidgets/qml/ImportDialog.qml | ||||||
| IntegerSelector file:///usr/share/awesomewidgets/qml/IntegerSelector.qml | IntegerSelector file:///usr//awesomewidgets/qml/IntegerSelector.qml | ||||||
| LineSelector file:///usr/share/awesomewidgets/qml/LineSelector.qml | LineSelector file:///usr//awesomewidgets/qml/LineSelector.qml | ||||||
|  | |||||||
| @ -15,15 +15,25 @@ | |||||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * |  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||||
|  ***************************************************************************/ |  ***************************************************************************/ | ||||||
|  |  | ||||||
| import QtQuick 2.15 | import QtQuick 2.0 | ||||||
| import QtQuick.Controls | import QtQuick.Controls 1.3 as QtControls | ||||||
| import org.kde.kcmutils as KCM |  | ||||||
|  |  | ||||||
| import org.kde.plasma.private.awesomewidget 1.0 | import org.kde.plasma.private.awesomewidget 1.0 | ||||||
|  |  | ||||||
|  |  | ||||||
| KCM.SimpleKCM { | Item { | ||||||
|     id: tooltipPage |     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_tooltipNumber: tooltipNumber.value | ||||||
|     property alias cfg_useTooltipBackground: useTooltipBackground.checked |     property alias cfg_useTooltipBackground: useTooltipBackground.checked | ||||||
| @ -36,18 +46,18 @@ KCM.SimpleKCM { | |||||||
|     property alias cfg_memTooltipColor: memTooltipColor.value |     property alias cfg_memTooltipColor: memTooltipColor.value | ||||||
|     property alias cfg_swapTooltip: swapTooltip.checked |     property alias cfg_swapTooltip: swapTooltip.checked | ||||||
|     property alias cfg_swapTooltipColor: swapTooltipColor.value |     property alias cfg_swapTooltipColor: swapTooltipColor.value | ||||||
|     property alias cfg_downkbTooltip: networkTooltip.checked |     property alias cfg_downkbTooltip: downkbTooltip.checked | ||||||
|     property alias cfg_downkbTooltipColor: downkbTooltipColor.value |     property alias cfg_downkbTooltipColor: downkbTooltipColor.value | ||||||
|     property alias cfg_upkbTooltipColor: upkbTooltipColor.value |     property alias cfg_upkbTooltipColor: upkbTooltipColor.value | ||||||
|     property alias cfg_batTooltip: batTooltip.checked |     property alias cfg_batTooltip: batTooltip.checked | ||||||
|     property alias cfg_batTooltipColor: batTooltipColor.value |     property alias cfg_batTooltipColor: batTooltipColor.value | ||||||
|     property alias cfg_batInTooltipColor: batInTooltipColor.value |     property alias cfg_batInTooltipColor: batInTooltipColor.value | ||||||
|  |  | ||||||
|  |  | ||||||
|     Column { |     Column { | ||||||
|         id: pageColumn |         id: pageColumn | ||||||
|         anchors.fill: parent |         anchors.fill: parent | ||||||
|  |         QtControls.Label { | ||||||
|         Label { |  | ||||||
|           width: parent.width |           width: parent.width | ||||||
|           horizontalAlignment: Text.AlignHCenter |           horizontalAlignment: Text.AlignHCenter | ||||||
|           verticalAlignment: Text.AlignVCenter |           verticalAlignment: Text.AlignVCenter | ||||||
| @ -64,116 +74,85 @@ KCM.SimpleKCM { | |||||||
|             value: plasmoid.configuration.tooltipNumber |             value: plasmoid.configuration.tooltipNumber | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         GroupBox { |         QtControls.GroupBox { | ||||||
|             id: useTooltipBackground |             id: useTooltipBackground | ||||||
|  |             height: implicitHeight | ||||||
|             width: parent.width |             width: parent.width | ||||||
|  |             checkable: true | ||||||
|             property alias checked: useTooltipBackgroundLabel.checked |             title: i18n("Background") | ||||||
|             label: CheckBox { |  | ||||||
|                 id: useTooltipBackgroundLabel |  | ||||||
|                 text: i18n("Background") |  | ||||||
|             } |  | ||||||
|  |  | ||||||
|             ColorSelector { |             ColorSelector { | ||||||
|                 id: tooltipBackground |                 id: tooltipBackground | ||||||
|                 enabled: useTooltipBackgroundLabel.checked |  | ||||||
|                 text: i18n("Background color") |                 text: i18n("Background color") | ||||||
|                 value: plasmoid.configuration.tooltipBackground |                 value: plasmoid.configuration.tooltipBackground | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         GroupBox { |         QtControls.GroupBox { | ||||||
|             id: cpuTooltip |             id: cpuTooltip | ||||||
|  |             height: implicitHeight | ||||||
|             width: parent.width |             width: parent.width | ||||||
|  |             checkable: true | ||||||
|             property alias checked: cpuTooltipLabel.checked |             title: i18n("CPU") | ||||||
|             label: CheckBox { |  | ||||||
|                 id: cpuTooltipLabel |  | ||||||
|                 text: i18n("CPU") |  | ||||||
|             } |  | ||||||
|  |  | ||||||
|             ColorSelector { |             ColorSelector { | ||||||
|                 id: cpuTooltipColor |                 id: cpuTooltipColor | ||||||
|                 enabled: cpuTooltipLabel.checked |  | ||||||
|                 text: i18n("CPU color") |                 text: i18n("CPU color") | ||||||
|                 value: plasmoid.configuration.cpuTooltipColor |                 value: plasmoid.configuration.cpuTooltipColor | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         GroupBox { |         QtControls.GroupBox { | ||||||
|             id: cpuclTooltip |             id: cpuclTooltip | ||||||
|  |             height: implicitHeight | ||||||
|             width: parent.width |             width: parent.width | ||||||
|  |             checkable: true | ||||||
|             property alias checked: cpuclTooltipLabel.checked |             title: i18n("CPU clock") | ||||||
|             label: CheckBox { |  | ||||||
|                 id: cpuclTooltipLabel |  | ||||||
|                 text: i18n("CPU clock") |  | ||||||
|             } |  | ||||||
|  |  | ||||||
|             ColorSelector { |             ColorSelector { | ||||||
|                 id: cpuclTooltipColor |                 id: cpuclTooltipColor | ||||||
|                 enabled: cpuclTooltipLabel.checked |  | ||||||
|                 text: i18n("CPU clock color") |                 text: i18n("CPU clock color") | ||||||
|                 value: plasmoid.configuration.cpuclTooltipColor |                 value: plasmoid.configuration.cpuclTooltipColor | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         GroupBox { |         QtControls.GroupBox { | ||||||
|             id: memTooltip |             id: memTooltip | ||||||
|  |             height: implicitHeight | ||||||
|             width: parent.width |             width: parent.width | ||||||
|  |             checkable: true | ||||||
|             property alias checked: memTooltipLabel.checked |             title: i18n("Memory") | ||||||
|             label: CheckBox { |  | ||||||
|                 id: memTooltipLabel |  | ||||||
|                 text: i18n("Memory") |  | ||||||
|             } |  | ||||||
|  |  | ||||||
|             ColorSelector { |             ColorSelector { | ||||||
|                 id: memTooltipColor |                 id: memTooltipColor | ||||||
|                 enabled: memTooltipLabel.checked |  | ||||||
|                 text: i18n("Memory color") |                 text: i18n("Memory color") | ||||||
|                 value: plasmoid.configuration.memTooltipColor |                 value: plasmoid.configuration.memTooltipColor | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         GroupBox { |         QtControls.GroupBox { | ||||||
|             id: swapTooltip |             id: swapTooltip | ||||||
|  |             height: implicitHeight | ||||||
|             width: parent.width |             width: parent.width | ||||||
|  |             checkable: true | ||||||
|             property alias checked: swapTooltipLabel.checked |             title: i18n("Swap") | ||||||
|             label: CheckBox { |  | ||||||
|                 id: swapTooltipLabel |  | ||||||
|                 text: i18n("Swap") |  | ||||||
|             } |  | ||||||
|  |  | ||||||
|             ColorSelector { |             ColorSelector { | ||||||
|                 id: swapTooltipColor |                 id: swapTooltipColor | ||||||
|                 enabled: swapTooltipLabel.checked |  | ||||||
|                 text: i18n("Swap color") |                 text: i18n("Swap color") | ||||||
|                 value: plasmoid.configuration.swapTooltipColor |                 value: plasmoid.configuration.swapTooltipColor | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         GroupBox { |         QtControls.GroupBox { | ||||||
|             id: networkTooltip |             id: downkbTooltip | ||||||
|  |             height: implicitHeight | ||||||
|             width: parent.width |             width: parent.width | ||||||
|  |             checkable: true | ||||||
|             property alias checked: networkTooltipLabel.checked |             title: i18n("Network") | ||||||
|             label: CheckBox { |  | ||||||
|                 id: networkTooltipLabel |  | ||||||
|                 text: i18n("Network") |  | ||||||
|             } |  | ||||||
|  |  | ||||||
|             Column { |             Column { | ||||||
|  |                 height: implicitHeight | ||||||
|                 width: parent.width |                 width: parent.width | ||||||
|                 enabled: networkTooltipLabel.checked |  | ||||||
|  |  | ||||||
|                 ColorSelector { |                 ColorSelector { | ||||||
|                     id: downkbTooltipColor |                     id: downkbTooltipColor | ||||||
|                     text: i18n("Download speed color") |                     text: i18n("Download speed color") | ||||||
|                     value: plasmoid.configuration.downkbTooltipColor |                     value: plasmoid.configuration.downkbTooltipColor | ||||||
|                 } |                 } | ||||||
|  |  | ||||||
|                 ColorSelector { |                 ColorSelector { | ||||||
|                     id: upkbTooltipColor |                     id: upkbTooltipColor | ||||||
|                     text: i18n("Upload speed color") |                     text: i18n("Upload speed color") | ||||||
| @ -182,26 +161,20 @@ KCM.SimpleKCM { | |||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         GroupBox { |         QtControls.GroupBox { | ||||||
|             id: batTooltip |             id: batTooltip | ||||||
|  |             height: implicitHeight | ||||||
|             width: parent.width |             width: parent.width | ||||||
|  |             checkable: true | ||||||
|             property alias checked: batteryTooltipLabel.checked |             title: i18n("Battery") | ||||||
|             label: CheckBox { |  | ||||||
|                 id: batteryTooltipLabel |  | ||||||
|                 text: i18n("Battery") |  | ||||||
|             } |  | ||||||
|  |  | ||||||
|             Column { |             Column { | ||||||
|  |                 height: implicitHeight | ||||||
|                 width: parent.width |                 width: parent.width | ||||||
|                 enabled: batteryTooltipLabel.checked |  | ||||||
|  |  | ||||||
|                 ColorSelector { |                 ColorSelector { | ||||||
|                     id: batTooltipColor |                     id: batTooltipColor | ||||||
|                     text: i18n("Battery active color") |                     text: i18n("Battery active color") | ||||||
|                     value: plasmoid.configuration.batTooltipColor |                     value: plasmoid.configuration.batTooltipColor | ||||||
|                 } |                 } | ||||||
|  |  | ||||||
|                 ColorSelector { |                 ColorSelector { | ||||||
|                     id: batInTooltipColor |                     id: batInTooltipColor | ||||||
|                     text: i18n("Battery inactive color") |                     text: i18n("Battery inactive color") | ||||||
| @ -210,4 +183,9 @@ KCM.SimpleKCM { | |||||||
|             } |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |     Component.onCompleted: { | ||||||
|  |         if (debug) console.debug() | ||||||
|  |     } | ||||||
| } | } | ||||||
|  | |||||||
| @ -15,17 +15,14 @@ | |||||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * |  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||||
|  ***************************************************************************/ |  ***************************************************************************/ | ||||||
|  |  | ||||||
| import QtQuick 2.15 | import QtQuick 2.2 | ||||||
| import QtQuick.Controls |  | ||||||
| import org.kde.kcmutils as KCM |  | ||||||
|  |  | ||||||
| import org.kde.plasma.private.awesomewidget 1.0 | import org.kde.plasma.private.awesomewidget 1.0 | ||||||
| import "." | import "." | ||||||
|  |  | ||||||
|  |  | ||||||
| KCM.SimpleKCM { | Item { | ||||||
|     id: widgetPage |     id: widgetPage | ||||||
|  |  | ||||||
|     // backend |     // backend | ||||||
|     AWKeys { |     AWKeys { | ||||||
|         id: awKeys |         id: awKeys | ||||||
| @ -34,11 +31,19 @@ KCM.SimpleKCM { | |||||||
|         id: awActions |         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 alias cfg_text: textPattern.text | ||||||
|     property bool lock: true |     property bool lock: true | ||||||
|  |  | ||||||
|     signal needTextUpdate(string newText) |     signal needTextUpdate(string newText) | ||||||
|  |  | ||||||
|  |  | ||||||
|     Column { |     Column { | ||||||
|         id: pageColumn |         id: pageColumn | ||||||
|         anchors.fill: parent |         anchors.fill: parent | ||||||
| @ -69,7 +74,10 @@ KCM.SimpleKCM { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |  | ||||||
|     Component.onCompleted: { |     Component.onCompleted: { | ||||||
|  |         if (debug) console.debug() | ||||||
|  |  | ||||||
|         awKeys.needTextToBeUpdated.connect(needTextUpdate) |         awKeys.needTextToBeUpdated.connect(needTextUpdate) | ||||||
|         // init submodule |         // init submodule | ||||||
|         awKeys.initKeys(plasmoid.configuration.text, plasmoid.configuration.interval, |         awKeys.initKeys(plasmoid.configuration.text, plasmoid.configuration.interval, | ||||||
| @ -82,8 +90,9 @@ KCM.SimpleKCM { | |||||||
|         awKeys.setAggregatorProperty("translate", plasmoid.configuration.translateStrings) |         awKeys.setAggregatorProperty("translate", plasmoid.configuration.translateStrings) | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     onNeedTextUpdate: newText => { |     onNeedTextUpdate: { | ||||||
|         if (lock) return |         if (lock) return | ||||||
|  |         if (debug) console.debug() | ||||||
|  |  | ||||||
|         extensions.showMessage(newText) |         extensions.showMessage(newText) | ||||||
|         lock = true |         lock = true | ||||||
|  | |||||||
							
								
								
									
										26
									
								
								sources/awesome-widget/package/metadata.desktop
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								sources/awesome-widget/package/metadata.desktop
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,26 @@ | |||||||
|  | [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 | ||||||
| @ -1,26 +0,0 @@ | |||||||
| { |  | ||||||
|     "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" |  | ||||||
| } |  | ||||||
| @ -18,6 +18,6 @@ qt6_wrap_ui(SUBPROJECT_UI_HEADER ${SUBPROJECT_UI}) | |||||||
| add_library(${PLUGIN_NAME} SHARED ${SUBPROJECT_SOURCE} ${SUBPROJECT_UI_HEADER}) | add_library(${PLUGIN_NAME} SHARED ${SUBPROJECT_SOURCE} ${SUBPROJECT_UI_HEADER}) | ||||||
| target_link_libraries(${PLUGIN_NAME} ${PROJECT_LIBRARY} ${Qt_LIBRARIES} ${Kf6_LIBRARIES}) | target_link_libraries(${PLUGIN_NAME} ${PROJECT_LIBRARY} ${Qt_LIBRARIES} ${Kf6_LIBRARIES}) | ||||||
|  |  | ||||||
| install(TARGETS ${PLUGIN_NAME} DESTINATION ${KDE_INSTALL_QMLDIR}/org/kde/plasma/private/awesomewidget) | install(TARGETS ${PLUGIN_NAME} DESTINATION ${QML_INSTALL_DIR}/org/kde/plasma/private/awesomewidget) | ||||||
| install(FILES qmldir DESTINATION ${KDE_INSTALL_QMLDIR}/org/kde/plasma/private/awesomewidget) | install(FILES qmldir DESTINATION ${QML_INSTALL_DIR}/org/kde/plasma/private/awesomewidget) | ||||||
| install(FILES ${SUBPROJECT_NOTIFY} DESTINATION ${KDE_INSTALL_KNOTIFYRCDIR}) | install(FILES ${SUBPROJECT_NOTIFY} DESTINATION ${KDE_INSTALL_KNOTIFYRCDIR}) | ||||||
|  | |||||||
| @ -71,6 +71,13 @@ 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) | bool AWActions::runCmd(const QString &_cmd, const QStringList &_args) | ||||||
| { | { | ||||||
|     qCDebug(LOG_AW) << "Cmd" << _cmd << "args" << _args; |     qCDebug(LOG_AW) << "Cmd" << _cmd << "args" << _args; | ||||||
|  | |||||||
| @ -34,6 +34,7 @@ public: | |||||||
|     ~AWActions() override; |     ~AWActions() override; | ||||||
|     Q_INVOKABLE void checkUpdates(bool _showAnyway = false); |     Q_INVOKABLE void checkUpdates(bool _showAnyway = false); | ||||||
|     Q_INVOKABLE static QString getFileContent(const QString &_path); |     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 bool runCmd(const QString &_cmd, const QStringList &_args); | ||||||
|     Q_INVOKABLE static void showLegacyInfo(); |     Q_INVOKABLE static void showLegacyInfo(); | ||||||
|     Q_INVOKABLE static void showReadme(); |     Q_INVOKABLE static void showReadme(); | ||||||
|  | |||||||
| @ -21,6 +21,7 @@ | |||||||
| #include <QQmlPropertyMap> | #include <QQmlPropertyMap> | ||||||
| #include <QSettings> | #include <QSettings> | ||||||
| #include <QStandardPaths> | #include <QStandardPaths> | ||||||
|  | #include <QTextCodec> | ||||||
|  |  | ||||||
| #include "awdebug.h" | #include "awdebug.h" | ||||||
|  |  | ||||||
| @ -170,6 +171,9 @@ QVariantMap AWConfigHelper::readDataEngineConfiguration() | |||||||
|  |  | ||||||
|     settings.beginGroup("Configuration"); |     settings.beginGroup("Configuration"); | ||||||
|     configuration["ACPIPATH"] = settings.value("ACPIPATH", "/sys/class/power_supply/"); |     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["MPDADDRESS"] = settings.value("MPDADDRESS", "localhost"); | ||||||
|     configuration["MPDPORT"] = settings.value("MPDPORT", "6600"); |     configuration["MPDPORT"] = settings.value("MPDPORT", "6600"); | ||||||
|     configuration["MPRIS"] = settings.value("MPRIS", "auto"); |     configuration["MPRIS"] = settings.value("MPRIS", "auto"); | ||||||
| @ -194,6 +198,9 @@ bool AWConfigHelper::writeDataEngineConfiguration(const QVariantMap &_configurat | |||||||
|  |  | ||||||
|     settings.beginGroup("Configuration"); |     settings.beginGroup("Configuration"); | ||||||
|     settings.setValue("ACPIPATH", _configuration["ACPIPATH"]); |     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("MPDADDRESS", _configuration["MPDADDRESS"]); | ||||||
|     settings.setValue("MPDPORT", _configuration["MPDPORT"]); |     settings.setValue("MPDPORT", _configuration["MPDPORT"]); | ||||||
|     settings.setValue("MPRIS", _configuration["MPRIS"]); |     settings.setValue("MPRIS", _configuration["MPRIS"]); | ||||||
| @ -278,6 +285,7 @@ void AWConfigHelper::writeFile(QSettings &_settings, const QString &_key, const | |||||||
|     QFile file(_fileName); |     QFile file(_fileName); | ||||||
|     if (file.open(QIODevice::WriteOnly | QIODevice::Text)) { |     if (file.open(QIODevice::WriteOnly | QIODevice::Text)) { | ||||||
|         QTextStream out(&file); |         QTextStream out(&file); | ||||||
|  |         out.setCodec("UTF-8"); | ||||||
|         out << _settings.value(_key).toString().toUtf8(); |         out << _settings.value(_key).toString().toUtf8(); | ||||||
|         out.flush(); |         out.flush(); | ||||||
|         file.close(); |         file.close(); | ||||||
|  | |||||||
| @ -17,35 +17,30 @@ | |||||||
|  |  | ||||||
| #include "awdataengineaggregator.h" | #include "awdataengineaggregator.h" | ||||||
|  |  | ||||||
| #include <ksysguard/formatter/Unit.h> | #include <Plasma/DataContainer> | ||||||
| #include <ksysguard/systemstats/DBusInterface.h> |  | ||||||
|  |  | ||||||
| #include <QDBusConnection> |  | ||||||
|  |  | ||||||
| #include "awdebug.h" | #include "awdebug.h" | ||||||
|  |  | ||||||
|  |  | ||||||
| AWDataEngineAggregator::AWDataEngineAggregator(QObject *_parent) | AWDataEngineAggregator::AWDataEngineAggregator(QObject *_parent) | ||||||
|     : QObject(_parent) |     : QObject(_parent) | ||||||
|     , m_interface(new KSysGuard::SystemStats::DBusInterface()) |  | ||||||
| { | { | ||||||
|     qCDebug(LOG_AW) << __PRETTY_FUNCTION__; |     qCDebug(LOG_AW) << __PRETTY_FUNCTION__; | ||||||
|  |  | ||||||
|     qDBusRegisterMetaType<KSysGuard::SensorData>(); |     m_consumer = new Plasma::DataEngineConsumer(); | ||||||
|     qDBusRegisterMetaType<KSysGuard::SensorInfo>(); |     m_dataEngines["systemmonitor"] = m_consumer->dataEngine("systemmonitor"); | ||||||
|     qDBusRegisterMetaType<KSysGuard::SensorDataList>(); |     m_dataEngines["extsysmon"] = m_consumer->dataEngine("extsysmon"); | ||||||
|     qDBusRegisterMetaType<QHash<QString, KSysGuard::SensorInfo>>(); |     m_dataEngines["time"] = m_consumer->dataEngine("time"); | ||||||
|  |  | ||||||
|     connect(m_interface, &KSysGuard::SystemStats::DBusInterface::newSensorData, this, |     // additional method required by systemmonitor structure | ||||||
|             &AWDataEngineAggregator::updateData); |     m_newSourceConnection | ||||||
|     connect(m_interface, &KSysGuard::SystemStats::DBusInterface::sensorMetaDataChanged, this, |         = connect(m_dataEngines["systemmonitor"], &Plasma::DataEngine::sourceAdded, [this](const QString &source) { | ||||||
|             &AWDataEngineAggregator::updateSensors); |               emit(deviceAdded(source)); | ||||||
|     connect(m_interface, &KSysGuard::SystemStats::DBusInterface::sensorAdded, this, |               m_dataEngines["systemmonitor"]->connectSource(source, parent(), 1000); | ||||||
|             &AWDataEngineAggregator::sensorAdded); |           }); | ||||||
|     connect(m_interface, &KSysGuard::SystemStats::DBusInterface::sensorRemoved, this, |  | ||||||
|             &AWDataEngineAggregator::sensorRemoved); |  | ||||||
|  |  | ||||||
|     loadSources(); |     // required to define Qt::QueuedConnection for signal-slot connection | ||||||
|  |     qRegisterMetaType<Plasma::DataEngine::Data>("Plasma::DataEngine::Data"); | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| @ -54,102 +49,67 @@ AWDataEngineAggregator::~AWDataEngineAggregator() | |||||||
|     qCDebug(LOG_AW) << __PRETTY_FUNCTION__; |     qCDebug(LOG_AW) << __PRETTY_FUNCTION__; | ||||||
|  |  | ||||||
|     disconnectSources(); |     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() | void AWDataEngineAggregator::disconnectSources() | ||||||
| { | { | ||||||
|     m_interface->unsubscribe(m_subscribed.values()).waitForFinished(); |     for (auto dataEngine : m_dataEngines.values()) | ||||||
|     m_subscribed.clear(); |         for (auto &source : dataEngine->sources()) | ||||||
|  |             dataEngine->disconnectSource(source, parent()); | ||||||
|  |     disconnect(m_newSourceConnection); | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| bool AWDataEngineAggregator::isValidSensor(const KSysGuard::SensorInfo &_sensor) | void AWDataEngineAggregator::reconnectSources(const int _interval) | ||||||
| { | { | ||||||
|     return _sensor.unit != KSysGuard::UnitInvalid; |     qCDebug(LOG_AW) << "Reconnect sources with interval" << _interval; | ||||||
| } |  | ||||||
|  |  | ||||||
|  |     disconnectSources(); | ||||||
|  |  | ||||||
| void AWDataEngineAggregator::loadSources() |     m_dataEngines["systemmonitor"]->connectAllSources(parent(), (uint)_interval); | ||||||
| { |     m_dataEngines["extsysmon"]->connectAllSources(parent(), (uint)_interval); | ||||||
|     auto response = m_interface->allSensors(); |     m_dataEngines["time"]->connectSource("Local", parent(), 1000); | ||||||
|     response.waitForFinished(); |  | ||||||
|  |  | ||||||
|     auto sensors = response.value(); |     m_newSourceConnection = connect( | ||||||
|     updateSensors(sensors); |         m_dataEngines["systemmonitor"], &Plasma::DataEngine::sourceAdded, [this, _interval](const QString &source) { | ||||||
|     connectSources(); |             emit(deviceAdded(source)); | ||||||
|  |             m_dataEngines["systemmonitor"]->connectSource(source, parent(), (uint)_interval); | ||||||
|  |         }); | ||||||
|  |  | ||||||
|     for (auto &sensor : m_sensors.keys()) | #ifdef BUILD_FUTURE | ||||||
|         emit(deviceAdded(sensor)); |     createQueuedConnection(); | ||||||
|  | #endif /* BUILD_FUTURE */ | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| void AWDataEngineAggregator::dropSource(const QString &_source) | void AWDataEngineAggregator::dropSource(const QString &_source) | ||||||
| { | { | ||||||
|     qCDebug(LOG_AW) << "Disconnect sensor" << _source; |     qCDebug(LOG_AW) << "Source" << _source; | ||||||
|  |  | ||||||
|     if (m_subscribed.contains(_source)) { |     // HACK there is no possibility to check to which dataengine source | ||||||
|         m_interface->unsubscribe({_source}).waitForFinished(); |     // connected we will try to disconnect it from all engines | ||||||
|         m_subscribed.remove(_source); |     for (auto dataEngine : m_dataEngines.values()) | ||||||
|     } |         dataEngine->disconnectSource(_source, parent()); | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| void AWDataEngineAggregator::sensorAdded(const QString &_sensor) | void AWDataEngineAggregator::createQueuedConnection() | ||||||
| { | { | ||||||
|     qCDebug(LOG_AW) << "New sensor added" << _sensor; |     // HACK additional method which forces QueuedConnection instead of Auto one | ||||||
|  |     // for more details refer to plasma-framework source code | ||||||
|     // check if sensor is actually valid |     for (auto &dataEngine : m_dataEngines.keys()) { | ||||||
|     auto response = m_interface->sensors({_sensor}); |         // different source set for different engines | ||||||
|     response.waitForFinished(); |         QStringList sources = dataEngine == "time" ? QStringList() << "Local" : m_dataEngines[dataEngine]->sources(); | ||||||
|  |         // reconnect sources | ||||||
|     auto info = response.value().value(_sensor); |         for (auto &source : sources) { | ||||||
|     if (!isValidSensor(info)) |             Plasma::DataContainer *container = m_dataEngines[dataEngine]->containerForSource(source); | ||||||
|         return; |             // disconnect old connections first | ||||||
|  |             disconnect(container, SIGNAL(dataUpdated(QString, Plasma::DataEngine::Data)), parent(), | ||||||
|     m_sensors[_sensor] = info; |                        SLOT(dataUpdated(QString, Plasma::DataEngine::Data))); | ||||||
|     dropSource(_sensor); // force reconnect |             // and now reconnect with Qt::QueuedConnection type | ||||||
|     if (!m_subscribed.contains(_sensor)) { |             connect(container, SIGNAL(dataUpdated(QString, Plasma::DataEngine::Data)), parent(), | ||||||
|         m_interface->subscribe({_sensor}).waitForFinished(); |                     SLOT(dataUpdated(QString, Plasma::DataEngine::Data)), Qt::QueuedConnection); | ||||||
|         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,20 +15,16 @@ | |||||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * |  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||||
|  ***************************************************************************/ |  ***************************************************************************/ | ||||||
|  |  | ||||||
| #pragma once |  | ||||||
|  |  | ||||||
| #include <ksysguard/systemstats/SensorInfo.h> | #ifndef AWDATAENGINEAGGREGATOR_H | ||||||
|  | #define AWDATAENGINEAGGREGATOR_H | ||||||
|  |  | ||||||
|  | #include <Plasma/DataEngine> | ||||||
|  | #include <Plasma/DataEngineConsumer> | ||||||
|  |  | ||||||
| #include <QHash> |  | ||||||
| #include <QObject> | #include <QObject> | ||||||
| #include <QSet> |  | ||||||
|  |  | ||||||
|  |  | ||||||
| namespace KSysGuard::SystemStats |  | ||||||
| { |  | ||||||
| class DBusInterface; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| class AWDataEngineAggregator : public QObject | class AWDataEngineAggregator : public QObject | ||||||
| { | { | ||||||
|     Q_OBJECT |     Q_OBJECT | ||||||
| @ -36,24 +32,21 @@ class AWDataEngineAggregator : public QObject | |||||||
| public: | public: | ||||||
|     explicit AWDataEngineAggregator(QObject *_parent = nullptr); |     explicit AWDataEngineAggregator(QObject *_parent = nullptr); | ||||||
|     ~AWDataEngineAggregator() override; |     ~AWDataEngineAggregator() override; | ||||||
|     void connectSources(); |  | ||||||
|     void disconnectSources(); |     void disconnectSources(); | ||||||
|     [[nodiscard]] static bool isValidSensor(const KSysGuard::SensorInfo &_sensor); |     void reconnectSources(int _interval); | ||||||
|     void loadSources(); |  | ||||||
|  |  | ||||||
| signals: | signals: | ||||||
|     void dataUpdated(const QHash<QString, KSysGuard::SensorInfo> &_sensors, const KSysGuard::SensorDataList &_data); |  | ||||||
|     void deviceAdded(const QString &_source); |     void deviceAdded(const QString &_source); | ||||||
|  |  | ||||||
| public slots: | public slots: | ||||||
|     void dropSource(const QString &_source); |     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: | private: | ||||||
|     KSysGuard::SystemStats::DBusInterface *m_interface = nullptr; |     void createQueuedConnection(); | ||||||
|     QHash<QString, KSysGuard::SensorInfo> m_sensors; |     Plasma::DataEngineConsumer *m_consumer = nullptr; | ||||||
|     QSet<QString> m_subscribed; |     QHash<QString, Plasma::DataEngine *> m_dataEngines; | ||||||
|  |     QMetaObject::Connection m_newSourceConnection; | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | #endif /* AWDATAENGINEAGGREGATOR_H */ | ||||||
|  | |||||||
| @ -17,7 +17,7 @@ | |||||||
|  |  | ||||||
| #include "awdataenginemapper.h" | #include "awdataenginemapper.h" | ||||||
|  |  | ||||||
| #include <QRegularExpression> | #include <QRegExp> | ||||||
|  |  | ||||||
| #include "awdebug.h" | #include "awdebug.h" | ||||||
| #include "awformatterhelper.h" | #include "awformatterhelper.h" | ||||||
| @ -76,80 +76,76 @@ QStringList AWDataEngineMapper::keysFromSource(const QString &_source) const | |||||||
|  |  | ||||||
| // HACK units required to define should the value be calculated as temperature | // HACK units required to define should the value be calculated as temperature | ||||||
| // or fan data | // or fan data | ||||||
| QStringList AWDataEngineMapper::registerSource(const QString &_source, const KSysGuard::Unit _units, | QStringList AWDataEngineMapper::registerSource(const QString &_source, const QString &_units, const QStringList &_keys) | ||||||
|                                                const QStringList &_keys) |  | ||||||
| { | { | ||||||
|     qCDebug(LOG_AW) << "Source" << _source << "with units" << _units; |     qCDebug(LOG_AW) << "Source" << _source << "with units" << _units; | ||||||
|  |  | ||||||
|     // regular expressions |     // regular expressions | ||||||
|     auto cpuRegExp = QRegularExpression("^cpu/cpu.*/usage$"); |     QRegExp cpuRegExp = QRegExp("cpu/cpu.*/TotalLoad"); | ||||||
|     auto cpuclRegExp = QRegularExpression("^cpu/cpu.*/frequency$"); |     QRegExp cpuclRegExp = QRegExp("cpu/cpu.*/clock"); | ||||||
|     auto cpuTempRegExp = QRegularExpression("^cpu/cpu.*/temperature$"); |     QRegExp hddrRegExp = QRegExp("disk/.*/Rate/rblk"); | ||||||
|     auto gpuRegExp = QRegularExpression("^gpu/gpu.*/usage$"); |     QRegExp hddwRegExp = QRegExp("disk/.*/Rate/wblk"); | ||||||
|     auto gpuTempRegExp = QRegularExpression("^gpu/gpu.*/temperature$"); |     QRegExp mountFillRegExp = QRegExp("partitions/.*/filllevel"); | ||||||
|     auto hddrRegExp = QRegularExpression("^disk/.*/read$"); |     QRegExp mountFreeRegExp = QRegExp("partitions/.*/freespace"); | ||||||
|     auto hddwRegExp = QRegularExpression("^disk/.*/write$"); |     QRegExp mountUsedRegExp = QRegExp("partitions/.*/usedspace"); | ||||||
|     auto mountFillRegExp = QRegularExpression("^disk/.*/usedPercent$"); |     QRegExp netRegExp = QRegExp("network/interfaces/.*/(receiver|transmitter)/data$"); | ||||||
|     auto mountFreeRegExp = QRegularExpression("^disk/.*/free$"); |     QRegExp netTotalRegExp = QRegExp("network/interfaces/.*/(receiver|transmitter)/dataTotal$"); | ||||||
|     auto mountUsedRegExp = QRegularExpression("^disk/.*/used$"); |  | ||||||
|     auto netRegExp = QRegularExpression("^network/.*/(download|upload)$"); |  | ||||||
|     auto netTotalRegExp = QRegularExpression("^network/.*/(totalDownload|totalUpload)$"); |  | ||||||
|  |  | ||||||
|     if (_source == "extsysmon/battery/ac") { |     if (_source == "battery/ac") { | ||||||
|         // AC |         // AC | ||||||
|         m_map.insert(_source, "ac"); |         m_map.insert(_source, "ac"); | ||||||
|         m_formatter["ac"] = AWKeysAggregator::FormatterType::ACFormat; |         m_formatter["ac"] = AWKeysAggregator::FormatterType::ACFormat; | ||||||
|     } else if (_source.startsWith("extsysmon/battery/")) { |     } else if (_source.startsWith("battery/")) { | ||||||
|         // battery stats |         // battery stats | ||||||
|         auto key = _source; |         QString key = _source; | ||||||
|         key.remove("extsysmon/battery/"); |         key.remove("battery/"); | ||||||
|         m_map.insert(_source, key); |         m_map.insert(_source, key); | ||||||
|         m_formatter[key] = _source.contains("rate") ? AWKeysAggregator::FormatterType::Float |         m_formatter[key] = _source.contains("rate") ? AWKeysAggregator::FormatterType::Float | ||||||
|                                                     : AWKeysAggregator::FormatterType::IntegerThree; |                                                     : AWKeysAggregator::FormatterType::IntegerThree; | ||||||
|     } else if (_source == "cpu/all/usage") { |     } else if (_source == "cpu/system/TotalLoad") { | ||||||
|         // cpu |         // cpu | ||||||
|         m_map.insert(_source, "cpu"); |         m_map.insert(_source, "cpu"); | ||||||
|         m_formatter["cpu"] = AWKeysAggregator::FormatterType::Float; |         m_formatter["cpu"] = AWKeysAggregator::FormatterType::Float; | ||||||
|     } else if (_source.contains(cpuRegExp)) { |     } else if (_source.contains(cpuRegExp)) { | ||||||
|         // cpus |         // cpus | ||||||
|         auto key = _source; |         QString key = _source; | ||||||
|         key.remove("cpu/").remove("/usage"); |         key.remove("cpu/").remove("/TotalLoad"); | ||||||
|         m_map.insert(_source, key); |         m_map.insert(_source, key); | ||||||
|         m_formatter[key] = AWKeysAggregator::FormatterType::Float; |         m_formatter[key] = AWKeysAggregator::FormatterType::Float; | ||||||
|     } else if (_source == "cpu/all/averageFrequency") { |     } else if (_source == "cpu/system/AverageClock") { | ||||||
|         // cpucl |         // cpucl | ||||||
|         m_map.insert(_source, "cpucl"); |         m_map.insert(_source, "cpucl"); | ||||||
|         m_formatter["cpucl"] = AWKeysAggregator::FormatterType::Integer; |         m_formatter["cpucl"] = AWKeysAggregator::FormatterType::Integer; | ||||||
|     } else if (_source.contains(cpuclRegExp)) { |     } else if (_source.contains(cpuclRegExp)) { | ||||||
|         // cpucls |         // cpucls | ||||||
|         auto key = _source; |         QString key = _source; | ||||||
|         key.remove("cpu/cpu").remove("/frequency"); |         key.remove("cpu/cpu").remove("/clock"); | ||||||
|         key = QString("cpucl%1").arg(key); |         key = QString("cpucl%1").arg(key); | ||||||
|         m_map.insert(_source, key); |         m_map.insert(_source, key); | ||||||
|         m_formatter[key] = AWKeysAggregator::FormatterType::Integer; |         m_formatter[key] = AWKeysAggregator::FormatterType::Integer; | ||||||
|     } else if (_source.startsWith("extsysmon/custom")) { |     } else if (_source.startsWith("custom")) { | ||||||
|         // custom |         // custom | ||||||
|         auto key = _source; |         QString key = _source; | ||||||
|         key.remove("extsysmon/custom/"); |         key.remove("custom/"); | ||||||
|         m_map.insert(_source, key); |         m_map.insert(_source, key); | ||||||
|         m_formatter[key] = AWKeysAggregator::FormatterType::NoFormat; |         m_formatter[key] = AWKeysAggregator::FormatterType::NoFormat; | ||||||
|     } else if (_source == "extsysmon/desktop/name") { |     } else if (_source == "desktop/current/name") { | ||||||
|         // current desktop name |         // current desktop name | ||||||
|         m_map.insert(_source, "desktop"); |         m_map.insert(_source, "desktop"); | ||||||
|         m_formatter["desktop"] = AWKeysAggregator::FormatterType::NoFormat; |         m_formatter["desktop"] = AWKeysAggregator::FormatterType::NoFormat; | ||||||
|     } else if (_source == "extsysmon/desktop/number") { |     } else if (_source == "desktop/current/number") { | ||||||
|         // current desktop number |         // current desktop number | ||||||
|         m_map.insert(_source, "ndesktop"); |         m_map.insert(_source, "ndesktop"); | ||||||
|         m_formatter["ndesktop"] = AWKeysAggregator::FormatterType::NoFormat; |         m_formatter["ndesktop"] = AWKeysAggregator::FormatterType::NoFormat; | ||||||
|     } else if (_source == "extsysmon/desktop/count") { |     } else if (_source == "desktop/total/number") { | ||||||
|         // desktop count |         // desktop count | ||||||
|         m_map.insert(_source, "tdesktops"); |         m_map.insert(_source, "tdesktops"); | ||||||
|         m_formatter["tdesktops"] = AWKeysAggregator::FormatterType::NoFormat; |         m_formatter["tdesktops"] = AWKeysAggregator::FormatterType::NoFormat; | ||||||
|     } else if (_source.contains(hddrRegExp)) { |     } else if (_source.contains(hddrRegExp)) { | ||||||
|         // read speed |         // read speed | ||||||
|         auto device = _source; |         QString device = _source; | ||||||
|         device.remove("disk/").remove("/read"); |         device.remove("/Rate/rblk"); | ||||||
|         auto index = m_devices["disk"].indexOf(device); |         int index = m_devices["disk"].indexOf(device); | ||||||
|         if (index > -1) { |         if (index > -1) { | ||||||
|             QString key = QString("hddr%1").arg(index); |             QString key = QString("hddr%1").arg(index); | ||||||
|             m_map.insert(_source, key); |             m_map.insert(_source, key); | ||||||
| @ -157,45 +153,29 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const KSy | |||||||
|         } |         } | ||||||
|     } else if (_source.contains(hddwRegExp)) { |     } else if (_source.contains(hddwRegExp)) { | ||||||
|         // write speed |         // write speed | ||||||
|         auto device = _source; |         QString device = _source; | ||||||
|         device.remove("disk/").remove("/write"); |         device.remove("/Rate/wblk"); | ||||||
|         auto index = m_devices["disk"].indexOf(device); |         int index = m_devices["disk"].indexOf(device); | ||||||
|         if (index > -1) { |         if (index > -1) { | ||||||
|             QString key = QString("hddw%1").arg(index); |             QString key = QString("hddw%1").arg(index); | ||||||
|             m_map.insert(_source, key); |             m_map.insert(_source, key); | ||||||
|             m_formatter[key] = AWKeysAggregator::FormatterType::Integer; |             m_formatter[key] = AWKeysAggregator::FormatterType::Integer; | ||||||
|         } |         } | ||||||
|     } else if (_source == "gpu/all/usage") { |     } else if (_source == "gpu/load") { | ||||||
|         // gpu load |         // gpu load | ||||||
|         m_map.insert(_source, "gpu"); |         m_map.insert(_source, "gpu"); | ||||||
|         m_formatter["gpu"] = AWKeysAggregator::FormatterType::Float; |         m_formatter["gpu"] = AWKeysAggregator::FormatterType::Float; | ||||||
|     } else if (_source.contains(gpuRegExp)) { |     } else if (_source == "gpu/temperature") { | ||||||
|         // gpus |         // gpu temperature | ||||||
|         auto device = _source; |         m_map.insert(_source, "gputemp"); | ||||||
|         device.remove("gpu/").remove("/usage"); |         m_formatter["gputemp"] = AWKeysAggregator::FormatterType::Temperature; | ||||||
|         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)) { |     } else if (_source.contains(mountFillRegExp)) { | ||||||
|         // fill level |         // fill level | ||||||
|         auto device = _source; |         QString device = _source; | ||||||
|         device.remove("disk/").remove("/usedPercent"); |         device.remove("partitions").remove("/filllevel"); | ||||||
|         auto index = m_devices["mount"].indexOf(device); |         int index = m_devices["mount"].indexOf(device); | ||||||
|         if (index > -1) { |         if (index > -1) { | ||||||
|             auto key = QString("hdd%1").arg(index); |             QString key = QString("hdd%1").arg(index); | ||||||
|             m_map.insert(_source, key); |             m_map.insert(_source, key); | ||||||
|             m_formatter[key] = AWKeysAggregator::FormatterType::Float; |             m_formatter[key] = AWKeysAggregator::FormatterType::Float; | ||||||
|             // additional keys |             // additional keys | ||||||
| @ -204,9 +184,9 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const KSy | |||||||
|         } |         } | ||||||
|     } else if (_source.contains(mountFreeRegExp)) { |     } else if (_source.contains(mountFreeRegExp)) { | ||||||
|         // free space |         // free space | ||||||
|         auto device = _source; |         QString device = _source; | ||||||
|         device.remove("disk/").remove("/free"); |         device.remove("partitions").remove("/freespace"); | ||||||
|         auto index = m_devices["mount"].indexOf(device); |         int index = m_devices["mount"].indexOf(device); | ||||||
|         if (index > -1) { |         if (index > -1) { | ||||||
|             // mb |             // mb | ||||||
|             QString key = QString("hddfreemb%1").arg(index); |             QString key = QString("hddfreemb%1").arg(index); | ||||||
| @ -219,9 +199,9 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const KSy | |||||||
|         } |         } | ||||||
|     } else if (_source.contains(mountUsedRegExp)) { |     } else if (_source.contains(mountUsedRegExp)) { | ||||||
|         // used |         // used | ||||||
|         auto device = _source; |         QString device = _source; | ||||||
|         device.remove("disk/").remove("/used"); |         device.remove("partitions").remove("/usedspace"); | ||||||
|         auto index = m_devices["mount"].indexOf(device); |         int index = m_devices["mount"].indexOf(device); | ||||||
|         if (index > -1) { |         if (index > -1) { | ||||||
|             // mb |             // mb | ||||||
|             QString key = QString("hddmb%1").arg(index); |             QString key = QString("hddmb%1").arg(index); | ||||||
| @ -232,14 +212,24 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const KSy | |||||||
|             m_map.insert(_source, key); |             m_map.insert(_source, key); | ||||||
|             m_formatter[key] = AWKeysAggregator::FormatterType::MemGBFormat; |             m_formatter[key] = AWKeysAggregator::FormatterType::MemGBFormat; | ||||||
|         } |         } | ||||||
|     } else if (_source.startsWith("cpu/loadaverages/loadaverage")) { |     } 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")) { | ||||||
|         // load average |         // load average | ||||||
|         auto time = _source; |         QString time = _source; | ||||||
|         time.remove("cpu/loadaverages/loadaverage"); |         time.remove("cpu/system/loadavg"); | ||||||
|         auto key = QString("la%1").arg(time); |         QString key = QString("la%1").arg(time); | ||||||
|         m_map.insert(_source, key); |         m_map.insert(_source, key); | ||||||
|         m_formatter[key] = AWKeysAggregator::FormatterType::FloatTwoSymbols; |         m_formatter[key] = AWKeysAggregator::FormatterType::FloatTwoSymbols; | ||||||
|     } else if (_source == "memory/physical/application") { |     } else if (_source == "mem/physical/application") { | ||||||
|         // app memory |         // app memory | ||||||
|         // mb |         // mb | ||||||
|         m_map.insert(_source, "memmb"); |         m_map.insert(_source, "memmb"); | ||||||
| @ -247,7 +237,7 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const KSy | |||||||
|         // gb |         // gb | ||||||
|         m_map.insert(_source, "memgb"); |         m_map.insert(_source, "memgb"); | ||||||
|         m_formatter["memgb"] = AWKeysAggregator::FormatterType::MemGBFormat; |         m_formatter["memgb"] = AWKeysAggregator::FormatterType::MemGBFormat; | ||||||
|     } else if (_source == "memory/physical/free") { |     } else if (_source == "mem/physical/free") { | ||||||
|         // free memory |         // free memory | ||||||
|         // mb |         // mb | ||||||
|         m_map.insert(_source, "memfreemb"); |         m_map.insert(_source, "memfreemb"); | ||||||
| @ -255,7 +245,7 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const KSy | |||||||
|         // gb |         // gb | ||||||
|         m_map.insert(_source, "memfreegb"); |         m_map.insert(_source, "memfreegb"); | ||||||
|         m_formatter["memfreegb"] = AWKeysAggregator::FormatterType::MemGBFormat; |         m_formatter["memfreegb"] = AWKeysAggregator::FormatterType::MemGBFormat; | ||||||
|     } else if (_source == "memory/physical/used") { |     } else if (_source == "mem/physical/used") { | ||||||
|         // used memory |         // used memory | ||||||
|         // mb |         // mb | ||||||
|         m_map.insert(_source, "memusedmb"); |         m_map.insert(_source, "memusedmb"); | ||||||
| @ -263,27 +253,27 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const KSy | |||||||
|         // gb |         // gb | ||||||
|         m_map.insert(_source, "memusedgb"); |         m_map.insert(_source, "memusedgb"); | ||||||
|         m_formatter["memusedgb"] = AWKeysAggregator::FormatterType::MemGBFormat; |         m_formatter["memusedgb"] = AWKeysAggregator::FormatterType::MemGBFormat; | ||||||
|     } else if (_source == "extsysmon/network/device") { |     } else if (_source == "network/current/name") { | ||||||
|         // network device |         // network device | ||||||
|         m_map.insert(_source, "netdev"); |         m_map.insert(_source, "netdev"); | ||||||
|         m_formatter["netdev"] = AWKeysAggregator::FormatterType::NoFormat; |         m_formatter["netdev"] = AWKeysAggregator::FormatterType::NoFormat; | ||||||
|     } else if (_source == "extsysmon/network/ssid") { |     } else if (_source == "network/current/ssid") { | ||||||
|         // current ssid |         // current ssid | ||||||
|         m_map.insert(_source, "ssid"); |         m_map.insert(_source, "ssid"); | ||||||
|         m_formatter["ssid"] = AWKeysAggregator::FormatterType::NoFormat; |         m_formatter["ssid"] = AWKeysAggregator::FormatterType::NoFormat; | ||||||
|     } else if (_source.startsWith("extsysmon/requests/response")) { |     } else if (_source.startsWith("network/response")) { | ||||||
|         // network response |         // network response | ||||||
|         auto key = _source; |         QString key = _source; | ||||||
|         key.remove("extsysmon/requests/"); |         key.remove("network/"); | ||||||
|         m_map.insert(_source, key); |         m_map.insert(_source, key); | ||||||
|         m_formatter[key] = AWKeysAggregator::FormatterType::NoFormat; |         m_formatter[key] = AWKeysAggregator::FormatterType::NoFormat; | ||||||
|     } else if (_source.contains(netRegExp)) { |     } else if (_source.contains(netRegExp)) { | ||||||
|         // network speed |         // network speed | ||||||
|         auto type = _source.endsWith("download") ? "down" : "up"; |         QString type = _source.contains("receiver") ? "down" : "up"; | ||||||
|         auto index = m_devices["net"].indexOf(_source.split('/')[1]); |         int index = m_devices["net"].indexOf(_source.split('/')[2]); | ||||||
|         if (index > -1) { |         if (index > -1) { | ||||||
|             // kb |             // kb | ||||||
|             auto key = QString("%1kb%2").arg(type).arg(index); |             QString key = QString("%1kb%2").arg(type).arg(index); | ||||||
|             m_map.insert(_source, key); |             m_map.insert(_source, key); | ||||||
|             m_formatter[key] = AWKeysAggregator::FormatterType::Integer; |             m_formatter[key] = AWKeysAggregator::FormatterType::Integer; | ||||||
|             // smart |             // smart | ||||||
| @ -297,11 +287,11 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const KSy | |||||||
|         } |         } | ||||||
|     } else if (_source.contains(netTotalRegExp)) { |     } else if (_source.contains(netTotalRegExp)) { | ||||||
|         // network data total |         // network data total | ||||||
|         auto type = _source.endsWith("Download") ? "down" : "up"; |         QString type = _source.contains("receiver") ? "down" : "up"; | ||||||
|         auto index = m_devices["net"].indexOf(_source.split('/')[1]); |         int index = m_devices["net"].indexOf(_source.split('/')[2]); | ||||||
|         if (index > -1) { |         if (index > -1) { | ||||||
|             // kb |             // kb | ||||||
|             auto key = QString("%1totkb%2").arg(type).arg(index); |             QString key = QString("%1totkb%2").arg(type).arg(index); | ||||||
|             m_map.insert(_source, key); |             m_map.insert(_source, key); | ||||||
|             m_formatter[key] = AWKeysAggregator::FormatterType::Integer; |             m_formatter[key] = AWKeysAggregator::FormatterType::Integer; | ||||||
|             // mb |             // mb | ||||||
| @ -309,37 +299,37 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const KSy | |||||||
|             m_map.insert(_source, key); |             m_map.insert(_source, key); | ||||||
|             m_formatter[key] = AWKeysAggregator::FormatterType::MemMBFormat; |             m_formatter[key] = AWKeysAggregator::FormatterType::MemMBFormat; | ||||||
|         } |         } | ||||||
|     } else if (_source.startsWith("extsysmon/upgrade")) { |     } else if (_source.startsWith("upgrade")) { | ||||||
|         // package manager |         // package manager | ||||||
|         auto key = _source; |         QString key = _source; | ||||||
|         key.remove("extsysmon/upgrade/"); |         key.remove("upgrade/"); | ||||||
|         m_map.insert(_source, key); |         m_map.insert(_source, key); | ||||||
|         m_formatter[key] = AWKeysAggregator::FormatterType::IntegerThree; |         m_formatter[key] = AWKeysAggregator::FormatterType::IntegerThree; | ||||||
|     } else if (_source.startsWith("extsysmon/player")) { |     } else if (_source.startsWith("player")) { | ||||||
|         // player |         // player | ||||||
|         auto key = _source; |         QString key = _source; | ||||||
|         key.remove("extsysmon/player/"); |         key.remove("player/"); | ||||||
|         m_map.insert(_source, key); |         m_map.insert(_source, key); | ||||||
|         m_formatter[key] = AWKeysAggregator::FormatterType::NoFormat; |         m_formatter[key] = AWKeysAggregator::FormatterType::NoFormat; | ||||||
|     } else if (_source == "extsysmon/ps/running") { |     } else if (_source == "ps/running/count") { | ||||||
|         // running processes count |         // running processes count | ||||||
|         m_map.insert(_source, "pscount"); |         m_map.insert(_source, "pscount"); | ||||||
|         m_formatter["pscount"] = AWKeysAggregator::FormatterType::NoFormat; |         m_formatter["pscount"] = AWKeysAggregator::FormatterType::NoFormat; | ||||||
|     } else if (_source == "extsysmon/ps/list") { |     } else if (_source == "ps/running/list") { | ||||||
|         // list of running processes |         // list of running processes | ||||||
|         m_map.insert(_source, "ps"); |         m_map.insert(_source, "ps"); | ||||||
|         m_formatter["ps"] = AWKeysAggregator::FormatterType::List; |         m_formatter["ps"] = AWKeysAggregator::FormatterType::List; | ||||||
|     } else if (_source == "extsysmon/ps/count") { |     } else if (_source == "ps/total/count") { | ||||||
|         // total processes count |         // total processes count | ||||||
|         m_map.insert(_source, "pstot"); |         m_map.insert(_source, "pstot"); | ||||||
|         m_formatter["pstot"] = AWKeysAggregator::FormatterType::NoFormat; |         m_formatter["pstot"] = AWKeysAggregator::FormatterType::NoFormat; | ||||||
|     } else if (_source.startsWith("extsysmon/quotes")) { |     } else if (_source.startsWith("quotes")) { | ||||||
|         // quotes |         // quotes | ||||||
|         auto key = _source; |         QString key = _source; | ||||||
|         key.remove("extsysmon/quotes/"); |         key.remove("quotes/"); | ||||||
|         m_map.insert(_source, key); |         m_map.insert(_source, key); | ||||||
|         m_formatter[key] = AWKeysAggregator::FormatterType::Quotes; |         m_formatter[key] = AWKeysAggregator::FormatterType::Quotes; | ||||||
|     } else if (_source == "memory/swap/free") { |     } else if (_source == "mem/swap/free") { | ||||||
|         // free swap |         // free swap | ||||||
|         // mb |         // mb | ||||||
|         m_map.insert(_source, "swapfreemb"); |         m_map.insert(_source, "swapfreemb"); | ||||||
| @ -347,7 +337,7 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const KSy | |||||||
|         // gb |         // gb | ||||||
|         m_map.insert(_source, "swapfreegb"); |         m_map.insert(_source, "swapfreegb"); | ||||||
|         m_formatter["swapfreegb"] = AWKeysAggregator::FormatterType::MemGBFormat; |         m_formatter["swapfreegb"] = AWKeysAggregator::FormatterType::MemGBFormat; | ||||||
|     } else if (_source == "memory/swap/used") { |     } else if (_source == "mem/swap/used") { | ||||||
|         // used swap |         // used swap | ||||||
|         // mb |         // mb | ||||||
|         m_map.insert(_source, "swapmb"); |         m_map.insert(_source, "swapmb"); | ||||||
| @ -355,20 +345,19 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const KSy | |||||||
|         // gb |         // gb | ||||||
|         m_map.insert(_source, "swapgb"); |         m_map.insert(_source, "swapgb"); | ||||||
|         m_formatter["swapgb"] = AWKeysAggregator::FormatterType::MemGBFormat; |         m_formatter["swapgb"] = AWKeysAggregator::FormatterType::MemGBFormat; | ||||||
|     } else if (_source.startsWith("lmsensors/") || _source.contains(cpuTempRegExp) |     } else if (_source.startsWith("lmsensors/")) { | ||||||
|                || _source == "cpu/all/averageTemperature") { |  | ||||||
|         // temperature |         // temperature | ||||||
|         auto index = m_devices["temp"].indexOf(_source); |         int index = m_devices["temp"].indexOf(_source); | ||||||
|         // HACK on DE initialization there are no units key |         // HACK on DE initialization there are no units key | ||||||
|         if (_units == KSysGuard::UnitInvalid) |         if (_units.isEmpty()) | ||||||
|             return QStringList({QString("temp%1").arg(index)}); |             return QStringList({QString("temp%1").arg(index)}); | ||||||
|         if (index > -1) { |         if (index > -1) { | ||||||
|             auto key = QString("temp%1").arg(index); |             QString key = QString("temp%1").arg(index); | ||||||
|             m_map.insert(_source, key); |             m_map.insert(_source, key); | ||||||
|             m_formatter[key] = _units == KSysGuard::UnitCelsius ? AWKeysAggregator::FormatterType::Temperature |             m_formatter[key] = _units == "°C" ? AWKeysAggregator::FormatterType::Temperature | ||||||
|                                                                 : AWKeysAggregator::FormatterType::Integer; |                                               : AWKeysAggregator::FormatterType::Integer; | ||||||
|         } |         } | ||||||
|     } else if (_source == "extsysmon/time/now") { |     } else if (_source == "Local") { | ||||||
|         // time |         // time | ||||||
|         m_map.insert(_source, "time"); |         m_map.insert(_source, "time"); | ||||||
|         m_formatter["time"] = AWKeysAggregator::FormatterType::Time; |         m_formatter["time"] = AWKeysAggregator::FormatterType::Time; | ||||||
| @ -387,40 +376,40 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const KSy | |||||||
|         // timestamp |         // timestamp | ||||||
|         m_map.insert(_source, "tstime"); |         m_map.insert(_source, "tstime"); | ||||||
|         m_formatter["tstime"] = AWKeysAggregator::FormatterType::Timestamp; |         m_formatter["tstime"] = AWKeysAggregator::FormatterType::Timestamp; | ||||||
|     } else if (_source == "extsysmon/system/brightness") { |     } else if (_source == "system/brightness") { | ||||||
|         m_map.insert(_source, "brightness"); |         m_map.insert(_source, "brightness"); | ||||||
|         m_formatter["brightness"] = AWKeysAggregator::FormatterType::IntegerThree; |         m_formatter["brightness"] = AWKeysAggregator::FormatterType::IntegerThree; | ||||||
|     } else if (_source == "extsysmon/system/volume") { |     } else if (_source == "system/volume") { | ||||||
|         m_map.insert(_source, "volume"); |         m_map.insert(_source, "volume"); | ||||||
|         m_formatter["volume"] = AWKeysAggregator::FormatterType::IntegerThree; |         m_formatter["volume"] = AWKeysAggregator::FormatterType::IntegerThree; | ||||||
|     } else if (_source == "os/system/uptime") { |     } else if (_source == "system/uptime") { | ||||||
|         // uptime |         // uptime | ||||||
|         m_map.insert(_source, "uptime"); |         m_map.insert(_source, "uptime"); | ||||||
|         m_formatter["uptime"] = AWKeysAggregator::FormatterType::Uptime; |         m_formatter["uptime"] = AWKeysAggregator::FormatterType::Uptime; | ||||||
|         // custom uptime |         // custom uptime | ||||||
|         m_map.insert(_source, "cuptime"); |         m_map.insert(_source, "cuptime"); | ||||||
|         m_formatter["cuptime"] = AWKeysAggregator::FormatterType::UptimeCustom; |         m_formatter["cuptime"] = AWKeysAggregator::FormatterType::UptimeCustom; | ||||||
|     } else if (_source.startsWith("extsysmon/weather/temperature")) { |     } else if (_source.startsWith("weather/temperature")) { | ||||||
|         // temperature |         // temperature | ||||||
|         auto key = _source; |         QString key = _source; | ||||||
|         key.remove("extsysmon/weather/"); |         key.remove("weather/"); | ||||||
|         m_map.insert(_source, key); |         m_map.insert(_source, key); | ||||||
|         m_formatter[key] = AWKeysAggregator::FormatterType::Temperature; |         m_formatter[key] = AWKeysAggregator::FormatterType::Temperature; | ||||||
|     } else if (_source.startsWith("extsysmon/weather/")) { |     } else if (_source.startsWith("weather/")) { | ||||||
|         // other weather |         // other weather | ||||||
|         auto key = _source; |         QString key = _source; | ||||||
|         key.remove("extsysmon/weather/"); |         key.remove("weather/"); | ||||||
|         m_map.insert(_source, key); |         m_map.insert(_source, key); | ||||||
|         m_formatter[key] = AWKeysAggregator::FormatterType::NoFormat; |         m_formatter[key] = AWKeysAggregator::FormatterType::NoFormat; | ||||||
|     } else if (_source.startsWith("extsysmon/load/load")) { |     } else if (_source.startsWith("load/load")) { | ||||||
|         // load source |         // load source | ||||||
|         auto key = _source; |         QString key = _source; | ||||||
|         key.remove("extsysmon/load/"); |         key.remove("load/"); | ||||||
|         m_map.insert(_source, key); |         m_map.insert(_source, key); | ||||||
|         m_formatter[key] = AWKeysAggregator::FormatterType::Temperature; |         m_formatter[key] = AWKeysAggregator::FormatterType::Temperature; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     auto foundKeys = keysFromSource(_source); |     QStringList foundKeys = keysFromSource(_source); | ||||||
|  |  | ||||||
|     // rewrite formatters for custom ones |     // rewrite formatters for custom ones | ||||||
|     QStringList customFormattersKeys; |     QStringList customFormattersKeys; | ||||||
| @ -435,7 +424,7 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const KSy | |||||||
|  |  | ||||||
|     // drop key from dictionary if no one user requested key required it |     // drop key from dictionary if no one user requested key required it | ||||||
|     qCInfo(LOG_AW) << "Looking for keys" << foundKeys << "in" << _keys; |     qCInfo(LOG_AW) << "Looking for keys" << foundKeys << "in" << _keys; | ||||||
|     auto required = _keys.isEmpty() || std::any_of(foundKeys.cbegin(), foundKeys.cend(), [&_keys](const QString &key) { |     bool required = _keys.isEmpty() || std::any_of(foundKeys.cbegin(), foundKeys.cend(), [&_keys](const QString &key) { | ||||||
|                         return _keys.contains(key); |                         return _keys.contains(key); | ||||||
|                     }); |                     }); | ||||||
|     if (!required) { |     if (!required) { | ||||||
|  | |||||||
| @ -19,8 +19,6 @@ | |||||||
| #ifndef AWDATAENGINEMAPPER_H | #ifndef AWDATAENGINEMAPPER_H | ||||||
| #define AWDATAENGINEMAPPER_H | #define AWDATAENGINEMAPPER_H | ||||||
|  |  | ||||||
| #include <ksysguard/formatter/Unit.h> |  | ||||||
|  |  | ||||||
| #include <QMultiHash> | #include <QMultiHash> | ||||||
| #include <QObject> | #include <QObject> | ||||||
|  |  | ||||||
| @ -40,7 +38,7 @@ public: | |||||||
|     [[nodiscard]] AWKeysAggregator::FormatterType formatter(const QString &_key) const; |     [[nodiscard]] AWKeysAggregator::FormatterType formatter(const QString &_key) const; | ||||||
|     [[nodiscard]] QStringList keysFromSource(const QString &_source) const; |     [[nodiscard]] QStringList keysFromSource(const QString &_source) const; | ||||||
|     // set methods |     // set methods | ||||||
|     QStringList registerSource(const QString &_source, const KSysGuard::Unit _units, const QStringList &_keys); |     QStringList registerSource(const QString &_source, const QString &_units, const QStringList &_keys); | ||||||
|     void setDevices(const QHash<QString, QStringList> &_devices); |     void setDevices(const QHash<QString, QStringList> &_devices); | ||||||
|  |  | ||||||
| private: | private: | ||||||
|  | |||||||
| @ -114,7 +114,8 @@ QStringList AWFormatterHelper::rightKeys() | |||||||
|  |  | ||||||
| void AWFormatterHelper::editItems() | void AWFormatterHelper::editItems() | ||||||
| { | { | ||||||
|     auto ret = exec(); |     repaintList(); | ||||||
|  |     int ret = exec(); | ||||||
|     qCInfo(LOG_AW) << "Dialog returns" << ret; |     qCInfo(LOG_AW) << "Dialog returns" << ret; | ||||||
| } | } | ||||||
|  |  | ||||||
| @ -199,20 +200,20 @@ QPair<QString, AWAbstractFormatter::FormatterClass> AWFormatterHelper::readMetad | |||||||
|  |  | ||||||
|     QSettings settings(_filePath, QSettings::IniFormat); |     QSettings settings(_filePath, QSettings::IniFormat); | ||||||
|     settings.beginGroup("Desktop Entry"); |     settings.beginGroup("Desktop Entry"); | ||||||
|     auto name = settings.value("Name", _filePath).toString(); |     QString name = settings.value("Name", _filePath).toString(); | ||||||
|     auto type = settings.value("X-AW-Type", "NoFormat").toString(); |     QString type = settings.value("X-AW-Type", "NoFormat").toString(); | ||||||
|     auto formatter = defineFormatterClass(type); |     AWAbstractFormatter::FormatterClass formatter = defineFormatterClass(type); | ||||||
|     settings.endGroup(); |     settings.endGroup(); | ||||||
|  |  | ||||||
|     return QPair<QString, AWAbstractFormatter::FormatterClass>(name, formatter); |     return QPair<QString, AWAbstractFormatter::FormatterClass>(name, formatter); | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| void AWFormatterHelper::doCreateItem(QListWidget *_widget) | void AWFormatterHelper::doCreateItem() | ||||||
| { | { | ||||||
|     QStringList selection = {"NoFormat", "DateTime", "Float", "List", "Script", "String", "Json"}; |     QStringList selection = {"NoFormat", "DateTime", "Float", "List", "Script", "String", "Json"}; | ||||||
|     bool ok; |     bool ok; | ||||||
|     auto select = QInputDialog::getItem(nullptr, i18n("Select type"), i18n("Type:"), selection, 0, false, &ok); |     QString select = QInputDialog::getItem(this, i18n("Select type"), i18n("Type:"), selection, 0, false, &ok); | ||||||
|     if (!ok) { |     if (!ok) { | ||||||
|         qCWarning(LOG_AW) << "No type selected"; |         qCWarning(LOG_AW) << "No type selected"; | ||||||
|         return; |         return; | ||||||
| @ -222,18 +223,18 @@ void AWFormatterHelper::doCreateItem(QListWidget *_widget) | |||||||
|     AWAbstractFormatter::FormatterClass formatter = defineFormatterClass(select); |     AWAbstractFormatter::FormatterClass formatter = defineFormatterClass(select); | ||||||
|     switch (formatter) { |     switch (formatter) { | ||||||
|     case AWAbstractFormatter::FormatterClass::DateTime: |     case AWAbstractFormatter::FormatterClass::DateTime: | ||||||
|         return createItem<AWDateTimeFormatter>(_widget); |         return createItem<AWDateTimeFormatter>(); | ||||||
|     case AWAbstractFormatter::FormatterClass::Float: |     case AWAbstractFormatter::FormatterClass::Float: | ||||||
|         return createItem<AWFloatFormatter>(_widget); |         return createItem<AWFloatFormatter>(); | ||||||
|     case AWAbstractFormatter::FormatterClass::List: |     case AWAbstractFormatter::FormatterClass::List: | ||||||
|         return createItem<AWListFormatter>(_widget); |         return createItem<AWListFormatter>(); | ||||||
|     case AWAbstractFormatter::FormatterClass::Script: |     case AWAbstractFormatter::FormatterClass::Script: | ||||||
|         return createItem<AWScriptFormatter>(_widget); |         return createItem<AWScriptFormatter>(); | ||||||
|     case AWAbstractFormatter::FormatterClass::String: |     case AWAbstractFormatter::FormatterClass::String: | ||||||
|         return createItem<AWStringFormatter>(_widget); |         return createItem<AWStringFormatter>(); | ||||||
|     case AWAbstractFormatter::FormatterClass::Json: |     case AWAbstractFormatter::FormatterClass::Json: | ||||||
|         return createItem<AWJsonFormatter>(_widget); |         return createItem<AWJsonFormatter>(); | ||||||
|     case AWAbstractFormatter::FormatterClass::NoFormat: |     case AWAbstractFormatter::FormatterClass::NoFormat: | ||||||
|         return createItem<AWNoFormatter>(_widget); |         return createItem<AWNoFormatter>(); | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | |||||||
| @ -51,7 +51,7 @@ private: | |||||||
|     void initFormatters(); |     void initFormatters(); | ||||||
|     [[nodiscard]] static QPair<QString, AWAbstractFormatter::FormatterClass> readMetadata(const QString &_filePath); |     [[nodiscard]] static QPair<QString, AWAbstractFormatter::FormatterClass> readMetadata(const QString &_filePath); | ||||||
|     // parent methods |     // parent methods | ||||||
|     void doCreateItem(QListWidget *_widget) override; |     void doCreateItem() override; | ||||||
|     // properties |     // properties | ||||||
|     QHash<QString, AWAbstractFormatter *> m_formatters; |     QHash<QString, AWAbstractFormatter *> m_formatters; | ||||||
|     QHash<QString, AWAbstractFormatter *> m_formattersClasses; |     QHash<QString, AWAbstractFormatter *> m_formattersClasses; | ||||||
|  | |||||||
| @ -20,7 +20,6 @@ | |||||||
|  |  | ||||||
| #include <QDir> | #include <QDir> | ||||||
| #include <QNetworkInterface> | #include <QNetworkInterface> | ||||||
| #include <QRegularExpression> |  | ||||||
| #include <QSettings> | #include <QSettings> | ||||||
| #include <QStandardPaths> | #include <QStandardPaths> | ||||||
|  |  | ||||||
| @ -31,7 +30,7 @@ bool AWKeyCache::addKeyToCache(const QString &_type, const QString &_key) | |||||||
| { | { | ||||||
|     qCDebug(LOG_AW) << "Key" << _key << "with type" << _type; |     qCDebug(LOG_AW) << "Key" << _key << "with type" << _type; | ||||||
|  |  | ||||||
|     auto fileName |     QString fileName | ||||||
|         = QString("%1/awesomewidgets.ndx").arg(QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation)); |         = QString("%1/awesomewidgets.ndx").arg(QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation)); | ||||||
|     qCInfo(LOG_AW) << "Cache file" << fileName; |     qCInfo(LOG_AW) << "Cache file" << fileName; | ||||||
|     QSettings cache(fileName, QSettings::IniFormat); |     QSettings cache(fileName, QSettings::IniFormat); | ||||||
| @ -41,8 +40,19 @@ bool AWKeyCache::addKeyToCache(const QString &_type, const QString &_key) | |||||||
|     for (auto &number : cache.allKeys()) |     for (auto &number : cache.allKeys()) | ||||||
|         cachedValues.append(cache.value(number).toString()); |         cachedValues.append(cache.value(number).toString()); | ||||||
|  |  | ||||||
|     if (_type == "net") { |     if (_type == "hdd") { | ||||||
|         auto rawInterfaceList = QNetworkInterface::allInterfaces(); |         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(); | ||||||
|         for (auto &interface : rawInterfaceList) { |         for (auto &interface : rawInterfaceList) { | ||||||
|             QString device = interface.name(); |             QString device = interface.name(); | ||||||
|             if (cachedValues.contains(device)) |             if (cachedValues.contains(device)) | ||||||
| @ -83,19 +93,19 @@ QStringList AWKeyCache::getRequiredKeys(const QStringList &_keys, const QStringL | |||||||
|  |  | ||||||
|     // insert depending keys, refer to AWKeys::calculateValues() |     // insert depending keys, refer to AWKeys::calculateValues() | ||||||
|     // hddtotmb* |     // hddtotmb* | ||||||
|     for (auto &key : _allKeys.filter(QRegularExpression("^hddtotmb"))) { |     for (auto &key : _allKeys.filter(QRegExp("^hddtotmb"))) { | ||||||
|         if (!used.contains(key)) |         if (!used.contains(key)) | ||||||
|             continue; |             continue; | ||||||
|         key.remove("hddtotmb"); |         key.remove("hddtotmb"); | ||||||
|         auto index = key.toInt(); |         int index = key.toInt(); | ||||||
|         used << QString("hddfreemb%1").arg(index) << QString("hddmb%1").arg(index); |         used << QString("hddfreemb%1").arg(index) << QString("hddmb%1").arg(index); | ||||||
|     } |     } | ||||||
|     // hddtotgb* |     // hddtotgb* | ||||||
|     for (auto &key : _allKeys.filter(QRegularExpression("^hddtotgb"))) { |     for (auto &key : _allKeys.filter(QRegExp("^hddtotgb"))) { | ||||||
|         if (!used.contains(key)) |         if (!used.contains(key)) | ||||||
|             continue; |             continue; | ||||||
|         key.remove("hddtotgb"); |         key.remove("hddtotgb"); | ||||||
|         auto index = key.toInt(); |         int index = key.toInt(); | ||||||
|         used << QString("hddfreegb%1").arg(index) << QString("hddgb%1").arg(index); |         used << QString("hddfreegb%1").arg(index) << QString("hddgb%1").arg(index); | ||||||
|     } |     } | ||||||
|     // mem |     // mem | ||||||
| @ -128,7 +138,7 @@ QStringList AWKeyCache::getRequiredKeys(const QStringList &_keys, const QStringL | |||||||
|     for (auto &key : netKeys) { |     for (auto &key : netKeys) { | ||||||
|         if (!used.contains(key)) |         if (!used.contains(key)) | ||||||
|             continue; |             continue; | ||||||
|         auto filt = _allKeys.filter(QRegularExpression(QString("^%1[0-9]{1,}").arg(key))); |         QStringList filt = _allKeys.filter(QRegExp(QString("^%1[0-9]{1,}").arg(key))); | ||||||
|         for (auto &filtered : filt) |         for (auto &filtered : filt) | ||||||
|             used << filtered; |             used << filtered; | ||||||
|     } |     } | ||||||
| @ -147,7 +157,7 @@ QStringList AWKeyCache::getRequiredKeys(const QStringList &_keys, const QStringL | |||||||
|  |  | ||||||
| QHash<QString, QStringList> AWKeyCache::loadKeysFromCache() | QHash<QString, QStringList> AWKeyCache::loadKeysFromCache() | ||||||
| { | { | ||||||
|     auto fileName |     QString fileName | ||||||
|         = QString("%1/awesomewidgets.ndx").arg(QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation)); |         = QString("%1/awesomewidgets.ndx").arg(QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation)); | ||||||
|     qCInfo(LOG_AW) << "Cache file" << fileName; |     qCInfo(LOG_AW) << "Cache file" << fileName; | ||||||
|     QSettings cache(fileName, QSettings::IniFormat); |     QSettings cache(fileName, QSettings::IniFormat); | ||||||
|  | |||||||
| @ -18,7 +18,7 @@ | |||||||
| #include "awkeyoperations.h" | #include "awkeyoperations.h" | ||||||
|  |  | ||||||
| #include <QDir> | #include <QDir> | ||||||
| #include <QRegularExpression> | #include <QRegExp> | ||||||
| #include <QThread> | #include <QThread> | ||||||
|  |  | ||||||
| #include "awcustomkeyshelper.h" | #include "awcustomkeyshelper.h" | ||||||
| @ -72,6 +72,7 @@ QHash<QString, QStringList> AWKeyOperations::devices() const | |||||||
| void AWKeyOperations::updateCache() | void AWKeyOperations::updateCache() | ||||||
| { | { | ||||||
|     // update network and hdd list |     // update network and hdd list | ||||||
|  |     addKeyToCache("hdd"); | ||||||
|     addKeyToCache("net"); |     addKeyToCache("net"); | ||||||
| } | } | ||||||
|  |  | ||||||
| @ -89,20 +90,15 @@ QStringList AWKeyOperations::dictKeys() const | |||||||
|         allKeys.append(item->tag("timestamp")); |         allKeys.append(item->tag("timestamp")); | ||||||
|     } |     } | ||||||
|     // cpuclock & cpu |     // cpuclock & cpu | ||||||
|     for (auto i = 0; i < QThread::idealThreadCount(); i++) { |     for (int i = 0; i < QThread::idealThreadCount(); i++) { | ||||||
|         allKeys.append(QString("cpucl%1").arg(i)); |         allKeys.append(QString("cpucl%1").arg(i)); | ||||||
|         allKeys.append(QString("cpu%1").arg(i)); |         allKeys.append(QString("cpu%1").arg(i)); | ||||||
|     } |     } | ||||||
|     // temperature |     // temperature | ||||||
|     for (auto i = 0; i < m_devices["temp"].count(); i++) |     for (int i = 0; i < m_devices["temp"].count(); i++) | ||||||
|         allKeys.append(QString("temp%1").arg(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 |     // hdd | ||||||
|     for (auto i = 0; i < m_devices["mount"].count(); i++) { |     for (int i = 0; i < m_devices["mount"].count(); i++) { | ||||||
|         allKeys.append(QString("hddmb%1").arg(i)); |         allKeys.append(QString("hddmb%1").arg(i)); | ||||||
|         allKeys.append(QString("hddgb%1").arg(i)); |         allKeys.append(QString("hddgb%1").arg(i)); | ||||||
|         allKeys.append(QString("hddfreemb%1").arg(i)); |         allKeys.append(QString("hddfreemb%1").arg(i)); | ||||||
| @ -112,12 +108,15 @@ QStringList AWKeyOperations::dictKeys() const | |||||||
|         allKeys.append(QString("hdd%1").arg(i)); |         allKeys.append(QString("hdd%1").arg(i)); | ||||||
|     } |     } | ||||||
|     // hdd speed |     // hdd speed | ||||||
|     for (auto i = 0; i < m_devices["disk"].count(); i++) { |     for (int i = 0; i < m_devices["disk"].count(); i++) { | ||||||
|         allKeys.append(QString("hddr%1").arg(i)); |         allKeys.append(QString("hddr%1").arg(i)); | ||||||
|         allKeys.append(QString("hddw%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 |     // network | ||||||
|     for (auto i = 0; i < m_devices["net"].count(); i++) { |     for (int i = 0; i < m_devices["net"].count(); i++) { | ||||||
|         allKeys.append(QString("downunits%1").arg(i)); |         allKeys.append(QString("downunits%1").arg(i)); | ||||||
|         allKeys.append(QString("upunits%1").arg(i)); |         allKeys.append(QString("upunits%1").arg(i)); | ||||||
|         allKeys.append(QString("downtotkb%1").arg(i)); |         allKeys.append(QString("downtotkb%1").arg(i)); | ||||||
| @ -130,8 +129,9 @@ QStringList AWKeyOperations::dictKeys() const | |||||||
|         allKeys.append(QString("up%1").arg(i)); |         allKeys.append(QString("up%1").arg(i)); | ||||||
|     } |     } | ||||||
|     // battery |     // battery | ||||||
|     auto allBatteryDevices = QDir("/sys/class/power_supply") |     QStringList allBatteryDevices | ||||||
|                                  .entryList(QStringList({"BAT*"}), QDir::Dirs | QDir::NoDotAndDotDot, QDir::Name); |         = QDir("/sys/class/power_supply") | ||||||
|  |               .entryList(QStringList({"BAT*"}), QDir::Dirs | QDir::NoDotAndDotDot, QDir::Name); | ||||||
|     for (int i = 0; i < allBatteryDevices.count(); i++) { |     for (int i = 0; i < allBatteryDevices.count(); i++) { | ||||||
|         allKeys.append(QString("bat%1").arg(i)); |         allKeys.append(QString("bat%1").arg(i)); | ||||||
|         allKeys.append(QString("batleft%1").arg(i)); |         allKeys.append(QString("batleft%1").arg(i)); | ||||||
| @ -205,48 +205,52 @@ QString AWKeyOperations::infoByKey(const QString &_key) const | |||||||
| { | { | ||||||
|     qCDebug(LOG_AW) << "Requested key" << _key; |     qCDebug(LOG_AW) << "Requested key" << _key; | ||||||
|  |  | ||||||
|     auto stripped = _key; |     QString stripped = _key; | ||||||
|     stripped.remove(QRegularExpression("\\d+")); |     stripped.remove(QRegExp("\\d+")); | ||||||
|     QString output; |     QString output; | ||||||
|  |  | ||||||
|     if (_key.startsWith("bar")) { |     if (_key.startsWith("bar")) { | ||||||
|         auto *item = m_graphicalItems->itemByTag(_key, stripped); |         AbstractExtItem *item = m_graphicalItems->itemByTag(_key, stripped); | ||||||
|         if (item) |         if (item) | ||||||
|             output = item->uniq(); |             output = item->uniq(); | ||||||
|     } else if (_key.startsWith("custom")) { |     } else if (_key.startsWith("custom")) { | ||||||
|         auto *item = m_extScripts->itemByTag(_key, stripped); |         AbstractExtItem *item = m_extScripts->itemByTag(_key, stripped); | ||||||
|         if (item) |         if (item) | ||||||
|             output = item->uniq(); |             output = item->uniq(); | ||||||
|     } else if (_key.contains(QRegularExpression("^hdd[rw]"))) { |     } else if (_key.contains(QRegExp("^hdd[rw]"))) { | ||||||
|         auto index = _key; |         QString index = _key; | ||||||
|         index.remove(QRegularExpression("hdd[rw]")); |         index.remove(QRegExp("hdd[rw]")); | ||||||
|         output = m_devices["disk"][index.toInt()]; |         output = m_devices["disk"][index.toInt()]; | ||||||
|     } else if (_key.contains(QRegularExpression("^hdd([0-9]|mb|gb|freemb|freegb|totmb|totgb)"))) { |     } else if (_key.contains(QRegExp("^hdd([0-9]|mb|gb|freemb|freegb|totmb|totgb)"))) { | ||||||
|         auto index = _key; |         QString index = _key; | ||||||
|         index.remove(QRegularExpression("^hdd(|mb|gb|freemb|freegb|totmb|totgb)")); |         index.remove(QRegExp("^hdd(|mb|gb|freemb|freegb|totmb|totgb)")); | ||||||
|         output = m_devices["mount"][index.toInt()]; |         output = m_devices["mount"][index.toInt()]; | ||||||
|     } else if (_key.contains(QRegularExpression("^(down|up)[0-9]"))) { |     } else if (_key.startsWith("hddtemp")) { | ||||||
|         auto index = _key; |         QString index = _key; | ||||||
|         index.remove(QRegularExpression("^(down|up)")); |         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)")); | ||||||
|         output = m_devices["net"][index.toInt()]; |         output = m_devices["net"][index.toInt()]; | ||||||
|     } else if (_key.startsWith("pkgcount")) { |     } else if (_key.startsWith("pkgcount")) { | ||||||
|         auto *item = m_extUpgrade->itemByTag(_key, stripped); |         AbstractExtItem *item = m_extUpgrade->itemByTag(_key, stripped); | ||||||
|         if (item) |         if (item) | ||||||
|             output = item->uniq(); |             output = item->uniq(); | ||||||
|     } else if (_key.contains(QRegularExpression("(^|perc)(ask|bid|price)(chg|)"))) { |     } else if (_key.contains(QRegExp("(^|perc)(ask|bid|price)(chg|)"))) { | ||||||
|         auto *item = m_extQuotes->itemByTag(_key, stripped); |         AbstractExtItem *item = m_extQuotes->itemByTag(_key, stripped); | ||||||
|         if (item) |         if (item) | ||||||
|             output = item->uniq(); |             output = item->uniq(); | ||||||
|     } else if (_key.contains(QRegularExpression("(weather|weatherId|humidity|pressure|temperature)"))) { |     } else if (_key.contains(QRegExp("(weather|weatherId|humidity|pressure|temperature)"))) { | ||||||
|         auto *item = m_extWeather->itemByTag(_key, stripped); |         AbstractExtItem *item = m_extWeather->itemByTag(_key, stripped); | ||||||
|         if (item) |         if (item) | ||||||
|             output = item->uniq(); |             output = item->uniq(); | ||||||
|     } else if (_key.startsWith("temp")) { |     } else if (_key.startsWith("temp")) { | ||||||
|         auto index = _key; |         QString index = _key; | ||||||
|         index.remove("temp"); |         index.remove("temp"); | ||||||
|         output = m_devices["temp"][index.toInt()]; |         output = m_devices["temp"][index.toInt()]; | ||||||
|     } else if (_key.startsWith("response")) { |     } else if (_key.startsWith("response")) { | ||||||
|         auto *item = m_extNetRequest->itemByTag(_key, stripped); |         AbstractExtItem *item = m_extNetRequest->itemByTag(_key, stripped); | ||||||
|         if (item) |         if (item) | ||||||
|             output = item->uniq(); |             output = item->uniq(); | ||||||
|     } else { |     } else { | ||||||
| @ -276,7 +280,7 @@ void AWKeyOperations::editItem(const QString &_type) | |||||||
|     qCDebug(LOG_AW) << "Item type" << _type; |     qCDebug(LOG_AW) << "Item type" << _type; | ||||||
|  |  | ||||||
|     if (_type == "graphicalitem") { |     if (_type == "graphicalitem") { | ||||||
|         QStringList keys = dictKeys().filter(QRegularExpression("^(cpu(?!cl).*|gpu$|mem$|swap$|hdd[0-9].*|bat.*)")); |         QStringList keys = dictKeys().filter(QRegExp("^(cpu(?!cl).*|gpu$|mem$|swap$|hdd[0-9].*|bat.*)")); | ||||||
|         keys.sort(); |         keys.sort(); | ||||||
|         m_graphicalItems->setConfigArgs(keys); |         m_graphicalItems->setConfigArgs(keys); | ||||||
|         return m_graphicalItems->editItems(); |         return m_graphicalItems->editItems(); | ||||||
| @ -298,26 +302,19 @@ void AWKeyOperations::addDevice(const QString &_source) | |||||||
| { | { | ||||||
|     qCDebug(LOG_AW) << "Source" << _source; |     qCDebug(LOG_AW) << "Source" << _source; | ||||||
|  |  | ||||||
|     auto diskRegexp = QRegularExpression("^disk/.*/read$"); |     QRegExp diskRegexp = QRegExp("disk/(?:md|sd|hd)[a-z|0-9]_.*/Rate/(?:rblk)"); | ||||||
|     auto mountRegexp = QRegularExpression("^disk/.*/usedPercent$"); |     QRegExp mountRegexp = QRegExp("partitions/.*/filllevel"); | ||||||
|     auto cpuTempRegExp = QRegularExpression("^cpu/cpu.*/temperature$"); |  | ||||||
|     auto gpuRegExp = QRegularExpression("^gpu/gpu.*/usage$"); |  | ||||||
|  |  | ||||||
|     if (_source.contains(diskRegexp)) { |     if (_source.contains(diskRegexp)) { | ||||||
|         auto device = _source; |         QString device = _source; | ||||||
|         device.remove("disk/").remove("/read"); |         device.remove("/Rate/rblk"); | ||||||
|         addKeyToCache("disk", device); |         addKeyToCache("disk", device); | ||||||
|     } else if (_source.contains(mountRegexp)) { |     } else if (_source.contains(mountRegexp)) { | ||||||
|         auto device = _source; |         QString device = _source; | ||||||
|         device.remove("disk/").remove("/usedPercent"); |         device.remove("partitions").remove("/filllevel"); | ||||||
|         addKeyToCache("mount", device); |         addKeyToCache("mount", device); | ||||||
|     } else if (_source.startsWith("lmsensors") || _source.contains(cpuTempRegExp) |     } else if (_source.startsWith("lmsensors")) { | ||||||
|                || _source == "cpu/all/averageTemperature") { |  | ||||||
|         addKeyToCache("temp", _source); |         addKeyToCache("temp", _source); | ||||||
|     } else if (_source.contains(gpuRegExp)) { |  | ||||||
|         auto device = _source; |  | ||||||
|         device.remove("gpu/").remove("/usage"); |  | ||||||
|         addKeyToCache("gpu", device); |  | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | |||||||
| @ -56,17 +56,16 @@ AWKeys::AWKeys(QObject *_parent) | |||||||
|     createDBusInterface(); |     createDBusInterface(); | ||||||
|  |  | ||||||
|     // update key data if required |     // update key data if required | ||||||
|     connect(m_keyOperator, &AWKeyOperations::updateKeys, this, &AWKeys::reinitKeys); |     connect(m_keyOperator, SIGNAL(updateKeys(const QStringList &)), this, SLOT(reinitKeys(const QStringList &))); | ||||||
|     connect(m_timer, &QTimer::timeout, this, &AWKeys::updateTextData); |     connect(m_timer, SIGNAL(timeout()), this, SLOT(updateTextData())); | ||||||
|  |  | ||||||
|     // transfer signal from AWDataAggregator object to QML ui |     // transfer signal from AWDataAggregator object to QML ui | ||||||
|     connect(m_dataAggregator, &AWDataAggregator::toolTipPainted, |     connect(m_dataAggregator, SIGNAL(toolTipPainted(const QString &)), this, | ||||||
|             [this](const QString &_tooltip) { emit(needToolTipToBeUpdated(_tooltip)); }); |             SIGNAL(needToolTipToBeUpdated(const QString &))); | ||||||
|  |     connect(this, SIGNAL(dropSourceFromDataengine(const QString &)), m_dataEngineAggregator, | ||||||
|     connect(this, &AWKeys::dropSourceFromDataengine, m_dataEngineAggregator, &AWDataEngineAggregator::dropSource); |             SLOT(dropSource(const QString &))); | ||||||
|     connect(m_dataEngineAggregator, &AWDataEngineAggregator::dataUpdated, this, &AWKeys::dataUpdated); |  | ||||||
|     // transfer signal from dataengine to update source list |     // transfer signal from dataengine to update source list | ||||||
|     connect(m_dataEngineAggregator, &AWDataEngineAggregator::deviceAdded, m_keyOperator, &AWKeyOperations::addDevice); |     connect(m_dataEngineAggregator, SIGNAL(deviceAdded(const QString &)), m_keyOperator, | ||||||
|  |             SLOT(addDevice(const QString &))); | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| @ -103,7 +102,7 @@ void AWKeys::initKeys(const QString &_currentPattern, const int _interval, const | |||||||
|     m_aggregator->initFormatters(); |     m_aggregator->initFormatters(); | ||||||
|     m_keyOperator->setPattern(_currentPattern); |     m_keyOperator->setPattern(_currentPattern); | ||||||
|     m_keyOperator->updateCache(); |     m_keyOperator->updateCache(); | ||||||
|     m_dataEngineAggregator->loadSources(); |     m_dataEngineAggregator->reconnectSources(_interval); | ||||||
|  |  | ||||||
|     // timer |     // timer | ||||||
|     m_timer->setInterval(_interval); |     m_timer->setInterval(_interval); | ||||||
| @ -149,7 +148,7 @@ QStringList AWKeys::dictKeys(const bool _sorted, const QString &_regexp) const | |||||||
|     if (_sorted) |     if (_sorted) | ||||||
|         allKeys.sort(); |         allKeys.sort(); | ||||||
|  |  | ||||||
|     return allKeys.filter(QRegularExpression(_regexp)); |     return allKeys.filter(QRegExp(_regexp)); | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| @ -186,9 +185,9 @@ QString AWKeys::valueByKey(const QString &_key) const | |||||||
| { | { | ||||||
|     qCDebug(LOG_AW) << "Requested value for key" << _key; |     qCDebug(LOG_AW) << "Requested value for key" << _key; | ||||||
|  |  | ||||||
|     auto realKey = _key.startsWith("bar") ? m_keyOperator->infoByKey(_key) : _key; |     QString trueKey = _key.startsWith("bar") ? m_keyOperator->infoByKey(_key) : _key; | ||||||
|  |  | ||||||
|     return m_aggregator->formatter(m_values[realKey], realKey, true); |     return m_aggregator->formatter(m_values[trueKey], trueKey, true); | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| @ -200,15 +199,10 @@ void AWKeys::editItem(const QString &_type) | |||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| void AWKeys::dataUpdated(const QHash<QString, KSysGuard::SensorInfo> &_sensors, const KSysGuard::SensorDataList &_data) | void AWKeys::dataUpdated(const QString &_sourceName, const Plasma::DataEngine::Data &_data) | ||||||
| { | { | ||||||
|     for (auto &single : _data) { |     // run concurrent data update | ||||||
|         if (_sensors.contains(single.sensorProperty)) { |     QtConcurrent::run(m_threadPool, this, &AWKeys::setDataBySource, _sourceName, _data); | ||||||
|             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); |  | ||||||
|     } |  | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| @ -245,7 +239,7 @@ void AWKeys::updateTextData() | |||||||
|     // do not do it in parallel to avoid race condition |     // do not do it in parallel to avoid race condition | ||||||
|     m_mutex.lock(); |     m_mutex.lock(); | ||||||
|     calculateValues(); |     calculateValues(); | ||||||
|     auto text = parsePattern(m_keyOperator->pattern()); |     QString text = parsePattern(m_keyOperator->pattern()); | ||||||
|     // update tooltip values under lock |     // update tooltip values under lock | ||||||
|     m_dataAggregator->dataUpdate(m_values); |     m_dataAggregator->dataUpdate(m_values); | ||||||
|     m_mutex.unlock(); |     m_mutex.unlock(); | ||||||
| @ -262,17 +256,17 @@ void AWKeys::calculateValues() | |||||||
|     QStringList mountDevices = m_keyOperator->devices("mount"); |     QStringList mountDevices = m_keyOperator->devices("mount"); | ||||||
|     for (auto &device : mountDevices) { |     for (auto &device : mountDevices) { | ||||||
|         int index = mountDevices.indexOf(device); |         int index = mountDevices.indexOf(device); | ||||||
|         m_values[QString("hddtotmb%1").arg(index)] = m_values[QString("hddfreemb%1").arg(index)].toDouble() |         m_values[QString("hddtotmb%1").arg(index)] | ||||||
|                                                      + m_values[QString("hddmb%1").arg(index)].toDouble(); |             = 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)].toDouble() |         m_values[QString("hddtotgb%1").arg(index)] | ||||||
|                                                      + m_values[QString("hddgb%1").arg(index)].toDouble(); |             = m_values[QString("hddfreegb%1").arg(index)].toFloat() + m_values[QString("hddgb%1").arg(index)].toFloat(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     // memtot* |     // memtot* | ||||||
|     m_values["memtotmb"] = m_values["memusedmb"].toLongLong() + m_values["memfreemb"].toLongLong(); |     m_values["memtotmb"] = m_values["memusedmb"].toInt() + m_values["memfreemb"].toInt(); | ||||||
|     m_values["memtotgb"] = m_values["memusedgb"].toDouble() + m_values["memfreegb"].toDouble(); |     m_values["memtotgb"] = m_values["memusedgb"].toFloat() + m_values["memfreegb"].toFloat(); | ||||||
|     // mem |     // mem | ||||||
|     m_values["mem"] = 100.0f * m_values["memmb"].toDouble() / m_values["memtotmb"].toDouble(); |     m_values["mem"] = 100.0f * m_values["memmb"].toFloat() / m_values["memtotmb"].toFloat(); | ||||||
|  |  | ||||||
|     // up, down, upkb, downkb, upunits, downunits |     // up, down, upkb, downkb, upunits, downunits | ||||||
|     int netIndex = m_keyOperator->devices("net").indexOf(m_values["netdev"].toString()); |     int netIndex = m_keyOperator->devices("net").indexOf(m_values["netdev"].toString()); | ||||||
| @ -288,10 +282,10 @@ void AWKeys::calculateValues() | |||||||
|     m_values["upunits"] = m_values[QString("upunits%1").arg(netIndex)]; |     m_values["upunits"] = m_values[QString("upunits%1").arg(netIndex)]; | ||||||
|  |  | ||||||
|     // swaptot* |     // swaptot* | ||||||
|     m_values["swaptotmb"] = m_values["swapmb"].toLongLong() + m_values["swapfreemb"].toLongLong(); |     m_values["swaptotmb"] = m_values["swapmb"].toInt() + m_values["swapfreemb"].toInt(); | ||||||
|     m_values["swaptotgb"] = m_values["swapgb"].toDouble() + m_values["swapfreegb"].toDouble(); |     m_values["swaptotgb"] = m_values["swapgb"].toFloat() + m_values["swapfreegb"].toFloat(); | ||||||
|     // swap |     // swap | ||||||
|     m_values["swap"] = 100.0f * m_values["swapmb"].toDouble() / m_values["swaptotmb"].toDouble(); |     m_values["swap"] = 100.0f * m_values["swapmb"].toFloat() / m_values["swaptotmb"].toFloat(); | ||||||
|  |  | ||||||
|     // user defined keys |     // user defined keys | ||||||
|     for (auto &key : m_keyOperator->userKeys()) |     for (auto &key : m_keyOperator->userKeys()) | ||||||
| @ -329,7 +323,7 @@ void AWKeys::createDBusInterface() | |||||||
| QString AWKeys::parsePattern(QString _pattern) const | QString AWKeys::parsePattern(QString _pattern) const | ||||||
| { | { | ||||||
|     // screen sign |     // screen sign | ||||||
|     _pattern.replace("$$", QChar(0x1d)); |     _pattern.replace("$$", QString(0x1d)); | ||||||
|  |  | ||||||
|     // lambdas |     // lambdas | ||||||
|     for (auto &key : m_foundLambdas) |     for (auto &key : m_foundLambdas) | ||||||
| @ -349,7 +343,7 @@ QString AWKeys::parsePattern(QString _pattern) const | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     // prepare strings |     // prepare strings | ||||||
|     _pattern.replace(QChar(0x1d), "$"); |     _pattern.replace(QString(0x1d), "$"); | ||||||
|     if (m_wrapNewLines) |     if (m_wrapNewLines) | ||||||
|         _pattern.replace("\n", "<br>"); |         _pattern.replace("\n", "<br>"); | ||||||
|  |  | ||||||
| @ -357,23 +351,25 @@ QString AWKeys::parsePattern(QString _pattern) const | |||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| void AWKeys::setDataBySource(const QString &_source, const KSysGuard::SensorInfo &_sensor, | void AWKeys::setDataBySource(const QString &_sourceName, const QVariantMap &_data) | ||||||
|                              const KSysGuard::SensorData &_data) |  | ||||||
| { | { | ||||||
|     qCDebug(LOG_AW) << "Source" << _source << _sensor.name << "with data" << _data.payload; |     qCDebug(LOG_AW) << "Source" << _sourceName << "with data" << _data; | ||||||
|  |  | ||||||
|     // first list init |     // first list init | ||||||
|     auto tags = m_aggregator->keysFromSource(_source); |     QStringList tags = m_aggregator->keysFromSource(_sourceName); | ||||||
|     if (tags.isEmpty()) |     if (tags.isEmpty()) | ||||||
|         tags = m_aggregator->registerSource(_source, _sensor.unit, m_requiredKeys); |         tags = m_aggregator->registerSource(_sourceName, _data["units"].toString(), m_requiredKeys); | ||||||
|  |  | ||||||
|     // update data or drop source if there are no matches and exit |     // update data or drop source if there are no matches and exit | ||||||
|     if (tags.isEmpty()) { |     if (tags.isEmpty()) { | ||||||
|         qCInfo(LOG_AW) << "Sensor" << _source << "not found"; |         qCInfo(LOG_AW) << "Source" << _sourceName << "not found"; | ||||||
|         return emit(dropSourceFromDataengine(_source)); |         return emit(dropSourceFromDataengine(_sourceName)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     m_mutex.lock(); |     m_mutex.lock(); | ||||||
|     std::for_each(tags.cbegin(), tags.cend(), [this, &_data](const QString &tag) { m_values[tag] = _data.payload; }); |     // 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"]; | ||||||
|  |     }); | ||||||
|     m_mutex.unlock(); |     m_mutex.unlock(); | ||||||
| } | } | ||||||
|  | |||||||
| @ -19,11 +19,11 @@ | |||||||
| #ifndef AWKEYS_H | #ifndef AWKEYS_H | ||||||
| #define AWKEYS_H | #define AWKEYS_H | ||||||
|  |  | ||||||
|  | #include <Plasma/DataEngine> | ||||||
|  |  | ||||||
| #include <QMutex> | #include <QMutex> | ||||||
| #include <QObject> | #include <QObject> | ||||||
|  |  | ||||||
| #include <ksysguard/systemstats/SensorInfo.h> |  | ||||||
|  |  | ||||||
|  |  | ||||||
| class AWDataAggregator; | class AWDataAggregator; | ||||||
| class AWDataEngineAggregator; | class AWDataEngineAggregator; | ||||||
| @ -56,7 +56,9 @@ public: | |||||||
|     Q_INVOKABLE void editItem(const QString &_type); |     Q_INVOKABLE void editItem(const QString &_type); | ||||||
|  |  | ||||||
| public slots: | public slots: | ||||||
|     void dataUpdated(const QHash<QString, KSysGuard::SensorInfo> &_sensors, const KSysGuard::SensorDataList &_data); |     void dataUpdated(const QString &_sourceName, const Plasma::DataEngine::Data &_data); | ||||||
|  |     // dummy method required by DataEngine connections | ||||||
|  |     static void modelChanged(const QString &, QAbstractItemModel *){}; | ||||||
|  |  | ||||||
| signals: | signals: | ||||||
|     void dropSourceFromDataengine(const QString &_source); |     void dropSourceFromDataengine(const QString &_source); | ||||||
| @ -72,8 +74,7 @@ private: | |||||||
|     void calculateValues(); |     void calculateValues(); | ||||||
|     void createDBusInterface(); |     void createDBusInterface(); | ||||||
|     [[nodiscard]] QString parsePattern(QString _pattern) const; |     [[nodiscard]] QString parsePattern(QString _pattern) const; | ||||||
|     void setDataBySource(const QString &_source, const KSysGuard::SensorInfo &_sensor, |     void setDataBySource(const QString &_sourceName, const QVariantMap &_data); | ||||||
|                          const KSysGuard::SensorData &_data); |  | ||||||
|     // objects |     // objects | ||||||
|     AWDataAggregator *m_dataAggregator = nullptr; |     AWDataAggregator *m_dataAggregator = nullptr; | ||||||
|     AWDataEngineAggregator *m_dataEngineAggregator = nullptr; |     AWDataEngineAggregator *m_dataEngineAggregator = nullptr; | ||||||
|  | |||||||
| @ -64,19 +64,19 @@ QString AWKeysAggregator::formatter(const QVariant &_data, const QString &_key, | |||||||
|     // case block |     // case block | ||||||
|     switch (m_mapper->formatter(_key)) { |     switch (m_mapper->formatter(_key)) { | ||||||
|     case FormatterType::Float: |     case FormatterType::Float: | ||||||
|         output = QString("%1").arg(_data.toDouble(), 5, 'f', 1); |         output = QString("%1").arg(_data.toFloat(), 5, 'f', 1); | ||||||
|         break; |         break; | ||||||
|     case FormatterType::FloatTwoSymbols: |     case FormatterType::FloatTwoSymbols: | ||||||
|         output = QString("%1").arg(_data.toDouble(), 5, 'f', 2); |         output = QString("%1").arg(_data.toFloat(), 5, 'f', 2); | ||||||
|         break; |         break; | ||||||
|     case FormatterType::Integer: |     case FormatterType::Integer: | ||||||
|         output = QString("%1").arg(_data.toDouble(), 4, 'f', 0); |         output = QString("%1").arg(_data.toFloat(), 4, 'f', 0); | ||||||
|         break; |         break; | ||||||
|     case FormatterType::IntegerFive: |     case FormatterType::IntegerFive: | ||||||
|         output = QString("%1").arg(_data.toDouble(), 5, 'f', 0); |         output = QString("%1").arg(_data.toFloat(), 5, 'f', 0); | ||||||
|         break; |         break; | ||||||
|     case FormatterType::IntegerThree: |     case FormatterType::IntegerThree: | ||||||
|         output = QString("%1").arg(_data.toDouble(), 3, 'f', 0); |         output = QString("%1").arg(_data.toFloat(), 3, 'f', 0); | ||||||
|         break; |         break; | ||||||
|     case FormatterType::List: |     case FormatterType::List: | ||||||
|         output = _data.toStringList().join(','); |         output = _data.toStringList().join(','); | ||||||
| @ -85,10 +85,10 @@ QString AWKeysAggregator::formatter(const QVariant &_data, const QString &_key, | |||||||
|         output = _data.toBool() ? m_acOnline : m_acOffline; |         output = _data.toBool() ? m_acOnline : m_acOffline; | ||||||
|         break; |         break; | ||||||
|     case FormatterType::MemGBFormat: |     case FormatterType::MemGBFormat: | ||||||
|         output = QString("%1").arg(_data.toDouble() / (1024.0 * 1024.0), 5, 'f', 1); |         output = QString("%1").arg(_data.toFloat() / (1024.0 * 1024.0), 5, 'f', 1); | ||||||
|         break; |         break; | ||||||
|     case FormatterType::MemMBFormat: |     case FormatterType::MemMBFormat: | ||||||
|         output = QString("%1").arg(_data.toDouble() / 1024.0, 5, 'f', 0); |         output = QString("%1").arg(_data.toFloat() / 1024.0, 5, 'f', 0); | ||||||
|         break; |         break; | ||||||
|     case FormatterType::NetSmartFormat: |     case FormatterType::NetSmartFormat: | ||||||
|         output = [](const float value) { |         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); |                 return QString("%1").arg(value / 1024.0, 4, 'f', 1); | ||||||
|             else |             else | ||||||
|                 return QString("%1").arg(value, 4, 'f', 0); |                 return QString("%1").arg(value, 4, 'f', 0); | ||||||
|         }(_data.toDouble()); |         }(_data.toFloat()); | ||||||
|         break; |         break; | ||||||
|     case FormatterType::NetSmartUnits: |     case FormatterType::NetSmartUnits: | ||||||
|         if (_data.toDouble() > 1024.0) |         if (_data.toFloat() > 1024.0) | ||||||
|             output = m_translate ? i18n("MB/s") : "MB/s"; |             output = m_translate ? i18n("MB/s") : "MB/s"; | ||||||
|         else |         else | ||||||
|             output = m_translate ? i18n("KB/s") : "KB/s"; |             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); |         output = output.rightJustified(8, QLatin1Char(' '), true); | ||||||
|         break; |         break; | ||||||
|     case FormatterType::Temperature: |     case FormatterType::Temperature: | ||||||
|         output = QString("%1").arg(temperature(_data.toDouble()), 5, 'f', 1); |         output = QString("%1").arg(temperature(_data.toFloat()), 5, 'f', 1); | ||||||
|         break; |         break; | ||||||
|     case FormatterType::Time: |     case FormatterType::Time: | ||||||
|         output = QDateTime::fromSecsSinceEpoch(_data.toLongLong()).toString(); |         output = _data.toDateTime().toString(); | ||||||
|         break; |         break; | ||||||
|     case FormatterType::TimeCustom: |     case FormatterType::TimeCustom: | ||||||
|         output = m_customTime; |         output = m_customTime; | ||||||
|         [&output, loc, this](const QDateTime &dt) { |         [&output, loc, this](const QDateTime &dt) { | ||||||
|             for (auto &key : m_timeKeys) |             for (auto &key : m_timeKeys) | ||||||
|                 output.replace(QString("$%1").arg(key), loc.toString(dt, key)); |                 output.replace(QString("$%1").arg(key), loc.toString(dt, key)); | ||||||
|         }(QDateTime::fromSecsSinceEpoch(_data.toLongLong())); |         }(_data.toDateTime()); | ||||||
|         break; |         break; | ||||||
|     case FormatterType::TimeISO: |     case FormatterType::TimeISO: | ||||||
|         output = QDateTime::fromSecsSinceEpoch(_data.toLongLong()).toString(Qt::ISODate); |         output = _data.toDateTime().toString(Qt::ISODate); | ||||||
|         break; |         break; | ||||||
|     case FormatterType::TimeLong: |     case FormatterType::TimeLong: | ||||||
|         output = loc.toString(QDateTime::fromSecsSinceEpoch(_data.toLongLong()), QLocale::LongFormat); |         output = loc.toString(_data.toDateTime(), QLocale::LongFormat); | ||||||
|         break; |         break; | ||||||
|     case FormatterType::TimeShort: |     case FormatterType::TimeShort: | ||||||
|         output = loc.toString(QDateTime::fromSecsSinceEpoch(_data.toLongLong()), QLocale::ShortFormat); |         output = loc.toString(_data.toDateTime(), QLocale::ShortFormat); | ||||||
|         break; |         break; | ||||||
|     case FormatterType::Timestamp: |     case FormatterType::Timestamp: | ||||||
|         output = _data.toString(); |         output = QString("%1").arg(_data.toDateTime().toMSecsSinceEpoch() / 1000.0, 10, 'f', 0); | ||||||
|         break; |         break; | ||||||
|     case FormatterType::Uptime: |     case FormatterType::Uptime: | ||||||
|     case FormatterType::UptimeCustom: |     case FormatterType::UptimeCustom: | ||||||
| @ -150,7 +150,7 @@ QString AWKeysAggregator::formatter(const QVariant &_data, const QString &_key, | |||||||
|                 source.replace("$m", QString("%1").arg(minutes)); |                 source.replace("$m", QString("%1").arg(minutes)); | ||||||
|                 return source; |                 return source; | ||||||
|             }(m_mapper->formatter(_key) == FormatterType::Uptime ? "$ddd$hhh$mmm" : m_customUptime, |             }(m_mapper->formatter(_key) == FormatterType::Uptime ? "$ddd$hhh$mmm" : m_customUptime, | ||||||
|               static_cast<int>(_data.toDouble())); |               static_cast<int>(_data.toFloat())); | ||||||
|         break; |         break; | ||||||
|     case FormatterType::NoFormat: |     case FormatterType::NoFormat: | ||||||
|         output = _data.toString(); |         output = _data.toString(); | ||||||
| @ -234,8 +234,7 @@ void AWKeysAggregator::setTranslate(const bool _translate) | |||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| QStringList AWKeysAggregator::registerSource(const QString &_source, const KSysGuard::Unit &_units, | QStringList AWKeysAggregator::registerSource(const QString &_source, const QString &_units, const QStringList &_keys) | ||||||
|                                              const QStringList &_keys) |  | ||||||
| { | { | ||||||
|     qCDebug(LOG_AW) << "Source" << _source << "with units" << _units; |     qCDebug(LOG_AW) << "Source" << _source << "with units" << _units; | ||||||
|  |  | ||||||
|  | |||||||
| @ -19,8 +19,6 @@ | |||||||
| #ifndef AWKEYSAGGREGATOR_H | #ifndef AWKEYSAGGREGATOR_H | ||||||
| #define AWKEYSAGGREGATOR_H | #define AWKEYSAGGREGATOR_H | ||||||
|  |  | ||||||
| #include <ksysguard/formatter/Unit.h> |  | ||||||
|  |  | ||||||
| #include <QHash> | #include <QHash> | ||||||
| #include <QObject> | #include <QObject> | ||||||
|  |  | ||||||
| @ -83,7 +81,7 @@ public: | |||||||
|     void setTranslate(bool _translate); |     void setTranslate(bool _translate); | ||||||
|  |  | ||||||
| public slots: | public slots: | ||||||
|     QStringList registerSource(const QString &_source, const KSysGuard::Unit &_units, const QStringList &_keys); |     QStringList registerSource(const QString &_source, const QString &_units, const QStringList &_keys); | ||||||
|  |  | ||||||
| private: | private: | ||||||
|     [[nodiscard]] float temperature(float temp) const; |     [[nodiscard]] float temperature(float temp) const; | ||||||
|  | |||||||
| @ -105,9 +105,9 @@ QList<AWPatternFunctions::AWFunction> AWPatternFunctions::findFunctionCalls(cons | |||||||
|             metadata.args = QStringList(); |             metadata.args = QStringList(); | ||||||
|         } else { |         } else { | ||||||
|             // replace '$,' to 0x1d |             // replace '$,' to 0x1d | ||||||
|             argsString.replace("$,", QChar(0x1d)); |             argsString.replace("$,", QString(0x1d)); | ||||||
|             QStringList args = argsString.split(','); |             QStringList args = argsString.split(','); | ||||||
|             std::for_each(args.begin(), args.end(), [](QString &arg) { arg.replace(QChar(0x1d), ","); }); |             std::for_each(args.begin(), args.end(), [](QString &arg) { arg.replace(QString(0x1d), ","); }); | ||||||
|             metadata.args = args; |             metadata.args = args; | ||||||
|         } |         } | ||||||
|         // other variables |         // other variables | ||||||
| @ -130,7 +130,7 @@ QString AWPatternFunctions::insertAllKeys(QString _code, const QStringList &_key | |||||||
|     QList<AWPatternFunctions::AWFunction> found = AWPatternFunctions::findFunctionCalls("aw_all", _code); |     QList<AWPatternFunctions::AWFunction> found = AWPatternFunctions::findFunctionCalls("aw_all", _code); | ||||||
|     for (auto &function : found) { |     for (auto &function : found) { | ||||||
|         QString separator = function.args.isEmpty() ? "," : function.args.at(0); |         QString separator = function.args.isEmpty() ? "," : function.args.at(0); | ||||||
|         QStringList required = _keys.filter(QRegularExpression(function.body)); |         QStringList required = _keys.filter(QRegExp(function.body)); | ||||||
|         std::for_each(required.begin(), required.end(), [](QString &value) { value = QString("%1: $%1").arg(value); }); |         std::for_each(required.begin(), required.end(), [](QString &value) { value = QString("%1: $%1").arg(value); }); | ||||||
|  |  | ||||||
|         _code.replace(function.what, required.join(separator)); |         _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); |     QList<AWPatternFunctions::AWFunction> found = AWPatternFunctions::findFunctionCalls("aw_count", _code); | ||||||
|     for (auto &function : found) { |     for (auto &function : found) { | ||||||
|         int count = _keys.filter(QRegularExpression(function.body)).count(); |         int count = _keys.filter(QRegExp(function.body)).count(); | ||||||
|  |  | ||||||
|         _code.replace(function.what, QString::number(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); |     QList<AWPatternFunctions::AWFunction> found = AWPatternFunctions::findFunctionCalls("aw_names", _code); | ||||||
|     for (auto &function : found) { |     for (auto &function : found) { | ||||||
|         QString separator = function.args.isEmpty() ? "," : function.args.at(0); |         QString separator = function.args.isEmpty() ? "," : function.args.at(0); | ||||||
|         QStringList required = _keys.filter(QRegularExpression(function.body)); |         QStringList required = _keys.filter(QRegExp(function.body)); | ||||||
|  |  | ||||||
|         _code.replace(function.what, required.join(separator)); |         _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); |     QList<AWPatternFunctions::AWFunction> found = AWPatternFunctions::findFunctionCalls("aw_keys", _code); | ||||||
|     for (auto &function : found) { |     for (auto &function : found) { | ||||||
|         QString separator = function.args.isEmpty() ? "," : function.args.at(0); |         QString separator = function.args.isEmpty() ? "," : function.args.at(0); | ||||||
|         QStringList required = _keys.filter(QRegularExpression(function.body)); |         QStringList required = _keys.filter(QRegExp(function.body)); | ||||||
|         std::for_each(required.begin(), required.end(), [](QString &value) { value = QString("$%1").arg(value); }); |         std::for_each(required.begin(), required.end(), [](QString &value) { value = QString("$%1").arg(value); }); | ||||||
|  |  | ||||||
|         _code.replace(function.what, required.join(separator)); |         _code.replace(function.what, required.join(separator)); | ||||||
|  | |||||||
| @ -24,7 +24,6 @@ | |||||||
| #include <QNetworkAccessManager> | #include <QNetworkAccessManager> | ||||||
| #include <QNetworkReply> | #include <QNetworkReply> | ||||||
| #include <QSettings> | #include <QSettings> | ||||||
| #include <QStandardPaths> |  | ||||||
|  |  | ||||||
| #include "awdebug.h" | #include "awdebug.h" | ||||||
|  |  | ||||||
|  | |||||||
| @ -33,13 +33,13 @@ add_library(${SUBPROJECT} STATIC ${SUBPROJECT_SOURCE} ${SUBPROJECT_HEADER} ${SUB | |||||||
| target_link_libraries(${SUBPROJECT} ${Qt_LIBRARIES} ${Kf6_LIBRARIES}) | target_link_libraries(${SUBPROJECT} ${Qt_LIBRARIES} ${Kf6_LIBRARIES}) | ||||||
|  |  | ||||||
| # install | # install | ||||||
| install(DIRECTORY ${SUBPROJECT_CONFIGS} DESTINATION ${KDE_INSTALL_DATADIR}/${PROJECT_NAME}) | install(DIRECTORY ${SUBPROJECT_CONFIGS} DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME}) | ||||||
| install(DIRECTORY ${SUBPROJECT_FORMATTERS} DESTINATION ${KDE_INSTALL_DATADIR}/${PROJECT_NAME}) | install(DIRECTORY ${SUBPROJECT_FORMATTERS} DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME}) | ||||||
| install(DIRECTORY ${SUBPROJECT_GRAPHITEMS} DESTINATION ${KDE_INSTALL_DATADIR}/${PROJECT_NAME}) | install(DIRECTORY ${SUBPROJECT_GRAPHITEMS} DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME}) | ||||||
| install(DIRECTORY ${SUBPROJECT_QUOTES} DESTINATION ${KDE_INSTALL_DATADIR}/${PROJECT_NAME}) | install(DIRECTORY ${SUBPROJECT_QUOTES} DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME}) | ||||||
| install(DIRECTORY ${SUBPROJECT_SCRIPTS} DESTINATION ${KDE_INSTALL_DATADIR}/${PROJECT_NAME}) | install(DIRECTORY ${SUBPROJECT_SCRIPTS} DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME}) | ||||||
| install(DIRECTORY ${SUBPROJECT_REQUESTS} DESTINATION ${KDE_INSTALL_DATADIR}/${PROJECT_NAME}) | install(DIRECTORY ${SUBPROJECT_REQUESTS} DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME}) | ||||||
| install(DIRECTORY ${SUBPROJECT_UPGRADE} DESTINATION ${KDE_INSTALL_DATADIR}/${PROJECT_NAME}) | install(DIRECTORY ${SUBPROJECT_UPGRADE} DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME}) | ||||||
| install(DIRECTORY ${SUBPROJECT_WEATHER} DESTINATION ${KDE_INSTALL_DATADIR}/${PROJECT_NAME}) | install(DIRECTORY ${SUBPROJECT_WEATHER} DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME}) | ||||||
| install(FILES ${SUBPROJECT_INI} DESTINATION /${KDE_INSTALL_CONFDIR}) | install(FILES ${SUBPROJECT_INI} DESTINATION ${KDE_INSTALL_CONFDIR}) | ||||||
| install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${SUBPROJECT_WEATHER_JSON} DESTINATION ${KDE_INSTALL_DATADIR}/${PROJECT_NAME}/weather) | install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${SUBPROJECT_WEATHER_JSON} DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME}/weather) | ||||||
|  | |||||||
| @ -27,8 +27,8 @@ | |||||||
| #include "qcronscheduler.h" | #include "qcronscheduler.h" | ||||||
|  |  | ||||||
|  |  | ||||||
| AbstractExtItem::AbstractExtItem(QObject *_parent, const QString &_filePath) | AbstractExtItem::AbstractExtItem(QWidget *_parent, const QString &_filePath) | ||||||
|     : QObject(_parent) |     : QDialog(_parent) | ||||||
|     , m_fileName(_filePath) |     , m_fileName(_filePath) | ||||||
| { | { | ||||||
|     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; |     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; | ||||||
| @ -97,13 +97,15 @@ void AbstractExtItem::startTimer() | |||||||
|  |  | ||||||
| QString AbstractExtItem::writtableConfig() const | QString AbstractExtItem::writtableConfig() const | ||||||
| { | { | ||||||
|     auto path = m_fileName; |     QString path = m_fileName; | ||||||
|     auto name = QFileInfo(path).fileName(); |     QString name = QFileInfo(path).fileName(); | ||||||
|     path.remove(path.length() - name.length() - 1, name.length() + 1); |     path.remove(path.length() - name.length() - 1, name.length() + 1); | ||||||
|     auto dir = QFileInfo(path).fileName(); |     QString dir = QFileInfo(path).fileName(); | ||||||
|  |  | ||||||
|     return QString("%1/awesomewidgets/%2/%3") |     return QString("%1/awesomewidgets/%2/%3") | ||||||
|         .arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation), dir, name); |         .arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)) | ||||||
|  |         .arg(dir) | ||||||
|  |         .arg(name); | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| @ -267,8 +269,8 @@ void AbstractExtItem::deinitSocket() | |||||||
|  |  | ||||||
|     m_socket->close(); |     m_socket->close(); | ||||||
|     QLocalServer::removeServer(socket()); |     QLocalServer::removeServer(socket()); | ||||||
|     disconnect(m_socket, SIGNAL(newConnection()), this, SLOT(newConnectionReceived())); |  | ||||||
|     delete m_socket; |     delete m_socket; | ||||||
|  |     disconnect(m_socket, SIGNAL(newConnection()), this, SLOT(newConnectionReceived())); | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | |||||||
| @ -18,14 +18,14 @@ | |||||||
| #ifndef ABSTRACTEXTITEM_H | #ifndef ABSTRACTEXTITEM_H | ||||||
| #define ABSTRACTEXTITEM_H | #define ABSTRACTEXTITEM_H | ||||||
|  |  | ||||||
|  | #include <QDialog> | ||||||
| #include <QVariant> | #include <QVariant> | ||||||
|  |  | ||||||
|  |  | ||||||
| class QCronScheduler; | class QCronScheduler; | ||||||
| class QLocalServer; | class QLocalServer; | ||||||
| class QWidget; |  | ||||||
|  |  | ||||||
| class AbstractExtItem : public QObject | class AbstractExtItem : public QDialog | ||||||
| { | { | ||||||
|     Q_OBJECT |     Q_OBJECT | ||||||
|     Q_PROPERTY(bool active READ isActive WRITE setActive) |     Q_PROPERTY(bool active READ isActive WRITE setActive) | ||||||
| @ -40,7 +40,7 @@ class AbstractExtItem : public QObject | |||||||
|     Q_PROPERTY(QString uniq READ uniq) |     Q_PROPERTY(QString uniq READ uniq) | ||||||
|  |  | ||||||
| public: | public: | ||||||
|     explicit AbstractExtItem(QObject *_parent = nullptr, const QString &_filePath = ""); |     explicit AbstractExtItem(QWidget *_parent = nullptr, const QString &_filePath = ""); | ||||||
|     ~AbstractExtItem() override; |     ~AbstractExtItem() override; | ||||||
|     virtual void bumpApi(int _newVer); |     virtual void bumpApi(int _newVer); | ||||||
|     virtual AbstractExtItem *copy(const QString &_fileName, int _number) = 0; |     virtual AbstractExtItem *copy(const QString &_fileName, int _number) = 0; | ||||||
| @ -78,7 +78,7 @@ public slots: | |||||||
|     virtual void initSocket(); |     virtual void initSocket(); | ||||||
|     virtual void readConfiguration(); |     virtual void readConfiguration(); | ||||||
|     virtual QVariantHash run() = 0; |     virtual QVariantHash run() = 0; | ||||||
|     virtual int showConfiguration(QWidget *_parent, const QVariant &_args) = 0; |     virtual int showConfiguration(const QVariant &_args) = 0; | ||||||
|     [[nodiscard]] virtual bool tryDelete() const; |     [[nodiscard]] virtual bool tryDelete() const; | ||||||
|     virtual void writeConfiguration() const; |     virtual void writeConfiguration() const; | ||||||
|  |  | ||||||
| @ -89,8 +89,7 @@ private: | |||||||
|     QCronScheduler *m_scheduler = nullptr; |     QCronScheduler *m_scheduler = nullptr; | ||||||
|     QString m_fileName = "/dev/null"; |     QString m_fileName = "/dev/null"; | ||||||
|     int m_times = 0; |     int m_times = 0; | ||||||
|     // FIXME find a better way to do it |     virtual void translate() = 0; | ||||||
|     virtual void translate(void *_ui) = 0; |  | ||||||
|     // properties |     // properties | ||||||
|     int m_apiVersion = 0; |     int m_apiVersion = 0; | ||||||
|     bool m_active = true; |     bool m_active = true; | ||||||
|  | |||||||
| @ -26,45 +26,65 @@ | |||||||
| #include <utility> | #include <utility> | ||||||
|  |  | ||||||
|  |  | ||||||
| AbstractExtItemAggregator::AbstractExtItemAggregator(QObject *_parent, QString _type) | AbstractExtItemAggregator::AbstractExtItemAggregator(QWidget *_parent, QString _type) | ||||||
|     : QObject(_parent) |     : QDialog(_parent) | ||||||
|  |     , ui(new Ui::AbstractExtItemAggregator) | ||||||
|     , m_type(std::move(_type)) |     , m_type(std::move(_type)) | ||||||
| { | { | ||||||
|     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; |     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; | ||||||
|  |  | ||||||
|     // create directory at $HOME |     // create directory at $HOME | ||||||
|     auto localDir = QString("%1/awesomewidgets/%2") |     QString localDir = QString("%1/awesomewidgets/%2") | ||||||
|                         .arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation), type()); |                            .arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)) | ||||||
|  |                            .arg(type()); | ||||||
|     QDir localDirectory; |     QDir localDirectory; | ||||||
|     if (localDirectory.mkpath(localDir)) |     if (localDirectory.mkpath(localDir)) | ||||||
|         qCInfo(LOG_LIB) << "Created directory" << 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 *))); | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| void AbstractExtItemAggregator::copyItem(QListWidget *_widget) | AbstractExtItemAggregator::~AbstractExtItemAggregator() | ||||||
| { | { | ||||||
|     auto source = itemFromWidget(_widget); |     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; | ||||||
|     auto fileName = getName(); |  | ||||||
|     auto number = uniqNumber(); |     delete ui; | ||||||
|     auto dir = QString("%1/awesomewidgets/%2") | } | ||||||
|                    .arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation), m_type); |  | ||||||
|  |  | ||||||
|  | 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); | ||||||
|     if ((!source) || (fileName.isEmpty())) { |     if ((!source) || (fileName.isEmpty())) { | ||||||
|         qCWarning(LOG_LIB) << "Nothing to copy"; |         qCWarning(LOG_LIB) << "Nothing to copy"; | ||||||
|         return; |         return; | ||||||
|     } |     } | ||||||
|     auto filePath = QString("%1/%2").arg(dir, fileName); |     QString filePath = QString("%1/%2").arg(dir).arg(fileName); | ||||||
|  |  | ||||||
|     auto newItem = source->copy(filePath, number); |     AbstractExtItem *newItem = source->copy(filePath, number); | ||||||
|     if (newItem->showConfiguration(nullptr, configArgs()) == 1) { |     if (newItem->showConfiguration(configArgs()) == 1) { | ||||||
|         initItems(); |         initItems(); | ||||||
|         repaintList(_widget); |         repaintList(); | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| void AbstractExtItemAggregator::deleteItem(QListWidget *_widget) | void AbstractExtItemAggregator::deleteItem() | ||||||
| { | { | ||||||
|     auto source = itemFromWidget(_widget); |     AbstractExtItem *source = itemFromWidget(); | ||||||
|     if (!source) { |     if (!source) { | ||||||
|         qCWarning(LOG_LIB) << "Nothing to delete"; |         qCWarning(LOG_LIB) << "Nothing to delete"; | ||||||
|         return; |         return; | ||||||
| @ -72,63 +92,30 @@ void AbstractExtItemAggregator::deleteItem(QListWidget *_widget) | |||||||
|  |  | ||||||
|     if (source->tryDelete()) { |     if (source->tryDelete()) { | ||||||
|         initItems(); |         initItems(); | ||||||
|         repaintList(_widget); |         repaintList(); | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| void AbstractExtItemAggregator::editItem(QListWidget *_widget) | void AbstractExtItemAggregator::editItem() | ||||||
| { | { | ||||||
|     auto source = itemFromWidget(_widget); |     AbstractExtItem *source = itemFromWidget(); | ||||||
|     if (!source) { |     if (!source) { | ||||||
|         qCWarning(LOG_LIB) << "Nothing to edit"; |         qCWarning(LOG_LIB) << "Nothing to edit"; | ||||||
|         return; |         return; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     if (source->showConfiguration(nullptr, configArgs()) == 1) { |     if (source->showConfiguration(configArgs()) == 1) { | ||||||
|         initItems(); |         initItems(); | ||||||
|         repaintList(_widget); |         repaintList(); | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| 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() | QString AbstractExtItemAggregator::getName() | ||||||
| { | { | ||||||
|     bool ok; |     bool ok; | ||||||
|     auto name = QInputDialog::getText(nullptr, i18n("Enter file name"), i18n("File name"), QLineEdit::Normal, "", &ok); |     QString name = QInputDialog::getText(this, i18n("Enter file name"), i18n("File name"), QLineEdit::Normal, "", &ok); | ||||||
|     if ((!ok) || (name.isEmpty())) |     if ((!ok) || (name.isEmpty())) | ||||||
|         return ""; |         return ""; | ||||||
|     if (!name.endsWith(".desktop")) |     if (!name.endsWith(".desktop")) | ||||||
| @ -138,15 +125,15 @@ QString AbstractExtItemAggregator::getName() | |||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| AbstractExtItem *AbstractExtItemAggregator::itemFromWidget(QListWidget *_widget) const | AbstractExtItem *AbstractExtItemAggregator::itemFromWidget() const | ||||||
| { | { | ||||||
|     auto widgetItem = _widget->currentItem(); |     QListWidgetItem *widgetItem = ui->listWidget->currentItem(); | ||||||
|     if (!widgetItem) |     if (!widgetItem) | ||||||
|         return nullptr; |         return nullptr; | ||||||
|  |  | ||||||
|     AbstractExtItem *found = nullptr; |     AbstractExtItem *found = nullptr; | ||||||
|     for (auto &item : items()) { |     for (auto &item : items()) { | ||||||
|         auto fileName = QFileInfo(item->fileName()).fileName(); |         QString fileName = QFileInfo(item->fileName()).fileName(); | ||||||
|         if (fileName != widgetItem->text()) |         if (fileName != widgetItem->text()) | ||||||
|             continue; |             continue; | ||||||
|         found = item; |         found = item; | ||||||
| @ -159,18 +146,18 @@ AbstractExtItem *AbstractExtItemAggregator::itemFromWidget(QListWidget *_widget) | |||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| void AbstractExtItemAggregator::repaintList(QListWidget *_widget) const | void AbstractExtItemAggregator::repaintList() const | ||||||
| { | { | ||||||
|     _widget->clear(); |     ui->listWidget->clear(); | ||||||
|     for (auto &_item : items()) { |     for (auto &_item : items()) { | ||||||
|         QString fileName = QFileInfo(_item->fileName()).fileName(); |         QString fileName = QFileInfo(_item->fileName()).fileName(); | ||||||
|         auto item = new QListWidgetItem(fileName, _widget); |         auto *item = new QListWidgetItem(fileName, ui->listWidget); | ||||||
|         QStringList tooltip; |         QStringList tooltip; | ||||||
|         tooltip.append(i18n("Name: %1", _item->name())); |         tooltip.append(i18n("Name: %1", _item->name())); | ||||||
|         tooltip.append(i18n("Comment: %1", _item->comment())); |         tooltip.append(i18n("Comment: %1", _item->comment())); | ||||||
|         tooltip.append(i18n("Identity: %1", _item->uniq())); |         tooltip.append(i18n("Identity: %1", _item->uniq())); | ||||||
|         item->setToolTip(tooltip.join('\n')); |         item->setToolTip(tooltip.join('\n')); | ||||||
|         _widget->addItem(item); |         ui->listWidget->addItem(item); | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
| @ -215,3 +202,22 @@ void AbstractExtItemAggregator::setConfigArgs(const QVariant &_configArgs) | |||||||
|  |  | ||||||
|     m_configArgs = _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,6 +18,7 @@ | |||||||
| #ifndef ABSTRACTEXTITEMAGGREGATOR_H | #ifndef ABSTRACTEXTITEMAGGREGATOR_H | ||||||
| #define ABSTRACTEXTITEMAGGREGATOR_H | #define ABSTRACTEXTITEMAGGREGATOR_H | ||||||
|  |  | ||||||
|  | #include <QDialog> | ||||||
| #include <QStandardPaths> | #include <QStandardPaths> | ||||||
|  |  | ||||||
| #include "abstractextitem.h" | #include "abstractextitem.h" | ||||||
| @ -25,45 +26,49 @@ | |||||||
|  |  | ||||||
|  |  | ||||||
| class QAbstractButton; | class QAbstractButton; | ||||||
| class QListWidget; |  | ||||||
| class QListWidgetItem; | class QListWidgetItem; | ||||||
|  | namespace Ui | ||||||
|  | { | ||||||
|  | class AbstractExtItemAggregator; | ||||||
|  | } | ||||||
|  |  | ||||||
| class AbstractExtItemAggregator : public QObject | class AbstractExtItemAggregator : public QDialog | ||||||
| { | { | ||||||
|     Q_OBJECT |     Q_OBJECT | ||||||
|     Q_PROPERTY(QVariant configArgs READ configArgs WRITE setConfigArgs) |     Q_PROPERTY(QVariant configArgs READ configArgs WRITE setConfigArgs) | ||||||
|     Q_PROPERTY(QVariant type READ type) |     Q_PROPERTY(QVariant type READ type) | ||||||
|  |  | ||||||
| public: | public: | ||||||
|     explicit AbstractExtItemAggregator(QObject *_parent, QString _type); |     explicit AbstractExtItemAggregator(QWidget *_parent, QString _type); | ||||||
|  |     ~AbstractExtItemAggregator() override; | ||||||
|     // methods |     // methods | ||||||
|     void copyItem(QListWidget *_widget); |     void copyItem(); | ||||||
|     template <class T> void createItem(QListWidget *_widget) |     template <class T> void createItem() | ||||||
|     { |     { | ||||||
|         auto fileName = getName(); |         QString fileName = getName(); | ||||||
|         auto number = uniqNumber(); |         int number = uniqNumber(); | ||||||
|         auto dir = QString("%1/awesomewidgets/%2") |         QString dir = QString("%1/awesomewidgets/%2") | ||||||
|                        .arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation), m_type); |                           .arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)) | ||||||
|  |                           .arg(m_type); | ||||||
|         if (fileName.isEmpty()) { |         if (fileName.isEmpty()) { | ||||||
|             qCWarning(LOG_LIB) << "Nothing to create"; |             qCWarning(LOG_LIB) << "Nothing to create"; | ||||||
|             return; |             return; | ||||||
|         } |         } | ||||||
|         auto filePath = QString("%1/%2").arg(dir, fileName); |         QString filePath = QString("%1/%2").arg(dir).arg(fileName); | ||||||
|  |  | ||||||
|         auto newItem = new T(this, filePath); |         T *newItem = new T(this, filePath); | ||||||
|         newItem->setNumber(number); |         newItem->setNumber(number); | ||||||
|         if (newItem->showConfiguration(nullptr, configArgs()) == 1) { |         if (newItem->showConfiguration(configArgs()) == 1) { | ||||||
|             initItems(); |             initItems(); | ||||||
|             repaintList(_widget); |             repaintList(); | ||||||
|         } |         } | ||||||
|     }; |     }; | ||||||
|     void deleteItem(QListWidget *_widget); |     void deleteItem(); | ||||||
|     void editItem(QListWidget *_widget); |     void editItem(); | ||||||
|     [[nodiscard]] int exec(); |  | ||||||
|     QString getName(); |     QString getName(); | ||||||
|     virtual void initItems() = 0; |     virtual void initItems() = 0; | ||||||
|     [[nodiscard]] AbstractExtItem *itemFromWidget(QListWidget *_widget) const; |     [[nodiscard]] AbstractExtItem *itemFromWidget() const; | ||||||
|     void repaintList(QListWidget *_widget) const; |     void repaintList() const; | ||||||
|     [[nodiscard]] int uniqNumber() const; |     [[nodiscard]] int uniqNumber() const; | ||||||
|     // get methods |     // get methods | ||||||
|     [[nodiscard]] QVariant configArgs() const; |     [[nodiscard]] QVariant configArgs() const; | ||||||
| @ -73,12 +78,21 @@ public: | |||||||
|     // set methods |     // set methods | ||||||
|     void setConfigArgs(const QVariant &_configArgs); |     void setConfigArgs(const QVariant &_configArgs); | ||||||
|  |  | ||||||
|  | private slots: | ||||||
|  |     void editItemActivated(QListWidgetItem *); | ||||||
|  |     void editItemButtonPressed(QAbstractButton *_button); | ||||||
|  |  | ||||||
| private: | private: | ||||||
|  |     // ui | ||||||
|  |     Ui::AbstractExtItemAggregator *ui = nullptr; | ||||||
|  |     QPushButton *copyButton = nullptr; | ||||||
|  |     QPushButton *createButton = nullptr; | ||||||
|  |     QPushButton *deleteButton = nullptr; | ||||||
|     // properties |     // properties | ||||||
|     QVariant m_configArgs; |     QVariant m_configArgs; | ||||||
|     QString m_type; |     QString m_type; | ||||||
|     // ui methods |     // ui methods | ||||||
|     virtual void doCreateItem(QListWidget *_widget) = 0; |     virtual void doCreateItem() = 0; | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | |||||||
| @ -22,13 +22,19 @@ | |||||||
| #include "awdebug.h" | #include "awdebug.h" | ||||||
|  |  | ||||||
|  |  | ||||||
| AWAbstractFormatter::AWAbstractFormatter(QObject *_parent, const QString &_filePath) | AWAbstractFormatter::AWAbstractFormatter(QWidget *_parent, const QString &_filePath) | ||||||
|     : AbstractExtItem(_parent, _filePath) |     : AbstractExtItem(_parent, _filePath) | ||||||
| { | { | ||||||
|     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; |     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | AWAbstractFormatter::~AWAbstractFormatter() | ||||||
|  | { | ||||||
|  |     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
| void AWAbstractFormatter::copyDefaults(AbstractExtItem *_other) const | void AWAbstractFormatter::copyDefaults(AbstractExtItem *_other) const | ||||||
| { | { | ||||||
|     AbstractExtItem::copyDefaults(_other); |     AbstractExtItem::copyDefaults(_other); | ||||||
| @ -39,7 +45,7 @@ void AWAbstractFormatter::copyDefaults(AbstractExtItem *_other) const | |||||||
|  |  | ||||||
| QString AWAbstractFormatter::uniq() const | QString AWAbstractFormatter::uniq() const | ||||||
| { | { | ||||||
|     return QString("%1(%2)").arg(name(), strType()); |     return QString("%1(%2)").arg(name()).arg(strType()); | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | |||||||
| @ -32,8 +32,8 @@ class AWAbstractFormatter : public AbstractExtItem | |||||||
| public: | public: | ||||||
|     enum class FormatterClass { DateTime, Float, List, Script, String, NoFormat, Json }; |     enum class FormatterClass { DateTime, Float, List, Script, String, NoFormat, Json }; | ||||||
|  |  | ||||||
|     explicit AWAbstractFormatter(QObject *_parent = nullptr, const QString &_filePath = ""); |     explicit AWAbstractFormatter(QWidget *_parent = nullptr, const QString &_filePath = ""); | ||||||
|     ~AWAbstractFormatter() override = default; |     ~AWAbstractFormatter() override; | ||||||
|     [[nodiscard]] virtual QString convert(const QVariant &_value) const = 0; |     [[nodiscard]] virtual QString convert(const QVariant &_value) const = 0; | ||||||
|     void copyDefaults(AbstractExtItem *_other) const override; |     void copyDefaults(AbstractExtItem *_other) const override; | ||||||
|     [[nodiscard]] QString uniq() const override; |     [[nodiscard]] QString uniq() const override; | ||||||
|  | |||||||
| @ -15,6 +15,7 @@ | |||||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * |  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||||
|  ***************************************************************************/ |  ***************************************************************************/ | ||||||
|  |  | ||||||
|  |  | ||||||
| #include "awdatetimeformatter.h" | #include "awdatetimeformatter.h" | ||||||
| #include "ui_awdatetimeformatter.h" | #include "ui_awdatetimeformatter.h" | ||||||
|  |  | ||||||
| @ -26,13 +27,24 @@ | |||||||
| #include "awdebug.h" | #include "awdebug.h" | ||||||
|  |  | ||||||
|  |  | ||||||
| AWDateTimeFormatter::AWDateTimeFormatter(QObject *_parent, const QString &_filePath) | AWDateTimeFormatter::AWDateTimeFormatter(QWidget *_parent, const QString &_filePath) | ||||||
|     : AWAbstractFormatter(_parent, _filePath) |     : AWAbstractFormatter(_parent, _filePath) | ||||||
|  |     , ui(new Ui::AWDateTimeFormatter) | ||||||
| { | { | ||||||
|     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; |     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; | ||||||
|  |  | ||||||
|     if (!_filePath.isEmpty()) |     if (!_filePath.isEmpty()) | ||||||
|         AWDateTimeFormatter::readConfiguration(); |         AWDateTimeFormatter::readConfiguration(); | ||||||
|  |     ui->setupUi(this); | ||||||
|  |     AWDateTimeFormatter::translate(); | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | AWDateTimeFormatter::~AWDateTimeFormatter() | ||||||
|  | { | ||||||
|  |     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; | ||||||
|  |  | ||||||
|  |     delete ui; | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| @ -48,7 +60,7 @@ AWDateTimeFormatter *AWDateTimeFormatter::copy(const QString &_fileName, const i | |||||||
| { | { | ||||||
|     qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number; |     qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number; | ||||||
|  |  | ||||||
|     auto item = new AWDateTimeFormatter(parent(), _fileName); |     auto *item = new AWDateTimeFormatter(dynamic_cast<QWidget *>(parent()), _fileName); | ||||||
|     AWAbstractFormatter::copyDefaults(item); |     AWAbstractFormatter::copyDefaults(item); | ||||||
|     item->setFormat(format()); |     item->setFormat(format()); | ||||||
|     item->setTranslateString(translateString()); |     item->setTranslateString(translateString()); | ||||||
| @ -102,36 +114,27 @@ void AWDateTimeFormatter::readConfiguration() | |||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| int AWDateTimeFormatter::showConfiguration(QWidget *_parent, const QVariant &_args) | int AWDateTimeFormatter::showConfiguration(const QVariant &_args) | ||||||
| { | { | ||||||
|     Q_UNUSED(_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_name->setText(name()); | ||||||
|     ui->lineEdit_comment->setText(comment()); |     ui->lineEdit_comment->setText(comment()); | ||||||
|     ui->label_typeValue->setText("DateTime"); |     ui->label_typeValue->setText("DateTime"); | ||||||
|     ui->lineEdit_format->setText(format()); |     ui->lineEdit_format->setText(format()); | ||||||
|     ui->checkBox_translate->setCheckState(translateString() ? Qt::Checked : Qt::Unchecked); |     ui->checkBox_translate->setCheckState(translateString() ? Qt::Checked : Qt::Unchecked); | ||||||
|  |  | ||||||
|     auto ret = dialog->exec(); |     int ret = exec(); | ||||||
|     if (ret == 1) { |     if (ret != 1) | ||||||
|         setName(ui->lineEdit_name->text()); |         return ret; | ||||||
|         setComment(ui->lineEdit_comment->text()); |     setName(ui->lineEdit_name->text()); | ||||||
|         setApiVersion(AW_FORMATTER_API); |     setComment(ui->lineEdit_comment->text()); | ||||||
|         setStrType(ui->label_typeValue->text()); |     setApiVersion(AW_FORMATTER_API); | ||||||
|         setFormat(ui->lineEdit_format->text()); |     setStrType(ui->label_typeValue->text()); | ||||||
|         setTranslateString(ui->checkBox_translate->checkState() == Qt::Checked); |     setFormat(ui->lineEdit_format->text()); | ||||||
|  |     setTranslateString(ui->checkBox_translate->checkState() == Qt::Checked); | ||||||
|         writeConfiguration(); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     dialog->deleteLater(); |  | ||||||
|     delete ui; |  | ||||||
|  |  | ||||||
|  |     writeConfiguration(); | ||||||
|     return ret; |     return ret; | ||||||
| } | } | ||||||
|  |  | ||||||
| @ -157,10 +160,9 @@ void AWDateTimeFormatter::initLocale() | |||||||
|     m_locale = m_translate ? QLocale::system() : QLocale::c(); |     m_locale = m_translate ? QLocale::system() : QLocale::c(); | ||||||
| } | } | ||||||
|  |  | ||||||
| void AWDateTimeFormatter::translate(void *_ui) |  | ||||||
| { |  | ||||||
|     auto ui = reinterpret_cast<Ui::AWDateTimeFormatter *>(_ui); |  | ||||||
|  |  | ||||||
|  | void AWDateTimeFormatter::translate() | ||||||
|  | { | ||||||
|     ui->label_name->setText(i18n("Name")); |     ui->label_name->setText(i18n("Name")); | ||||||
|     ui->label_comment->setText(i18n("Comment")); |     ui->label_comment->setText(i18n("Comment")); | ||||||
|     ui->label_type->setText(i18n("Type")); |     ui->label_type->setText(i18n("Type")); | ||||||
|  | |||||||
| @ -23,6 +23,11 @@ | |||||||
| #include "awabstractformatter.h" | #include "awabstractformatter.h" | ||||||
|  |  | ||||||
|  |  | ||||||
|  | namespace Ui | ||||||
|  | { | ||||||
|  | class AWDateTimeFormatter; | ||||||
|  | } | ||||||
|  |  | ||||||
| class AWDateTimeFormatter : public AWAbstractFormatter | class AWDateTimeFormatter : public AWAbstractFormatter | ||||||
| { | { | ||||||
|     Q_OBJECT |     Q_OBJECT | ||||||
| @ -30,7 +35,8 @@ class AWDateTimeFormatter : public AWAbstractFormatter | |||||||
|     Q_PROPERTY(bool translateString READ translateString WRITE setTranslateString) |     Q_PROPERTY(bool translateString READ translateString WRITE setTranslateString) | ||||||
|  |  | ||||||
| public: | public: | ||||||
|     explicit AWDateTimeFormatter(QObject *_parent = nullptr, const QString &_filePath = ""); |     explicit AWDateTimeFormatter(QWidget *_parent = nullptr, const QString &_filePath = ""); | ||||||
|  |     ~AWDateTimeFormatter() override; | ||||||
|     [[nodiscard]] QString convert(const QVariant &_value) const override; |     [[nodiscard]] QString convert(const QVariant &_value) const override; | ||||||
|     AWDateTimeFormatter *copy(const QString &_fileName, int _number) override; |     AWDateTimeFormatter *copy(const QString &_fileName, int _number) override; | ||||||
|     // properties |     // properties | ||||||
| @ -41,12 +47,13 @@ public: | |||||||
|  |  | ||||||
| public slots: | public slots: | ||||||
|     void readConfiguration() override; |     void readConfiguration() override; | ||||||
|     int showConfiguration(QWidget *_parent, const QVariant &_args) override; |     int showConfiguration(const QVariant &_args) override; | ||||||
|     void writeConfiguration() const override; |     void writeConfiguration() const override; | ||||||
|  |  | ||||||
| private: | private: | ||||||
|  |     Ui::AWDateTimeFormatter *ui = nullptr; | ||||||
|     void initLocale(); |     void initLocale(); | ||||||
|     void translate(void *_ui) override; |     void translate() override; | ||||||
|     // properties |     // properties | ||||||
|     QLocale m_locale; |     QLocale m_locale; | ||||||
|     QString m_format = ""; |     QString m_format = ""; | ||||||
|  | |||||||
| @ -5,120 +5,120 @@ | |||||||
|     "image": { |     "image": { | ||||||
|         "__comment": "should be described as html image with full path inside", |         "__comment": "should be described as html image with full path inside", | ||||||
|  |  | ||||||
|         "default": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/3200.gif\">", |         "default": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/3200.gif\">", | ||||||
|  |  | ||||||
|         "800": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/01d.png\">", |         "800": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/01d.png\">", | ||||||
|  |  | ||||||
|         "801": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/02d.png\">", |         "801": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/02d.png\">", | ||||||
|  |  | ||||||
|         "802": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/03d.png\">", |         "802": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/03d.png\">", | ||||||
|         "803": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/03d.png\">", |         "803": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/03d.png\">", | ||||||
|  |  | ||||||
|                 "804": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/04d.png\">", |         "804": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/04d.png\">", | ||||||
|  |  | ||||||
|         "300": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/09d.png\">", |         "300": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/09d.png\">", | ||||||
|         "301": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/09d.png\">", |         "301": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/09d.png\">", | ||||||
|         "302": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/09d.png\">", |         "302": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/09d.png\">", | ||||||
|         "310": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/09d.png\">", |         "310": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/09d.png\">", | ||||||
|         "311": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/09d.png\">", |         "311": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/09d.png\">", | ||||||
|         "312": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/09d.png\">", |         "312": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/09d.png\">", | ||||||
|         "313": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/09d.png\">", |         "313": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/09d.png\">", | ||||||
|         "314": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/09d.png\">", |         "314": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/09d.png\">", | ||||||
|         "321": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/09d.png\">", |         "321": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/09d.png\">", | ||||||
|         "520": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/09d.png\">", |         "520": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/09d.png\">", | ||||||
|         "521": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/09d.png\">", |         "521": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/09d.png\">", | ||||||
|         "522": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/09d.png\">", |         "522": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/09d.png\">", | ||||||
|         "531": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/09d.png\">", |         "531": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/09d.png\">", | ||||||
|  |  | ||||||
|         "500": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/10d.png\">", |         "500": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/10d.png\">", | ||||||
|         "501": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/10d.png\">", |         "501": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/10d.png\">", | ||||||
|         "502": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/10d.png\">", |         "502": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/10d.png\">", | ||||||
|         "503": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/10d.png\">", |         "503": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/10d.png\">", | ||||||
|         "504": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/10d.png\">", |         "504": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/10d.png\">", | ||||||
|  |  | ||||||
|         "200": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/11d.png\">", |         "200": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/11d.png\">", | ||||||
|         "201": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/11d.png\">", |         "201": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/11d.png\">", | ||||||
|         "202": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/11d.png\">", |         "202": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/11d.png\">", | ||||||
|         "210": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/11d.png\">", |         "210": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/11d.png\">", | ||||||
|         "211": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/11d.png\">", |         "211": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/11d.png\">", | ||||||
|         "212": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/11d.png\">", |         "212": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/11d.png\">", | ||||||
|         "221": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/11d.png\">", |         "221": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/11d.png\">", | ||||||
|         "230": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/11d.png\">", |         "230": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/11d.png\">", | ||||||
|         "231": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/11d.png\">", |         "231": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/11d.png\">", | ||||||
|         "232": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/11d.png\">", |         "232": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/11d.png\">", | ||||||
|  |  | ||||||
|         "511": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/13d.png\">", |         "511": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/13d.png\">", | ||||||
|         "600": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/13d.png\">", |         "600": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/13d.png\">", | ||||||
|         "601": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/13d.png\">", |         "601": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/13d.png\">", | ||||||
|         "602": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/13d.png\">", |         "602": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/13d.png\">", | ||||||
|         "611": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/13d.png\">", |         "611": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/13d.png\">", | ||||||
|         "612": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/13d.png\">", |         "612": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/13d.png\">", | ||||||
|         "615": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/13d.png\">", |         "615": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/13d.png\">", | ||||||
|         "616": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/13d.png\">", |         "616": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/13d.png\">", | ||||||
|         "620": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/13d.png\">", |         "620": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/13d.png\">", | ||||||
|         "621": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/13d.png\">", |         "621": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/13d.png\">", | ||||||
|         "622": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/13d.png\">", |         "622": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/13d.png\">", | ||||||
|  |  | ||||||
|         "701": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/50d.png\">", |         "701": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/50d.png\">", | ||||||
|         "711": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/50d.png\">", |         "711": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/50d.png\">", | ||||||
|         "721": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/50d.png\">", |         "721": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/50d.png\">", | ||||||
|         "731": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/50d.png\">", |         "731": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/50d.png\">", | ||||||
|         "741": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/50d.png\">", |         "741": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/50d.png\">", | ||||||
|         "751": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/50d.png\">", |         "751": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/50d.png\">", | ||||||
|         "761": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/50d.png\">", |         "761": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/50d.png\">", | ||||||
|         "762": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/50d.png\">", |         "762": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/50d.png\">", | ||||||
|         "771": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/50d.png\">", |         "771": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/50d.png\">", | ||||||
|         "781": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/50d.png\">", |         "781": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/50d.png\">", | ||||||
|  |  | ||||||
|         "0": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/0.gif\">", |         "0": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/0.gif\">", | ||||||
|         "1": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/1.gif\">", |         "1": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/1.gif\">", | ||||||
|         "2": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/2.gif\">", |         "2": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/2.gif\">", | ||||||
|         "3": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/3.gif\">", |         "3": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/3.gif\">", | ||||||
|         "4": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/4.gif\">", |         "4": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/4.gif\">", | ||||||
|         "5": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/5.gif\">", |         "5": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/5.gif\">", | ||||||
|         "6": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/6.gif\">", |         "6": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/6.gif\">", | ||||||
|         "7": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/7.gif\">", |         "7": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/7.gif\">", | ||||||
|         "8": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/8.gif\">", |         "8": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/8.gif\">", | ||||||
|         "9": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/9.gif\">", |         "9": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/9.gif\">", | ||||||
|         "10": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/10.gif\">", |         "10": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/10.gif\">", | ||||||
|         "11": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/11.gif\">", |         "11": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/11.gif\">", | ||||||
|         "12": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/12.gif\">", |         "12": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/12.gif\">", | ||||||
|         "13": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/13.gif\">", |         "13": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/13.gif\">", | ||||||
|         "14": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/14.gif\">", |         "14": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/14.gif\">", | ||||||
|         "15": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/15.gif\">", |         "15": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/15.gif\">", | ||||||
|         "16": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/16.gif\">", |         "16": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/16.gif\">", | ||||||
|         "17": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/17.gif\">", |         "17": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/17.gif\">", | ||||||
|         "18": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/18.gif\">", |         "18": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/18.gif\">", | ||||||
|         "19": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/19.gif\">", |         "19": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/19.gif\">", | ||||||
|         "20": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/20.gif\">", |         "20": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/20.gif\">", | ||||||
|         "21": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/21.gif\">", |         "21": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/21.gif\">", | ||||||
|         "22": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/22.gif\">", |         "22": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/22.gif\">", | ||||||
|         "23": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/23.gif\">", |         "23": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/23.gif\">", | ||||||
|         "24": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/24.gif\">", |         "24": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/24.gif\">", | ||||||
|         "25": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/25.gif\">", |         "25": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/25.gif\">", | ||||||
|         "26": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/26.gif\">", |         "26": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/26.gif\">", | ||||||
|         "27": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/27.gif\">", |         "27": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/27.gif\">", | ||||||
|         "28": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/28.gif\">", |         "28": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/28.gif\">", | ||||||
|         "29": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/29.gif\">", |         "29": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/29.gif\">", | ||||||
|         "30": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/30.gif\">", |         "30": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/30.gif\">", | ||||||
|         "31": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/31.gif\">", |         "31": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/31.gif\">", | ||||||
|         "32": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/32.gif\">", |         "32": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/32.gif\">", | ||||||
|         "33": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/33.gif\">", |         "33": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/33.gif\">", | ||||||
|         "34": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/34.gif\">", |         "34": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/34.gif\">", | ||||||
|         "35": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/35.gif\">", |         "35": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/35.gif\">", | ||||||
|         "36": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/36.gif\">", |         "36": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/36.gif\">", | ||||||
|         "37": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/37.gif\">", |         "37": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/37.gif\">", | ||||||
|         "38": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/38.gif\">", |         "38": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/38.gif\">", | ||||||
|         "39": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/39.gif\">", |         "39": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/39.gif\">", | ||||||
|         "40": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/40.gif\">", |         "40": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/40.gif\">", | ||||||
|         "41": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/41.gif\">", |         "41": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/41.gif\">", | ||||||
|         "42": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/42.gif\">", |         "42": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/42.gif\">", | ||||||
|         "43": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/43.gif\">", |         "43": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/43.gif\">", | ||||||
|         "44": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/44.gif\">", |         "44": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/44.gif\">", | ||||||
|         "45": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/45.gif\">", |         "45": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/45.gif\">", | ||||||
|         "46": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/46.gif\">", |         "46": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/46.gif\">", | ||||||
|         "47": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/47.gif\">", |         "47": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/47.gif\">", | ||||||
|         "3200": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/3200.gif\">" |         "3200": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/3200.gif\">" | ||||||
|     }, |     }, | ||||||
|  |  | ||||||
|     "text": { |     "text": { | ||||||
|  | |||||||
| @ -15,6 +15,7 @@ | |||||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * |  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||||
|  ***************************************************************************/ |  ***************************************************************************/ | ||||||
|  |  | ||||||
|  |  | ||||||
| #include "awfloatformatter.h" | #include "awfloatformatter.h" | ||||||
| #include "ui_awfloatformatter.h" | #include "ui_awfloatformatter.h" | ||||||
|  |  | ||||||
| @ -25,13 +26,24 @@ | |||||||
| #include "awdebug.h" | #include "awdebug.h" | ||||||
|  |  | ||||||
|  |  | ||||||
| AWFloatFormatter::AWFloatFormatter(QObject *_parent, const QString &_filePath) | AWFloatFormatter::AWFloatFormatter(QWidget *_parent, const QString &_filePath) | ||||||
|     : AWAbstractFormatter(_parent, _filePath) |     : AWAbstractFormatter(_parent, _filePath) | ||||||
|  |     , ui(new Ui::AWFloatFormatter) | ||||||
| { | { | ||||||
|     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; |     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; | ||||||
|  |  | ||||||
|     if (!_filePath.isEmpty()) |     if (!_filePath.isEmpty()) | ||||||
|         AWFloatFormatter::readConfiguration(); |         AWFloatFormatter::readConfiguration(); | ||||||
|  |     ui->setupUi(this); | ||||||
|  |     AWFloatFormatter::translate(); | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | AWFloatFormatter::~AWFloatFormatter() | ||||||
|  | { | ||||||
|  |     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; | ||||||
|  |  | ||||||
|  |     delete ui; | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| @ -39,7 +51,7 @@ QString AWFloatFormatter::convert(const QVariant &_value) const | |||||||
| { | { | ||||||
|     qCDebug(LOG_LIB) << "Convert value" << _value; |     qCDebug(LOG_LIB) << "Convert value" << _value; | ||||||
|  |  | ||||||
|     auto output |     QString output | ||||||
|         = QString("%1").arg(_value.toDouble() * multiplier() + summand(), count(), format(), precision(), fillChar()); |         = QString("%1").arg(_value.toDouble() * multiplier() + summand(), count(), format(), precision(), fillChar()); | ||||||
|     if (forceWidth()) |     if (forceWidth()) | ||||||
|         output = output.left(count()); |         output = output.left(count()); | ||||||
| @ -52,7 +64,7 @@ AWFloatFormatter *AWFloatFormatter::copy(const QString &_fileName, const int _nu | |||||||
| { | { | ||||||
|     qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number; |     qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number; | ||||||
|  |  | ||||||
|     auto item = new AWFloatFormatter(parent(), _fileName); |     auto *item = new AWFloatFormatter(dynamic_cast<QWidget *>(parent()), _fileName); | ||||||
|     AWAbstractFormatter::copyDefaults(item); |     AWAbstractFormatter::copyDefaults(item); | ||||||
|     item->setCount(count()); |     item->setCount(count()); | ||||||
|     item->setFormat(format()); |     item->setFormat(format()); | ||||||
| @ -190,15 +202,10 @@ void AWFloatFormatter::readConfiguration() | |||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| int AWFloatFormatter::showConfiguration(QWidget *_parent, const QVariant &_args) | int AWFloatFormatter::showConfiguration(const QVariant &_args) | ||||||
| { | { | ||||||
|     Q_UNUSED(_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_name->setText(name()); | ||||||
|     ui->lineEdit_comment->setText(comment()); |     ui->lineEdit_comment->setText(comment()); | ||||||
|     ui->label_typeValue->setText("Float"); |     ui->label_typeValue->setText("Float"); | ||||||
| @ -210,26 +217,22 @@ int AWFloatFormatter::showConfiguration(QWidget *_parent, const QVariant &_args) | |||||||
|     ui->doubleSpinBox_multiplier->setValue(multiplier()); |     ui->doubleSpinBox_multiplier->setValue(multiplier()); | ||||||
|     ui->doubleSpinBox_summand->setValue(summand()); |     ui->doubleSpinBox_summand->setValue(summand()); | ||||||
|  |  | ||||||
|     auto ret = dialog->exec(); |     int ret = exec(); | ||||||
|     if (ret == 1) { |     if (ret != 1) | ||||||
|         setName(ui->lineEdit_name->text()); |         return ret; | ||||||
|         setComment(ui->lineEdit_comment->text()); |     setName(ui->lineEdit_name->text()); | ||||||
|         setApiVersion(AW_FORMATTER_API); |     setComment(ui->lineEdit_comment->text()); | ||||||
|         setStrType(ui->label_typeValue->text()); |     setApiVersion(AW_FORMATTER_API); | ||||||
|         setFormat(ui->comboBox_format->currentText().at(0).toLatin1()); |     setStrType(ui->label_typeValue->text()); | ||||||
|         setPrecision(ui->spinBox_precision->value()); |     setFormat(ui->comboBox_format->currentText().at(0).toLatin1()); | ||||||
|         setCount(ui->spinBox_width->value()); |     setPrecision(ui->spinBox_precision->value()); | ||||||
|         setFillChar(ui->lineEdit_fill->text().at(0)); |     setCount(ui->spinBox_width->value()); | ||||||
|         setForceWidth(ui->checkBox_forceWidth->checkState() == Qt::Checked); |     setFillChar(ui->lineEdit_fill->text().at(0)); | ||||||
|         setMultiplier(ui->doubleSpinBox_multiplier->value()); |     setForceWidth(ui->checkBox_forceWidth->checkState() == Qt::Checked); | ||||||
|         setSummand(ui->doubleSpinBox_summand->value()); |     setMultiplier(ui->doubleSpinBox_multiplier->value()); | ||||||
|  |     setSummand(ui->doubleSpinBox_summand->value()); | ||||||
|         writeConfiguration(); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     dialog->deleteLater(); |  | ||||||
|     delete ui; |  | ||||||
|  |  | ||||||
|  |     writeConfiguration(); | ||||||
|     return ret; |     return ret; | ||||||
| } | } | ||||||
|  |  | ||||||
| @ -255,10 +258,8 @@ void AWFloatFormatter::writeConfiguration() const | |||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| void AWFloatFormatter::translate(void *_ui) | void AWFloatFormatter::translate() | ||||||
| { | { | ||||||
|     auto ui = reinterpret_cast<Ui::AWFloatFormatter *>(_ui); |  | ||||||
|  |  | ||||||
|     ui->label_name->setText(i18n("Name")); |     ui->label_name->setText(i18n("Name")); | ||||||
|     ui->label_comment->setText(i18n("Comment")); |     ui->label_comment->setText(i18n("Comment")); | ||||||
|     ui->label_type->setText(i18n("Type")); |     ui->label_type->setText(i18n("Type")); | ||||||
|  | |||||||
| @ -21,6 +21,11 @@ | |||||||
| #include "awabstractformatter.h" | #include "awabstractformatter.h" | ||||||
|  |  | ||||||
|  |  | ||||||
|  | namespace Ui | ||||||
|  | { | ||||||
|  | class AWFloatFormatter; | ||||||
|  | } | ||||||
|  |  | ||||||
| class AWFloatFormatter : public AWAbstractFormatter | class AWFloatFormatter : public AWAbstractFormatter | ||||||
| { | { | ||||||
|     Q_OBJECT |     Q_OBJECT | ||||||
| @ -33,7 +38,8 @@ class AWFloatFormatter : public AWAbstractFormatter | |||||||
|     Q_PROPERTY(double summand READ summand WRITE setSummand) |     Q_PROPERTY(double summand READ summand WRITE setSummand) | ||||||
|  |  | ||||||
| public: | public: | ||||||
|     explicit AWFloatFormatter(QObject *_parent = nullptr, const QString &_filePath = ""); |     explicit AWFloatFormatter(QWidget *_parent = nullptr, const QString &_filePath = ""); | ||||||
|  |     ~AWFloatFormatter() override; | ||||||
|     [[nodiscard]] QString convert(const QVariant &_value) const override; |     [[nodiscard]] QString convert(const QVariant &_value) const override; | ||||||
|     AWFloatFormatter *copy(const QString &_fileName, int _number) override; |     AWFloatFormatter *copy(const QString &_fileName, int _number) override; | ||||||
|     // properties |     // properties | ||||||
| @ -54,11 +60,12 @@ public: | |||||||
|  |  | ||||||
| public slots: | public slots: | ||||||
|     void readConfiguration() override; |     void readConfiguration() override; | ||||||
|     int showConfiguration(QWidget *_parent, const QVariant &_args) override; |     int showConfiguration(const QVariant &_args) override; | ||||||
|     void writeConfiguration() const override; |     void writeConfiguration() const override; | ||||||
|  |  | ||||||
| private: | private: | ||||||
|     void translate(void *_ui) override; |     Ui::AWFloatFormatter *ui = nullptr; | ||||||
|  |     void translate() override; | ||||||
|     // properties |     // properties | ||||||
|     int m_count = 0; |     int m_count = 0; | ||||||
|     QChar m_fillChar = QChar(); |     QChar m_fillChar = QChar(); | ||||||
|  | |||||||
| @ -15,6 +15,7 @@ | |||||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * |  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||||
|  ***************************************************************************/ |  ***************************************************************************/ | ||||||
|  |  | ||||||
|  |  | ||||||
| #include "awjsonformatter.h" | #include "awjsonformatter.h" | ||||||
| #include "ui_awjsonformatter.h" | #include "ui_awjsonformatter.h" | ||||||
|  |  | ||||||
| @ -26,13 +27,24 @@ | |||||||
| #include "awdebug.h" | #include "awdebug.h" | ||||||
|  |  | ||||||
|  |  | ||||||
| AWJsonFormatter::AWJsonFormatter(QObject *_parent, const QString &_filePath) | AWJsonFormatter::AWJsonFormatter(QWidget *_parent, const QString &_filePath) | ||||||
|     : AWAbstractFormatter(_parent, _filePath) |     : AWAbstractFormatter(_parent, _filePath) | ||||||
|  |     , ui(new Ui::AWJsonFormatter) | ||||||
| { | { | ||||||
|     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; |     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; | ||||||
|  |  | ||||||
|     if (!_filePath.isEmpty()) |     if (!_filePath.isEmpty()) | ||||||
|         AWJsonFormatter::readConfiguration(); |         AWJsonFormatter::readConfiguration(); | ||||||
|  |     ui->setupUi(this); | ||||||
|  |     AWJsonFormatter::translate(); | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | AWJsonFormatter::~AWJsonFormatter() | ||||||
|  | { | ||||||
|  |     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; | ||||||
|  |  | ||||||
|  |     delete ui; | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| @ -42,7 +54,7 @@ QString AWJsonFormatter::convert(const QVariant &_value) const | |||||||
|  |  | ||||||
|     // check if _value is string and parse first if required |     // check if _value is string and parse first if required | ||||||
|     QJsonDocument json = _value.userType() == QMetaType::QString ? QJsonDocument::fromJson(_value.toString().toUtf8()) |     QJsonDocument json = _value.userType() == QMetaType::QString ? QJsonDocument::fromJson(_value.toString().toUtf8()) | ||||||
|                                                                  : QJsonDocument::fromVariant(_value); |                                                            : QJsonDocument::fromVariant(_value); | ||||||
|     QVariant converted = json.toVariant(); |     QVariant converted = json.toVariant(); | ||||||
|     for (auto &element : m_splittedPath) |     for (auto &element : m_splittedPath) | ||||||
|         converted = getFromJson(converted, element); |         converted = getFromJson(converted, element); | ||||||
| @ -55,7 +67,7 @@ AWJsonFormatter *AWJsonFormatter::copy(const QString &_fileName, const int _numb | |||||||
| { | { | ||||||
|     qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number; |     qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number; | ||||||
|  |  | ||||||
|     auto item = new AWJsonFormatter(parent(), _fileName); |     auto *item = new AWJsonFormatter(dynamic_cast<QWidget *>(parent()), _fileName); | ||||||
|     AWAbstractFormatter::copyDefaults(item); |     AWAbstractFormatter::copyDefaults(item); | ||||||
|     item->setNumber(_number); |     item->setNumber(_number); | ||||||
|     item->setPath(path()); |     item->setPath(path()); | ||||||
| @ -93,34 +105,25 @@ void AWJsonFormatter::readConfiguration() | |||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| int AWJsonFormatter::showConfiguration(QWidget *_parent, const QVariant &args) | int AWJsonFormatter::showConfiguration(const QVariant &args) | ||||||
| { | { | ||||||
|     Q_UNUSED(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_name->setText(name()); | ||||||
|     ui->lineEdit_comment->setText(comment()); |     ui->lineEdit_comment->setText(comment()); | ||||||
|     ui->label_typeValue->setText("Json"); |     ui->label_typeValue->setText("Json"); | ||||||
|     ui->lineEdit_path->setText(path()); |     ui->lineEdit_path->setText(path()); | ||||||
|  |  | ||||||
|     auto ret = dialog->exec(); |     int ret = exec(); | ||||||
|     if (ret == 1) { |     if (ret != 1) | ||||||
|         setName(ui->lineEdit_name->text()); |         return ret; | ||||||
|         setComment(ui->lineEdit_comment->text()); |     setName(ui->lineEdit_name->text()); | ||||||
|         setApiVersion(AW_FORMATTER_API); |     setComment(ui->lineEdit_comment->text()); | ||||||
|         setStrType(ui->label_typeValue->text()); |     setApiVersion(AW_FORMATTER_API); | ||||||
|         setPath(ui->lineEdit_path->text()); |     setStrType(ui->label_typeValue->text()); | ||||||
|  |     setPath(ui->lineEdit_path->text()); | ||||||
|         writeConfiguration(); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     dialog->deleteLater(); |  | ||||||
|     delete ui; |  | ||||||
|  |  | ||||||
|  |     writeConfiguration(); | ||||||
|     return ret; |     return ret; | ||||||
| } | } | ||||||
|  |  | ||||||
| @ -184,10 +187,8 @@ void AWJsonFormatter::initPath() | |||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| void AWJsonFormatter::translate(void *_ui) | void AWJsonFormatter::translate() | ||||||
| { | { | ||||||
|     auto ui = reinterpret_cast<Ui::AWJsonFormatter *>(_ui); |  | ||||||
|  |  | ||||||
|     ui->label_name->setText(i18n("Name")); |     ui->label_name->setText(i18n("Name")); | ||||||
|     ui->label_comment->setText(i18n("Comment")); |     ui->label_comment->setText(i18n("Comment")); | ||||||
|     ui->label_type->setText(i18n("Type")); |     ui->label_type->setText(i18n("Type")); | ||||||
|  | |||||||
| @ -21,13 +21,19 @@ | |||||||
| #include "awabstractformatter.h" | #include "awabstractformatter.h" | ||||||
|  |  | ||||||
|  |  | ||||||
|  | namespace Ui | ||||||
|  | { | ||||||
|  | class AWJsonFormatter; | ||||||
|  | } | ||||||
|  |  | ||||||
| class AWJsonFormatter : public AWAbstractFormatter | class AWJsonFormatter : public AWAbstractFormatter | ||||||
| { | { | ||||||
|     Q_OBJECT |     Q_OBJECT | ||||||
|     Q_PROPERTY(QString path READ path WRITE setPath) |     Q_PROPERTY(QString path READ path WRITE setPath) | ||||||
|  |  | ||||||
| public: | public: | ||||||
|     explicit AWJsonFormatter(QObject *_parent = nullptr, const QString &_filePath = ""); |     explicit AWJsonFormatter(QWidget *_parent = nullptr, const QString &_filePath = ""); | ||||||
|  |     ~AWJsonFormatter() override; | ||||||
|     [[nodiscard]] QString convert(const QVariant &_value) const override; |     [[nodiscard]] QString convert(const QVariant &_value) const override; | ||||||
|     AWJsonFormatter *copy(const QString &_fileName, int _number) override; |     AWJsonFormatter *copy(const QString &_fileName, int _number) override; | ||||||
|     // properties |     // properties | ||||||
| @ -36,15 +42,16 @@ public: | |||||||
|  |  | ||||||
| public slots: | public slots: | ||||||
|     void readConfiguration() override; |     void readConfiguration() override; | ||||||
|     int showConfiguration(QWidget *_parent, const QVariant &_args) override; |     int showConfiguration(const QVariant &_args) override; | ||||||
|     void writeConfiguration() const override; |     void writeConfiguration() const override; | ||||||
|  |  | ||||||
| private: | private: | ||||||
|  |     Ui::AWJsonFormatter *ui = nullptr; | ||||||
|     static QVariant getFromJson(const QVariant &_value, const QVariant &_element); |     static QVariant getFromJson(const QVariant &_value, const QVariant &_element); | ||||||
|     static QVariant getFromList(const QVariant &_value, int _index); |     static QVariant getFromList(const QVariant &_value, int _index); | ||||||
|     static QVariant getFromMap(const QVariant &_value, const QString &_key); |     static QVariant getFromMap(const QVariant &_value, const QString &_key); | ||||||
|     void initPath(); |     void initPath(); | ||||||
|     void translate(void *_ui) override; |     void translate() override; | ||||||
|     // properties |     // properties | ||||||
|     QString m_path; |     QString m_path; | ||||||
|     QVariantList m_splittedPath; |     QVariantList m_splittedPath; | ||||||
|  | |||||||
| @ -15,6 +15,7 @@ | |||||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * |  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||||
|  ***************************************************************************/ |  ***************************************************************************/ | ||||||
|  |  | ||||||
|  |  | ||||||
| #include "awlistformatter.h" | #include "awlistformatter.h" | ||||||
| #include "ui_awlistformatter.h" | #include "ui_awlistformatter.h" | ||||||
|  |  | ||||||
| @ -25,13 +26,24 @@ | |||||||
| #include "awdebug.h" | #include "awdebug.h" | ||||||
|  |  | ||||||
|  |  | ||||||
| AWListFormatter::AWListFormatter(QObject *_parent, const QString &_filePath) | AWListFormatter::AWListFormatter(QWidget *_parent, const QString &_filePath) | ||||||
|     : AWAbstractFormatter(_parent, _filePath) |     : AWAbstractFormatter(_parent, _filePath) | ||||||
|  |     , ui(new Ui::AWListFormatter) | ||||||
| { | { | ||||||
|     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; |     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; | ||||||
|  |  | ||||||
|     if (!_filePath.isEmpty()) |     if (!_filePath.isEmpty()) | ||||||
|         AWListFormatter::readConfiguration(); |         AWListFormatter::readConfiguration(); | ||||||
|  |     ui->setupUi(this); | ||||||
|  |     AWListFormatter::translate(); | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | AWListFormatter::~AWListFormatter() | ||||||
|  | { | ||||||
|  |     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; | ||||||
|  |  | ||||||
|  |     delete ui; | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| @ -39,7 +51,7 @@ QString AWListFormatter::convert(const QVariant &_value) const | |||||||
| { | { | ||||||
|     qCDebug(LOG_LIB) << "Convert value" << _value; |     qCDebug(LOG_LIB) << "Convert value" << _value; | ||||||
|  |  | ||||||
|     auto output = _value.toStringList(); |     QStringList output = _value.toStringList(); | ||||||
|     if (isSorted()) |     if (isSorted()) | ||||||
|         output.sort(); |         output.sort(); | ||||||
|  |  | ||||||
| @ -51,7 +63,7 @@ AWListFormatter *AWListFormatter::copy(const QString &_fileName, const int _numb | |||||||
| { | { | ||||||
|     qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number; |     qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number; | ||||||
|  |  | ||||||
|     auto item = new AWListFormatter(parent(), _fileName); |     auto *item = new AWListFormatter(dynamic_cast<QWidget *>(parent()), _fileName); | ||||||
|     AWAbstractFormatter::copyDefaults(item); |     AWAbstractFormatter::copyDefaults(item); | ||||||
|     item->setFilter(filter()); |     item->setFilter(filter()); | ||||||
|     item->setSeparator(separator()); |     item->setSeparator(separator()); | ||||||
| @ -121,15 +133,10 @@ void AWListFormatter::readConfiguration() | |||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| int AWListFormatter::showConfiguration(QWidget *_parent, const QVariant &_args) | int AWListFormatter::showConfiguration(const QVariant &_args) | ||||||
| { | { | ||||||
|     Q_UNUSED(_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_name->setText(name()); | ||||||
|     ui->lineEdit_comment->setText(comment()); |     ui->lineEdit_comment->setText(comment()); | ||||||
|     ui->label_typeValue->setText("List"); |     ui->label_typeValue->setText("List"); | ||||||
| @ -137,22 +144,18 @@ int AWListFormatter::showConfiguration(QWidget *_parent, const QVariant &_args) | |||||||
|     ui->lineEdit_separator->setText(separator()); |     ui->lineEdit_separator->setText(separator()); | ||||||
|     ui->checkBox_sorted->setCheckState(isSorted() ? Qt::Checked : Qt::Unchecked); |     ui->checkBox_sorted->setCheckState(isSorted() ? Qt::Checked : Qt::Unchecked); | ||||||
|  |  | ||||||
|     auto ret = dialog->exec(); |     int ret = exec(); | ||||||
|     if (ret == 1) { |     if (ret != 1) | ||||||
|         setName(ui->lineEdit_name->text()); |         return ret; | ||||||
|         setComment(ui->lineEdit_comment->text()); |     setName(ui->lineEdit_name->text()); | ||||||
|         setApiVersion(AW_FORMATTER_API); |     setComment(ui->lineEdit_comment->text()); | ||||||
|         setStrType(ui->label_typeValue->text()); |     setApiVersion(AW_FORMATTER_API); | ||||||
|         setFilter(ui->lineEdit_filter->text()); |     setStrType(ui->label_typeValue->text()); | ||||||
|         setSeparator(ui->lineEdit_separator->text()); |     setFilter(ui->lineEdit_filter->text()); | ||||||
|         setSorted(ui->checkBox_sorted->checkState() == Qt::Checked); |     setSeparator(ui->lineEdit_separator->text()); | ||||||
|  |     setSorted(ui->checkBox_sorted->checkState() == Qt::Checked); | ||||||
|         writeConfiguration(); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     dialog->deleteLater(); |  | ||||||
|     delete ui; |  | ||||||
|  |  | ||||||
|  |     writeConfiguration(); | ||||||
|     return ret; |     return ret; | ||||||
| } | } | ||||||
|  |  | ||||||
| @ -174,10 +177,8 @@ void AWListFormatter::writeConfiguration() const | |||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| void AWListFormatter::translate(void *_ui) | void AWListFormatter::translate() | ||||||
| { | { | ||||||
|     auto ui = reinterpret_cast<Ui::AWListFormatter *>(_ui); |  | ||||||
|  |  | ||||||
|     ui->label_name->setText(i18n("Name")); |     ui->label_name->setText(i18n("Name")); | ||||||
|     ui->label_comment->setText(i18n("Comment")); |     ui->label_comment->setText(i18n("Comment")); | ||||||
|     ui->label_type->setText(i18n("Type")); |     ui->label_type->setText(i18n("Type")); | ||||||
|  | |||||||
| @ -21,6 +21,11 @@ | |||||||
| #include "awabstractformatter.h" | #include "awabstractformatter.h" | ||||||
|  |  | ||||||
|  |  | ||||||
|  | namespace Ui | ||||||
|  | { | ||||||
|  | class AWListFormatter; | ||||||
|  | } | ||||||
|  |  | ||||||
| class AWListFormatter : public AWAbstractFormatter | class AWListFormatter : public AWAbstractFormatter | ||||||
| { | { | ||||||
|     Q_OBJECT |     Q_OBJECT | ||||||
| @ -29,7 +34,8 @@ class AWListFormatter : public AWAbstractFormatter | |||||||
|     Q_PROPERTY(bool sorted READ isSorted WRITE setSorted) |     Q_PROPERTY(bool sorted READ isSorted WRITE setSorted) | ||||||
|  |  | ||||||
| public: | public: | ||||||
|     explicit AWListFormatter(QObject *_parent = nullptr, const QString &_filePath = ""); |     explicit AWListFormatter(QWidget *_parent = nullptr, const QString &_filePath = ""); | ||||||
|  |     ~AWListFormatter() override; | ||||||
|     [[nodiscard]] QString convert(const QVariant &_value) const override; |     [[nodiscard]] QString convert(const QVariant &_value) const override; | ||||||
|     AWListFormatter *copy(const QString &_fileName, int _number) override; |     AWListFormatter *copy(const QString &_fileName, int _number) override; | ||||||
|     // properties |     // properties | ||||||
| @ -42,11 +48,12 @@ public: | |||||||
|  |  | ||||||
| public slots: | public slots: | ||||||
|     void readConfiguration() override; |     void readConfiguration() override; | ||||||
|     int showConfiguration(QWidget *_parent, const QVariant &_args) override; |     int showConfiguration(const QVariant &_args) override; | ||||||
|     void writeConfiguration() const override; |     void writeConfiguration() const override; | ||||||
|  |  | ||||||
| private: | private: | ||||||
|     void translate(void *_ui) override; |     Ui::AWListFormatter *ui = nullptr; | ||||||
|  |     void translate() override; | ||||||
|     // properties |     // properties | ||||||
|     QString m_filter = ""; |     QString m_filter = ""; | ||||||
|     QString m_separator = ""; |     QString m_separator = ""; | ||||||
|  | |||||||
| @ -15,6 +15,7 @@ | |||||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * |  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||||
|  ***************************************************************************/ |  ***************************************************************************/ | ||||||
|  |  | ||||||
|  |  | ||||||
| #include "awnoformatter.h" | #include "awnoformatter.h" | ||||||
| #include "ui_awnoformatter.h" | #include "ui_awnoformatter.h" | ||||||
|  |  | ||||||
| @ -23,13 +24,24 @@ | |||||||
| #include "awdebug.h" | #include "awdebug.h" | ||||||
|  |  | ||||||
|  |  | ||||||
| AWNoFormatter::AWNoFormatter(QObject *_parent, const QString &_filePath) | AWNoFormatter::AWNoFormatter(QWidget *_parent, const QString &_filePath) | ||||||
|     : AWAbstractFormatter(_parent, _filePath) |     : AWAbstractFormatter(_parent, _filePath) | ||||||
|  |     , ui(new Ui::AWNoFormatter) | ||||||
| { | { | ||||||
|     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; |     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; | ||||||
|  |  | ||||||
|     if (!_filePath.isEmpty()) |     if (!_filePath.isEmpty()) | ||||||
|         AWNoFormatter::readConfiguration(); |         AWNoFormatter::readConfiguration(); | ||||||
|  |     ui->setupUi(this); | ||||||
|  |     AWNoFormatter::translate(); | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | AWNoFormatter::~AWNoFormatter() | ||||||
|  | { | ||||||
|  |     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; | ||||||
|  |  | ||||||
|  |     delete ui; | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| @ -45,7 +57,7 @@ AWNoFormatter *AWNoFormatter::copy(const QString &_fileName, const int _number) | |||||||
| { | { | ||||||
|     qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number; |     qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number; | ||||||
|  |  | ||||||
|     auto item = new AWNoFormatter(parent(), _fileName); |     auto *item = new AWNoFormatter(dynamic_cast<QWidget *>(parent()), _fileName); | ||||||
|     AWAbstractFormatter::copyDefaults(item); |     AWAbstractFormatter::copyDefaults(item); | ||||||
|     item->setNumber(_number); |     item->setNumber(_number); | ||||||
|  |  | ||||||
| @ -53,40 +65,29 @@ AWNoFormatter *AWNoFormatter::copy(const QString &_fileName, const int _number) | |||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| int AWNoFormatter::showConfiguration(QWidget *_parent, const QVariant &_args) | int AWNoFormatter::showConfiguration(const QVariant &_args) | ||||||
| { | { | ||||||
|     Q_UNUSED(_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_name->setText(name()); | ||||||
|     ui->lineEdit_comment->setText(comment()); |     ui->lineEdit_comment->setText(comment()); | ||||||
|     ui->label_typeValue->setText("NoFormat"); |     ui->label_typeValue->setText("NoFormat"); | ||||||
|  |  | ||||||
|     auto ret = dialog->exec(); |     int ret = exec(); | ||||||
|     if (ret == 1) { |     if (ret != 1) | ||||||
|         setName(ui->lineEdit_name->text()); |         return ret; | ||||||
|         setComment(ui->lineEdit_comment->text()); |     setName(ui->lineEdit_name->text()); | ||||||
|         setApiVersion(AW_FORMATTER_API); |     setComment(ui->lineEdit_comment->text()); | ||||||
|         setStrType(ui->label_typeValue->text()); |     setApiVersion(AW_FORMATTER_API); | ||||||
|  |     setStrType(ui->label_typeValue->text()); | ||||||
|         writeConfiguration(); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     dialog->deleteLater(); |  | ||||||
|     delete ui; |  | ||||||
|  |  | ||||||
|  |     writeConfiguration(); | ||||||
|     return ret; |     return ret; | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| void AWNoFormatter::translate(void *_ui) | void AWNoFormatter::translate() | ||||||
| { | { | ||||||
|     auto ui = reinterpret_cast<Ui::AWNoFormatter *>(_ui); |  | ||||||
|  |  | ||||||
|     ui->label_name->setText(i18n("Name")); |     ui->label_name->setText(i18n("Name")); | ||||||
|     ui->label_comment->setText(i18n("Comment")); |     ui->label_comment->setText(i18n("Comment")); | ||||||
|     ui->label_type->setText(i18n("Type")); |     ui->label_type->setText(i18n("Type")); | ||||||
|  | |||||||
| @ -21,20 +21,27 @@ | |||||||
| #include "awabstractformatter.h" | #include "awabstractformatter.h" | ||||||
|  |  | ||||||
|  |  | ||||||
|  | namespace Ui | ||||||
|  | { | ||||||
|  | class AWNoFormatter; | ||||||
|  | } | ||||||
|  |  | ||||||
| class AWNoFormatter : public AWAbstractFormatter | class AWNoFormatter : public AWAbstractFormatter | ||||||
| { | { | ||||||
|     Q_OBJECT |     Q_OBJECT | ||||||
|  |  | ||||||
| public: | public: | ||||||
|     explicit AWNoFormatter(QObject *_parent = nullptr, const QString &_filePath = ""); |     explicit AWNoFormatter(QWidget *_parent = nullptr, const QString &_filePath = ""); | ||||||
|  |     ~AWNoFormatter() override; | ||||||
|     [[nodiscard]] QString convert(const QVariant &_value) const override; |     [[nodiscard]] QString convert(const QVariant &_value) const override; | ||||||
|     AWNoFormatter *copy(const QString &_fileName, int _number) override; |     AWNoFormatter *copy(const QString &_fileName, int _number) override; | ||||||
|  |  | ||||||
| public slots: | public slots: | ||||||
|     int showConfiguration(QWidget *_parent, const QVariant &_args) override; |     int showConfiguration(const QVariant &_args) override; | ||||||
|  |  | ||||||
| private: | private: | ||||||
|     void translate(void *_ui) override; |     Ui::AWNoFormatter *ui = nullptr; | ||||||
|  |     void translate() override; | ||||||
|     // properties |     // properties | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  | |||||||
| @ -15,6 +15,7 @@ | |||||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * |  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||||
|  ***************************************************************************/ |  ***************************************************************************/ | ||||||
|  |  | ||||||
|  |  | ||||||
| #include "awscriptformatter.h" | #include "awscriptformatter.h" | ||||||
| #include "ui_awscriptformatter.h" | #include "ui_awscriptformatter.h" | ||||||
|  |  | ||||||
| @ -26,13 +27,24 @@ | |||||||
| #include "awdebug.h" | #include "awdebug.h" | ||||||
|  |  | ||||||
|  |  | ||||||
| AWScriptFormatter::AWScriptFormatter(QObject *_parent, const QString &_filePath) | AWScriptFormatter::AWScriptFormatter(QWidget *_parent, const QString &_filePath) | ||||||
|     : AWAbstractFormatter(_parent, _filePath) |     : AWAbstractFormatter(_parent, _filePath) | ||||||
|  |     , ui(new Ui::AWScriptFormatter) | ||||||
| { | { | ||||||
|     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; |     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; | ||||||
|  |  | ||||||
|     if (!_filePath.isEmpty()) |     if (!_filePath.isEmpty()) | ||||||
|         AWScriptFormatter::readConfiguration(); |         AWScriptFormatter::readConfiguration(); | ||||||
|  |     ui->setupUi(this); | ||||||
|  |     AWScriptFormatter::translate(); | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | AWScriptFormatter::~AWScriptFormatter() | ||||||
|  | { | ||||||
|  |     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; | ||||||
|  |  | ||||||
|  |     delete ui; | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| @ -42,8 +54,9 @@ QString AWScriptFormatter::convert(const QVariant &_value) const | |||||||
|  |  | ||||||
|     // init engine |     // init engine | ||||||
|     QJSEngine engine; |     QJSEngine engine; | ||||||
|     auto fn = engine.evaluate(m_program); |     QJSValue fn = engine.evaluate(m_program); | ||||||
|     auto result = fn.call({_value.toString()}); |     QJSValueList args = QJSValueList() << _value.toString(); | ||||||
|  |     QJSValue result = fn.call(args); | ||||||
|  |  | ||||||
|     if (result.isError()) { |     if (result.isError()) { | ||||||
|         qCWarning(LOG_LIB) << "Uncaught exception at line" << result.property("lineNumber").toInt() << ":" |         qCWarning(LOG_LIB) << "Uncaught exception at line" << result.property("lineNumber").toInt() << ":" | ||||||
| @ -59,7 +72,7 @@ AWScriptFormatter *AWScriptFormatter::copy(const QString &_fileName, const int _ | |||||||
| { | { | ||||||
|     qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number; |     qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number; | ||||||
|  |  | ||||||
|     auto item = new AWScriptFormatter(parent(), _fileName); |     auto *item = new AWScriptFormatter(dynamic_cast<QWidget *>(parent()), _fileName); | ||||||
|     AWAbstractFormatter::copyDefaults(item); |     AWAbstractFormatter::copyDefaults(item); | ||||||
|     item->setAppendCode(appendCode()); |     item->setAppendCode(appendCode()); | ||||||
|     item->setCode(code()); |     item->setCode(code()); | ||||||
| @ -137,15 +150,10 @@ void AWScriptFormatter::readConfiguration() | |||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| int AWScriptFormatter::showConfiguration(QWidget *_parent, const QVariant &_args) | int AWScriptFormatter::showConfiguration(const QVariant &_args) | ||||||
| { | { | ||||||
|     Q_UNUSED(_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_name->setText(name()); | ||||||
|     ui->lineEdit_comment->setText(comment()); |     ui->lineEdit_comment->setText(comment()); | ||||||
|     ui->label_typeValue->setText("Script"); |     ui->label_typeValue->setText("Script"); | ||||||
| @ -153,23 +161,19 @@ int AWScriptFormatter::showConfiguration(QWidget *_parent, const QVariant &_args | |||||||
|     ui->checkBox_hasReturn->setCheckState(hasReturn() ? Qt::Checked : Qt::Unchecked); |     ui->checkBox_hasReturn->setCheckState(hasReturn() ? Qt::Checked : Qt::Unchecked); | ||||||
|     ui->textEdit_code->setPlainText(code()); |     ui->textEdit_code->setPlainText(code()); | ||||||
|  |  | ||||||
|     int ret = dialog->exec(); |     int ret = exec(); | ||||||
|     if (ret == 1) { |     if (ret != 1) | ||||||
|         setName(ui->lineEdit_name->text()); |         return ret; | ||||||
|         setComment(ui->lineEdit_comment->text()); |     setName(ui->lineEdit_name->text()); | ||||||
|         setApiVersion(AW_FORMATTER_API); |     setComment(ui->lineEdit_comment->text()); | ||||||
|         setStrType(ui->label_typeValue->text()); |     setApiVersion(AW_FORMATTER_API); | ||||||
|         setAppendCode(ui->checkBox_appendCode->checkState() == Qt::Checked); |     setStrType(ui->label_typeValue->text()); | ||||||
|         setHasReturn(ui->checkBox_hasReturn->checkState() == Qt::Checked); |     setAppendCode(ui->checkBox_appendCode->checkState() == Qt::Checked); | ||||||
|         setCode(ui->textEdit_code->toPlainText()); |     setHasReturn(ui->checkBox_hasReturn->checkState() == Qt::Checked); | ||||||
|         initProgram(); |     setCode(ui->textEdit_code->toPlainText()); | ||||||
|  |     initProgram(); | ||||||
|         writeConfiguration(); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     dialog->deleteLater(); |  | ||||||
|     delete ui; |  | ||||||
|  |  | ||||||
|  |     writeConfiguration(); | ||||||
|     return ret; |     return ret; | ||||||
| } | } | ||||||
|  |  | ||||||
| @ -195,7 +199,7 @@ void AWScriptFormatter::initProgram() | |||||||
| { | { | ||||||
|     // init JS code |     // init JS code | ||||||
|     if (appendCode()) |     if (appendCode()) | ||||||
|         m_program = QString("(function(value) { %1%2 })").arg(code(), hasReturn() ? "" : "; return output;"); |         m_program = QString("(function(value) { %1%2 })").arg(code()).arg(hasReturn() ? "" : "; return output;"); | ||||||
|     else |     else | ||||||
|         m_program = code(); |         m_program = code(); | ||||||
|  |  | ||||||
| @ -203,10 +207,8 @@ void AWScriptFormatter::initProgram() | |||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| void AWScriptFormatter::translate(void *_ui) | void AWScriptFormatter::translate() | ||||||
| { | { | ||||||
|     auto ui = reinterpret_cast<Ui::AWScriptFormatter *>(_ui); |  | ||||||
|  |  | ||||||
|     ui->label_name->setText(i18n("Name")); |     ui->label_name->setText(i18n("Name")); | ||||||
|     ui->label_comment->setText(i18n("Comment")); |     ui->label_comment->setText(i18n("Comment")); | ||||||
|     ui->label_type->setText(i18n("Type")); |     ui->label_type->setText(i18n("Type")); | ||||||
|  | |||||||
| @ -21,6 +21,11 @@ | |||||||
| #include "awabstractformatter.h" | #include "awabstractformatter.h" | ||||||
|  |  | ||||||
|  |  | ||||||
|  | namespace Ui | ||||||
|  | { | ||||||
|  | class AWScriptFormatter; | ||||||
|  | } | ||||||
|  |  | ||||||
| class AWScriptFormatter : public AWAbstractFormatter | class AWScriptFormatter : public AWAbstractFormatter | ||||||
| { | { | ||||||
|     Q_OBJECT |     Q_OBJECT | ||||||
| @ -30,7 +35,8 @@ class AWScriptFormatter : public AWAbstractFormatter | |||||||
|     Q_PROPERTY(QString program READ program) |     Q_PROPERTY(QString program READ program) | ||||||
|  |  | ||||||
| public: | public: | ||||||
|     explicit AWScriptFormatter(QObject *_parent = nullptr, const QString &_filePath = ""); |     explicit AWScriptFormatter(QWidget *_parent = nullptr, const QString &_filePath = ""); | ||||||
|  |     ~AWScriptFormatter() override; | ||||||
|     [[nodiscard]] QString convert(const QVariant &_value) const override; |     [[nodiscard]] QString convert(const QVariant &_value) const override; | ||||||
|     AWScriptFormatter *copy(const QString &_fileName, int _number) override; |     AWScriptFormatter *copy(const QString &_fileName, int _number) override; | ||||||
|     // properties |     // properties | ||||||
| @ -44,12 +50,13 @@ public: | |||||||
|  |  | ||||||
| public slots: | public slots: | ||||||
|     void readConfiguration() override; |     void readConfiguration() override; | ||||||
|     int showConfiguration(QWidget *_parent, const QVariant &_args) override; |     int showConfiguration(const QVariant &_args) override; | ||||||
|     void writeConfiguration() const override; |     void writeConfiguration() const override; | ||||||
|  |  | ||||||
| private: | private: | ||||||
|  |     Ui::AWScriptFormatter *ui = nullptr; | ||||||
|     void initProgram(); |     void initProgram(); | ||||||
|     void translate(void *_ui) override; |     void translate() override; | ||||||
|     // properties |     // properties | ||||||
|     bool m_appendCode = true; |     bool m_appendCode = true; | ||||||
|     QString m_code = ""; |     QString m_code = ""; | ||||||
|  | |||||||
| @ -15,6 +15,7 @@ | |||||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * |  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||||
|  ***************************************************************************/ |  ***************************************************************************/ | ||||||
|  |  | ||||||
|  |  | ||||||
| #include "awstringformatter.h" | #include "awstringformatter.h" | ||||||
| #include "ui_awstringformatter.h" | #include "ui_awstringformatter.h" | ||||||
|  |  | ||||||
| @ -25,13 +26,24 @@ | |||||||
| #include "awdebug.h" | #include "awdebug.h" | ||||||
|  |  | ||||||
|  |  | ||||||
| AWStringFormatter::AWStringFormatter(QObject *_parent, const QString &_filePath) | AWStringFormatter::AWStringFormatter(QWidget *_parent, const QString &_filePath) | ||||||
|     : AWAbstractFormatter(_parent, _filePath) |     : AWAbstractFormatter(_parent, _filePath) | ||||||
|  |     , ui(new Ui::AWStringFormatter) | ||||||
| { | { | ||||||
|     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; |     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; | ||||||
|  |  | ||||||
|     if (!_filePath.isEmpty()) |     if (!_filePath.isEmpty()) | ||||||
|         AWStringFormatter::readConfiguration(); |         AWStringFormatter::readConfiguration(); | ||||||
|  |     ui->setupUi(this); | ||||||
|  |     AWStringFormatter::translate(); | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | AWStringFormatter::~AWStringFormatter() | ||||||
|  | { | ||||||
|  |     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; | ||||||
|  |  | ||||||
|  |     delete ui; | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| @ -39,7 +51,7 @@ QString AWStringFormatter::convert(const QVariant &_value) const | |||||||
| { | { | ||||||
|     qCDebug(LOG_LIB) << "Convert value" << _value; |     qCDebug(LOG_LIB) << "Convert value" << _value; | ||||||
|  |  | ||||||
|     auto output = QString("%1").arg(_value.toString(), count(), fillChar()); |     QString output = QString("%1").arg(_value.toString(), count(), fillChar()); | ||||||
|     if (forceWidth()) |     if (forceWidth()) | ||||||
|         output = output.left(count()); |         output = output.left(count()); | ||||||
|  |  | ||||||
| @ -51,7 +63,7 @@ AWStringFormatter *AWStringFormatter::copy(const QString &_fileName, const int _ | |||||||
| { | { | ||||||
|     qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number; |     qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number; | ||||||
|  |  | ||||||
|     auto item = new AWStringFormatter(parent(), _fileName); |     auto *item = new AWStringFormatter(dynamic_cast<QWidget *>(parent()), _fileName); | ||||||
|     AWAbstractFormatter::copyDefaults(item); |     AWAbstractFormatter::copyDefaults(item); | ||||||
|     item->setCount(count()); |     item->setCount(count()); | ||||||
|     item->setFillChar(fillChar()); |     item->setFillChar(fillChar()); | ||||||
| @ -120,15 +132,10 @@ void AWStringFormatter::readConfiguration() | |||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| int AWStringFormatter::showConfiguration(QWidget *_parent, const QVariant &_args) | int AWStringFormatter::showConfiguration(const QVariant &_args) | ||||||
| { | { | ||||||
|     Q_UNUSED(_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_name->setText(name()); | ||||||
|     ui->lineEdit_comment->setText(comment()); |     ui->lineEdit_comment->setText(comment()); | ||||||
|     ui->label_typeValue->setText("String"); |     ui->label_typeValue->setText("String"); | ||||||
| @ -136,22 +143,18 @@ int AWStringFormatter::showConfiguration(QWidget *_parent, const QVariant &_args | |||||||
|     ui->lineEdit_fill->setText(QString(fillChar())); |     ui->lineEdit_fill->setText(QString(fillChar())); | ||||||
|     ui->checkBox_forceWidth->setCheckState(forceWidth() ? Qt::Checked : Qt::Unchecked); |     ui->checkBox_forceWidth->setCheckState(forceWidth() ? Qt::Checked : Qt::Unchecked); | ||||||
|  |  | ||||||
|     auto ret = dialog->exec(); |     int ret = exec(); | ||||||
|     if (ret == 1) { |     if (ret != 1) | ||||||
|         setName(ui->lineEdit_name->text()); |         return ret; | ||||||
|         setComment(ui->lineEdit_comment->text()); |     setName(ui->lineEdit_name->text()); | ||||||
|         setApiVersion(AW_FORMATTER_API); |     setComment(ui->lineEdit_comment->text()); | ||||||
|         setStrType(ui->label_typeValue->text()); |     setApiVersion(AW_FORMATTER_API); | ||||||
|         setCount(ui->spinBox_width->value()); |     setStrType(ui->label_typeValue->text()); | ||||||
|         setFillChar(ui->lineEdit_fill->text().at(0)); |     setCount(ui->spinBox_width->value()); | ||||||
|         setForceWidth(ui->checkBox_forceWidth->checkState() == Qt::Checked); |     setFillChar(ui->lineEdit_fill->text().at(0)); | ||||||
|  |     setForceWidth(ui->checkBox_forceWidth->checkState() == Qt::Checked); | ||||||
|         writeConfiguration(); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     dialog->deleteLater(); |  | ||||||
|     delete ui; |  | ||||||
|  |  | ||||||
|  |     writeConfiguration(); | ||||||
|     return ret; |     return ret; | ||||||
| } | } | ||||||
|  |  | ||||||
| @ -173,10 +176,8 @@ void AWStringFormatter::writeConfiguration() const | |||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| void AWStringFormatter::translate(void *_ui) | void AWStringFormatter::translate() | ||||||
| { | { | ||||||
|     auto ui = reinterpret_cast<Ui::AWStringFormatter *>(_ui); |  | ||||||
|  |  | ||||||
|     ui->label_name->setText(i18n("Name")); |     ui->label_name->setText(i18n("Name")); | ||||||
|     ui->label_comment->setText(i18n("Comment")); |     ui->label_comment->setText(i18n("Comment")); | ||||||
|     ui->label_type->setText(i18n("Type")); |     ui->label_type->setText(i18n("Type")); | ||||||
|  | |||||||
| @ -21,6 +21,11 @@ | |||||||
| #include "awabstractformatter.h" | #include "awabstractformatter.h" | ||||||
|  |  | ||||||
|  |  | ||||||
|  | namespace Ui | ||||||
|  | { | ||||||
|  | class AWStringFormatter; | ||||||
|  | } | ||||||
|  |  | ||||||
| class AWStringFormatter : public AWAbstractFormatter | class AWStringFormatter : public AWAbstractFormatter | ||||||
| { | { | ||||||
|     Q_OBJECT |     Q_OBJECT | ||||||
| @ -29,7 +34,8 @@ class AWStringFormatter : public AWAbstractFormatter | |||||||
|     Q_PROPERTY(bool forceWidth READ forceWidth WRITE setForceWidth) |     Q_PROPERTY(bool forceWidth READ forceWidth WRITE setForceWidth) | ||||||
|  |  | ||||||
| public: | public: | ||||||
|     explicit AWStringFormatter(QObject *_parent = nullptr, const QString &_filePath = ""); |     explicit AWStringFormatter(QWidget *_parent = nullptr, const QString &_filePath = ""); | ||||||
|  |     ~AWStringFormatter() override; | ||||||
|     [[nodiscard]] QString convert(const QVariant &_value) const override; |     [[nodiscard]] QString convert(const QVariant &_value) const override; | ||||||
|     AWStringFormatter *copy(const QString &_fileName, int _number) override; |     AWStringFormatter *copy(const QString &_fileName, int _number) override; | ||||||
|     // properties |     // properties | ||||||
| @ -42,11 +48,12 @@ public: | |||||||
|  |  | ||||||
| public slots: | public slots: | ||||||
|     void readConfiguration() override; |     void readConfiguration() override; | ||||||
|     int showConfiguration(QWidget *_parent, const QVariant &_args) override; |     int showConfiguration(const QVariant &_args) override; | ||||||
|     void writeConfiguration() const override; |     void writeConfiguration() const override; | ||||||
|  |  | ||||||
| private: | private: | ||||||
|     void translate(void *_ui) override; |     Ui::AWStringFormatter *ui = nullptr; | ||||||
|  |     void translate() override; | ||||||
|     // properties |     // properties | ||||||
|     int m_count = 0; |     int m_count = 0; | ||||||
|     QChar m_fillChar = QChar(); |     QChar m_fillChar = QChar(); | ||||||
|  | |||||||
| @ -31,7 +31,7 @@ | |||||||
| template <class T> class ExtItemAggregator : public AbstractExtItemAggregator | template <class T> class ExtItemAggregator : public AbstractExtItemAggregator | ||||||
| { | { | ||||||
| public: | public: | ||||||
|     explicit ExtItemAggregator(QObject *_parent, const QString &_type) |     explicit ExtItemAggregator(QWidget *_parent, const QString &_type) | ||||||
|         : AbstractExtItemAggregator(_parent, _type) |         : AbstractExtItemAggregator(_parent, _type) | ||||||
|     { |     { | ||||||
|         qSetMessagePattern(AWDebug::LOG_FORMAT); |         qSetMessagePattern(AWDebug::LOG_FORMAT); | ||||||
| @ -56,7 +56,8 @@ public: | |||||||
|  |  | ||||||
|     void editItems() |     void editItems() | ||||||
|     { |     { | ||||||
|         auto ret = exec(); |         repaintList(); | ||||||
|  |         int ret = exec(); | ||||||
|         qCInfo(LOG_LIB) << "Dialog returns" << ret; |         qCInfo(LOG_LIB) << "Dialog returns" << ret; | ||||||
|     }; |     }; | ||||||
|  |  | ||||||
| @ -122,7 +123,7 @@ private: | |||||||
|     QList<AbstractExtItem *> m_items; |     QList<AbstractExtItem *> m_items; | ||||||
|     QList<T *> m_activeItems; |     QList<T *> m_activeItems; | ||||||
|  |  | ||||||
|     void doCreateItem(QListWidget *_widget) override { return createItem<T>(_widget); } |     void doCreateItem() override { return createItem<T>(); } | ||||||
|  |  | ||||||
|     QList<AbstractExtItem *> getItems() |     QList<AbstractExtItem *> getItems() | ||||||
|     { |     { | ||||||
| @ -136,7 +137,7 @@ private: | |||||||
|                 if (!file.endsWith(".desktop")) |                 if (!file.endsWith(".desktop")) | ||||||
|                     continue; |                     continue; | ||||||
|                 qCInfo(LOG_LIB) << "Found file" << file << "in" << dir; |                 qCInfo(LOG_LIB) << "Found file" << file << "in" << dir; | ||||||
|                 auto filePath = QString("%1/%2").arg(dir, file); |                 QString filePath = QString("%1/%2").arg(dir).arg(file); | ||||||
|                 // check if already exists |                 // check if already exists | ||||||
|                 if (std::any_of(items.cbegin(), items.cend(), |                 if (std::any_of(items.cbegin(), items.cend(), | ||||||
|                                 [&filePath](AbstractExtItem *item) { return (item->fileName() == filePath); })) |                                 [&filePath](AbstractExtItem *item) { return (item->fileName() == filePath); })) | ||||||
| @ -146,7 +147,8 @@ private: | |||||||
|         } |         } | ||||||
|  |  | ||||||
|         // sort items |         // sort items | ||||||
|         std::sort(items.begin(), items.end(), [](auto *lhs, auto *rhs) { return lhs->number() < rhs->number(); }); |         std::sort(items.begin(), items.end(), | ||||||
|  |                   [](const AbstractExtItem *lhs, const AbstractExtItem *rhs) { return lhs->number() < rhs->number(); }); | ||||||
|         return items; |         return items; | ||||||
|     }; |     }; | ||||||
| }; | }; | ||||||
|  | |||||||
| @ -27,13 +27,16 @@ | |||||||
| #include "awdebug.h" | #include "awdebug.h" | ||||||
|  |  | ||||||
|  |  | ||||||
| ExtNetworkRequest::ExtNetworkRequest(QObject *_parent, const QString &_filePath) | ExtNetworkRequest::ExtNetworkRequest(QWidget *_parent, const QString &_filePath) | ||||||
|     : AbstractExtItem(_parent, _filePath) |     : AbstractExtItem(_parent, _filePath) | ||||||
|  |     , ui(new Ui::ExtNetworkRequest) | ||||||
| { | { | ||||||
|     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; |     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; | ||||||
|  |  | ||||||
|     if (!_filePath.isEmpty()) |     if (!_filePath.isEmpty()) | ||||||
|         ExtNetworkRequest::readConfiguration(); |         ExtNetworkRequest::readConfiguration(); | ||||||
|  |     ui->setupUi(this); | ||||||
|  |     ExtNetworkRequest::translate(); | ||||||
|  |  | ||||||
|     m_values[tag("response")] = ""; |     m_values[tag("response")] = ""; | ||||||
|  |  | ||||||
| @ -54,6 +57,7 @@ ExtNetworkRequest::~ExtNetworkRequest() | |||||||
|     disconnect(this, SIGNAL(requestDataUpdate()), this, SLOT(sendRequest())); |     disconnect(this, SIGNAL(requestDataUpdate()), this, SLOT(sendRequest())); | ||||||
|  |  | ||||||
|     m_manager->deleteLater(); |     m_manager->deleteLater(); | ||||||
|  |     delete ui; | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| @ -61,7 +65,7 @@ ExtNetworkRequest *ExtNetworkRequest::copy(const QString &_fileName, const int _ | |||||||
| { | { | ||||||
|     qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number; |     qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number; | ||||||
|  |  | ||||||
|     auto item = new ExtNetworkRequest(parent(), _fileName); |     auto *item = new ExtNetworkRequest(dynamic_cast<QWidget *>(parent()), _fileName); | ||||||
|     copyDefaults(item); |     copyDefaults(item); | ||||||
|     item->setNumber(_number); |     item->setNumber(_number); | ||||||
|     item->setStringUrl(stringUrl()); |     item->setStringUrl(stringUrl()); | ||||||
| @ -115,15 +119,10 @@ QVariantHash ExtNetworkRequest::run() | |||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| int ExtNetworkRequest::showConfiguration(QWidget *_parent, const QVariant &_args) | int ExtNetworkRequest::showConfiguration(const QVariant &_args) | ||||||
| { | { | ||||||
|     Q_UNUSED(_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_name->setText(name()); | ||||||
|     ui->lineEdit_comment->setText(comment()); |     ui->lineEdit_comment->setText(comment()); | ||||||
|     ui->label_numberValue->setText(QString("%1").arg(number())); |     ui->label_numberValue->setText(QString("%1").arg(number())); | ||||||
| @ -133,24 +132,20 @@ int ExtNetworkRequest::showConfiguration(QWidget *_parent, const QVariant &_args | |||||||
|     ui->lineEdit_socket->setText(socket()); |     ui->lineEdit_socket->setText(socket()); | ||||||
|     ui->spinBox_interval->setValue(interval()); |     ui->spinBox_interval->setValue(interval()); | ||||||
|  |  | ||||||
|     auto ret = dialog->exec(); |     int ret = exec(); | ||||||
|     if (ret == 1) { |     if (ret != 1) | ||||||
|         setName(ui->lineEdit_name->text()); |         return ret; | ||||||
|         setComment(ui->lineEdit_comment->text()); |     setName(ui->lineEdit_name->text()); | ||||||
|         setNumber(ui->label_numberValue->text().toInt()); |     setComment(ui->lineEdit_comment->text()); | ||||||
|         setApiVersion(AW_EXTNETREQUEST_API); |     setNumber(ui->label_numberValue->text().toInt()); | ||||||
|         setStringUrl(ui->lineEdit_url->text()); |     setApiVersion(AW_EXTNETREQUEST_API); | ||||||
|         setActive(ui->checkBox_active->checkState() == Qt::Checked); |     setStringUrl(ui->lineEdit_url->text()); | ||||||
|         setCron(ui->lineEdit_schedule->text()); |     setActive(ui->checkBox_active->checkState() == Qt::Checked); | ||||||
|         setSocket(ui->lineEdit_socket->text()); |     setCron(ui->lineEdit_schedule->text()); | ||||||
|         setInterval(ui->spinBox_interval->value()); |     setSocket(ui->lineEdit_socket->text()); | ||||||
|  |     setInterval(ui->spinBox_interval->value()); | ||||||
|         writeConfiguration(); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     dialog->deleteLater(); |  | ||||||
|     delete ui; |  | ||||||
|  |  | ||||||
|  |     writeConfiguration(); | ||||||
|     return ret; |     return ret; | ||||||
| } | } | ||||||
|  |  | ||||||
| @ -186,7 +181,7 @@ void ExtNetworkRequest::networkReplyReceived(QNetworkReply *_reply) | |||||||
| void ExtNetworkRequest::sendRequest() | void ExtNetworkRequest::sendRequest() | ||||||
| { | { | ||||||
|     m_isRunning = true; |     m_isRunning = true; | ||||||
|     auto reply = m_manager->get(QNetworkRequest(m_url)); |     QNetworkReply *reply = m_manager->get(QNetworkRequest(m_url)); | ||||||
|     new QReplyTimeout(reply, REQUEST_TIMEOUT); |     new QReplyTimeout(reply, REQUEST_TIMEOUT); | ||||||
| } | } | ||||||
|  |  | ||||||
| @ -197,10 +192,8 @@ void ExtNetworkRequest::initUrl() | |||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| void ExtNetworkRequest::translate(void *_ui) | void ExtNetworkRequest::translate() | ||||||
| { | { | ||||||
|     auto ui = reinterpret_cast<Ui::ExtNetworkRequest *>(_ui); |  | ||||||
|  |  | ||||||
|     ui->label_name->setText(i18n("Name")); |     ui->label_name->setText(i18n("Name")); | ||||||
|     ui->label_comment->setText(i18n("Comment")); |     ui->label_comment->setText(i18n("Comment")); | ||||||
|     ui->label_number->setText(i18n("Tag")); |     ui->label_number->setText(i18n("Tag")); | ||||||
|  | |||||||
| @ -23,13 +23,18 @@ | |||||||
| #include "abstractextitem.h" | #include "abstractextitem.h" | ||||||
|  |  | ||||||
|  |  | ||||||
|  | namespace Ui | ||||||
|  | { | ||||||
|  | class ExtNetworkRequest; | ||||||
|  | } | ||||||
|  |  | ||||||
| class ExtNetworkRequest : public AbstractExtItem | class ExtNetworkRequest : public AbstractExtItem | ||||||
| { | { | ||||||
|     Q_OBJECT |     Q_OBJECT | ||||||
|     Q_PROPERTY(QString stringUrl READ stringUrl WRITE setStringUrl) |     Q_PROPERTY(QString stringUrl READ stringUrl WRITE setStringUrl) | ||||||
|  |  | ||||||
| public: | public: | ||||||
|     explicit ExtNetworkRequest(QObject *_parent = nullptr, const QString &_filePath = ""); |     explicit ExtNetworkRequest(QWidget *_parent = nullptr, const QString &_filePath = ""); | ||||||
|     ~ExtNetworkRequest() override; |     ~ExtNetworkRequest() override; | ||||||
|     ExtNetworkRequest *copy(const QString &_fileName, int _number) override; |     ExtNetworkRequest *copy(const QString &_fileName, int _number) override; | ||||||
|     // get methods |     // get methods | ||||||
| @ -41,7 +46,7 @@ public: | |||||||
| public slots: | public slots: | ||||||
|     void readConfiguration() override; |     void readConfiguration() override; | ||||||
|     QVariantHash run() override; |     QVariantHash run() override; | ||||||
|     int showConfiguration(QWidget *_parent, const QVariant &_args) override; |     int showConfiguration(const QVariant &_args) override; | ||||||
|     void writeConfiguration() const override; |     void writeConfiguration() const override; | ||||||
|  |  | ||||||
| private slots: | private slots: | ||||||
| @ -52,8 +57,9 @@ private: | |||||||
|     QNetworkAccessManager *m_manager = nullptr; |     QNetworkAccessManager *m_manager = nullptr; | ||||||
|     QUrl m_url; |     QUrl m_url; | ||||||
|     bool m_isRunning = false; |     bool m_isRunning = false; | ||||||
|  |     Ui::ExtNetworkRequest *ui = nullptr; | ||||||
|     void initUrl(); |     void initUrl(); | ||||||
|     void translate(void *_ui) override; |     void translate() override; | ||||||
|     // properties |     // properties | ||||||
|     QString m_stringUrl = "https://httpbin.org/get"; |     QString m_stringUrl = "https://httpbin.org/get"; | ||||||
|     // values |     // values | ||||||
|  | |||||||
| @ -20,6 +20,7 @@ | |||||||
|  |  | ||||||
| #include <KI18n/KLocalizedString> | #include <KI18n/KLocalizedString> | ||||||
|  |  | ||||||
|  | #include <QDir> | ||||||
| #include <QSettings> | #include <QSettings> | ||||||
|  |  | ||||||
| #include <qreplytimeout/qreplytimeout.h> | #include <qreplytimeout/qreplytimeout.h> | ||||||
| @ -28,13 +29,16 @@ | |||||||
| #include "stooqquotesprovider.h" | #include "stooqquotesprovider.h" | ||||||
|  |  | ||||||
|  |  | ||||||
| ExtQuotes::ExtQuotes(QObject *_parent, const QString &_filePath) | ExtQuotes::ExtQuotes(QWidget *_parent, const QString &_filePath) | ||||||
|     : AbstractExtItem(_parent, _filePath) |     : AbstractExtItem(_parent, _filePath) | ||||||
|  |     , ui(new Ui::ExtQuotes) | ||||||
| { | { | ||||||
|     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; |     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; | ||||||
|  |  | ||||||
|     if (!_filePath.isEmpty()) |     if (!_filePath.isEmpty()) | ||||||
|         ExtQuotes::readConfiguration(); |         ExtQuotes::readConfiguration(); | ||||||
|  |     ui->setupUi(this); | ||||||
|  |     ExtQuotes::translate(); | ||||||
|  |  | ||||||
|     m_values[tag("price")] = 0.0; |     m_values[tag("price")] = 0.0; | ||||||
|     m_values[tag("pricechg")] = 0.0; |     m_values[tag("pricechg")] = 0.0; | ||||||
| @ -46,8 +50,9 @@ ExtQuotes::ExtQuotes(QObject *_parent, const QString &_filePath) | |||||||
|     // HACK declare as child of nullptr to avoid crash with plasmawindowed |     // HACK declare as child of nullptr to avoid crash with plasmawindowed | ||||||
|     // in the destructor |     // in the destructor | ||||||
|     m_manager = new QNetworkAccessManager(nullptr); |     m_manager = new QNetworkAccessManager(nullptr); | ||||||
|     connect(m_manager, &QNetworkAccessManager::finished, this, &ExtQuotes::quotesReplyReceived); |     connect(m_manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(quotesReplyReceived(QNetworkReply *))); | ||||||
|     connect(this, &ExtQuotes::requestDataUpdate, this, &ExtQuotes::sendRequest); |  | ||||||
|  |     connect(this, SIGNAL(requestDataUpdate()), this, SLOT(sendRequest())); | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| @ -55,10 +60,11 @@ ExtQuotes::~ExtQuotes() | |||||||
| { | { | ||||||
|     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; |     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; | ||||||
|  |  | ||||||
|     disconnect(m_manager, &QNetworkAccessManager::finished, this, &ExtQuotes::quotesReplyReceived); |     disconnect(m_manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(quotesReplyReceived(QNetworkReply *))); | ||||||
|     disconnect(this, &ExtQuotes::requestDataUpdate, this, &ExtQuotes::sendRequest); |     disconnect(this, SIGNAL(requestDataUpdate()), this, SLOT(sendRequest())); | ||||||
|  |  | ||||||
|     m_manager->deleteLater(); |     m_manager->deleteLater(); | ||||||
|  |     delete ui; | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| @ -66,7 +72,7 @@ ExtQuotes *ExtQuotes::copy(const QString &_fileName, const int _number) | |||||||
| { | { | ||||||
|     qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number; |     qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number; | ||||||
|  |  | ||||||
|     auto item = new ExtQuotes(parent(), _fileName); |     auto *item = new ExtQuotes(dynamic_cast<QWidget *>(parent()), _fileName); | ||||||
|     copyDefaults(item); |     copyDefaults(item); | ||||||
|     item->setNumber(_number); |     item->setNumber(_number); | ||||||
|     item->setTicker(ticker()); |     item->setTicker(ticker()); | ||||||
| @ -120,15 +126,10 @@ QVariantHash ExtQuotes::run() | |||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| int ExtQuotes::showConfiguration(QWidget *_parent, const QVariant &_args) | int ExtQuotes::showConfiguration(const QVariant &_args) | ||||||
| { | { | ||||||
|     Q_UNUSED(_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_name->setText(name()); | ||||||
|     ui->lineEdit_comment->setText(comment()); |     ui->lineEdit_comment->setText(comment()); | ||||||
|     ui->label_numberValue->setText(QString("%1").arg(number())); |     ui->label_numberValue->setText(QString("%1").arg(number())); | ||||||
| @ -138,24 +139,20 @@ int ExtQuotes::showConfiguration(QWidget *_parent, const QVariant &_args) | |||||||
|     ui->lineEdit_socket->setText(socket()); |     ui->lineEdit_socket->setText(socket()); | ||||||
|     ui->spinBox_interval->setValue(interval()); |     ui->spinBox_interval->setValue(interval()); | ||||||
|  |  | ||||||
|     auto ret = dialog->exec(); |     int ret = exec(); | ||||||
|     if (ret == 1) { |     if (ret != 1) | ||||||
|         setName(ui->lineEdit_name->text()); |         return ret; | ||||||
|         setComment(ui->lineEdit_comment->text()); |     setName(ui->lineEdit_name->text()); | ||||||
|         setNumber(ui->label_numberValue->text().toInt()); |     setComment(ui->lineEdit_comment->text()); | ||||||
|         setApiVersion(AW_EXTQUOTES_API); |     setNumber(ui->label_numberValue->text().toInt()); | ||||||
|         setTicker(ui->lineEdit_ticker->text()); |     setApiVersion(AW_EXTQUOTES_API); | ||||||
|         setActive(ui->checkBox_active->checkState() == Qt::Checked); |     setTicker(ui->lineEdit_ticker->text()); | ||||||
|         setCron(ui->lineEdit_schedule->text()); |     setActive(ui->checkBox_active->checkState() == Qt::Checked); | ||||||
|         setSocket(ui->lineEdit_socket->text()); |     setCron(ui->lineEdit_schedule->text()); | ||||||
|         setInterval(ui->spinBox_interval->value()); |     setSocket(ui->lineEdit_socket->text()); | ||||||
|  |     setInterval(ui->spinBox_interval->value()); | ||||||
|         writeConfiguration(); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     dialog->deleteLater(); |  | ||||||
|     delete ui; |  | ||||||
|  |  | ||||||
|  |     writeConfiguration(); | ||||||
|     return ret; |     return ret; | ||||||
| } | } | ||||||
|  |  | ||||||
| @ -185,7 +182,7 @@ void ExtQuotes::quotesReplyReceived(QNetworkReply *_reply) | |||||||
|     auto text = _reply->readAll(); |     auto text = _reply->readAll(); | ||||||
|     _reply->deleteLater(); |     _reply->deleteLater(); | ||||||
|  |  | ||||||
|     auto data = m_providerObject->parse(text, m_values); |     QVariantHash data = m_providerObject->parse(text, m_values); | ||||||
|     if (data.isEmpty()) |     if (data.isEmpty()) | ||||||
|         return; |         return; | ||||||
|     m_values = data; |     m_values = data; | ||||||
| @ -197,7 +194,7 @@ void ExtQuotes::quotesReplyReceived(QNetworkReply *_reply) | |||||||
| void ExtQuotes::sendRequest() | void ExtQuotes::sendRequest() | ||||||
| { | { | ||||||
|     m_isRunning = true; |     m_isRunning = true; | ||||||
|     auto reply = m_manager->get(QNetworkRequest(m_providerObject->url())); |     QNetworkReply *reply = m_manager->get(QNetworkRequest(m_providerObject->url())); | ||||||
|     new QReplyTimeout(reply, REQUEST_TIMEOUT); |     new QReplyTimeout(reply, REQUEST_TIMEOUT); | ||||||
| } | } | ||||||
|  |  | ||||||
| @ -213,10 +210,8 @@ void ExtQuotes::initProvider() | |||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| void ExtQuotes::translate(void *_ui) | void ExtQuotes::translate() | ||||||
| { | { | ||||||
|     auto ui = reinterpret_cast<Ui::ExtQuotes *>(_ui); |  | ||||||
|  |  | ||||||
|     ui->label_name->setText(i18n("Name")); |     ui->label_name->setText(i18n("Name")); | ||||||
|     ui->label_comment->setText(i18n("Comment")); |     ui->label_comment->setText(i18n("Comment")); | ||||||
|     ui->label_number->setText(i18n("Tag")); |     ui->label_number->setText(i18n("Tag")); | ||||||
|  | |||||||
| @ -24,6 +24,10 @@ | |||||||
|  |  | ||||||
|  |  | ||||||
| class AbstractQuotesProvider; | class AbstractQuotesProvider; | ||||||
|  | namespace Ui | ||||||
|  | { | ||||||
|  | class ExtQuotes; | ||||||
|  | } | ||||||
|  |  | ||||||
| class ExtQuotes : public AbstractExtItem | class ExtQuotes : public AbstractExtItem | ||||||
| { | { | ||||||
| @ -31,7 +35,7 @@ class ExtQuotes : public AbstractExtItem | |||||||
|     Q_PROPERTY(QString ticker READ ticker WRITE setTicker) |     Q_PROPERTY(QString ticker READ ticker WRITE setTicker) | ||||||
|  |  | ||||||
| public: | public: | ||||||
|     explicit ExtQuotes(QObject *_parent = nullptr, const QString &_filePath = ""); |     explicit ExtQuotes(QWidget *_parent = nullptr, const QString &_filePath = ""); | ||||||
|     ~ExtQuotes() override; |     ~ExtQuotes() override; | ||||||
|     ExtQuotes *copy(const QString &_fileName, int _number) override; |     ExtQuotes *copy(const QString &_fileName, int _number) override; | ||||||
|     // get methods |     // get methods | ||||||
| @ -43,7 +47,7 @@ public: | |||||||
| public slots: | public slots: | ||||||
|     void readConfiguration() override; |     void readConfiguration() override; | ||||||
|     QVariantHash run() override; |     QVariantHash run() override; | ||||||
|     int showConfiguration(QWidget *_parent, const QVariant &_args) override; |     int showConfiguration(const QVariant &_args) override; | ||||||
|     void writeConfiguration() const override; |     void writeConfiguration() const override; | ||||||
|  |  | ||||||
| private slots: | private slots: | ||||||
| @ -54,8 +58,9 @@ private: | |||||||
|     AbstractQuotesProvider *m_providerObject = nullptr; |     AbstractQuotesProvider *m_providerObject = nullptr; | ||||||
|     QNetworkAccessManager *m_manager = nullptr; |     QNetworkAccessManager *m_manager = nullptr; | ||||||
|     bool m_isRunning = false; |     bool m_isRunning = false; | ||||||
|  |     Ui::ExtQuotes *ui = nullptr; | ||||||
|     void initProvider(); |     void initProvider(); | ||||||
|     void translate(void *_ui) override; |     void translate() override; | ||||||
|     // properties |     // properties | ||||||
|     QString m_ticker = "EURUSD=X"; |     QString m_ticker = "EURUSD=X"; | ||||||
|     // values |     // values | ||||||
|  | |||||||
| @ -28,14 +28,17 @@ | |||||||
| #include "awdebug.h" | #include "awdebug.h" | ||||||
|  |  | ||||||
|  |  | ||||||
| ExtScript::ExtScript(QObject *_parent, const QString &_filePath) | ExtScript::ExtScript(QWidget *_parent, const QString &_filePath) | ||||||
|     : AbstractExtItem(_parent, _filePath) |     : AbstractExtItem(_parent, _filePath) | ||||||
|  |     , ui(new Ui::ExtScript) | ||||||
| { | { | ||||||
|     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; |     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; | ||||||
|  |  | ||||||
|     if (!_filePath.isEmpty()) |     if (!_filePath.isEmpty()) | ||||||
|         ExtScript::readConfiguration(); |         ExtScript::readConfiguration(); | ||||||
|     readJsonFilters(); |     readJsonFilters(); | ||||||
|  |     ui->setupUi(this); | ||||||
|  |     ExtScript::translate(); | ||||||
|  |  | ||||||
|     m_values[tag("custom")] = ""; |     m_values[tag("custom")] = ""; | ||||||
|  |  | ||||||
| @ -55,6 +58,7 @@ ExtScript::~ExtScript() | |||||||
|     m_process->kill(); |     m_process->kill(); | ||||||
|     m_process->deleteLater(); |     m_process->deleteLater(); | ||||||
|     disconnect(this, SIGNAL(requestDataUpdate()), this, SLOT(startProcess())); |     disconnect(this, SIGNAL(requestDataUpdate()), this, SLOT(startProcess())); | ||||||
|  |     delete ui; | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| @ -62,7 +66,7 @@ ExtScript *ExtScript::copy(const QString &_fileName, const int _number) | |||||||
| { | { | ||||||
|     qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number; |     qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number; | ||||||
|  |  | ||||||
|     auto item = new ExtScript(parent(), _fileName); |     auto *item = new ExtScript(dynamic_cast<QWidget *>(parent()), _fileName); | ||||||
|     copyDefaults(item); |     copyDefaults(item); | ||||||
|     item->setExecutable(executable()); |     item->setExecutable(executable()); | ||||||
|     item->setNumber(_number); |     item->setNumber(_number); | ||||||
| @ -175,7 +179,7 @@ QString ExtScript::applyFilters(QString _value) const | |||||||
|  |  | ||||||
|     for (auto &filt : filters()) { |     for (auto &filt : filters()) { | ||||||
|         qCInfo(LOG_LIB) << "Found filter" << filt; |         qCInfo(LOG_LIB) << "Found filter" << filt; | ||||||
|         auto filter = m_jsonFilters[filt].toMap(); |         QVariantMap filter = m_jsonFilters[filt].toMap(); | ||||||
|         if (filter.isEmpty()) { |         if (filter.isEmpty()) { | ||||||
|             qCWarning(LOG_LIB) << "Could not find filter" << _value << "in the json"; |             qCWarning(LOG_LIB) << "Could not find filter" << _value << "in the json"; | ||||||
|             continue; |             continue; | ||||||
| @ -221,7 +225,7 @@ void ExtScript::readConfiguration() | |||||||
|  |  | ||||||
| void ExtScript::readJsonFilters() | void ExtScript::readJsonFilters() | ||||||
| { | { | ||||||
|     auto fileName = jsonFiltersFile(); |     QString fileName = jsonFiltersFile(); | ||||||
|     QFile jsonFile(fileName); |     QFile jsonFile(fileName); | ||||||
|     if (!jsonFile.open(QIODevice::ReadOnly | QIODevice::Text)) { |     if (!jsonFile.open(QIODevice::ReadOnly | QIODevice::Text)) { | ||||||
|         qCWarning(LOG_LIB) << "Could not open" << fileName; |         qCWarning(LOG_LIB) << "Could not open" << fileName; | ||||||
| @ -231,7 +235,7 @@ void ExtScript::readJsonFilters() | |||||||
|     jsonFile.close(); |     jsonFile.close(); | ||||||
|  |  | ||||||
|     QJsonParseError error{}; |     QJsonParseError error{}; | ||||||
|     auto jsonDoc = QJsonDocument::fromJson(jsonText.toUtf8(), &error); |     QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonText.toUtf8(), &error); | ||||||
|     if (error.error != QJsonParseError::NoError) { |     if (error.error != QJsonParseError::NoError) { | ||||||
|         qCWarning(LOG_LIB) << "Parse error" << error.errorString(); |         qCWarning(LOG_LIB) << "Parse error" << error.errorString(); | ||||||
|         return; |         return; | ||||||
| @ -252,15 +256,10 @@ QVariantHash ExtScript::run() | |||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| int ExtScript::showConfiguration(QWidget *_parent, const QVariant &_args) | int ExtScript::showConfiguration(const QVariant &_args) | ||||||
| { | { | ||||||
|     Q_UNUSED(_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_name->setText(name()); | ||||||
|     ui->lineEdit_comment->setText(comment()); |     ui->lineEdit_comment->setText(comment()); | ||||||
|     ui->label_numberValue->setText(QString("%1").arg(number())); |     ui->label_numberValue->setText(QString("%1").arg(number())); | ||||||
| @ -275,29 +274,25 @@ int ExtScript::showConfiguration(QWidget *_parent, const QVariant &_args) | |||||||
|     ui->checkBox_linesFilter->setCheckState(filters().contains("newline") ? Qt::Checked : Qt::Unchecked); |     ui->checkBox_linesFilter->setCheckState(filters().contains("newline") ? Qt::Checked : Qt::Unchecked); | ||||||
|     ui->checkBox_spaceFilter->setCheckState(filters().contains("space") ? Qt::Checked : Qt::Unchecked); |     ui->checkBox_spaceFilter->setCheckState(filters().contains("space") ? Qt::Checked : Qt::Unchecked); | ||||||
|  |  | ||||||
|     int ret = dialog->exec(); |     int ret = exec(); | ||||||
|     if (ret == 1) { |     if (ret != 1) | ||||||
|         setName(ui->lineEdit_name->text()); |         return ret; | ||||||
|         setComment(ui->lineEdit_comment->text()); |     setName(ui->lineEdit_name->text()); | ||||||
|         setNumber(ui->label_numberValue->text().toInt()); |     setComment(ui->lineEdit_comment->text()); | ||||||
|         setApiVersion(AW_EXTSCRIPT_API); |     setNumber(ui->label_numberValue->text().toInt()); | ||||||
|         setExecutable(ui->lineEdit_command->text()); |     setApiVersion(AW_EXTSCRIPT_API); | ||||||
|         setActive(ui->checkBox_active->checkState() == Qt::Checked); |     setExecutable(ui->lineEdit_command->text()); | ||||||
|         setRedirect(static_cast<Redirect>(ui->comboBox_redirect->currentIndex())); |     setActive(ui->checkBox_active->checkState() == Qt::Checked); | ||||||
|         setCron(ui->lineEdit_schedule->text()); |     setRedirect(static_cast<Redirect>(ui->comboBox_redirect->currentIndex())); | ||||||
|         setSocket(ui->lineEdit_socket->text()); |     setCron(ui->lineEdit_schedule->text()); | ||||||
|         setInterval(ui->spinBox_interval->value()); |     setSocket(ui->lineEdit_socket->text()); | ||||||
|         // filters |     setInterval(ui->spinBox_interval->value()); | ||||||
|         updateFilter("color", ui->checkBox_colorFilter->checkState() == Qt::Checked); |     // filters | ||||||
|         updateFilter("newline", ui->checkBox_linesFilter->checkState() == Qt::Checked); |     updateFilter("color", ui->checkBox_colorFilter->checkState() == Qt::Checked); | ||||||
|         updateFilter("space", ui->checkBox_spaceFilter->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; |     return ret; | ||||||
| } | } | ||||||
|  |  | ||||||
| @ -329,9 +324,9 @@ void ExtScript::startProcess() | |||||||
| void ExtScript::updateValue() | void ExtScript::updateValue() | ||||||
| { | { | ||||||
|     qCInfo(LOG_LIB) << "Cmd returns" << m_process->exitCode(); |     qCInfo(LOG_LIB) << "Cmd returns" << m_process->exitCode(); | ||||||
|     auto qdebug = QString::fromUtf8(m_process->readAllStandardError()).trimmed(); |     QString qdebug = QString::fromUtf8(m_process->readAllStandardError()).trimmed(); | ||||||
|     qCInfo(LOG_LIB) << "Error" << qdebug; |     qCInfo(LOG_LIB) << "Error" << qdebug; | ||||||
|     auto qoutput = QString::fromUtf8(m_process->readAllStandardOutput()).trimmed(); |     QString qoutput = QString::fromUtf8(m_process->readAllStandardOutput()).trimmed(); | ||||||
|     qCInfo(LOG_LIB) << "Output" << qoutput; |     qCInfo(LOG_LIB) << "Output" << qoutput; | ||||||
|     QString strValue; |     QString strValue; | ||||||
|  |  | ||||||
| @ -355,10 +350,8 @@ void ExtScript::updateValue() | |||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| void ExtScript::translate(void *_ui) | void ExtScript::translate() | ||||||
| { | { | ||||||
|     auto ui = reinterpret_cast<Ui::ExtScript *>(_ui); |  | ||||||
|  |  | ||||||
|     ui->label_name->setText(i18n("Name")); |     ui->label_name->setText(i18n("Name")); | ||||||
|     ui->label_comment->setText(i18n("Comment")); |     ui->label_comment->setText(i18n("Comment")); | ||||||
|     ui->label_number->setText(i18n("Tag")); |     ui->label_number->setText(i18n("Tag")); | ||||||
|  | |||||||
| @ -23,6 +23,11 @@ | |||||||
| #include "abstractextitem.h" | #include "abstractextitem.h" | ||||||
|  |  | ||||||
|  |  | ||||||
|  | namespace Ui | ||||||
|  | { | ||||||
|  | class ExtScript; | ||||||
|  | } | ||||||
|  |  | ||||||
| class ExtScript : public AbstractExtItem | class ExtScript : public AbstractExtItem | ||||||
| { | { | ||||||
|     Q_OBJECT |     Q_OBJECT | ||||||
| @ -33,7 +38,7 @@ class ExtScript : public AbstractExtItem | |||||||
| public: | public: | ||||||
|     enum class Redirect { stdout2stderr = 0, nothing = 1, stderr2stdout = 2, swap = 3 }; |     enum class Redirect { stdout2stderr = 0, nothing = 1, stderr2stdout = 2, swap = 3 }; | ||||||
|  |  | ||||||
|     explicit ExtScript(QObject *_parent = nullptr, const QString &_filePath = ""); |     explicit ExtScript(QWidget *_parent = nullptr, const QString &_filePath = ""); | ||||||
|     ~ExtScript() override; |     ~ExtScript() override; | ||||||
|     ExtScript *copy(const QString &_fileName, int _number) override; |     ExtScript *copy(const QString &_fileName, int _number) override; | ||||||
|     static QString jsonFiltersFile(); |     static QString jsonFiltersFile(); | ||||||
| @ -57,7 +62,7 @@ public slots: | |||||||
|     void readConfiguration() override; |     void readConfiguration() override; | ||||||
|     void readJsonFilters(); |     void readJsonFilters(); | ||||||
|     QVariantHash run() override; |     QVariantHash run() override; | ||||||
|     int showConfiguration(QWidget *_parent, const QVariant &_args) override; |     int showConfiguration(const QVariant &_args) override; | ||||||
|     void writeConfiguration() const override; |     void writeConfiguration() const override; | ||||||
|  |  | ||||||
| private slots: | private slots: | ||||||
| @ -66,7 +71,8 @@ private slots: | |||||||
|  |  | ||||||
| private: | private: | ||||||
|     QProcess *m_process = nullptr; |     QProcess *m_process = nullptr; | ||||||
|     void translate(void *_ui) override; |     Ui::ExtScript *ui = nullptr; | ||||||
|  |     void translate() override; | ||||||
|     // properties |     // properties | ||||||
|     QString m_executable = "/usr/bin/true"; |     QString m_executable = "/usr/bin/true"; | ||||||
|     QStringList m_filters = QStringList(); |     QStringList m_filters = QStringList(); | ||||||
|  | |||||||
| @ -25,13 +25,16 @@ | |||||||
| #include "awdebug.h" | #include "awdebug.h" | ||||||
|  |  | ||||||
|  |  | ||||||
| ExtUpgrade::ExtUpgrade(QObject *_parent, const QString &_filePath) | ExtUpgrade::ExtUpgrade(QWidget *_parent, const QString &_filePath) | ||||||
|     : AbstractExtItem(_parent, _filePath) |     : AbstractExtItem(_parent, _filePath) | ||||||
|  |     , ui(new Ui::ExtUpgrade) | ||||||
| { | { | ||||||
|     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; |     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; | ||||||
|  |  | ||||||
|     if (!_filePath.isEmpty()) |     if (!_filePath.isEmpty()) | ||||||
|         ExtUpgrade::readConfiguration(); |         ExtUpgrade::readConfiguration(); | ||||||
|  |     ui->setupUi(this); | ||||||
|  |     ExtUpgrade::translate(); | ||||||
|  |  | ||||||
|     m_values[tag("pkgcount")] = 0; |     m_values[tag("pkgcount")] = 0; | ||||||
|  |  | ||||||
| @ -50,6 +53,7 @@ ExtUpgrade::~ExtUpgrade() | |||||||
|     m_process->kill(); |     m_process->kill(); | ||||||
|     m_process->deleteLater(); |     m_process->deleteLater(); | ||||||
|     disconnect(this, SIGNAL(requestDataUpdate()), this, SLOT(startProcess())); |     disconnect(this, SIGNAL(requestDataUpdate()), this, SLOT(startProcess())); | ||||||
|  |     delete ui; | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| @ -57,7 +61,7 @@ ExtUpgrade *ExtUpgrade::copy(const QString &_fileName, const int _number) | |||||||
| { | { | ||||||
|     qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number; |     qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number; | ||||||
|  |  | ||||||
|     auto item = new ExtUpgrade(parent(), _fileName); |     auto *item = new ExtUpgrade(dynamic_cast<QWidget *>(parent()), _fileName); | ||||||
|     copyDefaults(item); |     copyDefaults(item); | ||||||
|     item->setExecutable(executable()); |     item->setExecutable(executable()); | ||||||
|     item->setFilter(filter()); |     item->setFilter(filter()); | ||||||
| @ -145,15 +149,10 @@ QVariantHash ExtUpgrade::run() | |||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| int ExtUpgrade::showConfiguration(QWidget *_parent, const QVariant &_args) | int ExtUpgrade::showConfiguration(const QVariant &_args) | ||||||
| { | { | ||||||
|     Q_UNUSED(_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_name->setText(name()); | ||||||
|     ui->lineEdit_comment->setText(comment()); |     ui->lineEdit_comment->setText(comment()); | ||||||
|     ui->label_numberValue->setText(QString("%1").arg(number())); |     ui->label_numberValue->setText(QString("%1").arg(number())); | ||||||
| @ -165,26 +164,22 @@ int ExtUpgrade::showConfiguration(QWidget *_parent, const QVariant &_args) | |||||||
|     ui->lineEdit_socket->setText(socket()); |     ui->lineEdit_socket->setText(socket()); | ||||||
|     ui->spinBox_interval->setValue(interval()); |     ui->spinBox_interval->setValue(interval()); | ||||||
|  |  | ||||||
|     auto ret = dialog->exec(); |     int ret = exec(); | ||||||
|     if (ret == 1) { |     if (ret != 1) | ||||||
|         setName(ui->lineEdit_name->text()); |         return ret; | ||||||
|         setComment(ui->lineEdit_comment->text()); |     setName(ui->lineEdit_name->text()); | ||||||
|         setNumber(ui->label_numberValue->text().toInt()); |     setComment(ui->lineEdit_comment->text()); | ||||||
|         setApiVersion(AW_EXTUPGRADE_API); |     setNumber(ui->label_numberValue->text().toInt()); | ||||||
|         setExecutable(ui->lineEdit_command->text()); |     setApiVersion(AW_EXTUPGRADE_API); | ||||||
|         setFilter(ui->lineEdit_filter->text()); |     setExecutable(ui->lineEdit_command->text()); | ||||||
|         setActive(ui->checkBox_active->checkState() == Qt::Checked); |     setFilter(ui->lineEdit_filter->text()); | ||||||
|         setNull(ui->spinBox_null->value()); |     setActive(ui->checkBox_active->checkState() == Qt::Checked); | ||||||
|         setCron(ui->lineEdit_schedule->text()); |     setNull(ui->spinBox_null->value()); | ||||||
|         setSocket(ui->lineEdit_socket->text()); |     setCron(ui->lineEdit_schedule->text()); | ||||||
|         setInterval(ui->spinBox_interval->value()); |     setSocket(ui->lineEdit_socket->text()); | ||||||
|  |     setInterval(ui->spinBox_interval->value()); | ||||||
|         writeConfiguration(); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     dialog->deleteLater(); |  | ||||||
|     delete ui; |  | ||||||
|  |  | ||||||
|  |     writeConfiguration(); | ||||||
|     return ret; |     return ret; | ||||||
| } | } | ||||||
|  |  | ||||||
| @ -218,7 +213,7 @@ void ExtUpgrade::updateValue() | |||||||
|     qCInfo(LOG_LIB) << "Cmd returns" << m_process->exitCode(); |     qCInfo(LOG_LIB) << "Cmd returns" << m_process->exitCode(); | ||||||
|     qCInfo(LOG_LIB) << "Error" << m_process->readAllStandardError(); |     qCInfo(LOG_LIB) << "Error" << m_process->readAllStandardError(); | ||||||
|  |  | ||||||
|     auto qoutput = QString::fromUtf8(m_process->readAllStandardOutput()).trimmed(); |     QString qoutput = QString::fromUtf8(m_process->readAllStandardOutput()).trimmed(); | ||||||
|     m_values[tag("pkgcount")] = [this](const QString &output) { |     m_values[tag("pkgcount")] = [this](const QString &output) { | ||||||
|         return filter().isEmpty() ? output.split('\n', Qt::SkipEmptyParts).count() - null() |         return filter().isEmpty() ? output.split('\n', Qt::SkipEmptyParts).count() - null() | ||||||
|                                   : output.split('\n', Qt::SkipEmptyParts).filter(QRegularExpression(filter())).count(); |                                   : output.split('\n', Qt::SkipEmptyParts).filter(QRegularExpression(filter())).count(); | ||||||
| @ -228,10 +223,8 @@ void ExtUpgrade::updateValue() | |||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| void ExtUpgrade::translate(void *_ui) | void ExtUpgrade::translate() | ||||||
| { | { | ||||||
|     auto ui = reinterpret_cast<Ui::ExtUpgrade *>(_ui); |  | ||||||
|  |  | ||||||
|     ui->label_name->setText(i18n("Name")); |     ui->label_name->setText(i18n("Name")); | ||||||
|     ui->label_comment->setText(i18n("Comment")); |     ui->label_comment->setText(i18n("Comment")); | ||||||
|     ui->label_number->setText(i18n("Tag")); |     ui->label_number->setText(i18n("Tag")); | ||||||
|  | |||||||
| @ -23,6 +23,11 @@ | |||||||
| #include "abstractextitem.h" | #include "abstractextitem.h" | ||||||
|  |  | ||||||
|  |  | ||||||
|  | namespace Ui | ||||||
|  | { | ||||||
|  | class ExtUpgrade; | ||||||
|  | } | ||||||
|  |  | ||||||
| class ExtUpgrade : public AbstractExtItem | class ExtUpgrade : public AbstractExtItem | ||||||
| { | { | ||||||
|     Q_OBJECT |     Q_OBJECT | ||||||
| @ -31,7 +36,7 @@ class ExtUpgrade : public AbstractExtItem | |||||||
|     Q_PROPERTY(int null READ null WRITE setNull) |     Q_PROPERTY(int null READ null WRITE setNull) | ||||||
|  |  | ||||||
| public: | public: | ||||||
|     explicit ExtUpgrade(QObject *_parent = nullptr, const QString &_filePath = ""); |     explicit ExtUpgrade(QWidget *_parent = nullptr, const QString &_filePath = ""); | ||||||
|     ~ExtUpgrade() override; |     ~ExtUpgrade() override; | ||||||
|     ExtUpgrade *copy(const QString &_fileName, int _number) override; |     ExtUpgrade *copy(const QString &_fileName, int _number) override; | ||||||
|     // get methods |     // get methods | ||||||
| @ -47,7 +52,7 @@ public: | |||||||
| public slots: | public slots: | ||||||
|     void readConfiguration() override; |     void readConfiguration() override; | ||||||
|     QVariantHash run() override; |     QVariantHash run() override; | ||||||
|     int showConfiguration(QWidget *_parent, const QVariant &_args) override; |     int showConfiguration(const QVariant &_args) override; | ||||||
|     void writeConfiguration() const override; |     void writeConfiguration() const override; | ||||||
|  |  | ||||||
| private slots: | private slots: | ||||||
| @ -56,7 +61,8 @@ private slots: | |||||||
|  |  | ||||||
| private: | private: | ||||||
|     QProcess *m_process = nullptr; |     QProcess *m_process = nullptr; | ||||||
|     void translate(void *_ui) override; |     Ui::ExtUpgrade *ui = nullptr; | ||||||
|  |     void translate() override; | ||||||
|     // properties |     // properties | ||||||
|     QString m_executable = "/usr/bin/true"; |     QString m_executable = "/usr/bin/true"; | ||||||
|     QString m_filter = ""; |     QString m_filter = ""; | ||||||
|  | |||||||
| @ -29,16 +29,20 @@ | |||||||
|  |  | ||||||
| #include "awdebug.h" | #include "awdebug.h" | ||||||
| #include "owmweatherprovider.h" | #include "owmweatherprovider.h" | ||||||
|  | #include "yahooweatherprovider.h" | ||||||
|  |  | ||||||
|  |  | ||||||
| ExtWeather::ExtWeather(QObject *_parent, const QString &_filePath) | ExtWeather::ExtWeather(QWidget *_parent, const QString &_filePath) | ||||||
|     : AbstractExtItem(_parent, _filePath) |     : AbstractExtItem(_parent, _filePath) | ||||||
|  |     , ui(new Ui::ExtWeather) | ||||||
| { | { | ||||||
|     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; |     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; | ||||||
|  |  | ||||||
|     if (!_filePath.isEmpty()) |     if (!_filePath.isEmpty()) | ||||||
|         ExtWeather::readConfiguration(); |         ExtWeather::readConfiguration(); | ||||||
|     readJsonMap(); |     readJsonMap(); | ||||||
|  |     ui->setupUi(this); | ||||||
|  |     ExtWeather::translate(); | ||||||
|  |  | ||||||
|     m_values[tag("weatherId")] = 0; |     m_values[tag("weatherId")] = 0; | ||||||
|     m_values[tag("weather")] = ""; |     m_values[tag("weather")] = ""; | ||||||
| @ -63,6 +67,7 @@ ExtWeather::~ExtWeather() | |||||||
|     disconnect(this, SIGNAL(requestDataUpdate()), this, SLOT(sendRequest())); |     disconnect(this, SIGNAL(requestDataUpdate()), this, SLOT(sendRequest())); | ||||||
|  |  | ||||||
|     m_manager->deleteLater(); |     m_manager->deleteLater(); | ||||||
|  |     delete ui; | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| @ -70,7 +75,7 @@ ExtWeather *ExtWeather::copy(const QString &_fileName, const int _number) | |||||||
| { | { | ||||||
|     qCDebug(LOG_LIB) << "File" << _fileName << "number" << _number; |     qCDebug(LOG_LIB) << "File" << _fileName << "number" << _number; | ||||||
|  |  | ||||||
|     auto item = new ExtWeather(parent(), _fileName); |     auto *item = new ExtWeather(dynamic_cast<QWidget *>(parent()), _fileName); | ||||||
|     copyDefaults(item); |     copyDefaults(item); | ||||||
|     item->setCity(city()); |     item->setCity(city()); | ||||||
|     item->setCountry(country()); |     item->setCountry(country()); | ||||||
| @ -97,7 +102,7 @@ QString ExtWeather::weatherFromInt(const int _id) const | |||||||
| { | { | ||||||
|     qCDebug(LOG_LIB) << "Weather ID" << _id; |     qCDebug(LOG_LIB) << "Weather ID" << _id; | ||||||
|  |  | ||||||
|     auto map = m_jsonMap[m_image ? "image" : "text"].toMap(); |     QVariantMap map = m_jsonMap[m_image ? "image" : "text"].toMap(); | ||||||
|     return map.value(QString::number(_id), map["default"]).toString(); |     return map.value(QString::number(_id), map["default"]).toString(); | ||||||
| } | } | ||||||
|  |  | ||||||
| @ -231,7 +236,7 @@ void ExtWeather::readConfiguration() | |||||||
|  |  | ||||||
| void ExtWeather::readJsonMap() | void ExtWeather::readJsonMap() | ||||||
| { | { | ||||||
|     auto fileName = jsonMapFile(); |     QString fileName = jsonMapFile(); | ||||||
|     QFile jsonFile(fileName); |     QFile jsonFile(fileName); | ||||||
|     if (!jsonFile.open(QIODevice::ReadOnly | QIODevice::Text)) { |     if (!jsonFile.open(QIODevice::ReadOnly | QIODevice::Text)) { | ||||||
|         qCWarning(LOG_LIB) << "Could not open" << fileName; |         qCWarning(LOG_LIB) << "Could not open" << fileName; | ||||||
| @ -241,7 +246,7 @@ void ExtWeather::readJsonMap() | |||||||
|     jsonFile.close(); |     jsonFile.close(); | ||||||
|  |  | ||||||
|     QJsonParseError error{}; |     QJsonParseError error{}; | ||||||
|     auto jsonDoc = QJsonDocument::fromJson(jsonText.toUtf8(), &error); |     QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonText.toUtf8(), &error); | ||||||
|     if (error.error != QJsonParseError::NoError) { |     if (error.error != QJsonParseError::NoError) { | ||||||
|         qCWarning(LOG_LIB) << "Parse error" << error.errorString(); |         qCWarning(LOG_LIB) << "Parse error" << error.errorString(); | ||||||
|         return; |         return; | ||||||
| @ -262,15 +267,10 @@ QVariantHash ExtWeather::run() | |||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| int ExtWeather::showConfiguration(QWidget *_parent, const QVariant &_args) | int ExtWeather::showConfiguration(const QVariant &_args) | ||||||
| { | { | ||||||
|     Q_UNUSED(_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_name->setText(name()); | ||||||
|     ui->lineEdit_comment->setText(comment()); |     ui->lineEdit_comment->setText(comment()); | ||||||
|     ui->label_numberValue->setText(QString("%1").arg(number())); |     ui->label_numberValue->setText(QString("%1").arg(number())); | ||||||
| @ -284,28 +284,24 @@ int ExtWeather::showConfiguration(QWidget *_parent, const QVariant &_args) | |||||||
|     ui->lineEdit_socket->setText(socket()); |     ui->lineEdit_socket->setText(socket()); | ||||||
|     ui->spinBox_interval->setValue(interval()); |     ui->spinBox_interval->setValue(interval()); | ||||||
|  |  | ||||||
|     int ret = dialog->exec(); |     int ret = exec(); | ||||||
|     if (ret == 1) { |     if (ret != 1) | ||||||
|         setName(ui->lineEdit_name->text()); |         return ret; | ||||||
|         setComment(ui->lineEdit_comment->text()); |     setName(ui->lineEdit_name->text()); | ||||||
|         setNumber(ui->label_numberValue->text().toInt()); |     setComment(ui->lineEdit_comment->text()); | ||||||
|         setApiVersion(AW_EXTWEATHER_API); |     setNumber(ui->label_numberValue->text().toInt()); | ||||||
|         setCity(ui->lineEdit_city->text()); |     setApiVersion(AW_EXTWEATHER_API); | ||||||
|         setCountry(ui->lineEdit_country->text()); |     setCity(ui->lineEdit_city->text()); | ||||||
|         setProvider(static_cast<Provider>(ui->comboBox_provider->currentIndex())); |     setCountry(ui->lineEdit_country->text()); | ||||||
|         setTs(ui->spinBox_timestamp->value()); |     setProvider(static_cast<Provider>(ui->comboBox_provider->currentIndex())); | ||||||
|         setImage(ui->checkBox_image->checkState() == Qt::Checked); |     setTs(ui->spinBox_timestamp->value()); | ||||||
|         setActive(ui->checkBox_active->checkState() == Qt::Checked); |     setImage(ui->checkBox_image->checkState() == Qt::Checked); | ||||||
|         setCron(ui->lineEdit_schedule->text()); |     setActive(ui->checkBox_active->checkState() == Qt::Checked); | ||||||
|         setSocket(ui->lineEdit_socket->text()); |     setCron(ui->lineEdit_schedule->text()); | ||||||
|         setInterval(ui->spinBox_interval->value()); |     setSocket(ui->lineEdit_socket->text()); | ||||||
|  |     setInterval(ui->spinBox_interval->value()); | ||||||
|         writeConfiguration(); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     dialog->deleteLater(); |  | ||||||
|     delete ui; |  | ||||||
|  |  | ||||||
|  |     writeConfiguration(); | ||||||
|     return ret; |     return ret; | ||||||
| } | } | ||||||
|  |  | ||||||
| @ -332,7 +328,7 @@ void ExtWeather::writeConfiguration() const | |||||||
| void ExtWeather::sendRequest() | void ExtWeather::sendRequest() | ||||||
| { | { | ||||||
|     m_isRunning = true; |     m_isRunning = true; | ||||||
|     auto reply = m_manager->get(QNetworkRequest(m_providerObject->url())); |     QNetworkReply *reply = m_manager->get(QNetworkRequest(m_providerObject->url())); | ||||||
|     new QReplyTimeout(reply, REQUEST_TIMEOUT); |     new QReplyTimeout(reply, REQUEST_TIMEOUT); | ||||||
| } | } | ||||||
|  |  | ||||||
| @ -346,14 +342,14 @@ void ExtWeather::weatherReplyReceived(QNetworkReply *_reply) | |||||||
|  |  | ||||||
|     m_isRunning = false; |     m_isRunning = false; | ||||||
|     QJsonParseError error{}; |     QJsonParseError error{}; | ||||||
|     auto jsonDoc = QJsonDocument::fromJson(_reply->readAll(), &error); |     QJsonDocument jsonDoc = QJsonDocument::fromJson(_reply->readAll(), &error); | ||||||
|     _reply->deleteLater(); |     _reply->deleteLater(); | ||||||
|     if (error.error != QJsonParseError::NoError) { |     if (error.error != QJsonParseError::NoError) { | ||||||
|         qCWarning(LOG_LIB) << "Parse error" << error.errorString(); |         qCWarning(LOG_LIB) << "Parse error" << error.errorString(); | ||||||
|         return; |         return; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     auto data = m_providerObject->parse(jsonDoc.toVariant().toMap()); |     QVariantHash data = m_providerObject->parse(jsonDoc.toVariant().toMap()); | ||||||
|     if (data.isEmpty()) |     if (data.isEmpty()) | ||||||
|         return; |         return; | ||||||
|     m_values = data; |     m_values = data; | ||||||
| @ -374,10 +370,8 @@ void ExtWeather::initProvider() | |||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| void ExtWeather::translate(void *_ui) | void ExtWeather::translate() | ||||||
| { | { | ||||||
|     auto ui = reinterpret_cast<Ui::ExtWeather *>(_ui); |  | ||||||
|  |  | ||||||
|     ui->label_name->setText(i18n("Name")); |     ui->label_name->setText(i18n("Name")); | ||||||
|     ui->label_comment->setText(i18n("Comment")); |     ui->label_comment->setText(i18n("Comment")); | ||||||
|     ui->label_number->setText(i18n("Tag")); |     ui->label_number->setText(i18n("Tag")); | ||||||
|  | |||||||
| @ -42,7 +42,7 @@ class ExtWeather : public AbstractExtItem | |||||||
| public: | public: | ||||||
|     enum class Provider { OWM = 0, Yahoo = 1 }; |     enum class Provider { OWM = 0, Yahoo = 1 }; | ||||||
|  |  | ||||||
|     explicit ExtWeather(QObject *_parent = nullptr, const QString &_filePath = ""); |     explicit ExtWeather(QWidget *_parent = nullptr, const QString &_filePath = ""); | ||||||
|     ~ExtWeather() override; |     ~ExtWeather() override; | ||||||
|     ExtWeather *copy(const QString &_fileName, int _number) override; |     ExtWeather *copy(const QString &_fileName, int _number) override; | ||||||
|     static QString jsonMapFile(); |     static QString jsonMapFile(); | ||||||
| @ -67,7 +67,7 @@ public slots: | |||||||
|     void readConfiguration() override; |     void readConfiguration() override; | ||||||
|     void readJsonMap(); |     void readJsonMap(); | ||||||
|     QVariantHash run() override; |     QVariantHash run() override; | ||||||
|     int showConfiguration(QWidget *_parent, const QVariant &_args) override; |     int showConfiguration(const QVariant &_args) override; | ||||||
|     void writeConfiguration() const override; |     void writeConfiguration() const override; | ||||||
|  |  | ||||||
| private slots: | private slots: | ||||||
| @ -78,8 +78,9 @@ private: | |||||||
|     AbstractWeatherProvider *m_providerObject = nullptr; |     AbstractWeatherProvider *m_providerObject = nullptr; | ||||||
|     QNetworkAccessManager *m_manager = nullptr; |     QNetworkAccessManager *m_manager = nullptr; | ||||||
|     bool m_isRunning = false; |     bool m_isRunning = false; | ||||||
|  |     Ui::ExtWeather *ui = nullptr; | ||||||
|     void initProvider(); |     void initProvider(); | ||||||
|     void translate(void *_ui) override; |     void translate() override; | ||||||
|     // properties |     // properties | ||||||
|     QString m_city = "London"; |     QString m_city = "London"; | ||||||
|     QString m_country = "uk"; |     QString m_country = "uk"; | ||||||
|  | |||||||
| @ -32,8 +32,9 @@ | |||||||
| #include "graphicalitemhelper.h" | #include "graphicalitemhelper.h" | ||||||
|  |  | ||||||
|  |  | ||||||
| GraphicalItem::GraphicalItem(QObject *_parent, const QString &_filePath) | GraphicalItem::GraphicalItem(QWidget *_parent, const QString &_filePath) | ||||||
|     : AbstractExtItem(_parent, _filePath) |     : AbstractExtItem(_parent, _filePath) | ||||||
|  |     , ui(new Ui::GraphicalItem) | ||||||
| { | { | ||||||
|     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; |     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; | ||||||
|  |  | ||||||
| @ -52,6 +53,21 @@ GraphicalItem::GraphicalItem(QObject *_parent, const QString &_filePath) | |||||||
|  |  | ||||||
|     if (!_filePath.isEmpty()) |     if (!_filePath.isEmpty()) | ||||||
|         GraphicalItem::readConfiguration(); |         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; | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| @ -59,7 +75,7 @@ GraphicalItem *GraphicalItem::copy(const QString &_fileName, const int _number) | |||||||
| { | { | ||||||
|     qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number; |     qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number; | ||||||
|  |  | ||||||
|     auto item = new GraphicalItem(parent(), _fileName); |     auto *item = new GraphicalItem(dynamic_cast<QWidget *>(parent()), _fileName); | ||||||
|     copyDefaults(item); |     copyDefaults(item); | ||||||
|     item->setActiveColor(activeColor()); |     item->setActiveColor(activeColor()); | ||||||
|     item->setBar(bar()); |     item->setBar(bar()); | ||||||
| @ -84,7 +100,7 @@ QString GraphicalItem::image(const QVariant &value) | |||||||
|  |  | ||||||
|     m_scene->clear(); |     m_scene->clear(); | ||||||
|     int scale[2] = {1, 1}; |     int scale[2] = {1, 1}; | ||||||
|     auto converted = GraphicalItemHelper::getPercents(value.toFloat(), minValue(), maxValue()); |     float converted = GraphicalItemHelper::getPercents(value.toFloat(), minValue(), maxValue()); | ||||||
|  |  | ||||||
|     // paint |     // paint | ||||||
|     switch (m_type) { |     switch (m_type) { | ||||||
| @ -116,11 +132,11 @@ QString GraphicalItem::image(const QVariant &value) | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     // convert |     // convert | ||||||
|     auto pixmap = m_view->grab().transformed(QTransform().scale(scale[0], scale[1])); |     QPixmap pixmap = m_view->grab().transformed(QTransform().scale(scale[0], scale[1])); | ||||||
|     QByteArray byteArray; |     QByteArray byteArray; | ||||||
|     QBuffer buffer(&byteArray); |     QBuffer buffer(&byteArray); | ||||||
|     pixmap.save(&buffer, "PNG"); |     pixmap.save(&buffer, "PNG"); | ||||||
|     auto url = QString("<img src=\"data:image/png;base64,%1\"/>").arg(QString(byteArray.toBase64())); |     QString url = QString("<img src=\"data:image/png;base64,%1\"/>").arg(QString(byteArray.toBase64())); | ||||||
|  |  | ||||||
|     return url; |     return url; | ||||||
| } | } | ||||||
| @ -422,21 +438,10 @@ void GraphicalItem::readConfiguration() | |||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| int GraphicalItem::showConfiguration(QWidget *_parent, const QVariant &_args) | int GraphicalItem::showConfiguration(const QVariant &_args) | ||||||
| { | { | ||||||
|     qCDebug(LOG_LIB) << "Combobox arguments" << _args; |     qCDebug(LOG_LIB) << "Combobox arguments" << _args; | ||||||
|     auto tags = _args.toStringList(); |     QStringList 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_name->setText(name()); | ||||||
|     ui->lineEdit_comment->setText(comment()); |     ui->lineEdit_comment->setText(comment()); | ||||||
| @ -471,29 +476,25 @@ int GraphicalItem::showConfiguration(QWidget *_parent, const QVariant &_args) | |||||||
|     emit(ui->comboBox_type->currentIndexChanged(ui->comboBox_type->currentIndex())); |     emit(ui->comboBox_type->currentIndexChanged(ui->comboBox_type->currentIndex())); | ||||||
|     emit(ui->checkBox_custom->stateChanged(ui->checkBox_custom->checkState())); |     emit(ui->checkBox_custom->stateChanged(ui->checkBox_custom->checkState())); | ||||||
|  |  | ||||||
|     int ret = dialog->exec(); |     int ret = exec(); | ||||||
|     if (ret == 1) { |     if (ret != 1) | ||||||
|         setName(ui->lineEdit_name->text()); |         return ret; | ||||||
|         setComment(ui->lineEdit_comment->text()); |     setName(ui->lineEdit_name->text()); | ||||||
|         setApiVersion(AW_GRAPHITEM_API); |     setComment(ui->lineEdit_comment->text()); | ||||||
|         setCount(ui->spinBox_count->value()); |     setApiVersion(AW_GRAPHITEM_API); | ||||||
|         setCustom(ui->checkBox_custom->isChecked()); |     setCount(ui->spinBox_count->value()); | ||||||
|         setBar(m_custom ? ui->lineEdit_customValue->text() : ui->comboBox_value->currentText()); |     setCustom(ui->checkBox_custom->isChecked()); | ||||||
|         setMaxValue(static_cast<float>(ui->doubleSpinBox_max->value())); |     setBar(m_custom ? ui->lineEdit_customValue->text() : ui->comboBox_value->currentText()); | ||||||
|         setMinValue(static_cast<float>(ui->doubleSpinBox_min->value())); |     setMaxValue(static_cast<float>(ui->doubleSpinBox_max->value())); | ||||||
|         setActiveColor(ui->lineEdit_activeColor->text()); |     setMinValue(static_cast<float>(ui->doubleSpinBox_min->value())); | ||||||
|         setInactiveColor(ui->lineEdit_inactiveColor->text()); |     setActiveColor(ui->lineEdit_activeColor->text()); | ||||||
|         setType(static_cast<Type>(ui->comboBox_type->currentIndex())); |     setInactiveColor(ui->lineEdit_inactiveColor->text()); | ||||||
|         setDirection(static_cast<Direction>(ui->comboBox_direction->currentIndex())); |     setType(static_cast<Type>(ui->comboBox_type->currentIndex())); | ||||||
|         setItemHeight(ui->spinBox_height->value()); |     setDirection(static_cast<Direction>(ui->comboBox_direction->currentIndex())); | ||||||
|         setItemWidth(ui->spinBox_width->value()); |     setItemHeight(ui->spinBox_height->value()); | ||||||
|  |     setItemWidth(ui->spinBox_width->value()); | ||||||
|         writeConfiguration(); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     dialog->deleteLater(); |  | ||||||
|     delete ui; |  | ||||||
|  |  | ||||||
|  |     writeConfiguration(); | ||||||
|     return ret; |     return ret; | ||||||
| } | } | ||||||
|  |  | ||||||
| @ -523,23 +524,23 @@ void GraphicalItem::writeConfiguration() const | |||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| void GraphicalItem::changeColor(Ui::GraphicalItem *_ui) | void GraphicalItem::changeColor() | ||||||
| { | { | ||||||
|     QLineEdit *lineEdit; |     QLineEdit *lineEdit; | ||||||
|     int state; |     int state; | ||||||
|     if (sender() == _ui->toolButton_activeColor) { |     if (sender() == ui->toolButton_activeColor) { | ||||||
|         lineEdit = _ui->lineEdit_activeColor; |         lineEdit = ui->lineEdit_activeColor; | ||||||
|         state = _ui->comboBox_activeImageType->currentIndex(); |         state = ui->comboBox_activeImageType->currentIndex(); | ||||||
|     } else { |     } else { | ||||||
|         lineEdit = _ui->lineEdit_inactiveColor; |         lineEdit = ui->lineEdit_inactiveColor; | ||||||
|         state = _ui->comboBox_inactiveImageType->currentIndex(); |         state = ui->comboBox_inactiveImageType->currentIndex(); | ||||||
|     } |     } | ||||||
|     qCInfo(LOG_LIB) << "Using state" << state << "and lineEdit" << lineEdit; |     qCInfo(LOG_LIB) << "Using state" << state << "and lineEdit" << lineEdit; | ||||||
|  |  | ||||||
|     QString outputColor; |     QString outputColor; | ||||||
|     if (state == 0) { |     if (state == 0) { | ||||||
|         auto color = GraphicalItemHelper::stringToColor(lineEdit->text()); |         QColor color = GraphicalItemHelper::stringToColor(lineEdit->text()); | ||||||
|         auto newColor = QColorDialog::getColor(color, nullptr, i18n("Select color"), QColorDialog::ShowAlphaChannel); |         QColor newColor = QColorDialog::getColor(color, this, i18n("Select color"), QColorDialog::ShowAlphaChannel); | ||||||
|         if (!newColor.isValid()) |         if (!newColor.isValid()) | ||||||
|             return; |             return; | ||||||
|         qCInfo(LOG_LIB) << "Selected color" << newColor; |         qCInfo(LOG_LIB) << "Selected color" << newColor; | ||||||
| @ -552,9 +553,9 @@ void GraphicalItem::changeColor(Ui::GraphicalItem *_ui) | |||||||
|  |  | ||||||
|         outputColor = QString("color://%1").arg(colorText.join(',')); |         outputColor = QString("color://%1").arg(colorText.join(',')); | ||||||
|     } else if (state == 1) { |     } else if (state == 1) { | ||||||
|         auto path = lineEdit->text(); |         QString path = lineEdit->text(); | ||||||
|         auto directory = QFileInfo(path).absolutePath(); |         QString directory = QFileInfo(path).absolutePath(); | ||||||
|         outputColor = QFileDialog::getOpenFileUrl(nullptr, i18n("Select path"), directory, |         outputColor = QFileDialog::getOpenFileUrl(this, i18n("Select path"), directory, | ||||||
|                                                   i18n("Images (*.png *.bpm *.jpg);;All files (*.*)")) |                                                   i18n("Images (*.png *.bpm *.jpg);;All files (*.*)")) | ||||||
|                           .toString(); |                           .toString(); | ||||||
|  |  | ||||||
| @ -569,28 +570,26 @@ void GraphicalItem::changeColor(Ui::GraphicalItem *_ui) | |||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| void GraphicalItem::changeCountState(Ui::GraphicalItem *_ui, const int _state) | void GraphicalItem::changeCountState(const int _state) | ||||||
| { | { | ||||||
|     qCDebug(LOG_LIB) << "Current state is" << _state; |     qCDebug(LOG_LIB) << "Current state is" << _state; | ||||||
|  |  | ||||||
|     // 3 is magic number. Actually 3 is Graph mode |     // 3 is magic number. Actually 3 is Graph mode | ||||||
|     _ui->widget_count->setHidden(_state != 3); |     ui->widget_count->setHidden(_state != 3); | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| void GraphicalItem::changeValue(Ui::GraphicalItem *_ui, const int _state) | void GraphicalItem::changeValue(const int _state) | ||||||
| { | { | ||||||
|     qCDebug(LOG_LIB) << "Current state is" << _state; |     qCDebug(LOG_LIB) << "Current state is" << _state; | ||||||
|  |  | ||||||
|     _ui->widget_value->setHidden(_state != Qt::Unchecked); |     ui->widget_value->setHidden(_state != Qt::Unchecked); | ||||||
|     _ui->widget_customValue->setHidden(_state == Qt::Unchecked); |     ui->widget_customValue->setHidden(_state == Qt::Unchecked); | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| void GraphicalItem::translate(void *_ui) | void GraphicalItem::translate() | ||||||
| { | { | ||||||
|     auto ui = reinterpret_cast<Ui::GraphicalItem *>(_ui); |  | ||||||
|  |  | ||||||
|     ui->label_name->setText(i18n("Name")); |     ui->label_name->setText(i18n("Name")); | ||||||
|     ui->label_comment->setText(i18n("Comment")); |     ui->label_comment->setText(i18n("Comment")); | ||||||
|     ui->label_number->setText(i18n("Tag")); |     ui->label_number->setText(i18n("Tag")); | ||||||
|  | |||||||
| @ -52,7 +52,8 @@ public: | |||||||
|     enum class Direction { LeftToRight = 0, RightToLeft = 1 }; |     enum class Direction { LeftToRight = 0, RightToLeft = 1 }; | ||||||
|     enum class Type { Horizontal = 0, Vertical = 1, Circle = 2, Graph = 3, Bars = 4 }; |     enum class Type { Horizontal = 0, Vertical = 1, Circle = 2, Graph = 3, Bars = 4 }; | ||||||
|  |  | ||||||
|     explicit GraphicalItem(QObject *_parent = nullptr, const QString &_filePath = ""); |     explicit GraphicalItem(QWidget *_parent = nullptr, const QString &_filePath = ""); | ||||||
|  |     ~GraphicalItem() override; | ||||||
|     GraphicalItem *copy(const QString &_fileName, int _number) override; |     GraphicalItem *copy(const QString &_fileName, int _number) override; | ||||||
|     QString image(const QVariant &value); |     QString image(const QVariant &value); | ||||||
|     void initScene(); |     void initScene(); | ||||||
| @ -91,19 +92,20 @@ public: | |||||||
| public slots: | public slots: | ||||||
|     void readConfiguration() override; |     void readConfiguration() override; | ||||||
|     QVariantHash run() override { return {}; }; |     QVariantHash run() override { return {}; }; | ||||||
|     int showConfiguration(QWidget *_parent, const QVariant &_args) override; |     int showConfiguration(const QVariant &_args) override; | ||||||
|     void writeConfiguration() const override; |     void writeConfiguration() const override; | ||||||
|  |  | ||||||
| private slots: | private slots: | ||||||
|     void changeColor(Ui::GraphicalItem *_ui); |     void changeColor(); | ||||||
|     void changeCountState(Ui::GraphicalItem *_ui, int _state); |     void changeCountState(int _state); | ||||||
|     void changeValue(Ui::GraphicalItem *_ui, int _state); |     void changeValue(int _state); | ||||||
|  |  | ||||||
| private: | private: | ||||||
|     GraphicalItemHelper *m_helper = nullptr; |     GraphicalItemHelper *m_helper = nullptr; | ||||||
|     QGraphicsScene *m_scene = nullptr; |     QGraphicsScene *m_scene = nullptr; | ||||||
|     QGraphicsView *m_view = nullptr; |     QGraphicsView *m_view = nullptr; | ||||||
|     void translate(void *_ui) override; |     Ui::GraphicalItem *ui = nullptr; | ||||||
|  |     void translate() override; | ||||||
|     // properties |     // properties | ||||||
|     QString m_bar = "cpu"; |     QString m_bar = "cpu"; | ||||||
|     int m_count = 100; |     int m_count = 100; | ||||||
|  | |||||||
| @ -93,9 +93,9 @@ QVariantHash OWMWeatherProvider::parseSingleJson(const QVariantMap &_json) const | |||||||
|     // main data |     // main data | ||||||
|     QVariantMap mainWeather = _json["main"].toMap(); |     QVariantMap mainWeather = _json["main"].toMap(); | ||||||
|     if (!weather.isEmpty()) { |     if (!weather.isEmpty()) { | ||||||
|         output[tag("humidity")] = mainWeather["humidity"].toDouble(); |         output[tag("humidity")] = mainWeather["humidity"].toFloat(); | ||||||
|         output[tag("pressure")] = mainWeather["pressure"].toDouble(); |         output[tag("pressure")] = mainWeather["pressure"].toFloat(); | ||||||
|         output[tag("temperature")] = mainWeather["temp"].toDouble(); |         output[tag("temperature")] = mainWeather["temp"].toFloat(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     // timestamp |     // timestamp | ||||||
|  | |||||||
| @ -1,8 +1,8 @@ | |||||||
| [Desktop Entry] | [Desktop Entry] | ||||||
| Encoding=UTF-8 | Encoding=UTF-8 | ||||||
| Name=AAPL | Name=AAPL.NASDAQ | ||||||
| Comment=Apple Inc | Comment=Apple Inc | ||||||
| X-AW-Ticker="AAPL.US" | X-AW-Ticker="AAPL" | ||||||
| X-AW-Active=false | X-AW-Active=false | ||||||
| X-AW-ApiVersion=5 | X-AW-ApiVersion=5 | ||||||
| X-AW-Interval=60 | X-AW-Interval=60 | ||||||
|  | |||||||
| @ -1,8 +1,8 @@ | |||||||
| [Desktop Entry] | [Desktop Entry] | ||||||
| Encoding=UTF-8 | Encoding=UTF-8 | ||||||
| Name=GOOG | Name=GOOG.NASDAQ | ||||||
| Comment=Google Inc | Comment=Google Inc | ||||||
| X-AW-Ticker="GOOG.US" | X-AW-Ticker="GOOG" | ||||||
| X-AW-Active=false | X-AW-Active=false | ||||||
| X-AW-ApiVersion=5 | X-AW-ApiVersion=5 | ||||||
| X-AW-Interval=60 | X-AW-Interval=60 | ||||||
|  | |||||||
| @ -1,8 +1,8 @@ | |||||||
| [Desktop Entry] | [Desktop Entry] | ||||||
| Encoding=UTF-8 | Encoding=UTF-8 | ||||||
| Name=MSFT | Name=MSFT.NASDAQ | ||||||
| Comment=Microsoft Corp | Comment=Microsoft Corp | ||||||
| X-AW-Ticker="MSFT.US" | X-AW-Ticker="MSFT" | ||||||
| X-AW-Active=false | X-AW-Active=false | ||||||
| X-AW-ApiVersion=5 | X-AW-ApiVersion=5 | ||||||
| X-AW-Interval=60 | X-AW-Interval=60 | ||||||
|  | |||||||
| @ -54,7 +54,7 @@ QVariantHash StooqQuotesProvider::parse(const QByteArray &_source, const QVarian | |||||||
|  |  | ||||||
|     QVariantHash values; |     QVariantHash values; | ||||||
|  |  | ||||||
|     auto sourceValues = QString::fromUtf8(_source).trimmed().split(','); |     QStringList sourceValues = QString::fromUtf8(_source).trimmed().split(','); | ||||||
|     if (sourceValues.count() != 2) { |     if (sourceValues.count() != 2) { | ||||||
|         qCWarning(LOG_LIB) << "Parse error" << sourceValues; |         qCWarning(LOG_LIB) << "Parse error" << sourceValues; | ||||||
|         return values; |         return values; | ||||||
| @ -67,12 +67,12 @@ QVariantHash StooqQuotesProvider::parse(const QByteArray &_source, const QVarian | |||||||
|     // last trade |     // last trade | ||||||
|     auto price = sourceValues.at(0).toDouble(); |     auto price = sourceValues.at(0).toDouble(); | ||||||
|     values[tag("pricechg")] = oldPrice == 0.0 ? 0.0 : price - oldPrice; |     values[tag("pricechg")] = oldPrice == 0.0 ? 0.0 : price - oldPrice; | ||||||
|     values[tag("percpricechg")] = 100.0 * values[tag("pricechg")].toDouble() / oldPrice; |     values[tag("percpricechg")] = 100.0 * values[tag("pricechg")].toDouble() / price; | ||||||
|     values[tag("price")] = price; |     values[tag("price")] = price; | ||||||
|     // volume |     // volume | ||||||
|     auto volume = sourceValues.at(1).toInt(); |     auto volume = sourceValues.at(1).toInt(); | ||||||
|     values[tag("volumechg")] = oldVolume == 0 ? 0 : volume - oldVolume; |     values[tag("volumechg")] = oldVolume == 0 ? 0 : volume - oldVolume; | ||||||
|     values[tag("percvolumechg")] = 100.0 * values[tag("volumechg")].toDouble() / oldVolume; |     values[tag("percvolumechg")] = 100.0 * values[tag("volumechg")].toDouble() / volume; | ||||||
|     values[tag("volume")] = volume; |     values[tag("volume")] = volume; | ||||||
|  |  | ||||||
|     return values; |     return values; | ||||||
|  | |||||||
| @ -86,7 +86,7 @@ QVariantHash YahooWeatherProvider::parseCurrent(const QVariantMap &_json, const | |||||||
|     values[tag("timestamp")] = condition["date"].toString(); |     values[tag("timestamp")] = condition["date"].toString(); | ||||||
|     values[tag("humidity")] = _atmosphere["humidity"].toInt(); |     values[tag("humidity")] = _atmosphere["humidity"].toInt(); | ||||||
|     // HACK temporary fix of invalid values on Yahoo! side |     // HACK temporary fix of invalid values on Yahoo! side | ||||||
|     values[tag("pressure")] = static_cast<int>(_atmosphere["pressure"].toDouble() / 33.863753); |     values[tag("pressure")] = static_cast<int>(_atmosphere["pressure"].toFloat() / 33.863753); | ||||||
|  |  | ||||||
|     return values; |     return values; | ||||||
| } | } | ||||||
| @ -103,7 +103,7 @@ QVariantHash YahooWeatherProvider::parseForecast(const QVariantMap &_json) const | |||||||
|     values[tag("weatherId")] = id; |     values[tag("weatherId")] = id; | ||||||
|     values[tag("timestamp")] = weatherMap["date"].toString(); |     values[tag("timestamp")] = weatherMap["date"].toString(); | ||||||
|     // yahoo provides high and low temperatures. Lets calculate average one |     // yahoo provides high and low temperatures. Lets calculate average one | ||||||
|     values[tag("temperature")] = (weatherMap["high"].toDouble() + weatherMap["low"].toDouble()) / 2.0; |     values[tag("temperature")] = (weatherMap["high"].toFloat() + weatherMap["low"].toFloat()) / 2.0; | ||||||
|     // ... and no forecast data for humidity and pressure |     // ... and no forecast data for humidity and pressure | ||||||
|     values[tag("humidity")] = 0; |     values[tag("humidity")] = 0; | ||||||
|     values[tag("pressure")] = 0.0; |     values[tag("pressure")] = 0.0; | ||||||
|  | |||||||
| @ -1,7 +1,7 @@ | |||||||
| set(SUBPROJECT plasma_applet_desktop-panel) | set(SUBPROJECT plasma_applet_desktop-panel) | ||||||
| message(STATUS "Subproject ${SUBPROJECT}") | message(STATUS "Subproject ${SUBPROJECT}") | ||||||
|  |  | ||||||
| configure_file(metadata.json ${CMAKE_CURRENT_SOURCE_DIR}/package/metadata.json) | configure_file(metadata.desktop ${CMAKE_CURRENT_SOURCE_DIR}/package/metadata.desktop) | ||||||
|  |  | ||||||
| add_subdirectory(plugin) | add_subdirectory(plugin) | ||||||
| plasma_install_package(package org.kde.plasma.desktoppanel) | plasma_install_package(package org.kde.plasma.desktoppanel) | ||||||
|  | |||||||
							
								
								
									
										26
									
								
								sources/desktop-panel/metadata.desktop
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								sources/desktop-panel/metadata.desktop
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,26 @@ | |||||||
|  | [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 | ||||||
| @ -1,5 +1,4 @@ | |||||||
| { | { | ||||||
|     "KPackageStructure": "Plasma/Applet", |  | ||||||
|     "KPlugin": { |     "KPlugin": { | ||||||
|         "Authors": [ |         "Authors": [ | ||||||
|             { |             { | ||||||
| @ -19,8 +18,12 @@ | |||||||
|         "Id": "org.kde.plasma.desktoppanel", |         "Id": "org.kde.plasma.desktoppanel", | ||||||
|         "License": "GPLv3", |         "License": "GPLv3", | ||||||
|         "Name": "Desktop Panel", |         "Name": "Desktop Panel", | ||||||
|  |         "ServiceTypes": [ | ||||||
|  |             "Plasma/Applet" | ||||||
|  |         ], | ||||||
|         "Version": "@PROJECT_VERSION@", |         "Version": "@PROJECT_VERSION@", | ||||||
|         "Website": "https://arcanis.me/projects/awesome-widgets/" |         "Website": "https://arcanis.me/projects/awesome-widgets/" | ||||||
|     }, |     }, | ||||||
|     "X-Plasma-API-Minimum-Version": "6.0" |     "X-Plasma-API": "declarativeappletscript", | ||||||
|  |     "X-Plasma-MainScript": "ui/main.qml" | ||||||
| } | } | ||||||
|  | |||||||
| @ -15,7 +15,7 @@ | |||||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * |  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||||
|  ***************************************************************************/ |  ***************************************************************************/ | ||||||
|  |  | ||||||
| import QtQuick 2.15 | import QtQuick 2.0 | ||||||
|  |  | ||||||
| import org.kde.plasma.configuration 2.0 | import org.kde.plasma.configuration 2.0 | ||||||
|  |  | ||||||
|  | |||||||
| @ -7,88 +7,88 @@ | |||||||
|  |  | ||||||
|     <group name="Widget"> |     <group name="Widget"> | ||||||
|         <!--   widget --> |         <!--   widget --> | ||||||
|         <entry name="text" type="String"> |         <entry name="text" type="string"> | ||||||
|             <default>[$mark$number/$total: $name]</default> |             <default>[$mark$number/$total: $name]</default> | ||||||
|         </entry> |         </entry> | ||||||
|     </group> |     </group> | ||||||
|  |  | ||||||
|     <group name="Advanced"> |     <group name="Advanced"> | ||||||
|         <!--   advanced --> |         <!--   advanced --> | ||||||
|         <entry name="background" type="Bool"> |         <entry name="background" type="bool"> | ||||||
|             <default>true</default> |             <default>true</default> | ||||||
|         </entry> |         </entry> | ||||||
|         <entry name="verticalLayout" type="Bool"> |         <entry name="verticalLayout" type="bool"> | ||||||
|             <default>false</default> |             <default>false</default> | ||||||
|         </entry> |         </entry> | ||||||
|         <entry name="height" type="Int"> |         <entry name="height" type="int"> | ||||||
|             <default>0</default> |             <default>0</default> | ||||||
|         </entry> |         </entry> | ||||||
|         <entry name="width" type="Int"> |         <entry name="width" type="int"> | ||||||
|             <default>0</default> |             <default>0</default> | ||||||
|         </entry> |         </entry> | ||||||
|         <entry name="mark" type="String"> |         <entry name="mark" type="string"> | ||||||
|             <default>¤</default> |             <default>¤</default> | ||||||
|         </entry> |         </entry> | ||||||
|         <entry name="tooltipType" type="String"> |         <entry name="tooltipType" type="string"> | ||||||
|             <default>contours</default> |             <default>contours</default> | ||||||
|         </entry> |         </entry> | ||||||
|         <entry name="tooltipWidth" type="Int"> |         <entry name="tooltipWidth" type="int"> | ||||||
|             <default>200</default> |             <default>200</default> | ||||||
|         </entry> |         </entry> | ||||||
|         <entry name="tooltipColor" type="String"> |         <entry name="tooltipColor" type="string"> | ||||||
|             <default>#ffffff</default> |             <default>#ffffff</default> | ||||||
|         </entry> |         </entry> | ||||||
|     </group> |     </group> | ||||||
|  |  | ||||||
|     <group name="Appearance"> |     <group name="Appearance"> | ||||||
|         <!--   appearance --> |         <!--   appearance --> | ||||||
|         <entry name="textAlign" type="String"> |         <entry name="textAlign" type="string"> | ||||||
|             <default>center</default> |             <default>center</default> | ||||||
|         </entry> |         </entry> | ||||||
|         <entry name="fontFamily" type="String"> |         <entry name="fontFamily" type="string"> | ||||||
|             <default>Terminus</default> |             <default>Terminus</default> | ||||||
|         </entry> |         </entry> | ||||||
|         <entry name="fontSize" type="Int"> |         <entry name="fontSize" type="int"> | ||||||
|             <default>12</default> |             <default>12</default> | ||||||
|         </entry> |         </entry> | ||||||
|         <entry name="fontColor" type="String"> |         <entry name="fontColor" type="string"> | ||||||
|             <default>#000000</default> |             <default>#000000</default> | ||||||
|         </entry> |         </entry> | ||||||
|         <entry name="fontWeight" type="String"> |         <entry name="fontWeight" type="string"> | ||||||
|             <default>normal</default> |             <default>normal</default> | ||||||
|         </entry> |         </entry> | ||||||
|         <entry name="fontStyle" type="String"> |         <entry name="fontStyle" type="string"> | ||||||
|             <default>normal</default> |             <default>normal</default> | ||||||
|         </entry> |         </entry> | ||||||
|         <entry name="textStyle" type="String"> |         <entry name="textStyle" type="string"> | ||||||
|             <default>normal</default> |             <default>normal</default> | ||||||
|         </entry> |         </entry> | ||||||
|         <entry name="textStyleColor" type="String"> |         <entry name="textStyleColor" type="string"> | ||||||
|             <default>#000000</default> |             <default>#000000</default> | ||||||
|         </entry> |         </entry> | ||||||
|         <!--   current --> |         <!--   current --> | ||||||
|         <entry name="currentTextAlign" type="String"> |         <entry name="currentTextAlign" type="string"> | ||||||
|             <default>center</default> |             <default>center</default> | ||||||
|         </entry> |         </entry> | ||||||
|         <entry name="currentFontFamily" type="String"> |         <entry name="currentFontFamily" type="string"> | ||||||
|             <default>Terminus</default> |             <default>Terminus</default> | ||||||
|         </entry> |         </entry> | ||||||
|         <entry name="currentFontSize" type="Int"> |         <entry name="currentFontSize" type="int"> | ||||||
|             <default>12</default> |             <default>12</default> | ||||||
|         </entry> |         </entry> | ||||||
|         <entry name="currentFontColor" type="String"> |         <entry name="currentFontColor" type="string"> | ||||||
|             <default>#ff0000</default> |             <default>#ff0000</default> | ||||||
|         </entry> |         </entry> | ||||||
|         <entry name="currentFontWeight" type="String"> |         <entry name="currentFontWeight" type="string"> | ||||||
|             <default>normal</default> |             <default>normal</default> | ||||||
|         </entry> |         </entry> | ||||||
|         <entry name="currentFontStyle" type="String"> |         <entry name="currentFontStyle" type="string"> | ||||||
|             <default>normal</default> |             <default>normal</default> | ||||||
|         </entry> |         </entry> | ||||||
|         <entry name="currentTextStyle" type="String"> |         <entry name="currentTextStyle" type="string"> | ||||||
|             <default>normal</default> |             <default>normal</default> | ||||||
|         </entry> |         </entry> | ||||||
|         <entry name="currentTextStyleColor" type="String"> |         <entry name="currentTextStyleColor" type="string"> | ||||||
|             <default>#000000</default> |             <default>#000000</default> | ||||||
|         </entry> |         </entry> | ||||||
|     </group> |     </group> | ||||||
|  | |||||||
| @ -15,21 +15,28 @@ | |||||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * |  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||||
|  ***************************************************************************/ |  ***************************************************************************/ | ||||||
|  |  | ||||||
| import QtQuick 2.15 | import QtQuick 2.0 | ||||||
| import org.kde.kcmutils as KCM |  | ||||||
|  |  | ||||||
| import org.kde.plasma.private.desktoppanel 1.0 | import org.kde.plasma.private.desktoppanel 1.0 | ||||||
|  |  | ||||||
|  |  | ||||||
| KCM.SimpleKCM { | Item { | ||||||
|     id: aboutPage |     id: aboutPage | ||||||
|  |  | ||||||
|     // backend |     // backend | ||||||
|     DPAdds { |     DPAdds { | ||||||
|         id: dpAdds |         id: dpAdds | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     width: childrenRect.width | ||||||
|  |     height: childrenRect.height | ||||||
|  |  | ||||||
|  |     property bool debug: awActions.isDebugEnabled() | ||||||
|  |  | ||||||
|     AboutTab { |     AboutTab { | ||||||
|         textProvider: dpAdds |         textProvider: dpAdds | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     Component.onCompleted: { | ||||||
|  |         if (debug) console.debug() | ||||||
|  |     } | ||||||
| } | } | ||||||
|  | |||||||
| @ -15,15 +15,25 @@ | |||||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * |  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||||
|  ***************************************************************************/ |  ***************************************************************************/ | ||||||
|  |  | ||||||
| import QtQuick 2.15 | import QtQuick 2.0 | ||||||
| import org.kde.kcmutils as KCM |  | ||||||
|  |  | ||||||
| import org.kde.plasma.private.desktoppanel 1.0 | import org.kde.plasma.private.desktoppanel 1.0 | ||||||
| import "." | import "." | ||||||
|  |  | ||||||
|  |  | ||||||
| KCM.SimpleKCM { | Item { | ||||||
|     id: activeAppearancePage |     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_currentFontFamily: font.value | ||||||
|     property alias cfg_currentFontSize: fontSize.value |     property alias cfg_currentFontSize: fontSize.value | ||||||
| @ -33,6 +43,7 @@ KCM.SimpleKCM { | |||||||
|     property alias cfg_currentTextStyleColor: selectStyleColor.value |     property alias cfg_currentTextStyleColor: selectStyleColor.value | ||||||
|     property string cfg_currentTextStyle: textStyle.value |     property string cfg_currentTextStyle: textStyle.value | ||||||
|  |  | ||||||
|  |  | ||||||
|     Column { |     Column { | ||||||
|         id: pageColumn |         id: pageColumn | ||||||
|         anchors.fill: parent |         anchors.fill: parent | ||||||
| @ -88,4 +99,9 @@ KCM.SimpleKCM { | |||||||
|             value: plasmoid.configuration.currentTextStyleColor |             value: plasmoid.configuration.currentTextStyleColor | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |     Component.onCompleted: { | ||||||
|  |         if (debug) console.debug() | ||||||
|  |     } | ||||||
| } | } | ||||||
|  | |||||||
| @ -15,15 +15,25 @@ | |||||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * |  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||||
|  ***************************************************************************/ |  ***************************************************************************/ | ||||||
|  |  | ||||||
| import QtQuick 2.15 | import QtQuick 2.0 | ||||||
| import QtQuick.Controls | import QtQuick.Controls 1.3 as QtControls | ||||||
| import org.kde.kcmutils as KCM |  | ||||||
|  |  | ||||||
| import org.kde.plasma.private.desktoppanel 1.0 | import org.kde.plasma.private.desktoppanel 1.0 | ||||||
|  |  | ||||||
|  |  | ||||||
| KCM.SimpleKCM { | Item { | ||||||
|     id: advancedPage |     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_background: background.checked | ||||||
|     property alias cfg_verticalLayout: verticalLayout.checked |     property alias cfg_verticalLayout: verticalLayout.checked | ||||||
| @ -34,6 +44,7 @@ KCM.SimpleKCM { | |||||||
|     property alias cfg_tooltipWidth: tooltipWidth.value |     property alias cfg_tooltipWidth: tooltipWidth.value | ||||||
|     property alias cfg_tooltipColor: tooltipColor.value |     property alias cfg_tooltipColor: tooltipColor.value | ||||||
|  |  | ||||||
|  |  | ||||||
|     Column { |     Column { | ||||||
|         id: pageColumn |         id: pageColumn | ||||||
|         anchors.fill: parent |         anchors.fill: parent | ||||||
| @ -71,48 +82,48 @@ KCM.SimpleKCM { | |||||||
|             editable: true |             editable: true | ||||||
|             model: [ |             model: [ | ||||||
|                 { |                 { | ||||||
|                     "label": "#", |                     'label': '#', | ||||||
|                     "name": "#" |                     'name': '#' | ||||||
|                 }, |                 }, | ||||||
|                 { |                 { | ||||||
|                     "label": "$", |                     'label': '$', | ||||||
|                     "name": "$" |                     'name': '$' | ||||||
|                 }, |                 }, | ||||||
|                 { |                 { | ||||||
|                     "label": "%", |                     'label': '%', | ||||||
|                     "name": "%" |                     'name': '%' | ||||||
|                 }, |                 }, | ||||||
|                 { |                 { | ||||||
|                     "label": "&", |                     'label': '&', | ||||||
|                     "name": "&" |                     'name': '&' | ||||||
|                 }, |                 }, | ||||||
|                 { |                 { | ||||||
|                     "label": "*", |                     'label': '*', | ||||||
|                     "name": "*" |                     'name': '*' | ||||||
|                 }, |                 }, | ||||||
|                 { |                 { | ||||||
|                     "label": "@", |                     'label': '@', | ||||||
|                     "name": "@" |                     'name': '@' | ||||||
|                 }, |                 }, | ||||||
|                 { |                 { | ||||||
|                     "label": "¤", |                     'label': '¤', | ||||||
|                     "name": "¤" |                     'name': '¤' | ||||||
|                 }, |                 }, | ||||||
|                 { |                 { | ||||||
|                     "label": "¶", |                     'label': '¶', | ||||||
|                     "name": "¶" |                     'name': '¶' | ||||||
|                 }, |                 }, | ||||||
|                 { |                 { | ||||||
|                     "label": "·", |                     'label': '·', | ||||||
|                     "name": "·" |                     'name': '·' | ||||||
|                 }, |                 }, | ||||||
|                 { |                 { | ||||||
|                     "label": "º", |                     'label': 'º', | ||||||
|                     "name": "º" |                     'name': 'º' | ||||||
|                 }, |                 }, | ||||||
|                 { |                 { | ||||||
|                     "label": plasmoid.configuration.mark, |                     'label': plasmoid.configuration.mark, | ||||||
|                     "name": plasmoid.configuration.mark |                     'name': plasmoid.configuration.mark | ||||||
|                 } |                 } | ||||||
|             ] |             ] | ||||||
|             text: i18n("Mark") |             text: i18n("Mark") | ||||||
| @ -120,7 +131,7 @@ KCM.SimpleKCM { | |||||||
|             onValueEdited: cfg_mark = newValue |             onValueEdited: cfg_mark = newValue | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         GroupBox { |         QtControls.GroupBox { | ||||||
|             height: implicitHeight |             height: implicitHeight | ||||||
|             width: parent.width |             width: parent.width | ||||||
|             title: i18n("Tooltip") |             title: i18n("Tooltip") | ||||||
| @ -133,16 +144,16 @@ KCM.SimpleKCM { | |||||||
|                     id: tooltipType |                     id: tooltipType | ||||||
|                     model: [ |                     model: [ | ||||||
|                         { |                         { | ||||||
|                             "label": i18n("contours"), |                             'label': i18n("contours"), | ||||||
|                             "name": "contours" |                             'name': "contours" | ||||||
|                         }, |                         }, | ||||||
|                         { |                         { | ||||||
|                             "label": i18n("names"), |                             'label': i18n("names"), | ||||||
|                             "name": "names" |                             'name': "names" | ||||||
|                         }, |                         }, | ||||||
|                         { |                         { | ||||||
|                             "label": i18n("none"), |                             'label': i18n("none"), | ||||||
|                             "name": "none" |                             'name': "none" | ||||||
|                         } |                         } | ||||||
|                     ] |                     ] | ||||||
|                     text: i18n("Tooltip type") |                     text: i18n("Tooltip type") | ||||||
| @ -167,4 +178,8 @@ KCM.SimpleKCM { | |||||||
|             } |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     Component.onCompleted: { | ||||||
|  |         if (debug) console.debug() | ||||||
|  |     } | ||||||
| } | } | ||||||
|  | |||||||
| @ -15,15 +15,25 @@ | |||||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * |  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||||
|  ***************************************************************************/ |  ***************************************************************************/ | ||||||
|  |  | ||||||
| import QtQuick 2.15 | import QtQuick 2.0 | ||||||
| import org.kde.kcmutils as KCM |  | ||||||
|  |  | ||||||
| import org.kde.plasma.private.desktoppanel 1.0 | import org.kde.plasma.private.desktoppanel 1.0 | ||||||
| import "." | import "." | ||||||
|  |  | ||||||
|  |  | ||||||
| KCM.SimpleKCM { | Item { | ||||||
|     id: inactiveAppearancePage |     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_fontFamily: font.value | ||||||
|     property alias cfg_fontSize: fontSize.value |     property alias cfg_fontSize: fontSize.value | ||||||
| @ -33,6 +43,7 @@ KCM.SimpleKCM { | |||||||
|     property alias cfg_textStyleColor: selectStyleColor.value |     property alias cfg_textStyleColor: selectStyleColor.value | ||||||
|     property string cfg_textStyle: textStyle.value |     property string cfg_textStyle: textStyle.value | ||||||
|  |  | ||||||
|  |  | ||||||
|     Column { |     Column { | ||||||
|         id: pageColumn |         id: pageColumn | ||||||
|         anchors.fill: parent |         anchors.fill: parent | ||||||
| @ -88,4 +99,9 @@ KCM.SimpleKCM { | |||||||
|             value: plasmoid.configuration.textStyleColor |             value: plasmoid.configuration.textStyleColor | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |     Component.onCompleted: { | ||||||
|  |         if (debug) console.debug() | ||||||
|  |     } | ||||||
| } | } | ||||||
|  | |||||||
| @ -15,23 +15,25 @@ | |||||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * |  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||||
|  ***************************************************************************/ |  ***************************************************************************/ | ||||||
|  |  | ||||||
| import QtQuick 2.15 | import QtQuick 2.4 | ||||||
| import QtQuick.Controls | import QtQuick.Controls 1.3 as QtControls | ||||||
| import QtQuick.Layouts | import QtQuick.Layouts 1.1 | ||||||
| import org.kde.plasma.core as PlasmaCore |  | ||||||
| import org.kde.plasma.plasmoid 2.0 | 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 org.kde.plasma.private.desktoppanel 1.0 | ||||||
| import "." | import "." | ||||||
|  |  | ||||||
|  |  | ||||||
| PlasmoidItem { | Item { | ||||||
|     id: main |     id: main | ||||||
|     // backend |     // backend | ||||||
|     DPAdds { |     DPAdds { | ||||||
|         id: dpAdds |         id: dpAdds | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     property bool debug: dpAdds.isDebugEnabled() | ||||||
|     property variant tooltipSettings: { |     property variant tooltipSettings: { | ||||||
|         "tooltipColor": plasmoid.configuration.tooltipColor, |         "tooltipColor": plasmoid.configuration.tooltipColor, | ||||||
|         "tooltipType": plasmoid.configuration.tooltipType, |         "tooltipType": plasmoid.configuration.tooltipType, | ||||||
| @ -42,12 +44,17 @@ PlasmoidItem { | |||||||
|     signal needTooltipUpdate |     signal needTooltipUpdate | ||||||
|     signal sizeUpdate |     signal sizeUpdate | ||||||
|  |  | ||||||
|  |  | ||||||
|     // init |     // init | ||||||
|  |     Plasmoid.preferredRepresentation: Plasmoid.fullRepresentation | ||||||
|  |     Plasmoid.compactRepresentation: Plasmoid.fullRepresentation | ||||||
|  |  | ||||||
|     Layout.alignment: Qt.AlignVCenter | Qt.AlignHCenter |     Layout.alignment: Qt.AlignVCenter | Qt.AlignHCenter | ||||||
|  |  | ||||||
|     Plasmoid.icon: "utilities-system-monitor" |     Plasmoid.icon: "utilities-system-monitor" | ||||||
|     Plasmoid.backgroundHints: plasmoid.configuration.background ? "DefaultBackground" : "NoBackground" |     Plasmoid.backgroundHints: plasmoid.configuration.background ? "DefaultBackground" : "NoBackground" | ||||||
|  |  | ||||||
|  |  | ||||||
|     // ui |     // ui | ||||||
|     GridLayout { |     GridLayout { | ||||||
|         anchors.fill: parent |         anchors.fill: parent | ||||||
| @ -94,6 +101,7 @@ PlasmoidItem { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |  | ||||||
|     Timer { |     Timer { | ||||||
|         id: timer |         id: timer | ||||||
|         interval: 1000 |         interval: 1000 | ||||||
| @ -101,16 +109,19 @@ PlasmoidItem { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     onNeedUpdate: { |     onNeedUpdate: { | ||||||
|         for (let i = 0; i < repeater.count; i++) { |         if (debug) console.debug() | ||||||
|  |  | ||||||
|  |         for (var i=0; i<repeater.count; i++) { | ||||||
|             if (!repeater.itemAt(i)) { |             if (!repeater.itemAt(i)) { | ||||||
|  |                 if (debug) console.info("Nothing to do here yet", i) | ||||||
|                 timer.start() |                 timer.start() | ||||||
|                 return |                 return | ||||||
|             } |             } | ||||||
|             repeater.itemAt(i).text = dpAdds.parsePattern(plasmoid.configuration.text, i) |             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).color = plasmoid.configuration.currentFontColor | ||||||
|                 repeater.itemAt(i).font.family = plasmoid.configuration.currentFontFamily |                 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.pointSize = plasmoid.configuration.currentFontSize | ||||||
|                 repeater.itemAt(i).font.weight = General.fontWeight[plasmoid.configuration.currentFontWeight] |                 repeater.itemAt(i).font.weight = General.fontWeight[plasmoid.configuration.currentFontWeight] | ||||||
|                 repeater.itemAt(i).style = General.textStyle[plasmoid.configuration.currentTextStyle] |                 repeater.itemAt(i).style = General.textStyle[plasmoid.configuration.currentTextStyle] | ||||||
| @ -118,7 +129,7 @@ PlasmoidItem { | |||||||
|             } else { |             } else { | ||||||
|                 repeater.itemAt(i).color = plasmoid.configuration.fontColor |                 repeater.itemAt(i).color = plasmoid.configuration.fontColor | ||||||
|                 repeater.itemAt(i).font.family = plasmoid.configuration.fontFamily |                 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.pointSize = plasmoid.configuration.fontSize | ||||||
|                 repeater.itemAt(i).font.weight = General.fontWeight[plasmoid.configuration.fontWeight] |                 repeater.itemAt(i).font.weight = General.fontWeight[plasmoid.configuration.fontWeight] | ||||||
|                 repeater.itemAt(i).style = General.textStyle[plasmoid.configuration.textStyle] |                 repeater.itemAt(i).style = General.textStyle[plasmoid.configuration.textStyle] | ||||||
| @ -132,11 +143,13 @@ PlasmoidItem { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     onNeedTooltipUpdate: { |     onNeedTooltipUpdate: { | ||||||
|         for (let i = 0; i < repeater.count; i++) { |         if (debug) console.debug() | ||||||
|  |  | ||||||
|  |         for (var i=0; i<repeater.count; i++) { | ||||||
|             repeater.itemAt(i).tooltip.text = dpAdds.toolTipImage(i) |             repeater.itemAt(i).tooltip.text = dpAdds.toolTipImage(i) | ||||||
|             // resize text tooltip to content size |             // resize text tooltip to content size | ||||||
|             // this hack does not work for images-based tooltips |             // 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.height = repeater.itemAt(i).tooltip.implicitHeight | ||||||
|                 repeater.itemAt(i).tooltip.width = repeater.itemAt(i).tooltip.implicitWidth |                 repeater.itemAt(i).tooltip.width = repeater.itemAt(i).tooltip.implicitWidth | ||||||
|             } |             } | ||||||
| @ -144,9 +157,11 @@ PlasmoidItem { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     onSizeUpdate: { |     onSizeUpdate: { | ||||||
|         if (plasmoid.configuration.height === 0) { |         if (debug) console.debug() | ||||||
|             let newHeight = 0 |  | ||||||
|             for (let i = 0; i < repeater.count; i++) |         if (plasmoid.configuration.height == 0) { | ||||||
|  |             var newHeight = 0 | ||||||
|  |             for (var i=0; i<repeater.count; i++) | ||||||
|                 newHeight += repeater.itemAt(i).contentHeight |                 newHeight += repeater.itemAt(i).contentHeight | ||||||
|             Layout.minimumHeight = newHeight |             Layout.minimumHeight = newHeight | ||||||
|             Layout.maximumHeight = -1 |             Layout.maximumHeight = -1 | ||||||
| @ -154,9 +169,9 @@ PlasmoidItem { | |||||||
|             Layout.minimumHeight = plasmoid.configuration.height |             Layout.minimumHeight = plasmoid.configuration.height | ||||||
|             Layout.maximumHeight = plasmoid.configuration.height |             Layout.maximumHeight = plasmoid.configuration.height | ||||||
|         } |         } | ||||||
|         if (plasmoid.configuration.width === 0) { |         if (plasmoid.configuration.width == 0) { | ||||||
|             let newWidth = 0 |             var newWidth = 0 | ||||||
|             for (let i = 0; i < repeater.count; i++) |             for (var i=0; i<repeater.count; i++) | ||||||
|                 newWidth += repeater.itemAt(i).contentWidth |                 newWidth += repeater.itemAt(i).contentWidth | ||||||
|             Layout.minimumWidth = newWidth |             Layout.minimumWidth = newWidth | ||||||
|             Layout.maximumWidth = -1 |             Layout.maximumWidth = -1 | ||||||
| @ -168,6 +183,7 @@ PlasmoidItem { | |||||||
|  |  | ||||||
|     Plasmoid.onUserConfiguringChanged: { |     Plasmoid.onUserConfiguringChanged: { | ||||||
|         if (plasmoid.userConfiguring) return |         if (plasmoid.userConfiguring) return | ||||||
|  |         if (debug) console.debug() | ||||||
|  |  | ||||||
|         dpAdds.setMark(plasmoid.configuration.mark) |         dpAdds.setMark(plasmoid.configuration.mark) | ||||||
|         dpAdds.setToolTipData(tooltipSettings) |         dpAdds.setToolTipData(tooltipSettings) | ||||||
| @ -176,6 +192,8 @@ PlasmoidItem { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     Component.onCompleted: { |     Component.onCompleted: { | ||||||
|  |         if (debug) console.debug() | ||||||
|  |  | ||||||
|         // init submodule |         // init submodule | ||||||
|         Plasmoid.userConfiguringChanged(false) |         Plasmoid.userConfiguringChanged(false) | ||||||
|         dpAdds.desktopChanged.connect(needUpdate) |         dpAdds.desktopChanged.connect(needUpdate) | ||||||
|  | |||||||
| @ -3,25 +3,25 @@ | |||||||
|  |  | ||||||
|  |  | ||||||
| # common QML constants | # common QML constants | ||||||
| singleton General 1.0 file:///usr/share/awesomewidgets/qml/General.qml | singleton General 1.0 file:///usr//awesomewidgets/qml/General.qml | ||||||
|  |  | ||||||
| # custom QML UI classes | # custom QML UI classes | ||||||
| AboutTab file:///usr/share/awesomewidgets/qml/AboutTab.qml | AboutTab file:///usr//awesomewidgets/qml/AboutTab.qml | ||||||
| AWExtensions file:///usr/share/awesomewidgets/qml/AWExtensions.qml | AWExtensions file:///usr//awesomewidgets/qml/AWExtensions.qml | ||||||
| AWInfoLabel file:///usr/share/awesomewidgets/qml/AWInfoLabel.qml | AWInfoLabel file:///usr//awesomewidgets/qml/AWInfoLabel.qml | ||||||
| AWTagSelector file:///usr/share/awesomewidgets/qml/AWTagSelector.qml | AWTagSelector file:///usr//awesomewidgets/qml/AWTagSelector.qml | ||||||
| AWTextEditor file:///usr/share/awesomewidgets/qml/AWTextEditor.qml | AWTextEditor file:///usr//awesomewidgets/qml/AWTextEditor.qml | ||||||
| BugReport file:///usr/share/awesomewidgets/qml/BugReport.qml | BugReport file:///usr//awesomewidgets/qml/BugReport.qml | ||||||
| ButtonSelector file:///usr/share/awesomewidgets/qml/ButtonSelector.qml | ButtonSelector file:///usr//awesomewidgets/qml/ButtonSelector.qml | ||||||
| CheckBoxSelector file:///usr/share/awesomewidgets/qml/CheckBoxSelector.qml | CheckBoxSelector file:///usr//awesomewidgets/qml/CheckBoxSelector.qml | ||||||
| ColorSelector file:///usr/share/awesomewidgets/qml/ColorSelector.qml | ColorSelector file:///usr//awesomewidgets/qml/ColorSelector.qml | ||||||
| ComboBoxSelector file:///usr/share/awesomewidgets/qml/ComboBoxSelector.qml | ComboBoxSelector file:///usr//awesomewidgets/qml/ComboBoxSelector.qml | ||||||
| ExportDialog file:///usr/share/awesomewidgets/qml/ExportDialog.qml | ExportDialog file:///usr//awesomewidgets/qml/ExportDialog.qml | ||||||
| FontSelector file:///usr/share/awesomewidgets/qml/FontSelector.qml | FontSelector file:///usr//awesomewidgets/qml/FontSelector.qml | ||||||
| HtmlDefaultFunctionsBar file:///usr/share/awesomewidgets/qml/HtmlDefaultFunctionsBar.qml | HtmlDefaultFunctionsBar file:///usr//awesomewidgets/qml/HtmlDefaultFunctionsBar.qml | ||||||
| HtmlEditorButton file:///usr/share/awesomewidgets/qml/HtmlEditorButton.qml | HtmlEditorButton file:///usr//awesomewidgets/qml/HtmlEditorButton.qml | ||||||
| HtmlEditorColor file:///usr/share/awesomewidgets/qml/HtmlEditorColor.qml | HtmlEditorColor file:///usr//awesomewidgets/qml/HtmlEditorColor.qml | ||||||
| HtmlEditorFont file:///usr/share/awesomewidgets/qml/HtmlEditorFont.qml | HtmlEditorFont file:///usr//awesomewidgets/qml/HtmlEditorFont.qml | ||||||
| ImportDialog file:///usr/share/awesomewidgets/qml/ImportDialog.qml | ImportDialog file:///usr//awesomewidgets/qml/ImportDialog.qml | ||||||
| IntegerSelector file:///usr/share/awesomewidgets/qml/IntegerSelector.qml | IntegerSelector file:///usr//awesomewidgets/qml/IntegerSelector.qml | ||||||
| LineSelector file:///usr/share/awesomewidgets/qml/LineSelector.qml | LineSelector file:///usr//awesomewidgets/qml/LineSelector.qml | ||||||
|  | |||||||
| @ -15,22 +15,29 @@ | |||||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * |  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||||
|  ***************************************************************************/ |  ***************************************************************************/ | ||||||
|  |  | ||||||
| import QtQuick 2.15 | import QtQuick 2.0 | ||||||
| import org.kde.kcmutils as KCM |  | ||||||
|  |  | ||||||
| import org.kde.plasma.private.desktoppanel 1.0 | import org.kde.plasma.private.desktoppanel 1.0 | ||||||
| import "." | import "." | ||||||
|  |  | ||||||
|  |  | ||||||
| KCM.SimpleKCM { | Item { | ||||||
|     id: widgetPage |     id: widgetPage | ||||||
|     // backend |     // backend | ||||||
|     DPAdds { |     DPAdds { | ||||||
|         id: 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 |     property alias cfg_text: textPattern.text | ||||||
|  |  | ||||||
|  |  | ||||||
|     Column { |     Column { | ||||||
|         id: pageColumn |         id: pageColumn | ||||||
|         anchors.fill: parent |         anchors.fill: parent | ||||||
| @ -53,4 +60,9 @@ KCM.SimpleKCM { | |||||||
|             backend: dpAdds |             backend: dpAdds | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |     Component.onCompleted: { | ||||||
|  |         if (debug) console.debug() | ||||||
|  |     } | ||||||
| } | } | ||||||
|  | |||||||
							
								
								
									
										26
									
								
								sources/desktop-panel/package/metadata.desktop
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								sources/desktop-panel/package/metadata.desktop
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,26 @@ | |||||||
|  | [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 | ||||||
| @ -1,26 +0,0 @@ | |||||||
| { |  | ||||||
|     "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" |  | ||||||
| } |  | ||||||
| @ -15,6 +15,6 @@ file(GLOB SUBPROJECT_NOTIFY *.notifyrc) | |||||||
| add_library(${PLUGIN_NAME} SHARED ${SUBPROJECT_SOURCE}) | add_library(${PLUGIN_NAME} SHARED ${SUBPROJECT_SOURCE}) | ||||||
| target_link_libraries(${PLUGIN_NAME} ${Qt_LIBRARIES} ${Kf6_LIBRARIES}) | target_link_libraries(${PLUGIN_NAME} ${Qt_LIBRARIES} ${Kf6_LIBRARIES}) | ||||||
|  |  | ||||||
| install(TARGETS ${PLUGIN_NAME} DESTINATION ${KDE_INSTALL_QMLDIR}/org/kde/plasma/private/desktoppanel) | install(TARGETS ${PLUGIN_NAME} DESTINATION ${QML_INSTALL_DIR}/org/kde/plasma/private/desktoppanel) | ||||||
| install(FILES qmldir DESTINATION ${KDE_INSTALL_QMLDIR}/org/kde/plasma/private/desktoppanel) | install(FILES qmldir DESTINATION ${QML_INSTALL_DIR}/org/kde/plasma/private/desktoppanel) | ||||||
| install(FILES ${SUBPROJECT_NOTIFY} DESTINATION ${KDE_INSTALL_KNOTIFYRCDIR}) | install(FILES ${SUBPROJECT_NOTIFY} DESTINATION ${KDE_INSTALL_KNOTIFYRCDIR}) | ||||||
|  | |||||||
| @ -49,7 +49,9 @@ DPAdds::DPAdds(QObject *_parent) | |||||||
|     m_vdi = new TaskManager::VirtualDesktopInfo(this); |     m_vdi = new TaskManager::VirtualDesktopInfo(this); | ||||||
|     m_taskModel = new TaskManager::WindowTasksModel(this); |     m_taskModel = new TaskManager::WindowTasksModel(this); | ||||||
|  |  | ||||||
|     connect(m_vdi, &TaskManager::VirtualDesktopInfo::currentDesktopChanged, this, &DPAdds::desktopChanged); |     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())); | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| @ -62,6 +64,13 @@ DPAdds::~DPAdds() | |||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | // HACK: since QML could not use QLoggingCategory I need this hack | ||||||
|  | bool DPAdds::isDebugEnabled() | ||||||
|  | { | ||||||
|  |     return LOG_DP().isDebugEnabled(); | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
| int DPAdds::currentDesktop() const | int DPAdds::currentDesktop() const | ||||||
| { | { | ||||||
|     auto current = m_vdi->currentDesktop(); |     auto current = m_vdi->currentDesktop(); | ||||||
| @ -83,7 +92,7 @@ QStringList DPAdds::dictKeys(const bool _sorted, const QString &_regexp) | |||||||
|     if (_sorted) |     if (_sorted) | ||||||
|         allKeys.sort(); |         allKeys.sort(); | ||||||
|  |  | ||||||
|     return allKeys.filter(QRegularExpression(_regexp)); |     return allKeys.filter(QRegExp(_regexp)); | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| @ -214,7 +223,7 @@ QString DPAdds::valueByKey(const QString &_key, int _desktop) const | |||||||
|  |  | ||||||
|     QString currentMark = currentDesktop() == _desktop ? m_mark : ""; |     QString currentMark = currentDesktop() == _desktop ? m_mark : ""; | ||||||
|     if (_key == "mark") |     if (_key == "mark") | ||||||
|         return QString("%1").arg(currentMark, m_mark.size(), QLatin1Char(' ')).replace(" ", " "); |         return QString("%1").arg(currentMark, m_mark.count(), QLatin1Char(' ')).replace(" ", " "); | ||||||
|     else if (_key == "name") { |     else if (_key == "name") { | ||||||
|         auto name = m_vdi->desktopNames().at(_desktop); |         auto name = m_vdi->desktopNames().at(_desktop); | ||||||
|         return name.replace(" ", " "); |         return name.replace(" ", " "); | ||||||
|  | |||||||
| @ -46,6 +46,7 @@ class DPAdds : public QObject | |||||||
| public: | public: | ||||||
|     explicit DPAdds(QObject *_parent = nullptr); |     explicit DPAdds(QObject *_parent = nullptr); | ||||||
|     ~DPAdds() override; |     ~DPAdds() override; | ||||||
|  |     Q_INVOKABLE static bool isDebugEnabled(); | ||||||
|     Q_INVOKABLE [[nodiscard]] int currentDesktop() const; |     Q_INVOKABLE [[nodiscard]] int currentDesktop() const; | ||||||
|     Q_INVOKABLE static QStringList dictKeys(bool _sorted = true, const QString &_regexp = ""); |     Q_INVOKABLE static QStringList dictKeys(bool _sorted = true, const QString &_regexp = ""); | ||||||
|     Q_INVOKABLE [[nodiscard]] int numberOfDesktops() const; |     Q_INVOKABLE [[nodiscard]] int numberOfDesktops() const; | ||||||
|  | |||||||
| @ -1,4 +1,4 @@ | |||||||
| set(SUBPROJECT ksystemstats_plugin_extsysmon) | set(SUBPROJECT plasma_dataengine_extsysmon) | ||||||
| message(STATUS "Subproject ${SUBPROJECT}") | message(STATUS "Subproject ${SUBPROJECT}") | ||||||
| add_definitions(-DTRANSLATION_DOMAIN=\"plasma_applet_org.kde.plasma.awesomewidget\") | add_definitions(-DTRANSLATION_DOMAIN=\"plasma_applet_org.kde.plasma.awesomewidget\") | ||||||
|  |  | ||||||
| @ -12,10 +12,15 @@ include_directories( | |||||||
|         ${Kf6_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_SOURCE *.cpp ${CMAKE_SOURCE_DIR}/*.cpp) | ||||||
| file(GLOB SUBPROJECT_HEADER *.h) | file(GLOB SUBPROJECT_HEADER *.h) | ||||||
| file(GLOB SUBPROJECT_CONF *.conf) | file(GLOB SUBPROJECT_CONF *.conf) | ||||||
|  |  | ||||||
|  | # prepare | ||||||
|  | configure_file(${SUBPROJECT_DESKTOP_IN} ${CMAKE_CURRENT_BINARY_DIR}/${SUBPROJECT_DESKTOP}) | ||||||
|  |  | ||||||
| # make | # make | ||||||
| add_library(${SUBPROJECT} MODULE ${SUBPROJECT_SOURCE} ${SUBPROJECT_HEADER}) | add_library(${SUBPROJECT} MODULE ${SUBPROJECT_SOURCE} ${SUBPROJECT_HEADER}) | ||||||
| target_link_libraries(${SUBPROJECT}  | target_link_libraries(${SUBPROJECT}  | ||||||
| @ -23,5 +28,6 @@ target_link_libraries(${SUBPROJECT} | |||||||
|         ${Qt_LIBRARIES} ${Kf6_LIBRARIES}) |         ${Qt_LIBRARIES} ${Kf6_LIBRARIES}) | ||||||
|  |  | ||||||
| # install | # install | ||||||
| install(TARGETS ${SUBPROJECT} DESTINATION ${KDE_INSTALL_PLUGINDIR}/ksystemstats) | install(TARGETS ${SUBPROJECT} DESTINATION ${PLUGIN_INSTALL_DIR}/plasma/dataengine) | ||||||
| install(FILES ${SUBPROJECT_CONF} DESTINATION /${KDE_INSTALL_CONFDIR}) | #install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${SUBPROJECT_DESKTOP} DESTINATION ${SERVICES_INSTALL_DIR}) | ||||||
|  | install(FILES ${SUBPROJECT_CONF} DESTINATION ${KDE_INSTALL_CONFDIR}) | ||||||
|  | |||||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user