mirror of
				https://github.com/arcan1s/awesome-widgets.git
				synced 2025-10-31 13:13:41 +00:00 
			
		
		
		
	Compare commits
	
		
			9 Commits
		
	
	
		
			cee37c6a4a
			...
			4.0.0alpha
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 161ff64293 | |||
| 115bef3dbe | |||
| b6ade7310a | |||
| 0555185044 | |||
| 23e197789f | |||
| 67640cccdc | |||
| 33a41bb6c0 | |||
| 42c11a6b60 | |||
| 423597dbd9 | 
							
								
								
									
										24
									
								
								.github/workflows/release.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										24
									
								
								.github/workflows/release.yml
									
									
									
									
										vendored
									
									
								
							| @ -25,17 +25,17 @@ jobs: | ||||
|         env: | ||||
|           VERSION: ${{ steps.version.outputs.VERSION }} | ||||
|  | ||||
|       - name: build debian package | ||||
|         run: | | ||||
|           sudo apt update && \ | ||||
|           sudo apt install -yq cmake extra-cmake-modules g++ git gettext make && \ | ||||
|           sudo apt install -yq libkf5i18n-dev libkf5notifications-dev libkf5service-dev \ | ||||
|             libkf5windowsystem-dev libkf5plasma-dev qtbase5-dev qtdeclarative5-dev \ | ||||
|             plasma-workspace-dev && \ | ||||
|           cmake -B build-deb -DKDE_INSTALL_USE_QT_SYS_PATHS=ON -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Optimization -DBUILD_FUTURE=ON -DBUILD_DEB_PACKAGE=ON sources && \ | ||||
|           cd build-deb && \ | ||||
|           make package && \ | ||||
|           cd .. | ||||
| #      - name: build debian package | ||||
| #        run: | | ||||
| #          sudo apt update && \ | ||||
| #          sudo apt install -yq cmake extra-cmake-modules g++ git gettext make && \ | ||||
| #          sudo apt install -yq libkf5i18n-dev libkf5notifications-dev libkf5service-dev \ | ||||
| #            libkf5windowsystem-dev libkf5plasma-dev qtbase5-dev qtdeclarative5-dev \ | ||||
| #            plasma-workspace-dev && \ | ||||
| #          cmake -B build-deb -DKDE_INSTALL_USE_QT_SYS_PATHS=ON -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Optimization -DBUILD_FUTURE=ON -DBUILD_DEB_PACKAGE=ON sources && \ | ||||
| #          cd build-deb && \ | ||||
| #          make package && \ | ||||
| #          cd .. | ||||
|  | ||||
|       - name: release | ||||
|         uses: softprops/action-gh-release@v1 | ||||
| @ -45,7 +45,7 @@ jobs: | ||||
|             ${{ steps.changelog.outputs.changelog }} | ||||
|           files: | | ||||
|             awesome-widgets-*-src.tar.xz | ||||
|             build-deb/plasma-widget-awesome-widgets-*.deb | ||||
| #            build-deb/plasma-widget-awesome-widgets-*.deb | ||||
|           fail_on_unmatched_files: true | ||||
|         env: | ||||
|           GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||||
|  | ||||
| @ -1,3 +1,6 @@ | ||||
| Ver.4.0.0: | ||||
| * migration to plasma 6 | ||||
|  | ||||
| Ver.3.5.0: | ||||
| + wayland support | ||||
| * update code to latest standards | ||||
| @ -12,7 +15,6 @@ Ver.3.4.2: | ||||
| * update to new qt api | ||||
| - fix non printable spaces (#142, #143) | ||||
|  | ||||
|  | ||||
| Ver.3.3.3: | ||||
| + add custom keys support (#101) | ||||
| * DBus interface improvements | ||||
|  | ||||
| @ -1,41 +1,33 @@ | ||||
| # Maintainer: Evgeniy Alekseev <arcanis at archlinux dot org> | ||||
|  | ||||
| pkgname=plasma5-applet-awesome-widgets | ||||
| pkgname=plasma6-applet-awesome-widgets | ||||
| _pkgname=awesome-widgets | ||||
| pkgver=3.4.3 | ||||
| pkgver=4.0.0alpha1 | ||||
| pkgrel=1 | ||||
| pkgdesc="Collection of minimalistic Plasmoids which look like Awesome WM widgets (ex-PyTextMonitor)" | ||||
| arch=('i686' 'x86_64') | ||||
| arch=('x86_64') | ||||
| url="https://arcanis.me/projects/awesome-widgets" | ||||
| license=('GPL3') | ||||
| depends=('ksysguard' 'plasma-framework') | ||||
| optdepends=("catalyst: for GPU monitor" | ||||
|             "hddtemp: for HDD temperature monitor" | ||||
| depends=('plasma-workspace') | ||||
| optdepends=("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') | ||||
| source=(https://github.com/arcan1s/awesome-widgets/releases/download/V.${pkgver}/${_pkgname}-${pkgver}-src.tar.xz) | ||||
| install=${pkgname}.install | ||||
| md5sums=('5953ba518191bb6fff83cdb8633c735c') | ||||
| source=(https://github.com/arcan1s/awesome-widgets/releases/download/${pkgver}/${_pkgname}-${pkgver}-src.tar.xz) | ||||
| install="$pkgname.install" | ||||
| backup=('etc/xdg/plasma-dataengine-extsysmon.conf') | ||||
|  | ||||
| prepare() { | ||||
|   rm -rf "${srcdir}/build" | ||||
|   mkdir "${srcdir}/build" | ||||
| } | ||||
|  | ||||
| build () { | ||||
|   cd "${srcdir}/build" | ||||
|   cmake -DKDE_INSTALL_USE_QT_SYS_PATHS=ON \ | ||||
|         -DCMAKE_BUILD_TYPE=Optimization \ | ||||
|         -DCMAKE_INSTALL_PREFIX=/usr \ | ||||
|         -DBUILD_FUTURE=ON \ | ||||
|         "../${_pkgname}" | ||||
|   make | ||||
|     cmake -B build -S "${_pkgname}" \ | ||||
|           -DCMAKE_BUILD_TYPE=Optimization \ | ||||
|           -DBUILD_FUTURE=ON \ | ||||
|           -DBUILD_TESTING=OFF | ||||
|     cmake --build build | ||||
| } | ||||
|  | ||||
| package() { | ||||
|   cd "${srcdir}/build" | ||||
|   make DESTDIR="${pkgdir}" install | ||||
|       DESTDIR="$pkgdir" cmake --install build | ||||
| } | ||||
|  | ||||
| sha256sums=('b2a7b07a1df6f710f4e0d6e5898933f4ddb131818b922dc4b8e48afe3e98a664') | ||||
|  | ||||
							
								
								
									
										284
									
								
								sensors
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										284
									
								
								sensors
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,284 @@ | ||||
| cpu | ||||
| cpu/all | ||||
| cpu/all/averageFrequency | ||||
| cpu/all/averageTemperature | ||||
| cpu/all/coreCount | ||||
| cpu/all/cpuCount | ||||
| cpu/all/maximumFrequency | ||||
| cpu/all/maximumTemperature | ||||
| cpu/all/minimumFrequency | ||||
| cpu/all/minimumTemperature | ||||
| cpu/all/name | ||||
| cpu/all/system | ||||
| cpu/all/usage | ||||
| cpu/all/user | ||||
| cpu/all/wait | ||||
| cpu/cpu0 | ||||
| cpu/cpu0/frequency | ||||
| cpu/cpu0/name | ||||
| cpu/cpu0/system | ||||
| cpu/cpu0/temperature | ||||
| cpu/cpu0/usage | ||||
| cpu/cpu0/user | ||||
| cpu/cpu0/wait | ||||
| cpu/cpu1 | ||||
| cpu/cpu1/frequency | ||||
| cpu/cpu1/name | ||||
| cpu/cpu1/system | ||||
| cpu/cpu1/temperature | ||||
| cpu/cpu1/usage | ||||
| cpu/cpu1/user | ||||
| cpu/cpu1/wait | ||||
| cpu/cpu10 | ||||
| cpu/cpu10/frequency | ||||
| cpu/cpu10/name | ||||
| cpu/cpu10/system | ||||
| cpu/cpu10/temperature | ||||
| cpu/cpu10/usage | ||||
| cpu/cpu10/user | ||||
| cpu/cpu10/wait | ||||
| cpu/cpu11 | ||||
| cpu/cpu11/frequency | ||||
| cpu/cpu11/name | ||||
| cpu/cpu11/system | ||||
| cpu/cpu11/temperature | ||||
| cpu/cpu11/usage | ||||
| cpu/cpu11/user | ||||
| cpu/cpu11/wait | ||||
| cpu/cpu12 | ||||
| cpu/cpu12/frequency | ||||
| cpu/cpu12/name | ||||
| cpu/cpu12/system | ||||
| cpu/cpu12/temperature | ||||
| cpu/cpu12/usage | ||||
| cpu/cpu12/user | ||||
| cpu/cpu12/wait | ||||
| cpu/cpu13 | ||||
| cpu/cpu13/frequency | ||||
| cpu/cpu13/name | ||||
| cpu/cpu13/system | ||||
| cpu/cpu13/temperature | ||||
| cpu/cpu13/usage | ||||
| cpu/cpu13/user | ||||
| cpu/cpu13/wait | ||||
| cpu/cpu14 | ||||
| cpu/cpu14/frequency | ||||
| cpu/cpu14/name | ||||
| cpu/cpu14/system | ||||
| cpu/cpu14/temperature | ||||
| cpu/cpu14/usage | ||||
| cpu/cpu14/user | ||||
| cpu/cpu14/wait | ||||
| cpu/cpu15 | ||||
| cpu/cpu15/frequency | ||||
| cpu/cpu15/name | ||||
| cpu/cpu15/system | ||||
| cpu/cpu15/temperature | ||||
| cpu/cpu15/usage | ||||
| cpu/cpu15/user | ||||
| cpu/cpu15/wait | ||||
| cpu/cpu16 | ||||
| cpu/cpu16/frequency | ||||
| cpu/cpu16/name | ||||
| cpu/cpu16/system | ||||
| cpu/cpu16/temperature | ||||
| cpu/cpu16/usage | ||||
| cpu/cpu16/user | ||||
| cpu/cpu16/wait | ||||
| cpu/cpu17 | ||||
| cpu/cpu17/frequency | ||||
| cpu/cpu17/name | ||||
| cpu/cpu17/system | ||||
| cpu/cpu17/temperature | ||||
| cpu/cpu17/usage | ||||
| cpu/cpu17/user | ||||
| cpu/cpu17/wait | ||||
| cpu/cpu18 | ||||
| cpu/cpu18/frequency | ||||
| cpu/cpu18/name | ||||
| cpu/cpu18/system | ||||
| cpu/cpu18/temperature | ||||
| cpu/cpu18/usage | ||||
| cpu/cpu18/user | ||||
| cpu/cpu18/wait | ||||
| cpu/cpu19 | ||||
| cpu/cpu19/frequency | ||||
| cpu/cpu19/name | ||||
| cpu/cpu19/system | ||||
| cpu/cpu19/temperature | ||||
| cpu/cpu19/usage | ||||
| cpu/cpu19/user | ||||
| cpu/cpu19/wait | ||||
| cpu/cpu2 | ||||
| cpu/cpu2/frequency | ||||
| cpu/cpu2/name | ||||
| cpu/cpu2/system | ||||
| cpu/cpu2/temperature | ||||
| cpu/cpu2/usage | ||||
| cpu/cpu2/user | ||||
| cpu/cpu2/wait | ||||
| cpu/cpu3 | ||||
| cpu/cpu3/frequency | ||||
| cpu/cpu3/name | ||||
| cpu/cpu3/system | ||||
| cpu/cpu3/temperature | ||||
| cpu/cpu3/usage | ||||
| cpu/cpu3/user | ||||
| cpu/cpu3/wait | ||||
| cpu/cpu4 | ||||
| cpu/cpu4/frequency | ||||
| cpu/cpu4/name | ||||
| cpu/cpu4/system | ||||
| cpu/cpu4/temperature | ||||
| cpu/cpu4/usage | ||||
| cpu/cpu4/user | ||||
| cpu/cpu4/wait | ||||
| cpu/cpu5 | ||||
| cpu/cpu5/frequency | ||||
| cpu/cpu5/name | ||||
| cpu/cpu5/system | ||||
| cpu/cpu5/temperature | ||||
| cpu/cpu5/usage | ||||
| cpu/cpu5/user | ||||
| cpu/cpu5/wait | ||||
| cpu/cpu6 | ||||
| cpu/cpu6/frequency | ||||
| cpu/cpu6/name | ||||
| cpu/cpu6/system | ||||
| cpu/cpu6/temperature | ||||
| cpu/cpu6/usage | ||||
| cpu/cpu6/user | ||||
| cpu/cpu6/wait | ||||
| cpu/cpu7 | ||||
| cpu/cpu7/frequency | ||||
| cpu/cpu7/name | ||||
| cpu/cpu7/system | ||||
| cpu/cpu7/temperature | ||||
| cpu/cpu7/usage | ||||
| cpu/cpu7/user | ||||
| cpu/cpu7/wait | ||||
| cpu/cpu8 | ||||
| cpu/cpu8/frequency | ||||
| cpu/cpu8/name | ||||
| cpu/cpu8/system | ||||
| cpu/cpu8/temperature | ||||
| cpu/cpu8/usage | ||||
| cpu/cpu8/user | ||||
| cpu/cpu8/wait | ||||
| cpu/cpu9 | ||||
| cpu/cpu9/frequency | ||||
| cpu/cpu9/name | ||||
| cpu/cpu9/system | ||||
| cpu/cpu9/temperature | ||||
| cpu/cpu9/usage | ||||
| cpu/cpu9/user | ||||
| cpu/cpu9/wait | ||||
| cpu/loadaverages | ||||
| cpu/loadaverages/loadaverage1 | ||||
| cpu/loadaverages/loadaverage15 | ||||
| cpu/loadaverages/loadaverage5 | ||||
| disk | ||||
| disk/52e29d18-ad4d-47ad-98c4-a09ab0914a85 | ||||
| disk/52e29d18-ad4d-47ad-98c4-a09ab0914a85/free | ||||
| disk/52e29d18-ad4d-47ad-98c4-a09ab0914a85/freePercent | ||||
| disk/52e29d18-ad4d-47ad-98c4-a09ab0914a85/name | ||||
| disk/52e29d18-ad4d-47ad-98c4-a09ab0914a85/read | ||||
| disk/52e29d18-ad4d-47ad-98c4-a09ab0914a85/total | ||||
| disk/52e29d18-ad4d-47ad-98c4-a09ab0914a85/used | ||||
| disk/52e29d18-ad4d-47ad-98c4-a09ab0914a85/usedPercent | ||||
| disk/52e29d18-ad4d-47ad-98c4-a09ab0914a85/write | ||||
| disk/all | ||||
| disk/all/free | ||||
| disk/all/freePercent | ||||
| disk/all/read | ||||
| disk/all/total | ||||
| disk/all/used | ||||
| disk/all/usedPercent | ||||
| disk/all/write | ||||
| disk/d10dd7bf-e382-4e44-83d7-9af6c6df7258 | ||||
| disk/d10dd7bf-e382-4e44-83d7-9af6c6df7258/free | ||||
| disk/d10dd7bf-e382-4e44-83d7-9af6c6df7258/freePercent | ||||
| disk/d10dd7bf-e382-4e44-83d7-9af6c6df7258/name | ||||
| disk/d10dd7bf-e382-4e44-83d7-9af6c6df7258/read | ||||
| disk/d10dd7bf-e382-4e44-83d7-9af6c6df7258/total | ||||
| disk/d10dd7bf-e382-4e44-83d7-9af6c6df7258/used | ||||
| disk/d10dd7bf-e382-4e44-83d7-9af6c6df7258/usedPercent | ||||
| disk/d10dd7bf-e382-4e44-83d7-9af6c6df7258/write | ||||
| disk/nvme0n1 | ||||
| disk/nvme0n1/name | ||||
| disk/nvme0n1/read | ||||
| disk/nvme0n1/total | ||||
| disk/nvme0n1/write | ||||
| gpu | ||||
| lmsensors | ||||
| lmsensors/BAT0-acpi-0 | ||||
| lmsensors/BAT0-acpi-0/in0 | ||||
| lmsensors/acpitz-acpi-0 | ||||
| lmsensors/acpitz-acpi-0/temp1 | ||||
| lmsensors/iwlwifi_1-virtual-0 | ||||
| lmsensors/iwlwifi_1-virtual-0/temp1 | ||||
| lmsensors/nvme-pci-0400 | ||||
| lmsensors/nvme-pci-0400/temp1 | ||||
| lmsensors/thinkpad-isa-0000 | ||||
| lmsensors/thinkpad-isa-0000/fan1 | ||||
| lmsensors/thinkpad-isa-0000/fan2 | ||||
| lmsensors/thinkpad-isa-0000/temp1 | ||||
| lmsensors/thinkpad-isa-0000/temp2 | ||||
| lmsensors/thinkpad-isa-0000/temp3 | ||||
| lmsensors/thinkpad-isa-0000/temp4 | ||||
| lmsensors/thinkpad-isa-0000/temp5 | ||||
| lmsensors/thinkpad-isa-0000/temp6 | ||||
| lmsensors/thinkpad-isa-0000/temp7 | ||||
| lmsensors/thinkpad-isa-0000/temp8 | ||||
| lmsensors/ucsi_source_psy_USBC000:001-isa-0000 | ||||
| lmsensors/ucsi_source_psy_USBC000:001-isa-0000/curr1 | ||||
| lmsensors/ucsi_source_psy_USBC000:001-isa-0000/in0 | ||||
| lmsensors/ucsi_source_psy_USBC000:002-isa-0000 | ||||
| lmsensors/ucsi_source_psy_USBC000:002-isa-0000/curr1 | ||||
| lmsensors/ucsi_source_psy_USBC000:002-isa-0000/in0 | ||||
| memory | ||||
| memory/physical | ||||
| memory/physical/application | ||||
| memory/physical/applicationPercent | ||||
| memory/physical/buffer | ||||
| memory/physical/bufferPercent | ||||
| memory/physical/cache | ||||
| memory/physical/cachePercent | ||||
| memory/physical/free | ||||
| memory/physical/freePercent | ||||
| memory/physical/total | ||||
| memory/physical/used | ||||
| memory/physical/usedPercent | ||||
| memory/swap | ||||
| memory/swap/free | ||||
| memory/swap/freePercent | ||||
| memory/swap/total | ||||
| memory/swap/used | ||||
| memory/swap/usedPercent | ||||
| os | ||||
| os/kernel | ||||
| os/kernel/name | ||||
| os/kernel/prettyName | ||||
| os/kernel/version | ||||
| os/plasma | ||||
| os/plasma/kfVersion | ||||
| os/plasma/plasmaVersion | ||||
| os/plasma/qtVersion | ||||
| os/plasma/windowsystem | ||||
| os/system | ||||
| os/system/hostname | ||||
| os/system/logo | ||||
| os/system/name | ||||
| os/system/prettyName | ||||
| os/system/uptime | ||||
| os/system/url | ||||
| os/system/version | ||||
| power | ||||
| power/4870 | ||||
| power/4870/capacity | ||||
| power/4870/charge | ||||
| power/4870/chargePercentage | ||||
| power/4870/chargeRate | ||||
| power/4870/design | ||||
| power/4870/health | ||||
| power/4870/name | ||||
| @ -14,9 +14,9 @@ project(awesomewidgets) | ||||
| set(PROJECT_AUTHOR "Evgeniy Alekseev") | ||||
| set(PROJECT_CONTACT "esalexeev@gmail.com") | ||||
| set(PROJECT_LICENSE "GPL3") | ||||
| set(PROJECT_VERSION_MAJOR "3") | ||||
| set(PROJECT_VERSION_MINOR "5") | ||||
| set(PROJECT_VERSION_PATCH "1") | ||||
| set(PROJECT_VERSION_MAJOR "4") | ||||
| set(PROJECT_VERSION_MINOR "0") | ||||
| set(PROJECT_VERSION_PATCH "0") | ||||
| set(PROJECT_VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}") | ||||
| # append git version if any | ||||
| set(PROJECT_COMMIT_SHA "Commit hash" CACHE INTERNAL "") | ||||
|  | ||||
| @ -1,7 +1,7 @@ | ||||
| set(SUBPROJECT plasma_applet_awesome-widget) | ||||
| message(STATUS "Subproject ${SUBPROJECT}") | ||||
|  | ||||
| configure_file(metadata.desktop ${CMAKE_CURRENT_SOURCE_DIR}/package/metadata.desktop) | ||||
| configure_file(metadata.json ${CMAKE_CURRENT_SOURCE_DIR}/package/metadata.json) | ||||
|  | ||||
| add_subdirectory(plugin) | ||||
| plasma_install_package(package org.kde.plasma.awesomewidget) | ||||
|  | ||||
| @ -1,26 +0,0 @@ | ||||
| [Desktop Entry] | ||||
| Encoding=UTF-8 | ||||
| Name=Awesome Widget | ||||
| Comment=A minimalistic Plasmoid | ||||
| Comment[en]=A minimalistic Plasmoid | ||||
| Comment[es]=Un plasmoide minimalista | ||||
| Comment[es]=Un script Plasmoïde minimaliste | ||||
| Comment[pt_BR]=Um script Plasmoid | ||||
| Comment[ru]=Минималистичный плазмоид | ||||
| Comment[uk]=Мінімалістичний плазмоїд | ||||
| X-KDE-ServiceTypes=Plasma/Applet | ||||
| Type=Service | ||||
| Icon=utilities-system-monitor | ||||
|  | ||||
| X-KDE-ServiceTypes=Plasma/Applet | ||||
| X-Plasma-API=declarativeappletscript | ||||
| X-Plasma-MainScript=ui/main.qml | ||||
|  | ||||
| X-KDE-PluginInfo-Author=Evgeniy Alekseev aka arcanis | ||||
| X-KDE-PluginInfo-Email=esalexeev@gmail.com | ||||
| X-KDE-PluginInfo-Name=org.kde.plasma.awesomewidget | ||||
| X-KDE-PluginInfo-Version=@PROJECT_VERSION@ | ||||
| X-KDE-PluginInfo-Website=https://arcanis.me/projects/awesome-widgets/ | ||||
| X-KDE-PluginInfo-Category=System Information | ||||
| X-KDE-PluginInfo-License=GPLv3 | ||||
| X-KDE-PluginInfo-EnabledByDefault=true | ||||
| @ -1,4 +1,5 @@ | ||||
| { | ||||
|     "KPackageStructure": "Plasma/Applet", | ||||
|     "KPlugin": { | ||||
|         "Authors": [ | ||||
|             { | ||||
| @ -18,12 +19,8 @@ | ||||
|         "Id": "org.kde.plasma.awesomewidget", | ||||
|         "License": "GPLv3", | ||||
|         "Name": "Awesome Widget", | ||||
|         "ServiceTypes": [ | ||||
|             "Plasma/Applet" | ||||
|         ], | ||||
|         "Version": "@PROJECT_VERSION@", | ||||
|         "Website": "https://arcanis.me/projects/awesome-widgets/" | ||||
|     }, | ||||
|     "X-Plasma-API": "declarativeappletscript", | ||||
|     "X-Plasma-MainScript": "ui/main.qml" | ||||
|     "X-Plasma-API-Minimum-Version": "6.0" | ||||
| } | ||||
|  | ||||
| @ -15,7 +15,7 @@ | ||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
| import QtQuick 2.0 | ||||
| import QtQuick 2.15 | ||||
|  | ||||
| import org.kde.plasma.configuration 2.0 | ||||
|  | ||||
|  | ||||
| @ -7,150 +7,150 @@ | ||||
|  | ||||
|     <group name="Widget"> | ||||
|         <!--   widget --> | ||||
|         <entry name="text" type="string"> | ||||
|         <entry name="text" type="String"> | ||||
|             <default>[cpu: $cpu%] [mem: $mem%] [swap: $swap%] [$netdev: $down/$upKB/s]</default> | ||||
|         </entry> | ||||
|     </group> | ||||
|  | ||||
|     <group name="Advanced"> | ||||
|         <!--   advanced --> | ||||
|         <entry name="background" type="bool"> | ||||
|         <entry name="background" type="Bool"> | ||||
|             <default>true</default> | ||||
|         </entry> | ||||
|         <entry name="translateStrings" type="bool"> | ||||
|         <entry name="translateStrings" type="Bool"> | ||||
|             <default>true</default> | ||||
|         </entry> | ||||
|         <entry name="wrapNewLines" type="bool"> | ||||
|         <entry name="wrapNewLines" type="Bool"> | ||||
|             <default>false</default> | ||||
|         </entry> | ||||
|         <entry name="wrapText" type="bool"> | ||||
|         <entry name="wrapText" type="Bool"> | ||||
|             <default>false</default> | ||||
|         </entry> | ||||
|         <entry name="notify" type="bool"> | ||||
|         <entry name="notify" type="Bool"> | ||||
|             <default>true</default> | ||||
|         </entry> | ||||
|         <entry name="checkUpdates" type="bool"> | ||||
|         <entry name="checkUpdates" type="Bool"> | ||||
|             <default>true</default> | ||||
|         </entry> | ||||
|         <entry name="optimize" type="bool"> | ||||
|         <entry name="optimize" type="Bool"> | ||||
|             <default>true</default> | ||||
|         </entry> | ||||
|         <entry name="height" type="int"> | ||||
|         <entry name="height" type="Int"> | ||||
|             <default>0</default> | ||||
|         </entry> | ||||
|         <entry name="width" type="int"> | ||||
|         <entry name="width" type="Int"> | ||||
|             <default>0</default> | ||||
|         </entry> | ||||
|         <entry name="interval" type="int"> | ||||
|         <entry name="interval" type="Int"> | ||||
|             <default>1000</default> | ||||
|         </entry> | ||||
|         <entry name="queueLimit" type="int"> | ||||
|         <entry name="queueLimit" type="Int"> | ||||
|             <default>0</default> | ||||
|         </entry> | ||||
|         <entry name="tempUnits" type="string"> | ||||
|         <entry name="tempUnits" type="String"> | ||||
|             <default>Celsius</default> | ||||
|         </entry> | ||||
|         <entry name="customTime" type="string"> | ||||
|         <entry name="customTime" type="String"> | ||||
|             <default>$hh:$mm</default> | ||||
|         </entry> | ||||
|         <entry name="customUptime" type="string"> | ||||
|         <entry name="customUptime" type="String"> | ||||
|             <default>$dd,$hh,$mm</default> | ||||
|         </entry> | ||||
|         <entry name="acOnline" type="string"> | ||||
|         <entry name="acOnline" type="String"> | ||||
|             <default>(*)</default> | ||||
|         </entry> | ||||
|         <entry name="acOffline" type="string"> | ||||
|         <entry name="acOffline" type="String"> | ||||
|             <default>( )</default> | ||||
|         </entry> | ||||
|         <entry name="telemetryCount" type="int"> | ||||
|         <entry name="telemetryCount" type="Int"> | ||||
|             <default>100</default> | ||||
|         </entry> | ||||
|         <entry name="telemetryRemote" type="bool"> | ||||
|         <entry name="telemetryRemote" type="Bool"> | ||||
|             <default>false</default> | ||||
|         </entry> | ||||
|         <entry name="telemetryId" type="string"> | ||||
|         <entry name="telemetryId" type="String"> | ||||
|             <default></default> | ||||
|         </entry> | ||||
|     </group> | ||||
|  | ||||
|     <group name="Tooltip"> | ||||
|         <entry name="tooltipNumber" type="int"> | ||||
|         <entry name="tooltipNumber" type="Int"> | ||||
|             <default>100</default> | ||||
|         </entry> | ||||
|         <entry name="useTooltipBackground" type="bool"> | ||||
|         <entry name="useTooltipBackground" type="Bool"> | ||||
|             <default>true</default> | ||||
|         </entry> | ||||
|         <entry name="tooltipBackground" type="string"> | ||||
|         <entry name="tooltipBackground" type="String"> | ||||
|             <default>#ffffff</default> | ||||
|         </entry> | ||||
|         <entry name="cpuTooltip" type="bool"> | ||||
|         <entry name="cpuTooltip" type="Bool"> | ||||
|             <default>true</default> | ||||
|         </entry> | ||||
|         <entry name="cpuTooltipColor" type="string"> | ||||
|         <entry name="cpuTooltipColor" type="String"> | ||||
|             <default>#ff0000</default> | ||||
|         </entry> | ||||
|         <entry name="cpuclTooltip" type="bool"> | ||||
|         <entry name="cpuclTooltip" type="Bool"> | ||||
|             <default>true</default> | ||||
|         </entry> | ||||
|         <entry name="cpuclTooltipColor" type="string"> | ||||
|         <entry name="cpuclTooltipColor" type="String"> | ||||
|             <default>#00ff00</default> | ||||
|         </entry> | ||||
|         <entry name="memTooltip" type="bool"> | ||||
|         <entry name="memTooltip" type="Bool"> | ||||
|             <default>true</default> | ||||
|         </entry> | ||||
|         <entry name="memTooltipColor" type="string"> | ||||
|         <entry name="memTooltipColor" type="String"> | ||||
|             <default>#0000ff</default> | ||||
|         </entry> | ||||
|         <entry name="swapTooltip" type="bool"> | ||||
|         <entry name="swapTooltip" type="Bool"> | ||||
|             <default>true</default> | ||||
|         </entry> | ||||
|         <entry name="swapTooltipColor" type="string"> | ||||
|         <entry name="swapTooltipColor" type="String"> | ||||
|             <default>#ffff00</default> | ||||
|         </entry> | ||||
|         <entry name="downkbTooltip" type="bool"> | ||||
|         <entry name="downkbTooltip" type="Bool"> | ||||
|             <default>true</default> | ||||
|         </entry> | ||||
|         <entry name="downkbTooltipColor" type="string"> | ||||
|         <entry name="downkbTooltipColor" type="String"> | ||||
|             <default>#00ffff</default> | ||||
|         </entry> | ||||
|         <entry name="upkbTooltipColor" type="string"> | ||||
|         <entry name="upkbTooltipColor" type="String"> | ||||
|             <default>#ff00ff</default> | ||||
|         </entry> | ||||
|         <entry name="batTooltip" type="bool"> | ||||
|         <entry name="batTooltip" type="Bool"> | ||||
|             <default>true</default> | ||||
|         </entry> | ||||
|         <entry name="batTooltipColor" type="string"> | ||||
|         <entry name="batTooltipColor" type="String"> | ||||
|             <default>#008800</default> | ||||
|         </entry> | ||||
|         <entry name="batInTooltipColor" type="string"> | ||||
|         <entry name="batInTooltipColor" type="String"> | ||||
|             <default>#880000</default> | ||||
|         </entry> | ||||
|     </group> | ||||
|  | ||||
|     <group name="Appearance"> | ||||
|         <!--   appearance --> | ||||
|         <entry name="textAlign" type="string"> | ||||
|         <entry name="textAlign" type="String"> | ||||
|             <default>center</default> | ||||
|         </entry> | ||||
|         <entry name="fontFamily" type="string"> | ||||
|         <entry name="fontFamily" type="String"> | ||||
|             <default>Terminus</default> | ||||
|         </entry> | ||||
|         <entry name="fontSize" type="int"> | ||||
|         <entry name="fontSize" type="Int"> | ||||
|             <default>12</default> | ||||
|         </entry> | ||||
|         <entry name="fontColor" type="string"> | ||||
|         <entry name="fontColor" type="String"> | ||||
|             <default>#000000</default> | ||||
|         </entry> | ||||
|         <entry name="fontWeight" type="string"> | ||||
|         <entry name="fontWeight" type="String"> | ||||
|             <default>normal</default> | ||||
|         </entry> | ||||
|         <entry name="fontStyle" type="string"> | ||||
|         <entry name="fontStyle" type="String"> | ||||
|             <default>normal</default> | ||||
|         </entry> | ||||
|         <entry name="textStyle" type="string"> | ||||
|         <entry name="textStyle" type="String"> | ||||
|             <default>normal</default> | ||||
|         </entry> | ||||
|         <entry name="textStyleColor" type="string"> | ||||
|         <entry name="textStyleColor" type="String"> | ||||
|             <default>#000000</default> | ||||
|         </entry> | ||||
|     </group> | ||||
|  | ||||
| @ -15,7 +15,7 @@ | ||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
| import QtQuick 2.0 | ||||
| import QtQuick 2.15 | ||||
|  | ||||
| import org.kde.plasma.private.awesomewidget 1.0 | ||||
|  | ||||
|  | ||||
| @ -15,8 +15,8 @@ | ||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
| import QtQuick 2.0 | ||||
| import QtQuick.Controls 1.3 as QtControls | ||||
| import QtQuick 2.15 | ||||
| import QtQuick.Controls | ||||
|  | ||||
| import org.kde.plasma.private.awesomewidget 1.0 | ||||
|  | ||||
| @ -165,7 +165,7 @@ Item { | ||||
|             ] | ||||
|             text: i18n("Temperature units") | ||||
|             value: plasmoid.configuration.tempUnits | ||||
|             onValueEdited: cfg_tempUnits = newValue | ||||
|             onValueEdited: newValue => cfg_tempUnits = newValue | ||||
|         } | ||||
|  | ||||
|         LineSelector { | ||||
| @ -192,13 +192,11 @@ Item { | ||||
|             value: plasmoid.configuration.acOffline | ||||
|         } | ||||
|  | ||||
|         QtControls.GroupBox { | ||||
|             height: implicitHeight | ||||
|         GroupBox { | ||||
|             width: parent.width | ||||
|             title: i18n("Actions") | ||||
|  | ||||
|             Column { | ||||
|                 height: implicitHeight | ||||
|                 width: parent.width | ||||
|                 ButtonSelector { | ||||
|                     value: i18n("Drop key cache") | ||||
| @ -226,13 +224,11 @@ Item { | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         QtControls.GroupBox { | ||||
|             height: implicitHeight | ||||
|         GroupBox { | ||||
|             width: parent.width | ||||
|             title: i18n("Telemetry") | ||||
|  | ||||
|             Column { | ||||
|                 height: implicitHeight | ||||
|                 width: parent.width | ||||
|                 CheckBoxSelector { | ||||
|                     id: telemetryRemote | ||||
|  | ||||
| @ -15,7 +15,7 @@ | ||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
| import QtQuick 2.0 | ||||
| import QtQuick 2.15 | ||||
|  | ||||
| import org.kde.plasma.private.awesomewidget 1.0 | ||||
| import "." | ||||
| @ -75,7 +75,7 @@ Item { | ||||
|             model: General.fontWeightModel | ||||
|             text: i18n("Font weight") | ||||
|             value: plasmoid.configuration.fontWeight | ||||
|             onValueEdited: cfg_fontWeight = newValue | ||||
|             onValueEdited: newValue => cfg_fontWeight = newValue | ||||
|         } | ||||
|  | ||||
|         ComboBoxSelector { | ||||
| @ -83,7 +83,7 @@ Item { | ||||
|             model: General.fontStyleModel | ||||
|             text: i18n("Font style") | ||||
|             value: plasmoid.configuration.fontStyle | ||||
|             onValueEdited: cfg_fontStyle = newValue | ||||
|             onValueEdited: newValue => cfg_fontStyle = newValue | ||||
|         } | ||||
|  | ||||
|         ColorSelector { | ||||
| @ -97,7 +97,7 @@ Item { | ||||
|             model: General.textStyleModel | ||||
|             text: i18n("Style") | ||||
|             value: plasmoid.configuration.textStyle | ||||
|             onValueEdited: cfg_textStyle = newValue | ||||
|             onValueEdited: newValue => cfg_textStyle = newValue | ||||
|         } | ||||
|  | ||||
|         ColorSelector { | ||||
|  | ||||
| @ -15,9 +15,8 @@ | ||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
| import QtQuick 2.0 | ||||
| import QtQuick.Controls 1.3 as QtControls | ||||
| import QtQuick.Dialogs 1.1 as QtDialogs | ||||
| import QtQuick 2.15 | ||||
| import QtQuick.Controls | ||||
|  | ||||
| import org.kde.plasma.private.awesomewidget 1.0 | ||||
|  | ||||
| @ -48,18 +47,18 @@ Item { | ||||
|     Column { | ||||
|         id: pageColumn | ||||
|         anchors.fill: parent | ||||
|         QtControls.GroupBox { | ||||
|         GroupBox { | ||||
|             height: implicitHeight | ||||
|             width: parent.width | ||||
|             title: i18n("ACPI") | ||||
|             LineSelector { | ||||
|                 text: i18n("ACPI path") | ||||
|                 value: cfg_dataengine["ACPIPATH"] | ||||
|                 onValueEdited: cfg_dataengine["ACPIPATH"] = newValue | ||||
|                 onValueEdited: newValue => cfg_dataengine["ACPIPATH"] = newValue | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         QtControls.GroupBox { | ||||
|         GroupBox { | ||||
|             height: implicitHeight | ||||
|             width: parent.width | ||||
|             title: i18n("GPU") | ||||
| @ -84,11 +83,11 @@ Item { | ||||
|                 ] | ||||
|                 text: i18n("GPU device") | ||||
|                 value: cfg_dataengine["GPUDEV"] | ||||
|                 onValueEdited: cfg_dataengine["GPUDEV"] = newValue | ||||
|                 onValueEdited: newValue => cfg_dataengine["GPUDEV"] = newValue | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         QtControls.GroupBox { | ||||
|         GroupBox { | ||||
|             height: implicitHeight | ||||
|             width: parent.width | ||||
|             title: i18n("HDD temperature") | ||||
| @ -99,18 +98,18 @@ Item { | ||||
|                     id: hdd | ||||
|                     text: i18n("HDD") | ||||
|                     value: cfg_dataengine["HDDDEV"] | ||||
|                     onValueEdited: cfg_dataengine["HDDDEV"] = newValue | ||||
|                     onValueEdited: newValue => cfg_dataengine["HDDDEV"] = newValue | ||||
|                 } | ||||
|  | ||||
|                 LineSelector { | ||||
|                     text: i18n("hddtemp cmd") | ||||
|                     value: cfg_dataengine["HDDTEMPCMD"] | ||||
|                     onValueEdited: cfg_dataengine["HDDTEMPCMD"] = newValue | ||||
|                     onValueEdited: newValue => cfg_dataengine["HDDTEMPCMD"] = newValue | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         QtControls.GroupBox { | ||||
|         GroupBox { | ||||
|             height: implicitHeight | ||||
|             width: parent.width | ||||
|             title: i18n("Player") | ||||
| @ -123,7 +122,7 @@ Item { | ||||
|                     stepSize: 1 | ||||
|                     text: i18n("Player data symbols") | ||||
|                     value: cfg_dataengine["PLAYERSYMBOLS"] | ||||
|                     onValueEdited: cfg_dataengine["PLAYERSYMBOLS"] = newValue | ||||
|                     onValueEdited: newValue => cfg_dataengine["PLAYERSYMBOLS"] = newValue | ||||
|                 } | ||||
|  | ||||
|                 ComboBoxSelector { | ||||
| @ -143,7 +142,7 @@ Item { | ||||
|                     ] | ||||
|                     text: i18n("Music player") | ||||
|                     value: cfg_dataengine["PLAYER"] | ||||
|                     onValueEdited: cfg_dataengine["PLAYER"] = newValue | ||||
|                     onValueEdited: newValue => cfg_dataengine["PLAYER"] = newValue | ||||
|                 } | ||||
|  | ||||
|                 ComboBoxSelector { | ||||
| @ -194,7 +193,7 @@ Item { | ||||
|                 LineSelector { | ||||
|                     text: i18n("MPD address") | ||||
|                     value: cfg_dataengine["MPDADDRESS"] | ||||
|                     onValueEdited: cfg_dataengine["MPDADDRESS"] = newValue | ||||
|                     onValueEdited: newValue => cfg_dataengine["MPDADDRESS"] = newValue | ||||
|                 } | ||||
|  | ||||
|                 IntegerSelector { | ||||
| @ -203,12 +202,12 @@ Item { | ||||
|                     stepSize: 1 | ||||
|                     text: i18n("MPD port") | ||||
|                     value: cfg_dataengine["MPDPORT"] | ||||
|                     onValueEdited: cfg_dataengine["MPDPORT"] = newValue | ||||
|                     onValueEdited: newValue => cfg_dataengine["MPDPORT"] = newValue | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         QtControls.GroupBox { | ||||
|         GroupBox { | ||||
|             height: implicitHeight | ||||
|             width: parent.width | ||||
|             title: i18n("Extensions") | ||||
|  | ||||
| @ -15,19 +15,18 @@ | ||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
| import QtQuick 2.4 | ||||
| import QtQuick.Controls 1.3 as QtControls | ||||
| import QtQuick.Dialogs 1.2 as QtDialogs | ||||
| import QtQuick.Layouts 1.1 | ||||
| import QtQuick 2.15 | ||||
| import QtQuick.Controls | ||||
| import QtQuick.Dialogs | ||||
| import QtQuick.Layouts | ||||
| import org.kde.plasma.core as PlasmaCore | ||||
| import org.kde.plasma.plasmoid 2.0 | ||||
| import org.kde.plasma.core 2.0 as PlasmaCore | ||||
| import org.kde.plasma.components 2.0 as PlasmaComponents | ||||
|  | ||||
| import org.kde.plasma.private.awesomewidget 1.0 | ||||
| import "." | ||||
|  | ||||
|  | ||||
| Item { | ||||
| PlasmoidItem { | ||||
|     id: main | ||||
|     // backend | ||||
|     AWKeys { | ||||
| @ -74,17 +73,12 @@ Item { | ||||
|     signal sizeUpdate | ||||
|  | ||||
|  | ||||
|     // init | ||||
|     Plasmoid.preferredRepresentation: Plasmoid.fullRepresentation | ||||
|     Plasmoid.compactRepresentation: Plasmoid.fullRepresentation | ||||
|  | ||||
|     Layout.fillWidth: plasmoid.formFactor != PlasmaCore.Planar | ||||
|     Layout.fillHeight: plasmoid.formFactor != PlasmaCore.Planar | ||||
|     Layout.fillWidth: PlasmoidItem.formFactor != PlasmaCore.Planar | ||||
|     Layout.fillHeight: PlasmoidItem.formFactor != PlasmaCore.Planar | ||||
|     Layout.alignment: Qt.AlignVCenter | Qt.AlignHCenter | ||||
|  | ||||
|     Plasmoid.icon: "utilities-system-monitor" | ||||
|     Plasmoid.backgroundHints: plasmoid.configuration.background ? "DefaultBackground" : "NoBackground" | ||||
|     Plasmoid.associatedApplication: "ksysguard" | ||||
|  | ||||
|  | ||||
|     // ui | ||||
| @ -119,11 +113,11 @@ Item { | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     QtDialogs.Dialog { | ||||
|     Dialog { | ||||
|         id: tagSelector | ||||
|         title: i18n("Select tag") | ||||
|  | ||||
|         QtControls.ComboBox { | ||||
|         ComboBox { | ||||
|             id: tagSelectorBox | ||||
|             width: parent.width | ||||
|             editable: true | ||||
| @ -140,17 +134,29 @@ Item { | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     Plasmoid.contextualActions: [ | ||||
|         PlasmaCore.Action { | ||||
|             text: i18n("Request key") | ||||
|             icon.name: "utilities-system-monitor" | ||||
|         }, | ||||
|         PlasmaCore.Action { | ||||
|             text: i18n("Show README") | ||||
|             icon.name: "text-x-readme" | ||||
|         }, | ||||
|         PlasmaCore.Action { | ||||
|             text: i18n("Check updates") | ||||
|             icon.name: "system-software-update" | ||||
|         }, | ||||
|         PlasmaCore.Action { | ||||
|             text: i18n("Report bug") | ||||
|             icon.name: "tools-report-bug" | ||||
|         } | ||||
|     ] | ||||
|  | ||||
|  | ||||
|     Component.onCompleted: { | ||||
|         if (debug) console.debug() | ||||
|  | ||||
|         // actions | ||||
|         // it makes no sense to use this field with optimization enable | ||||
|         if (!plasmoid.configuration.optimize) | ||||
|             plasmoid.setAction("requestKey", i18n("Request key"), "utilities-system-monitor") | ||||
|         plasmoid.setAction("showReadme", i18n("Show README"), "text-x-readme") | ||||
|         plasmoid.setAction("checkUpdates", i18n("Check updates"), "system-software-update") | ||||
|         plasmoid.setAction("reportBug", i18n("Report bug"), "tools-report-bug") | ||||
|         // init submodule | ||||
|         Plasmoid.userConfiguringChanged(false) | ||||
|         // connect data | ||||
| @ -160,14 +166,14 @@ Item { | ||||
|         if (plasmoid.configuration.checkUpdates) return awActions.checkUpdates(false) | ||||
|     } | ||||
|  | ||||
|     onNeedTextUpdate: { | ||||
|     onNeedTextUpdate: newText => { | ||||
|         if (debug) console.debug() | ||||
|  | ||||
|         text.text = newText | ||||
|         sizeUpdate() | ||||
|     } | ||||
|  | ||||
|     onNeedToolTipUpdate: { | ||||
|     onNeedToolTipUpdate: newText => { | ||||
|         if (debug) console.debug() | ||||
|  | ||||
|         tooltip.text = newText | ||||
|  | ||||
| @ -3,25 +3,25 @@ | ||||
|  | ||||
|  | ||||
| # common QML constants | ||||
| singleton General 1.0 file:///usr//awesomewidgets/qml/General.qml | ||||
| singleton General 1.0 file:///usr/share/awesomewidgets/qml/General.qml | ||||
|  | ||||
| # custom QML UI classes | ||||
| AboutTab file:///usr//awesomewidgets/qml/AboutTab.qml | ||||
| AWExtensions file:///usr//awesomewidgets/qml/AWExtensions.qml | ||||
| AWInfoLabel file:///usr//awesomewidgets/qml/AWInfoLabel.qml | ||||
| AWTagSelector file:///usr//awesomewidgets/qml/AWTagSelector.qml | ||||
| AWTextEditor file:///usr//awesomewidgets/qml/AWTextEditor.qml | ||||
| BugReport file:///usr//awesomewidgets/qml/BugReport.qml | ||||
| ButtonSelector file:///usr//awesomewidgets/qml/ButtonSelector.qml | ||||
| CheckBoxSelector file:///usr//awesomewidgets/qml/CheckBoxSelector.qml | ||||
| ColorSelector file:///usr//awesomewidgets/qml/ColorSelector.qml | ||||
| ComboBoxSelector file:///usr//awesomewidgets/qml/ComboBoxSelector.qml | ||||
| ExportDialog file:///usr//awesomewidgets/qml/ExportDialog.qml | ||||
| FontSelector file:///usr//awesomewidgets/qml/FontSelector.qml | ||||
| HtmlDefaultFunctionsBar file:///usr//awesomewidgets/qml/HtmlDefaultFunctionsBar.qml | ||||
| HtmlEditorButton file:///usr//awesomewidgets/qml/HtmlEditorButton.qml | ||||
| HtmlEditorColor file:///usr//awesomewidgets/qml/HtmlEditorColor.qml | ||||
| HtmlEditorFont file:///usr//awesomewidgets/qml/HtmlEditorFont.qml | ||||
| ImportDialog file:///usr//awesomewidgets/qml/ImportDialog.qml | ||||
| IntegerSelector file:///usr//awesomewidgets/qml/IntegerSelector.qml | ||||
| LineSelector file:///usr//awesomewidgets/qml/LineSelector.qml | ||||
| AboutTab file:///usr/share/awesomewidgets/qml/AboutTab.qml | ||||
| AWExtensions file:///usr/share/awesomewidgets/qml/AWExtensions.qml | ||||
| AWInfoLabel file:///usr/share/awesomewidgets/qml/AWInfoLabel.qml | ||||
| AWTagSelector file:///usr/share/awesomewidgets/qml/AWTagSelector.qml | ||||
| AWTextEditor file:///usr/share/awesomewidgets/qml/AWTextEditor.qml | ||||
| BugReport file:///usr/share/awesomewidgets/qml/BugReport.qml | ||||
| ButtonSelector file:///usr/share/awesomewidgets/qml/ButtonSelector.qml | ||||
| CheckBoxSelector file:///usr/share/awesomewidgets/qml/CheckBoxSelector.qml | ||||
| ColorSelector file:///usr/share/awesomewidgets/qml/ColorSelector.qml | ||||
| ComboBoxSelector file:///usr/share/awesomewidgets/qml/ComboBoxSelector.qml | ||||
| ExportDialog file:///usr/share/awesomewidgets/qml/ExportDialog.qml | ||||
| FontSelector file:///usr/share/awesomewidgets/qml/FontSelector.qml | ||||
| HtmlDefaultFunctionsBar file:///usr/share/awesomewidgets/qml/HtmlDefaultFunctionsBar.qml | ||||
| HtmlEditorButton file:///usr/share/awesomewidgets/qml/HtmlEditorButton.qml | ||||
| HtmlEditorColor file:///usr/share/awesomewidgets/qml/HtmlEditorColor.qml | ||||
| HtmlEditorFont file:///usr/share/awesomewidgets/qml/HtmlEditorFont.qml | ||||
| ImportDialog file:///usr/share/awesomewidgets/qml/ImportDialog.qml | ||||
| IntegerSelector file:///usr/share/awesomewidgets/qml/IntegerSelector.qml | ||||
| LineSelector file:///usr/share/awesomewidgets/qml/LineSelector.qml | ||||
|  | ||||
| @ -15,8 +15,8 @@ | ||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
| import QtQuick 2.0 | ||||
| import QtQuick.Controls 1.3 as QtControls | ||||
| import QtQuick 2.15 | ||||
| import QtQuick.Controls | ||||
|  | ||||
| import org.kde.plasma.private.awesomewidget 1.0 | ||||
|  | ||||
| @ -46,7 +46,7 @@ Item { | ||||
|     property alias cfg_memTooltipColor: memTooltipColor.value | ||||
|     property alias cfg_swapTooltip: swapTooltip.checked | ||||
|     property alias cfg_swapTooltipColor: swapTooltipColor.value | ||||
|     property alias cfg_downkbTooltip: downkbTooltip.checked | ||||
|     property alias cfg_downkbTooltip: networkTooltip.checked | ||||
|     property alias cfg_downkbTooltipColor: downkbTooltipColor.value | ||||
|     property alias cfg_upkbTooltipColor: upkbTooltipColor.value | ||||
|     property alias cfg_batTooltip: batTooltip.checked | ||||
| @ -57,7 +57,8 @@ Item { | ||||
|     Column { | ||||
|         id: pageColumn | ||||
|         anchors.fill: parent | ||||
|         QtControls.Label { | ||||
|  | ||||
|         Label { | ||||
|           width: parent.width | ||||
|           horizontalAlignment: Text.AlignHCenter | ||||
|           verticalAlignment: Text.AlignVCenter | ||||
| @ -74,80 +75,109 @@ Item { | ||||
|             value: plasmoid.configuration.tooltipNumber | ||||
|         } | ||||
|  | ||||
|         QtControls.GroupBox { | ||||
|         GroupBox { | ||||
|             id: useTooltipBackground | ||||
|             height: implicitHeight | ||||
|             width: parent.width | ||||
|             checkable: true | ||||
|             title: i18n("Background") | ||||
|  | ||||
|             property alias checked: useTooltipBackgroundLabel.checked | ||||
|             label: CheckBox { | ||||
|                 id: useTooltipBackgroundLabel | ||||
|                 text: i18n("Background") | ||||
|             } | ||||
|  | ||||
|             ColorSelector { | ||||
|                 id: tooltipBackground | ||||
|                 enabled: useTooltipBackgroundLabel.checked | ||||
|                 text: i18n("Background color") | ||||
|                 value: plasmoid.configuration.tooltipBackground | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         QtControls.GroupBox { | ||||
|         GroupBox { | ||||
|             id: cpuTooltip | ||||
|             height: implicitHeight | ||||
|             width: parent.width | ||||
|             checkable: true | ||||
|             title: i18n("CPU") | ||||
|  | ||||
|             property alias checked: cpuTooltipLabel.checked | ||||
|             label: CheckBox { | ||||
|                 id: cpuTooltipLabel | ||||
|                 text: i18n("CPU") | ||||
|             } | ||||
|  | ||||
|             ColorSelector { | ||||
|                 id: cpuTooltipColor | ||||
|                 enabled: cpuTooltipLabel.checked | ||||
|                 text: i18n("CPU color") | ||||
|                 value: plasmoid.configuration.cpuTooltipColor | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         QtControls.GroupBox { | ||||
|         GroupBox { | ||||
|             id: cpuclTooltip | ||||
|             height: implicitHeight | ||||
|             width: parent.width | ||||
|             checkable: true | ||||
|             title: i18n("CPU clock") | ||||
|  | ||||
|             property alias checked: cpuclTooltipLabel.checked | ||||
|             label: CheckBox { | ||||
|                 id: cpuclTooltipLabel | ||||
|                 text: i18n("CPU clock") | ||||
|             } | ||||
|  | ||||
|             ColorSelector { | ||||
|                 id: cpuclTooltipColor | ||||
|                 enabled: cpuclTooltipLabel.checked | ||||
|                 text: i18n("CPU clock color") | ||||
|                 value: plasmoid.configuration.cpuclTooltipColor | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         QtControls.GroupBox { | ||||
|         GroupBox { | ||||
|             id: memTooltip | ||||
|             height: implicitHeight | ||||
|             width: parent.width | ||||
|             checkable: true | ||||
|             title: i18n("Memory") | ||||
|  | ||||
|             property alias checked: memTooltipLabel.checked | ||||
|             label: CheckBox { | ||||
|                 id: memTooltipLabel | ||||
|                 text: i18n("Memory") | ||||
|             } | ||||
|  | ||||
|             ColorSelector { | ||||
|                 id: memTooltipColor | ||||
|                 enabled: memTooltipLabel.checked | ||||
|                 text: i18n("Memory color") | ||||
|                 value: plasmoid.configuration.memTooltipColor | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         QtControls.GroupBox { | ||||
|         GroupBox { | ||||
|             id: swapTooltip | ||||
|             height: implicitHeight | ||||
|             width: parent.width | ||||
|             checkable: true | ||||
|             title: i18n("Swap") | ||||
|  | ||||
|             property alias checked: swapTooltipLabel.checked | ||||
|             label: CheckBox { | ||||
|                 id: swapTooltipLabel | ||||
|                 text: i18n("Swap") | ||||
|             } | ||||
|  | ||||
|             ColorSelector { | ||||
|                 id: swapTooltipColor | ||||
|                 enabled: swapTooltipLabel.checked | ||||
|                 text: i18n("Swap color") | ||||
|                 value: plasmoid.configuration.swapTooltipColor | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         QtControls.GroupBox { | ||||
|             id: downkbTooltip | ||||
|             height: implicitHeight | ||||
|         GroupBox { | ||||
|             id: networkTooltip | ||||
|             width: parent.width | ||||
|             checkable: true | ||||
|             title: i18n("Network") | ||||
|  | ||||
|             property alias checked: networkTooltipLabel.checked | ||||
|             label: CheckBox { | ||||
|                 id: networkTooltipLabel | ||||
|                 text: i18n("Network") | ||||
|             } | ||||
|  | ||||
|             Column { | ||||
|                 height: implicitHeight | ||||
|                 width: parent.width | ||||
|                 enabled: networkTooltipLabel.checked | ||||
|                 ColorSelector { | ||||
|                     id: downkbTooltipColor | ||||
|                     text: i18n("Download speed color") | ||||
| @ -161,15 +191,19 @@ Item { | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         QtControls.GroupBox { | ||||
|         GroupBox { | ||||
|             id: batTooltip | ||||
|             height: implicitHeight | ||||
|             width: parent.width | ||||
|             checkable: true | ||||
|             title: i18n("Battery") | ||||
|  | ||||
|             property alias checked: batteryTooltipLabel.checked | ||||
|             label: CheckBox { | ||||
|                 id: batteryTooltipLabel | ||||
|                 text: i18n("Battery") | ||||
|             } | ||||
|  | ||||
|             Column { | ||||
|                 height: implicitHeight | ||||
|                 width: parent.width | ||||
|                 enabled: batteryTooltipLabel.checked | ||||
|                 ColorSelector { | ||||
|                     id: batTooltipColor | ||||
|                     text: i18n("Battery active color") | ||||
|  | ||||
| @ -15,7 +15,7 @@ | ||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
| import QtQuick 2.2 | ||||
| import QtQuick 2.15 | ||||
|  | ||||
| import org.kde.plasma.private.awesomewidget 1.0 | ||||
| import "." | ||||
| @ -90,7 +90,7 @@ Item { | ||||
|         awKeys.setAggregatorProperty("translate", plasmoid.configuration.translateStrings) | ||||
|     } | ||||
|  | ||||
|     onNeedTextUpdate: { | ||||
|     onNeedTextUpdate: newText => { | ||||
|         if (lock) return | ||||
|         if (debug) console.debug() | ||||
|  | ||||
|  | ||||
| @ -1,26 +0,0 @@ | ||||
| [Desktop Entry] | ||||
| Encoding=UTF-8 | ||||
| Name=Awesome Widget | ||||
| Comment=A minimalistic Plasmoid | ||||
| Comment[en]=A minimalistic Plasmoid | ||||
| Comment[es]=Un plasmoide minimalista | ||||
| Comment[es]=Un script Plasmoïde minimaliste | ||||
| Comment[pt_BR]=Um script Plasmoid | ||||
| Comment[ru]=Минималистичный плазмоид | ||||
| Comment[uk]=Мінімалістичний плазмоїд | ||||
| X-KDE-ServiceTypes=Plasma/Applet | ||||
| Type=Service | ||||
| Icon=utilities-system-monitor | ||||
|  | ||||
| X-KDE-ServiceTypes=Plasma/Applet | ||||
| X-Plasma-API=declarativeappletscript | ||||
| X-Plasma-MainScript=ui/main.qml | ||||
|  | ||||
| X-KDE-PluginInfo-Author=Evgeniy Alekseev aka arcanis | ||||
| X-KDE-PluginInfo-Email=esalexeev@gmail.com | ||||
| X-KDE-PluginInfo-Name=org.kde.plasma.awesomewidget | ||||
| X-KDE-PluginInfo-Version=3.5.1 | ||||
| X-KDE-PluginInfo-Website=https://arcanis.me/projects/awesome-widgets/ | ||||
| X-KDE-PluginInfo-Category=System Information | ||||
| X-KDE-PluginInfo-License=GPLv3 | ||||
| X-KDE-PluginInfo-EnabledByDefault=true | ||||
							
								
								
									
										26
									
								
								sources/awesome-widget/package/metadata.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								sources/awesome-widget/package/metadata.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,26 @@ | ||||
| { | ||||
|     "KPackageStructure": "Plasma/Applet", | ||||
|     "KPlugin": { | ||||
|         "Authors": [ | ||||
|             { | ||||
|                 "Email": "esalexeev@gmail.com", | ||||
|                 "Name": "Evgeniy Alekseev aka arcanis" | ||||
|             } | ||||
|         ], | ||||
|         "Category": "System Information", | ||||
|         "Description": "A minimalistic Plasmoid", | ||||
|         "Description[en]": "A minimalistic Plasmoid", | ||||
|         "Description[es]": "Un script Plasmoïde minimaliste", | ||||
|         "Description[pt_BR]": "Um script Plasmoid", | ||||
|         "Description[ru]": "Минималистичный плазмоид", | ||||
|         "Description[uk]": "Мінімалістичний плазмоїд", | ||||
|         "EnabledByDefault": true, | ||||
|         "Icon": "utilities-system-monitor", | ||||
|         "Id": "org.kde.plasma.awesomewidget", | ||||
|         "License": "GPLv3", | ||||
|         "Name": "Awesome Widget", | ||||
|         "Version": "3.5.1", | ||||
|         "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}) | ||||
| target_link_libraries(${PLUGIN_NAME} ${PROJECT_LIBRARY} ${Qt_LIBRARIES} ${Kf6_LIBRARIES}) | ||||
|  | ||||
| install(TARGETS ${PLUGIN_NAME} DESTINATION ${QML_INSTALL_DIR}/org/kde/plasma/private/awesomewidget) | ||||
| install(FILES qmldir DESTINATION ${QML_INSTALL_DIR}/org/kde/plasma/private/awesomewidget) | ||||
| install(TARGETS ${PLUGIN_NAME} DESTINATION ${KDE_INSTALL_QMLDIR}/org/kde/plasma/private/awesomewidget) | ||||
| install(FILES qmldir DESTINATION ${KDE_INSTALL_QMLDIR}/org/kde/plasma/private/awesomewidget) | ||||
| install(FILES ${SUBPROJECT_NOTIFY} DESTINATION ${KDE_INSTALL_KNOTIFYRCDIR}) | ||||
|  | ||||
| @ -17,14 +17,17 @@ | ||||
|  | ||||
| #include "awdataengineaggregator.h" | ||||
|  | ||||
| #include <QDBusConnection> | ||||
| #include <ksysguard/formatter/Unit.h> | ||||
| #include <ksysguard/systemstats/DBusInterface.h> | ||||
|  | ||||
| #include <QDBusConnection> | ||||
|  | ||||
| #include "awdebug.h" | ||||
|  | ||||
|  | ||||
| AWDataEngineAggregator::AWDataEngineAggregator(QObject *_parent) | ||||
|     : QObject(_parent) | ||||
|     , m_interface(new KSysGuard::SystemStats::DBusInterface()) | ||||
| { | ||||
|     qCDebug(LOG_AW) << __PRETTY_FUNCTION__; | ||||
|  | ||||
| @ -33,14 +36,16 @@ AWDataEngineAggregator::AWDataEngineAggregator(QObject *_parent) | ||||
|     qDBusRegisterMetaType<KSysGuard::SensorDataList>(); | ||||
|     qDBusRegisterMetaType<QHash<QString, KSysGuard::SensorInfo>>(); | ||||
|  | ||||
|     m_interface = new KSysGuard::SystemStats::DBusInterface( | ||||
|             KSysGuard::SystemStats::ServiceName, KSysGuard::SystemStats::ObjectPath, QDBusConnection::sessionBus(), this); | ||||
|     connect(m_interface, SIGNAL(newSensorData(KSysGuard::SensorDataList)), this, | ||||
|             SLOT(updateData(KSysGuard::SensorDataList))); | ||||
|     connect(m_interface, SIGNAL(sensorAdded(const QString &)), this, SLOT(sensorAdded(const QString &))); | ||||
|     connect(m_interface, SIGNAL(sensorMetaDataChanged(const QHash<QString, KSysGuard::SensorInfo> &)), this, | ||||
|             SLOT(updateSensor(const QHash<QString, KSysGuard::SensorInfo> &))); | ||||
|     connect(m_interface, SIGNAL(sensorRemoved(const QString &)), this, SLOT(sensorRemoved(const QString &))); | ||||
|     connect(m_interface, &KSysGuard::SystemStats::DBusInterface::newSensorData, this, | ||||
|             &AWDataEngineAggregator::updateData); | ||||
|     connect(m_interface, &KSysGuard::SystemStats::DBusInterface::sensorMetaDataChanged, this, | ||||
|             &AWDataEngineAggregator::updateSensors); | ||||
|     connect(m_interface, &KSysGuard::SystemStats::DBusInterface::sensorAdded, this, | ||||
|             &AWDataEngineAggregator::sensorAdded); | ||||
|     connect(m_interface, &KSysGuard::SystemStats::DBusInterface::sensorRemoved, this, | ||||
|             &AWDataEngineAggregator::sensorRemoved); | ||||
|  | ||||
|     loadSources(); | ||||
| } | ||||
|  | ||||
|  | ||||
| @ -49,10 +54,96 @@ AWDataEngineAggregator::~AWDataEngineAggregator() | ||||
|     qCDebug(LOG_AW) << __PRETTY_FUNCTION__; | ||||
|  | ||||
|     disconnectSources(); | ||||
|     m_interface->deleteLater(); | ||||
| } | ||||
|  | ||||
|  | ||||
| void AWDataEngineAggregator::connectSources() | ||||
| { | ||||
|     auto keys = m_sensors.keys(); | ||||
|     auto newKeys = QSet(keys.cbegin(), keys.cend()) - m_subscribed; | ||||
|  | ||||
|     m_interface->subscribe(newKeys.values()).waitForFinished(); | ||||
|     m_subscribed.unite(newKeys); | ||||
| } | ||||
|  | ||||
|  | ||||
| void AWDataEngineAggregator::disconnectSources() | ||||
| { | ||||
|     m_interface->unsubscribe(m_sensors.values()); | ||||
|     m_interface->unsubscribe(m_subscribed.values()).waitForFinished(); | ||||
|     m_subscribed.clear(); | ||||
| } | ||||
|  | ||||
|  | ||||
| bool AWDataEngineAggregator::isValidSensor(const KSysGuard::SensorInfo &_sensor) | ||||
| { | ||||
|     return _sensor.unit != KSysGuard::UnitInvalid; | ||||
| } | ||||
|  | ||||
|  | ||||
| void AWDataEngineAggregator::loadSources() | ||||
| { | ||||
|     auto response = m_interface->allSensors(); | ||||
|     response.waitForFinished(); | ||||
|  | ||||
|     auto sensors = response.value(); | ||||
|     updateSensors(sensors); | ||||
|     connectSources(); | ||||
| } | ||||
|  | ||||
|  | ||||
| void AWDataEngineAggregator::dropSource(const QString &_source) | ||||
| { | ||||
|     qCDebug(LOG_AW) << "Disconnect sensor" << _source; | ||||
|  | ||||
|     if (m_subscribed.contains(_source)) { | ||||
|         m_interface->unsubscribe({_source}).waitForFinished(); | ||||
|         m_subscribed.remove(_source); | ||||
|     } | ||||
| } | ||||
|  | ||||
|  | ||||
| void AWDataEngineAggregator::sensorAdded(const QString &_sensor) | ||||
| { | ||||
|     qCDebug(LOG_AW) << "New sensor added" << _sensor; | ||||
|  | ||||
|     // check if sensor is actually valid | ||||
|     auto response = m_interface->sensors({_sensor}); | ||||
|     response.waitForFinished(); | ||||
|  | ||||
|     auto info = response.value().value(_sensor); | ||||
|     if (!isValidSensor(info)) | ||||
|         return; | ||||
|  | ||||
|     m_sensors[_sensor] = info; | ||||
|     dropSource(_sensor); // force reconnect | ||||
|     if (!m_subscribed.contains(_sensor)) { | ||||
|         m_interface->subscribe({_sensor}).waitForFinished(); | ||||
|         m_subscribed.insert(_sensor); | ||||
|     } | ||||
| } | ||||
|  | ||||
|  | ||||
| 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,22 +15,20 @@ | ||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
|  | ||||
| #ifndef AWDATAENGINEAGGREGATOR_H | ||||
| #define AWDATAENGINEAGGREGATOR_H | ||||
| #pragma once | ||||
|  | ||||
| #include <ksysguard/systemstats/SensorInfo.h> | ||||
|  | ||||
| #include <QHash> | ||||
| #include <QObject> | ||||
| #include <QSet> | ||||
|  | ||||
|  | ||||
| namespace KSysGuard::SystemStats | ||||
| { | ||||
|     class DBusInterface; | ||||
| class DBusInterface; | ||||
| } | ||||
|  | ||||
|  | ||||
| class AWDataEngineAggregator : public QObject | ||||
| { | ||||
|     Q_OBJECT | ||||
| @ -38,22 +36,24 @@ class AWDataEngineAggregator : public QObject | ||||
| public: | ||||
|     explicit AWDataEngineAggregator(QObject *_parent = nullptr); | ||||
|     ~AWDataEngineAggregator() override; | ||||
|     void connectSources(); | ||||
|     void disconnectSources(); | ||||
|     [[nodiscard]] static bool isValidSensor(const KSysGuard::SensorInfo &_sensor); | ||||
|     void loadSources(); | ||||
|  | ||||
| signals: | ||||
|     void dataUpdated(const QHash<QString, KSysGuard::SensorInfo> &_sensors, const KSysGuard::SensorDataList &_data); | ||||
|     void deviceAdded(const QString &_source); | ||||
|  | ||||
| public slots: | ||||
|     void dropSource(const QString &_source); | ||||
|     void sensorAdded(const QString &_sensor); | ||||
|     void sensorRemoved(const QString &_sensor); | ||||
|     void updateData(KSysGuard::SensorDataList _data); | ||||
|     void updateSensor(const QHash<QString, KSysGuard::SensorInfo> &_sensor); | ||||
|     void updateSensors(const QHash<QString, KSysGuard::SensorInfo> &_sensors); | ||||
|  | ||||
| private: | ||||
|     void createQueuedConnection(); | ||||
|     KSysGuard::SystemStats::DBusInterface *m_interface = nullptr; | ||||
|     QSet<QString> m_sensors; | ||||
|     QHash<QString, KSysGuard::SensorInfo> m_sensors; | ||||
|     QSet<QString> m_subscribed; | ||||
| }; | ||||
|  | ||||
|  | ||||
| #endif /* AWDATAENGINEAGGREGATOR_H */ | ||||
|  | ||||
| @ -76,75 +76,77 @@ QStringList AWDataEngineMapper::keysFromSource(const QString &_source) const | ||||
|  | ||||
| // HACK units required to define should the value be calculated as temperature | ||||
| // or fan data | ||||
| QStringList AWDataEngineMapper::registerSource(const QString &_source, const QString &_units, const QStringList &_keys) | ||||
| QStringList AWDataEngineMapper::registerSource(const QString &_source, const KSysGuard::Unit _units, | ||||
|                                                const QStringList &_keys) | ||||
| { | ||||
|     qCDebug(LOG_AW) << "Source" << _source << "with units" << _units; | ||||
|  | ||||
|     // regular expressions | ||||
|     auto cpuRegExp = QRegularExpression("cpu/cpu.*/TotalLoad"); | ||||
|     auto cpuclRegExp = QRegularExpression("cpu/cpu.*/clock"); | ||||
|     auto hddrRegExp = QRegularExpression("disk/.*/Rate/rblk"); | ||||
|     auto hddwRegExp = QRegularExpression("disk/.*/Rate/wblk"); | ||||
|     auto mountFillRegExp = QRegularExpression("partitions/.*/filllevel"); | ||||
|     auto mountFreeRegExp = QRegularExpression("partitions/.*/freespace"); | ||||
|     auto mountUsedRegExp = QRegularExpression("partitions/.*/usedspace"); | ||||
|     auto netRegExp = QRegularExpression("network/interfaces/.*/(receiver|transmitter)/data$"); | ||||
|     auto netTotalRegExp = QRegularExpression("network/interfaces/.*/(receiver|transmitter)/dataTotal$"); | ||||
|     auto cpuRegExp = QRegularExpression("^cpu/cpu.*/usage$"); | ||||
|     auto cpuclRegExp = QRegularExpression("^cpu/cpu.*/frequency$"); | ||||
|     auto cpuTempRegExp = QRegularExpression("^cpu/cpu.*/temperature$"); | ||||
|     auto hddrRegExp = QRegularExpression("^disk/.*/read$"); | ||||
|     auto hddwRegExp = QRegularExpression("^disk/.*/write$"); | ||||
|     auto mountFillRegExp = QRegularExpression("^disk/.*/usedPercent$"); | ||||
|     auto mountFreeRegExp = QRegularExpression("^disk/.*/free$"); | ||||
|     auto mountUsedRegExp = QRegularExpression("^disk/.*/used$"); | ||||
|     auto netRegExp = QRegularExpression("^network/.*/(download|upload)$"); | ||||
|     auto netTotalRegExp = QRegularExpression("^network/.*/(totalDownload|totalUpload)$"); | ||||
|  | ||||
|     if (_source == "battery/ac") { | ||||
|     if (_source == "extsysmon/battery/ac") { | ||||
|         // AC | ||||
|         m_map.insert(_source, "ac"); | ||||
|         m_formatter["ac"] = AWKeysAggregator::FormatterType::ACFormat; | ||||
|     } else if (_source.startsWith("battery/")) { | ||||
|     } else if (_source.startsWith("extsysmon/battery/")) { | ||||
|         // battery stats | ||||
|         QString key = _source; | ||||
|         key.remove("battery/"); | ||||
|         key.remove("extsysmon/battery/"); | ||||
|         m_map.insert(_source, key); | ||||
|         m_formatter[key] = _source.contains("rate") ? AWKeysAggregator::FormatterType::Float | ||||
|                                                     : AWKeysAggregator::FormatterType::IntegerThree; | ||||
|     } else if (_source == "cpu/system/TotalLoad") { | ||||
|     } else if (_source == "cpu/all/usage") { | ||||
|         // cpu | ||||
|         m_map.insert(_source, "cpu"); | ||||
|         m_formatter["cpu"] = AWKeysAggregator::FormatterType::Float; | ||||
|     } else if (_source.contains(cpuRegExp)) { | ||||
|         // cpus | ||||
|         QString key = _source; | ||||
|         key.remove("cpu/").remove("/TotalLoad"); | ||||
|         key.remove("cpu/").remove("/usage"); | ||||
|         m_map.insert(_source, key); | ||||
|         m_formatter[key] = AWKeysAggregator::FormatterType::Float; | ||||
|     } else if (_source == "cpu/system/AverageClock") { | ||||
|     } else if (_source == "cpu/all/averageFrequency") { | ||||
|         // cpucl | ||||
|         m_map.insert(_source, "cpucl"); | ||||
|         m_formatter["cpucl"] = AWKeysAggregator::FormatterType::Integer; | ||||
|     } else if (_source.contains(cpuclRegExp)) { | ||||
|         // cpucls | ||||
|         QString key = _source; | ||||
|         key.remove("cpu/cpu").remove("/clock"); | ||||
|         key.remove("cpu/cpu").remove("/frequency"); | ||||
|         key = QString("cpucl%1").arg(key); | ||||
|         m_map.insert(_source, key); | ||||
|         m_formatter[key] = AWKeysAggregator::FormatterType::Integer; | ||||
|     } else if (_source.startsWith("custom")) { | ||||
|     } else if (_source.startsWith("extsysmon/custom")) { | ||||
|         // custom | ||||
|         QString key = _source; | ||||
|         key.remove("custom/"); | ||||
|         key.remove("extsysmon/custom/"); | ||||
|         m_map.insert(_source, key); | ||||
|         m_formatter[key] = AWKeysAggregator::FormatterType::NoFormat; | ||||
|     } else if (_source == "desktop/current/name") { | ||||
|     } else if (_source == "extsysmon/desktop/name") { | ||||
|         // current desktop name | ||||
|         m_map.insert(_source, "desktop"); | ||||
|         m_formatter["desktop"] = AWKeysAggregator::FormatterType::NoFormat; | ||||
|     } else if (_source == "desktop/current/number") { | ||||
|     } else if (_source == "extsysmon/desktop/number") { | ||||
|         // current desktop number | ||||
|         m_map.insert(_source, "ndesktop"); | ||||
|         m_formatter["ndesktop"] = AWKeysAggregator::FormatterType::NoFormat; | ||||
|     } else if (_source == "desktop/total/number") { | ||||
|     } else if (_source == "extsysmon/desktop/count") { | ||||
|         // desktop count | ||||
|         m_map.insert(_source, "tdesktops"); | ||||
|         m_formatter["tdesktops"] = AWKeysAggregator::FormatterType::NoFormat; | ||||
|     } else if (_source.contains(hddrRegExp)) { | ||||
|         // read speed | ||||
|         QString device = _source; | ||||
|         device.remove("/Rate/rblk"); | ||||
|         device.remove("disk/").remove("/read"); | ||||
|         int index = m_devices["disk"].indexOf(device); | ||||
|         if (index > -1) { | ||||
|             QString key = QString("hddr%1").arg(index); | ||||
| @ -154,25 +156,25 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const QSt | ||||
|     } else if (_source.contains(hddwRegExp)) { | ||||
|         // write speed | ||||
|         QString device = _source; | ||||
|         device.remove("/Rate/wblk"); | ||||
|         device.remove("disk/").remove("/write"); | ||||
|         int index = m_devices["disk"].indexOf(device); | ||||
|         if (index > -1) { | ||||
|             QString key = QString("hddw%1").arg(index); | ||||
|             m_map.insert(_source, key); | ||||
|             m_formatter[key] = AWKeysAggregator::FormatterType::Integer; | ||||
|         } | ||||
|     } else if (_source == "gpu/load") { | ||||
|     } else if (_source == "extsysmon/gpuload/load") { | ||||
|         // gpu load | ||||
|         m_map.insert(_source, "gpu"); | ||||
|         m_formatter["gpu"] = AWKeysAggregator::FormatterType::Float; | ||||
|     } else if (_source == "gpu/temperature") { | ||||
|     } else if (_source == "extsysmon/gputemp/temperature") { | ||||
|         // gpu temperature | ||||
|         m_map.insert(_source, "gputemp"); | ||||
|         m_formatter["gputemp"] = AWKeysAggregator::FormatterType::Temperature; | ||||
|     } else if (_source.contains(mountFillRegExp)) { | ||||
|         // fill level | ||||
|         QString device = _source; | ||||
|         device.remove("partitions").remove("/filllevel"); | ||||
|         device.remove("disk/").remove("/usedPercent"); | ||||
|         int index = m_devices["mount"].indexOf(device); | ||||
|         if (index > -1) { | ||||
|             QString key = QString("hdd%1").arg(index); | ||||
| @ -185,7 +187,7 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const QSt | ||||
|     } else if (_source.contains(mountFreeRegExp)) { | ||||
|         // free space | ||||
|         QString device = _source; | ||||
|         device.remove("partitions").remove("/freespace"); | ||||
|         device.remove("disk/").remove("/free"); | ||||
|         int index = m_devices["mount"].indexOf(device); | ||||
|         if (index > -1) { | ||||
|             // mb | ||||
| @ -200,7 +202,7 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const QSt | ||||
|     } else if (_source.contains(mountUsedRegExp)) { | ||||
|         // used | ||||
|         QString device = _source; | ||||
|         device.remove("partitions").remove("/usedspace"); | ||||
|         device.remove("disk/").remove("/used"); | ||||
|         int index = m_devices["mount"].indexOf(device); | ||||
|         if (index > -1) { | ||||
|             // mb | ||||
| @ -212,24 +214,24 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const QSt | ||||
|             m_map.insert(_source, key); | ||||
|             m_formatter[key] = AWKeysAggregator::FormatterType::MemGBFormat; | ||||
|         } | ||||
|     } else if (_source.startsWith("hdd/temperature")) { | ||||
|     } else if (_source.startsWith("extsysmon/hdd/temperature")) { | ||||
|         // hdd temperature | ||||
|         QString device = _source; | ||||
|         device.remove("hdd/temperature"); | ||||
|         device.remove("extsysmon/hdd/temperature"); | ||||
|         int index = m_devices["hdd"].indexOf(device); | ||||
|         if (index > -1) { | ||||
|             QString key = QString("hddtemp%1").arg(index); | ||||
|             m_map.insert(_source, key); | ||||
|             m_formatter[key] = AWKeysAggregator::FormatterType::Temperature; | ||||
|         } | ||||
|     } else if (_source.startsWith("cpu/system/loadavg")) { | ||||
|     } else if (_source.startsWith("cpu/loadaverages/loadaverage")) { | ||||
|         // load average | ||||
|         QString time = _source; | ||||
|         time.remove("cpu/system/loadavg"); | ||||
|         time.remove("cpu/loadaverages/loadaverage"); | ||||
|         QString key = QString("la%1").arg(time); | ||||
|         m_map.insert(_source, key); | ||||
|         m_formatter[key] = AWKeysAggregator::FormatterType::FloatTwoSymbols; | ||||
|     } else if (_source == "mem/physical/application") { | ||||
|     } else if (_source == "memory/physical/application") { | ||||
|         // app memory | ||||
|         // mb | ||||
|         m_map.insert(_source, "memmb"); | ||||
| @ -237,7 +239,7 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const QSt | ||||
|         // gb | ||||
|         m_map.insert(_source, "memgb"); | ||||
|         m_formatter["memgb"] = AWKeysAggregator::FormatterType::MemGBFormat; | ||||
|     } else if (_source == "mem/physical/free") { | ||||
|     } else if (_source == "memory/physical/free") { | ||||
|         // free memory | ||||
|         // mb | ||||
|         m_map.insert(_source, "memfreemb"); | ||||
| @ -245,7 +247,7 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const QSt | ||||
|         // gb | ||||
|         m_map.insert(_source, "memfreegb"); | ||||
|         m_formatter["memfreegb"] = AWKeysAggregator::FormatterType::MemGBFormat; | ||||
|     } else if (_source == "mem/physical/used") { | ||||
|     } else if (_source == "memory/physical/used") { | ||||
|         // used memory | ||||
|         // mb | ||||
|         m_map.insert(_source, "memusedmb"); | ||||
| @ -253,23 +255,23 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const QSt | ||||
|         // gb | ||||
|         m_map.insert(_source, "memusedgb"); | ||||
|         m_formatter["memusedgb"] = AWKeysAggregator::FormatterType::MemGBFormat; | ||||
|     } else if (_source == "network/current/name") { | ||||
|     } else if (_source == "extsysmon/network/device") { | ||||
|         // network device | ||||
|         m_map.insert(_source, "netdev"); | ||||
|         m_formatter["netdev"] = AWKeysAggregator::FormatterType::NoFormat; | ||||
|     } else if (_source == "network/current/ssid") { | ||||
|     } else if (_source == "extsysmon/network/ssid") { | ||||
|         // current ssid | ||||
|         m_map.insert(_source, "ssid"); | ||||
|         m_formatter["ssid"] = AWKeysAggregator::FormatterType::NoFormat; | ||||
|     } else if (_source.startsWith("network/response")) { | ||||
|     } else if (_source.startsWith("extsysmon/requests/response")) { | ||||
|         // network response | ||||
|         QString key = _source; | ||||
|         key.remove("network/"); | ||||
|         key.remove("extsysmon/requests/"); | ||||
|         m_map.insert(_source, key); | ||||
|         m_formatter[key] = AWKeysAggregator::FormatterType::NoFormat; | ||||
|     } else if (_source.contains(netRegExp)) { | ||||
|         // network speed | ||||
|         QString type = _source.contains("receiver") ? "down" : "up"; | ||||
|         QString type = _source.contains("download") ? "down" : "up"; | ||||
|         int index = m_devices["net"].indexOf(_source.split('/')[2]); | ||||
|         if (index > -1) { | ||||
|             // kb | ||||
| @ -287,7 +289,7 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const QSt | ||||
|         } | ||||
|     } else if (_source.contains(netTotalRegExp)) { | ||||
|         // network data total | ||||
|         QString type = _source.contains("receiver") ? "down" : "up"; | ||||
|         QString type = _source.contains("download") ? "down" : "up"; | ||||
|         int index = m_devices["net"].indexOf(_source.split('/')[2]); | ||||
|         if (index > -1) { | ||||
|             // kb | ||||
| @ -299,37 +301,37 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const QSt | ||||
|             m_map.insert(_source, key); | ||||
|             m_formatter[key] = AWKeysAggregator::FormatterType::MemMBFormat; | ||||
|         } | ||||
|     } else if (_source.startsWith("upgrade")) { | ||||
|     } else if (_source.startsWith("extsysmon/upgrade")) { | ||||
|         // package manager | ||||
|         QString key = _source; | ||||
|         key.remove("upgrade/"); | ||||
|         key.remove("extsysmon/upgrade/"); | ||||
|         m_map.insert(_source, key); | ||||
|         m_formatter[key] = AWKeysAggregator::FormatterType::IntegerThree; | ||||
|     } else if (_source.startsWith("player")) { | ||||
|     } else if (_source.startsWith("extsysmon/player")) { | ||||
|         // player | ||||
|         QString key = _source; | ||||
|         key.remove("player/"); | ||||
|         key.remove("extsysmon/player/"); | ||||
|         m_map.insert(_source, key); | ||||
|         m_formatter[key] = AWKeysAggregator::FormatterType::NoFormat; | ||||
|     } else if (_source == "ps/running/count") { | ||||
|     } else if (_source == "extsysmon/ps/running") { | ||||
|         // running processes count | ||||
|         m_map.insert(_source, "pscount"); | ||||
|         m_formatter["pscount"] = AWKeysAggregator::FormatterType::NoFormat; | ||||
|     } else if (_source == "ps/running/list") { | ||||
|     } else if (_source == "extsysmon/ps/list") { | ||||
|         // list of running processes | ||||
|         m_map.insert(_source, "ps"); | ||||
|         m_formatter["ps"] = AWKeysAggregator::FormatterType::List; | ||||
|     } else if (_source == "ps/total/count") { | ||||
|     } else if (_source == "extsysmon/ps/count") { | ||||
|         // total processes count | ||||
|         m_map.insert(_source, "pstot"); | ||||
|         m_formatter["pstot"] = AWKeysAggregator::FormatterType::NoFormat; | ||||
|     } else if (_source.startsWith("quotes")) { | ||||
|     } else if (_source.startsWith("extsysmon/quotes")) { | ||||
|         // quotes | ||||
|         QString key = _source; | ||||
|         key.remove("quotes/"); | ||||
|         key.remove("extsysmon/quotes/"); | ||||
|         m_map.insert(_source, key); | ||||
|         m_formatter[key] = AWKeysAggregator::FormatterType::Quotes; | ||||
|     } else if (_source == "mem/swap/free") { | ||||
|     } else if (_source == "memory/swap/free") { | ||||
|         // free swap | ||||
|         // mb | ||||
|         m_map.insert(_source, "swapfreemb"); | ||||
| @ -337,7 +339,7 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const QSt | ||||
|         // gb | ||||
|         m_map.insert(_source, "swapfreegb"); | ||||
|         m_formatter["swapfreegb"] = AWKeysAggregator::FormatterType::MemGBFormat; | ||||
|     } else if (_source == "mem/swap/used") { | ||||
|     } else if (_source == "memory/swap/used") { | ||||
|         // used swap | ||||
|         // mb | ||||
|         m_map.insert(_source, "swapmb"); | ||||
| @ -345,19 +347,20 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const QSt | ||||
|         // gb | ||||
|         m_map.insert(_source, "swapgb"); | ||||
|         m_formatter["swapgb"] = AWKeysAggregator::FormatterType::MemGBFormat; | ||||
|     } else if (_source.startsWith("lmsensors/")) { | ||||
|     } else if (_source.startsWith("lmsensors/") || _source.contains(cpuTempRegExp) | ||||
|                || _source == "cpu/all/averageTemperature") { | ||||
|         // temperature | ||||
|         int index = m_devices["temp"].indexOf(_source); | ||||
|         auto index = m_devices["temp"].indexOf(_source); | ||||
|         // HACK on DE initialization there are no units key | ||||
|         if (_units.isEmpty()) | ||||
|         if (_units == KSysGuard::UnitInvalid) | ||||
|             return QStringList({QString("temp%1").arg(index)}); | ||||
|         if (index > -1) { | ||||
|             QString key = QString("temp%1").arg(index); | ||||
|             m_map.insert(_source, key); | ||||
|             m_formatter[key] = _units == "°C" ? AWKeysAggregator::FormatterType::Temperature | ||||
|                                               : AWKeysAggregator::FormatterType::Integer; | ||||
|             m_formatter[key] = _units == KSysGuard::UnitCelsius ? AWKeysAggregator::FormatterType::Temperature | ||||
|                                                                 : AWKeysAggregator::FormatterType::Integer; | ||||
|         } | ||||
|     } else if (_source == "Local") { | ||||
|     } else if (_source == "extsysmon/time/now") { | ||||
|         // time | ||||
|         m_map.insert(_source, "time"); | ||||
|         m_formatter["time"] = AWKeysAggregator::FormatterType::Time; | ||||
| @ -376,40 +379,40 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const QSt | ||||
|         // timestamp | ||||
|         m_map.insert(_source, "tstime"); | ||||
|         m_formatter["tstime"] = AWKeysAggregator::FormatterType::Timestamp; | ||||
|     } else if (_source == "system/brightness") { | ||||
|     } else if (_source == "extsysmon/system/brightness") { | ||||
|         m_map.insert(_source, "brightness"); | ||||
|         m_formatter["brightness"] = AWKeysAggregator::FormatterType::IntegerThree; | ||||
|     } else if (_source == "system/volume") { | ||||
|     } else if (_source == "extsysmon/system/volume") { | ||||
|         m_map.insert(_source, "volume"); | ||||
|         m_formatter["volume"] = AWKeysAggregator::FormatterType::IntegerThree; | ||||
|     } else if (_source == "system/uptime") { | ||||
|     } else if (_source == "os/system/uptime") { | ||||
|         // uptime | ||||
|         m_map.insert(_source, "uptime"); | ||||
|         m_formatter["uptime"] = AWKeysAggregator::FormatterType::Uptime; | ||||
|         // custom uptime | ||||
|         m_map.insert(_source, "cuptime"); | ||||
|         m_formatter["cuptime"] = AWKeysAggregator::FormatterType::UptimeCustom; | ||||
|     } else if (_source.startsWith("weather/temperature")) { | ||||
|     } else if (_source.startsWith("extsysmon/weather/temperature")) { | ||||
|         // temperature | ||||
|         QString key = _source; | ||||
|         key.remove("weather/"); | ||||
|         key.remove("extsysmon/weather/"); | ||||
|         m_map.insert(_source, key); | ||||
|         m_formatter[key] = AWKeysAggregator::FormatterType::Temperature; | ||||
|     } else if (_source.startsWith("weather/")) { | ||||
|     } else if (_source.startsWith("extsysmon/weather/")) { | ||||
|         // other weather | ||||
|         QString key = _source; | ||||
|         key.remove("weather/"); | ||||
|         key.remove("extsysmon/weather/"); | ||||
|         m_map.insert(_source, key); | ||||
|         m_formatter[key] = AWKeysAggregator::FormatterType::NoFormat; | ||||
|     } else if (_source.startsWith("load/load")) { | ||||
|     } else if (_source.startsWith("extsysmon/load/load")) { | ||||
|         // load source | ||||
|         QString key = _source; | ||||
|         key.remove("load/"); | ||||
|         key.remove("extsysmon/load/"); | ||||
|         m_map.insert(_source, key); | ||||
|         m_formatter[key] = AWKeysAggregator::FormatterType::Temperature; | ||||
|     } | ||||
|  | ||||
|     QStringList foundKeys = keysFromSource(_source); | ||||
|     auto foundKeys = keysFromSource(_source); | ||||
|  | ||||
|     // rewrite formatters for custom ones | ||||
|     QStringList customFormattersKeys; | ||||
| @ -424,7 +427,7 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const QSt | ||||
|  | ||||
|     // drop key from dictionary if no one user requested key required it | ||||
|     qCInfo(LOG_AW) << "Looking for keys" << foundKeys << "in" << _keys; | ||||
|     bool required = _keys.isEmpty() || std::any_of(foundKeys.cbegin(), foundKeys.cend(), [&_keys](const QString &key) { | ||||
|     auto required = _keys.isEmpty() || std::any_of(foundKeys.cbegin(), foundKeys.cend(), [&_keys](const QString &key) { | ||||
|                         return _keys.contains(key); | ||||
|                     }); | ||||
|     if (!required) { | ||||
|  | ||||
| @ -19,6 +19,8 @@ | ||||
| #ifndef AWDATAENGINEMAPPER_H | ||||
| #define AWDATAENGINEMAPPER_H | ||||
|  | ||||
| #include <ksysguard/formatter/Unit.h> | ||||
|  | ||||
| #include <QMultiHash> | ||||
| #include <QObject> | ||||
|  | ||||
| @ -38,7 +40,7 @@ public: | ||||
|     [[nodiscard]] AWKeysAggregator::FormatterType formatter(const QString &_key) const; | ||||
|     [[nodiscard]] QStringList keysFromSource(const QString &_source) const; | ||||
|     // set methods | ||||
|     QStringList registerSource(const QString &_source, const QString &_units, const QStringList &_keys); | ||||
|     QStringList registerSource(const QString &_source, const KSysGuard::Unit _units, const QStringList &_keys); | ||||
|     void setDevices(const QHash<QString, QStringList> &_devices); | ||||
|  | ||||
| private: | ||||
|  | ||||
| @ -114,8 +114,7 @@ QStringList AWFormatterHelper::rightKeys() | ||||
|  | ||||
| void AWFormatterHelper::editItems() | ||||
| { | ||||
|     repaintList(); | ||||
|     int ret = exec(); | ||||
|     auto ret = exec(); | ||||
|     qCInfo(LOG_AW) << "Dialog returns" << ret; | ||||
| } | ||||
|  | ||||
| @ -200,20 +199,20 @@ QPair<QString, AWAbstractFormatter::FormatterClass> AWFormatterHelper::readMetad | ||||
|  | ||||
|     QSettings settings(_filePath, QSettings::IniFormat); | ||||
|     settings.beginGroup("Desktop Entry"); | ||||
|     QString name = settings.value("Name", _filePath).toString(); | ||||
|     QString type = settings.value("X-AW-Type", "NoFormat").toString(); | ||||
|     AWAbstractFormatter::FormatterClass formatter = defineFormatterClass(type); | ||||
|     auto name = settings.value("Name", _filePath).toString(); | ||||
|     auto type = settings.value("X-AW-Type", "NoFormat").toString(); | ||||
|     auto formatter = defineFormatterClass(type); | ||||
|     settings.endGroup(); | ||||
|  | ||||
|     return QPair<QString, AWAbstractFormatter::FormatterClass>(name, formatter); | ||||
| } | ||||
|  | ||||
|  | ||||
| void AWFormatterHelper::doCreateItem() | ||||
| void AWFormatterHelper::doCreateItem(QListWidget *_widget) | ||||
| { | ||||
|     QStringList selection = {"NoFormat", "DateTime", "Float", "List", "Script", "String", "Json"}; | ||||
|     bool ok; | ||||
|     QString select = QInputDialog::getItem(this, i18n("Select type"), i18n("Type:"), selection, 0, false, &ok); | ||||
|     auto select = QInputDialog::getItem(nullptr, i18n("Select type"), i18n("Type:"), selection, 0, false, &ok); | ||||
|     if (!ok) { | ||||
|         qCWarning(LOG_AW) << "No type selected"; | ||||
|         return; | ||||
| @ -223,18 +222,18 @@ void AWFormatterHelper::doCreateItem() | ||||
|     AWAbstractFormatter::FormatterClass formatter = defineFormatterClass(select); | ||||
|     switch (formatter) { | ||||
|     case AWAbstractFormatter::FormatterClass::DateTime: | ||||
|         return createItem<AWDateTimeFormatter>(); | ||||
|         return createItem<AWDateTimeFormatter>(_widget); | ||||
|     case AWAbstractFormatter::FormatterClass::Float: | ||||
|         return createItem<AWFloatFormatter>(); | ||||
|         return createItem<AWFloatFormatter>(_widget); | ||||
|     case AWAbstractFormatter::FormatterClass::List: | ||||
|         return createItem<AWListFormatter>(); | ||||
|         return createItem<AWListFormatter>(_widget); | ||||
|     case AWAbstractFormatter::FormatterClass::Script: | ||||
|         return createItem<AWScriptFormatter>(); | ||||
|         return createItem<AWScriptFormatter>(_widget); | ||||
|     case AWAbstractFormatter::FormatterClass::String: | ||||
|         return createItem<AWStringFormatter>(); | ||||
|         return createItem<AWStringFormatter>(_widget); | ||||
|     case AWAbstractFormatter::FormatterClass::Json: | ||||
|         return createItem<AWJsonFormatter>(); | ||||
|         return createItem<AWJsonFormatter>(_widget); | ||||
|     case AWAbstractFormatter::FormatterClass::NoFormat: | ||||
|         return createItem<AWNoFormatter>(); | ||||
|         return createItem<AWNoFormatter>(_widget); | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -51,7 +51,7 @@ private: | ||||
|     void initFormatters(); | ||||
|     [[nodiscard]] static QPair<QString, AWAbstractFormatter::FormatterClass> readMetadata(const QString &_filePath); | ||||
|     // parent methods | ||||
|     void doCreateItem() override; | ||||
|     void doCreateItem(QListWidget *_widget) override; | ||||
|     // properties | ||||
|     QHash<QString, AWAbstractFormatter *> m_formatters; | ||||
|     QHash<QString, AWAbstractFormatter *> m_formattersClasses; | ||||
|  | ||||
| @ -302,18 +302,20 @@ void AWKeyOperations::addDevice(const QString &_source) | ||||
| { | ||||
|     qCDebug(LOG_AW) << "Source" << _source; | ||||
|  | ||||
|     auto diskRegexp = QRegularExpression("disk/(?:md|sd|hd)[a-z|0-9]_.*/Rate/(?:rblk)"); | ||||
|     auto mountRegexp = QRegularExpression("partitions/.*/filllevel"); | ||||
|     auto diskRegexp = QRegularExpression("disk/.*/read"); | ||||
|     auto mountRegexp = QRegularExpression("disk/.*/usedPercent"); | ||||
|     auto cpuTempRegExp = QRegularExpression("^cpu/cpu.*/temperature$"); | ||||
|  | ||||
|     if (_source.contains(diskRegexp)) { | ||||
|         QString device = _source; | ||||
|         device.remove("/Rate/rblk"); | ||||
|         auto device = _source; | ||||
|         device.remove("disk/").remove("/read"); | ||||
|         addKeyToCache("disk", device); | ||||
|     } else if (_source.contains(mountRegexp)) { | ||||
|         QString device = _source; | ||||
|         device.remove("partitions").remove("/filllevel"); | ||||
|         auto device = _source; | ||||
|         device.remove("disk/").remove("/usedPercent"); | ||||
|         addKeyToCache("mount", device); | ||||
|     } else if (_source.startsWith("lmsensors")) { | ||||
|     } else if (_source.startsWith("lmsensors") || _source.contains(cpuTempRegExp) | ||||
|                || _source == "cpu/all/averageTemperature") { | ||||
|         addKeyToCache("temp", _source); | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -56,16 +56,17 @@ AWKeys::AWKeys(QObject *_parent) | ||||
|     createDBusInterface(); | ||||
|  | ||||
|     // update key data if required | ||||
|     connect(m_keyOperator, SIGNAL(updateKeys(const QStringList &)), this, SLOT(reinitKeys(const QStringList &))); | ||||
|     connect(m_timer, SIGNAL(timeout()), this, SLOT(updateTextData())); | ||||
|     connect(m_keyOperator, &AWKeyOperations::updateKeys, this, &AWKeys::reinitKeys); | ||||
|     connect(m_timer, &QTimer::timeout, this, &AWKeys::updateTextData); | ||||
|  | ||||
|     // transfer signal from AWDataAggregator object to QML ui | ||||
|     connect(m_dataAggregator, SIGNAL(toolTipPainted(const QString &)), this, | ||||
|             SIGNAL(needToolTipToBeUpdated(const QString &))); | ||||
|     connect(this, SIGNAL(dropSourceFromDataengine(const QString &)), m_dataEngineAggregator, | ||||
|             SLOT(dropSource(const QString &))); | ||||
|     connect(m_dataAggregator, &AWDataAggregator::toolTipPainted, | ||||
|             [this](const QString &_tooltip) { emit(needToolTipToBeUpdated(_tooltip)); }); | ||||
|  | ||||
|     connect(this, &AWKeys::dropSourceFromDataengine, m_dataEngineAggregator, &AWDataEngineAggregator::dropSource); | ||||
|     connect(m_dataEngineAggregator, &AWDataEngineAggregator::dataUpdated, this, &AWKeys::dataUpdated); | ||||
|     // transfer signal from dataengine to update source list | ||||
|     connect(m_dataEngineAggregator, SIGNAL(deviceAdded(const QString &)), m_keyOperator, | ||||
|             SLOT(addDevice(const QString &))); | ||||
|     connect(m_dataEngineAggregator, &AWDataEngineAggregator::deviceAdded, m_keyOperator, &AWKeyOperations::addDevice); | ||||
| } | ||||
|  | ||||
|  | ||||
| @ -102,7 +103,6 @@ void AWKeys::initKeys(const QString &_currentPattern, const int _interval, const | ||||
|     m_aggregator->initFormatters(); | ||||
|     m_keyOperator->setPattern(_currentPattern); | ||||
|     m_keyOperator->updateCache(); | ||||
|     m_dataEngineAggregator->reconnectSources(_interval); | ||||
|  | ||||
|     // timer | ||||
|     m_timer->setInterval(_interval); | ||||
| @ -185,9 +185,9 @@ QString AWKeys::valueByKey(const QString &_key) const | ||||
| { | ||||
|     qCDebug(LOG_AW) << "Requested value for key" << _key; | ||||
|  | ||||
|     QString trueKey = _key.startsWith("bar") ? m_keyOperator->infoByKey(_key) : _key; | ||||
|     auto realKey = _key.startsWith("bar") ? m_keyOperator->infoByKey(_key) : _key; | ||||
|  | ||||
|     return m_aggregator->formatter(m_values[trueKey], trueKey, true); | ||||
|     return m_aggregator->formatter(m_values[realKey], realKey, true); | ||||
| } | ||||
|  | ||||
|  | ||||
| @ -199,11 +199,15 @@ void AWKeys::editItem(const QString &_type) | ||||
| } | ||||
|  | ||||
|  | ||||
| void AWKeys::dataUpdated(const KSysGuard::SensorDataList &_data) | ||||
| void AWKeys::dataUpdated(const QHash<QString, KSysGuard::SensorInfo> &_sensors, const KSysGuard::SensorDataList &_data) | ||||
| { | ||||
|     // TODO use QtConcurrent::map or something like that | ||||
|     for (auto &sensor : _data) | ||||
|         QtConcurrent::run(m_threadPool, this, &AWKeys::setDataBySource, sensor); | ||||
|     for (auto &single : _data) { | ||||
|         if (_sensors.contains(single.sensorProperty)) { | ||||
|             setDataBySource(single.sensorProperty, _sensors.value(single.sensorProperty), single); | ||||
|         } | ||||
|         // TODO use QtConcurrent::map or something like that | ||||
|         //        QtConcurrent::run(m_threadPool, this, &AWKeys::setDataBySource, "ss", sensor); | ||||
|     } | ||||
| } | ||||
|  | ||||
|  | ||||
| @ -240,7 +244,7 @@ void AWKeys::updateTextData() | ||||
|     // do not do it in parallel to avoid race condition | ||||
|     m_mutex.lock(); | ||||
|     calculateValues(); | ||||
|     QString text = parsePattern(m_keyOperator->pattern()); | ||||
|     auto text = parsePattern(m_keyOperator->pattern()); | ||||
|     // update tooltip values under lock | ||||
|     m_dataAggregator->dataUpdate(m_values); | ||||
|     m_mutex.unlock(); | ||||
| @ -257,17 +261,17 @@ void AWKeys::calculateValues() | ||||
|     QStringList mountDevices = m_keyOperator->devices("mount"); | ||||
|     for (auto &device : mountDevices) { | ||||
|         int index = mountDevices.indexOf(device); | ||||
|         m_values[QString("hddtotmb%1").arg(index)] | ||||
|             = m_values[QString("hddfreemb%1").arg(index)].toFloat() + m_values[QString("hddmb%1").arg(index)].toFloat(); | ||||
|         m_values[QString("hddtotgb%1").arg(index)] | ||||
|             = m_values[QString("hddfreegb%1").arg(index)].toFloat() + m_values[QString("hddgb%1").arg(index)].toFloat(); | ||||
|         m_values[QString("hddtotmb%1").arg(index)] = m_values[QString("hddfreemb%1").arg(index)].toDouble() | ||||
|                                                      + m_values[QString("hddmb%1").arg(index)].toDouble(); | ||||
|         m_values[QString("hddtotgb%1").arg(index)] = m_values[QString("hddfreegb%1").arg(index)].toDouble() | ||||
|                                                      + m_values[QString("hddgb%1").arg(index)].toDouble(); | ||||
|     } | ||||
|  | ||||
|     // memtot* | ||||
|     m_values["memtotmb"] = m_values["memusedmb"].toInt() + m_values["memfreemb"].toInt(); | ||||
|     m_values["memtotgb"] = m_values["memusedgb"].toFloat() + m_values["memfreegb"].toFloat(); | ||||
|     m_values["memtotmb"] = m_values["memusedmb"].toLongLong() + m_values["memfreemb"].toLongLong(); | ||||
|     m_values["memtotgb"] = m_values["memusedgb"].toDouble() + m_values["memfreegb"].toDouble(); | ||||
|     // mem | ||||
|     m_values["mem"] = 100.0f * m_values["memmb"].toFloat() / m_values["memtotmb"].toFloat(); | ||||
|     m_values["mem"] = 100.0f * m_values["memmb"].toDouble() / m_values["memtotmb"].toDouble(); | ||||
|  | ||||
|     // up, down, upkb, downkb, upunits, downunits | ||||
|     int netIndex = m_keyOperator->devices("net").indexOf(m_values["netdev"].toString()); | ||||
| @ -283,10 +287,10 @@ void AWKeys::calculateValues() | ||||
|     m_values["upunits"] = m_values[QString("upunits%1").arg(netIndex)]; | ||||
|  | ||||
|     // swaptot* | ||||
|     m_values["swaptotmb"] = m_values["swapmb"].toInt() + m_values["swapfreemb"].toInt(); | ||||
|     m_values["swaptotgb"] = m_values["swapgb"].toFloat() + m_values["swapfreegb"].toFloat(); | ||||
|     m_values["swaptotmb"] = m_values["swapmb"].toLongLong() + m_values["swapfreemb"].toLongLong(); | ||||
|     m_values["swaptotgb"] = m_values["swapgb"].toDouble() + m_values["swapfreegb"].toDouble(); | ||||
|     // swap | ||||
|     m_values["swap"] = 100.0f * m_values["swapmb"].toFloat() / m_values["swaptotmb"].toFloat(); | ||||
|     m_values["swap"] = 100.0f * m_values["swapmb"].toDouble() / m_values["swaptotmb"].toDouble(); | ||||
|  | ||||
|     // user defined keys | ||||
|     for (auto &key : m_keyOperator->userKeys()) | ||||
| @ -324,7 +328,7 @@ void AWKeys::createDBusInterface() | ||||
| QString AWKeys::parsePattern(QString _pattern) const | ||||
| { | ||||
|     // screen sign | ||||
|     _pattern.replace("$$", QString(0x1d)); | ||||
|     _pattern.replace("$$", QChar(0x1d)); | ||||
|  | ||||
|     // lambdas | ||||
|     for (auto &key : m_foundLambdas) | ||||
| @ -344,7 +348,7 @@ QString AWKeys::parsePattern(QString _pattern) const | ||||
|     } | ||||
|  | ||||
|     // prepare strings | ||||
|     _pattern.replace(QString(0x1d), "$"); | ||||
|     _pattern.replace(QChar(0x1d), "$"); | ||||
|     if (m_wrapNewLines) | ||||
|         _pattern.replace("\n", "<br>"); | ||||
|  | ||||
| @ -352,25 +356,23 @@ QString AWKeys::parsePattern(QString _pattern) const | ||||
| } | ||||
|  | ||||
|  | ||||
| void AWKeys::setDataBySource(const QString &_sourceName, const KSysGuard::SensorData &_data) | ||||
| void AWKeys::setDataBySource(const QString &_source, const KSysGuard::SensorInfo &_sensor, | ||||
|                              const KSysGuard::SensorData &_data) | ||||
| { | ||||
|     qCDebug(LOG_AW) << "Source" << _sourceName << "with data" << _data.payload; | ||||
|     qCDebug(LOG_AW) << "Source" << _source << _sensor.name << "with data" << _data.payload; | ||||
|  | ||||
|     // first list init | ||||
|     QStringList tags = m_aggregator->keysFromSource(_sourceName); | ||||
|     auto tags = m_aggregator->keysFromSource(_source); | ||||
|     if (tags.isEmpty()) | ||||
|         tags = m_aggregator->registerSource(_sourceName, _data["units"].toString(), m_requiredKeys); | ||||
|         tags = m_aggregator->registerSource(_source, _sensor.unit, m_requiredKeys); | ||||
|  | ||||
|     // update data or drop source if there are no matches and exit | ||||
|     if (tags.isEmpty()) { | ||||
|         qCInfo(LOG_AW) << "Source" << _sourceName << "not found"; | ||||
|         return emit(dropSourceFromDataengine(_sourceName)); | ||||
|         qCInfo(LOG_AW) << "Sensor" << _source << "not found"; | ||||
|         return emit(dropSourceFromDataengine(_source)); | ||||
|     } | ||||
|  | ||||
|     m_mutex.lock(); | ||||
|     // HACK workaround for time values which are stored in the different path | ||||
|     std::for_each(tags.cbegin(), tags.cend(), [this, &_data, &_sourceName](const QString &tag) { | ||||
|         m_values[tag] = _sourceName == "Local" ? _data["DateTime"] : _data["value"]; | ||||
|     }); | ||||
|     std::for_each(tags.cbegin(), tags.cend(), [this, &_data](const QString &tag) { m_values[tag] = _data.payload; }); | ||||
|     m_mutex.unlock(); | ||||
| } | ||||
|  | ||||
| @ -56,7 +56,7 @@ public: | ||||
|     Q_INVOKABLE void editItem(const QString &_type); | ||||
|  | ||||
| public slots: | ||||
|     void dataUpdated(const KSysGuard::SensorDataList &_data); | ||||
|     void dataUpdated(const QHash<QString, KSysGuard::SensorInfo> &_sensors, const KSysGuard::SensorDataList &_data); | ||||
|  | ||||
| signals: | ||||
|     void dropSourceFromDataengine(const QString &_source); | ||||
| @ -72,7 +72,8 @@ private: | ||||
|     void calculateValues(); | ||||
|     void createDBusInterface(); | ||||
|     [[nodiscard]] QString parsePattern(QString _pattern) const; | ||||
|     void setDataBySource(const KSysGuard::SensorData &_data); | ||||
|     void setDataBySource(const QString &_source, const KSysGuard::SensorInfo &_sensor, | ||||
|                          const KSysGuard::SensorData &_data); | ||||
|     // objects | ||||
|     AWDataAggregator *m_dataAggregator = nullptr; | ||||
|     AWDataEngineAggregator *m_dataEngineAggregator = nullptr; | ||||
|  | ||||
| @ -64,19 +64,19 @@ QString AWKeysAggregator::formatter(const QVariant &_data, const QString &_key, | ||||
|     // case block | ||||
|     switch (m_mapper->formatter(_key)) { | ||||
|     case FormatterType::Float: | ||||
|         output = QString("%1").arg(_data.toFloat(), 5, 'f', 1); | ||||
|         output = QString("%1").arg(_data.toDouble(), 5, 'f', 1); | ||||
|         break; | ||||
|     case FormatterType::FloatTwoSymbols: | ||||
|         output = QString("%1").arg(_data.toFloat(), 5, 'f', 2); | ||||
|         output = QString("%1").arg(_data.toDouble(), 5, 'f', 2); | ||||
|         break; | ||||
|     case FormatterType::Integer: | ||||
|         output = QString("%1").arg(_data.toFloat(), 4, 'f', 0); | ||||
|         output = QString("%1").arg(_data.toDouble(), 4, 'f', 0); | ||||
|         break; | ||||
|     case FormatterType::IntegerFive: | ||||
|         output = QString("%1").arg(_data.toFloat(), 5, 'f', 0); | ||||
|         output = QString("%1").arg(_data.toDouble(), 5, 'f', 0); | ||||
|         break; | ||||
|     case FormatterType::IntegerThree: | ||||
|         output = QString("%1").arg(_data.toFloat(), 3, 'f', 0); | ||||
|         output = QString("%1").arg(_data.toDouble(), 3, 'f', 0); | ||||
|         break; | ||||
|     case FormatterType::List: | ||||
|         output = _data.toStringList().join(','); | ||||
| @ -85,10 +85,10 @@ QString AWKeysAggregator::formatter(const QVariant &_data, const QString &_key, | ||||
|         output = _data.toBool() ? m_acOnline : m_acOffline; | ||||
|         break; | ||||
|     case FormatterType::MemGBFormat: | ||||
|         output = QString("%1").arg(_data.toFloat() / (1024.0 * 1024.0), 5, 'f', 1); | ||||
|         output = QString("%1").arg(_data.toDouble() / (1024.0 * 1024.0), 5, 'f', 1); | ||||
|         break; | ||||
|     case FormatterType::MemMBFormat: | ||||
|         output = QString("%1").arg(_data.toFloat() / 1024.0, 5, 'f', 0); | ||||
|         output = QString("%1").arg(_data.toDouble() / 1024.0, 5, 'f', 0); | ||||
|         break; | ||||
|     case FormatterType::NetSmartFormat: | ||||
|         output = [](const float value) { | ||||
| @ -96,10 +96,10 @@ QString AWKeysAggregator::formatter(const QVariant &_data, const QString &_key, | ||||
|                 return QString("%1").arg(value / 1024.0, 4, 'f', 1); | ||||
|             else | ||||
|                 return QString("%1").arg(value, 4, 'f', 0); | ||||
|         }(_data.toFloat()); | ||||
|         }(_data.toDouble()); | ||||
|         break; | ||||
|     case FormatterType::NetSmartUnits: | ||||
|         if (_data.toFloat() > 1024.0) | ||||
|         if (_data.toDouble() > 1024.0) | ||||
|             output = m_translate ? i18n("MB/s") : "MB/s"; | ||||
|         else | ||||
|             output = m_translate ? i18n("KB/s") : "KB/s"; | ||||
| @ -110,29 +110,29 @@ QString AWKeysAggregator::formatter(const QVariant &_data, const QString &_key, | ||||
|         output = output.rightJustified(8, QLatin1Char(' '), true); | ||||
|         break; | ||||
|     case FormatterType::Temperature: | ||||
|         output = QString("%1").arg(temperature(_data.toFloat()), 5, 'f', 1); | ||||
|         output = QString("%1").arg(temperature(_data.toDouble()), 5, 'f', 1); | ||||
|         break; | ||||
|     case FormatterType::Time: | ||||
|         output = _data.toDateTime().toString(); | ||||
|         output = QDateTime::fromSecsSinceEpoch(_data.toLongLong()).toString(); | ||||
|         break; | ||||
|     case FormatterType::TimeCustom: | ||||
|         output = m_customTime; | ||||
|         [&output, loc, this](const QDateTime &dt) { | ||||
|             for (auto &key : m_timeKeys) | ||||
|                 output.replace(QString("$%1").arg(key), loc.toString(dt, key)); | ||||
|         }(_data.toDateTime()); | ||||
|         }(QDateTime::fromSecsSinceEpoch(_data.toLongLong())); | ||||
|         break; | ||||
|     case FormatterType::TimeISO: | ||||
|         output = _data.toDateTime().toString(Qt::ISODate); | ||||
|         output = QDateTime::fromSecsSinceEpoch(_data.toLongLong()).toString(Qt::ISODate); | ||||
|         break; | ||||
|     case FormatterType::TimeLong: | ||||
|         output = loc.toString(_data.toDateTime(), QLocale::LongFormat); | ||||
|         output = loc.toString(QDateTime::fromSecsSinceEpoch(_data.toLongLong()), QLocale::LongFormat); | ||||
|         break; | ||||
|     case FormatterType::TimeShort: | ||||
|         output = loc.toString(_data.toDateTime(), QLocale::ShortFormat); | ||||
|         output = loc.toString(QDateTime::fromSecsSinceEpoch(_data.toLongLong()), QLocale::ShortFormat); | ||||
|         break; | ||||
|     case FormatterType::Timestamp: | ||||
|         output = QString("%1").arg(_data.toDateTime().toMSecsSinceEpoch() / 1000.0, 10, 'f', 0); | ||||
|         output = _data.toString(); | ||||
|         break; | ||||
|     case FormatterType::Uptime: | ||||
|     case FormatterType::UptimeCustom: | ||||
| @ -150,7 +150,7 @@ QString AWKeysAggregator::formatter(const QVariant &_data, const QString &_key, | ||||
|                 source.replace("$m", QString("%1").arg(minutes)); | ||||
|                 return source; | ||||
|             }(m_mapper->formatter(_key) == FormatterType::Uptime ? "$ddd$hhh$mmm" : m_customUptime, | ||||
|               static_cast<int>(_data.toFloat())); | ||||
|               static_cast<int>(_data.toDouble())); | ||||
|         break; | ||||
|     case FormatterType::NoFormat: | ||||
|         output = _data.toString(); | ||||
| @ -234,7 +234,8 @@ void AWKeysAggregator::setTranslate(const bool _translate) | ||||
| } | ||||
|  | ||||
|  | ||||
| QStringList AWKeysAggregator::registerSource(const QString &_source, const QString &_units, const QStringList &_keys) | ||||
| QStringList AWKeysAggregator::registerSource(const QString &_source, const KSysGuard::Unit &_units, | ||||
|                                              const QStringList &_keys) | ||||
| { | ||||
|     qCDebug(LOG_AW) << "Source" << _source << "with units" << _units; | ||||
|  | ||||
|  | ||||
| @ -19,6 +19,8 @@ | ||||
| #ifndef AWKEYSAGGREGATOR_H | ||||
| #define AWKEYSAGGREGATOR_H | ||||
|  | ||||
| #include <ksysguard/formatter/Unit.h> | ||||
|  | ||||
| #include <QHash> | ||||
| #include <QObject> | ||||
|  | ||||
| @ -81,7 +83,7 @@ public: | ||||
|     void setTranslate(bool _translate); | ||||
|  | ||||
| public slots: | ||||
|     QStringList registerSource(const QString &_source, const QString &_units, const QStringList &_keys); | ||||
|     QStringList registerSource(const QString &_source, const KSysGuard::Unit &_units, const QStringList &_keys); | ||||
|  | ||||
| private: | ||||
|     [[nodiscard]] float temperature(float temp) const; | ||||
|  | ||||
| @ -105,9 +105,9 @@ QList<AWPatternFunctions::AWFunction> AWPatternFunctions::findFunctionCalls(cons | ||||
|             metadata.args = QStringList(); | ||||
|         } else { | ||||
|             // replace '$,' to 0x1d | ||||
|             argsString.replace("$,", QString(0x1d)); | ||||
|             argsString.replace("$,", QChar(0x1d)); | ||||
|             QStringList args = argsString.split(','); | ||||
|             std::for_each(args.begin(), args.end(), [](QString &arg) { arg.replace(QString(0x1d), ","); }); | ||||
|             std::for_each(args.begin(), args.end(), [](QString &arg) { arg.replace(QChar(0x1d), ","); }); | ||||
|             metadata.args = args; | ||||
|         } | ||||
|         // other variables | ||||
|  | ||||
| @ -24,6 +24,7 @@ | ||||
| #include <QNetworkAccessManager> | ||||
| #include <QNetworkReply> | ||||
| #include <QSettings> | ||||
| #include <QStandardPaths> | ||||
|  | ||||
| #include "awdebug.h" | ||||
|  | ||||
|  | ||||
| @ -33,13 +33,13 @@ add_library(${SUBPROJECT} STATIC ${SUBPROJECT_SOURCE} ${SUBPROJECT_HEADER} ${SUB | ||||
| target_link_libraries(${SUBPROJECT} ${Qt_LIBRARIES} ${Kf6_LIBRARIES}) | ||||
|  | ||||
| # install | ||||
| install(DIRECTORY ${SUBPROJECT_CONFIGS} DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME}) | ||||
| install(DIRECTORY ${SUBPROJECT_FORMATTERS} DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME}) | ||||
| install(DIRECTORY ${SUBPROJECT_GRAPHITEMS} DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME}) | ||||
| install(DIRECTORY ${SUBPROJECT_QUOTES} DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME}) | ||||
| install(DIRECTORY ${SUBPROJECT_SCRIPTS} DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME}) | ||||
| install(DIRECTORY ${SUBPROJECT_REQUESTS} DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME}) | ||||
| install(DIRECTORY ${SUBPROJECT_UPGRADE} DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME}) | ||||
| install(DIRECTORY ${SUBPROJECT_WEATHER} DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME}) | ||||
| install(FILES ${SUBPROJECT_INI} DESTINATION ${KDE_INSTALL_CONFDIR}) | ||||
| install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${SUBPROJECT_WEATHER_JSON} DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME}/weather) | ||||
| install(DIRECTORY ${SUBPROJECT_CONFIGS} DESTINATION ${KDE_INSTALL_DATADIR}/${PROJECT_NAME}) | ||||
| install(DIRECTORY ${SUBPROJECT_FORMATTERS} DESTINATION ${KDE_INSTALL_DATADIR}/${PROJECT_NAME}) | ||||
| install(DIRECTORY ${SUBPROJECT_GRAPHITEMS} DESTINATION ${KDE_INSTALL_DATADIR}/${PROJECT_NAME}) | ||||
| install(DIRECTORY ${SUBPROJECT_QUOTES} DESTINATION ${KDE_INSTALL_DATADIR}/${PROJECT_NAME}) | ||||
| install(DIRECTORY ${SUBPROJECT_SCRIPTS} DESTINATION ${KDE_INSTALL_DATADIR}/${PROJECT_NAME}) | ||||
| install(DIRECTORY ${SUBPROJECT_REQUESTS} DESTINATION ${KDE_INSTALL_DATADIR}/${PROJECT_NAME}) | ||||
| install(DIRECTORY ${SUBPROJECT_UPGRADE} DESTINATION ${KDE_INSTALL_DATADIR}/${PROJECT_NAME}) | ||||
| install(DIRECTORY ${SUBPROJECT_WEATHER} DESTINATION ${KDE_INSTALL_DATADIR}/${PROJECT_NAME}) | ||||
| install(FILES ${SUBPROJECT_INI} DESTINATION /${KDE_INSTALL_CONFDIR}) | ||||
| install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${SUBPROJECT_WEATHER_JSON} DESTINATION ${KDE_INSTALL_DATADIR}/${PROJECT_NAME}/weather) | ||||
|  | ||||
| @ -27,8 +27,8 @@ | ||||
| #include "qcronscheduler.h" | ||||
|  | ||||
|  | ||||
| AbstractExtItem::AbstractExtItem(QWidget *_parent, const QString &_filePath) | ||||
|     : QDialog(_parent) | ||||
| AbstractExtItem::AbstractExtItem(QObject *_parent, const QString &_filePath) | ||||
|     : QObject(_parent) | ||||
|     , m_fileName(_filePath) | ||||
| { | ||||
|     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; | ||||
| @ -97,15 +97,13 @@ void AbstractExtItem::startTimer() | ||||
|  | ||||
| QString AbstractExtItem::writtableConfig() const | ||||
| { | ||||
|     QString path = m_fileName; | ||||
|     QString name = QFileInfo(path).fileName(); | ||||
|     auto path = m_fileName; | ||||
|     auto name = QFileInfo(path).fileName(); | ||||
|     path.remove(path.length() - name.length() - 1, name.length() + 1); | ||||
|     QString dir = QFileInfo(path).fileName(); | ||||
|     auto dir = QFileInfo(path).fileName(); | ||||
|  | ||||
|     return QString("%1/awesomewidgets/%2/%3") | ||||
|         .arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)) | ||||
|         .arg(dir) | ||||
|         .arg(name); | ||||
|         .arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation), dir, name); | ||||
| } | ||||
|  | ||||
|  | ||||
| @ -269,8 +267,8 @@ void AbstractExtItem::deinitSocket() | ||||
|  | ||||
|     m_socket->close(); | ||||
|     QLocalServer::removeServer(socket()); | ||||
|     delete m_socket; | ||||
|     disconnect(m_socket, SIGNAL(newConnection()), this, SLOT(newConnectionReceived())); | ||||
|     delete m_socket; | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
| @ -18,14 +18,14 @@ | ||||
| #ifndef ABSTRACTEXTITEM_H | ||||
| #define ABSTRACTEXTITEM_H | ||||
|  | ||||
| #include <QDialog> | ||||
| #include <QVariant> | ||||
|  | ||||
|  | ||||
| class QCronScheduler; | ||||
| class QLocalServer; | ||||
| class QWidget; | ||||
|  | ||||
| class AbstractExtItem : public QDialog | ||||
| class AbstractExtItem : public QObject | ||||
| { | ||||
|     Q_OBJECT | ||||
|     Q_PROPERTY(bool active READ isActive WRITE setActive) | ||||
| @ -40,7 +40,7 @@ class AbstractExtItem : public QDialog | ||||
|     Q_PROPERTY(QString uniq READ uniq) | ||||
|  | ||||
| public: | ||||
|     explicit AbstractExtItem(QWidget *_parent = nullptr, const QString &_filePath = ""); | ||||
|     explicit AbstractExtItem(QObject *_parent = nullptr, const QString &_filePath = ""); | ||||
|     ~AbstractExtItem() override; | ||||
|     virtual void bumpApi(int _newVer); | ||||
|     virtual AbstractExtItem *copy(const QString &_fileName, int _number) = 0; | ||||
| @ -78,7 +78,7 @@ public slots: | ||||
|     virtual void initSocket(); | ||||
|     virtual void readConfiguration(); | ||||
|     virtual QVariantHash run() = 0; | ||||
|     virtual int showConfiguration(const QVariant &_args) = 0; | ||||
|     virtual int showConfiguration(QWidget *_parent, const QVariant &_args) = 0; | ||||
|     [[nodiscard]] virtual bool tryDelete() const; | ||||
|     virtual void writeConfiguration() const; | ||||
|  | ||||
| @ -89,7 +89,8 @@ private: | ||||
|     QCronScheduler *m_scheduler = nullptr; | ||||
|     QString m_fileName = "/dev/null"; | ||||
|     int m_times = 0; | ||||
|     virtual void translate() = 0; | ||||
|     // FIXME find a better way to do it | ||||
|     virtual void translate(void *_ui) = 0; | ||||
|     // properties | ||||
|     int m_apiVersion = 0; | ||||
|     bool m_active = true; | ||||
|  | ||||
| @ -26,65 +26,45 @@ | ||||
| #include <utility> | ||||
|  | ||||
|  | ||||
| AbstractExtItemAggregator::AbstractExtItemAggregator(QWidget *_parent, QString _type) | ||||
|     : QDialog(_parent) | ||||
|     , ui(new Ui::AbstractExtItemAggregator) | ||||
| AbstractExtItemAggregator::AbstractExtItemAggregator(QObject *_parent, QString _type) | ||||
|     : QObject(_parent) | ||||
|     , m_type(std::move(_type)) | ||||
| { | ||||
|     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; | ||||
|  | ||||
|     // create directory at $HOME | ||||
|     QString localDir = QString("%1/awesomewidgets/%2") | ||||
|                            .arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)) | ||||
|                            .arg(type()); | ||||
|     auto localDir = QString("%1/awesomewidgets/%2") | ||||
|                         .arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation), type()); | ||||
|     QDir localDirectory; | ||||
|     if (localDirectory.mkpath(localDir)) | ||||
|         qCInfo(LOG_LIB) << "Created directory" << localDir; | ||||
|  | ||||
|     ui->setupUi(this); | ||||
|     copyButton = ui->buttonBox->addButton(i18n("Copy"), QDialogButtonBox::ActionRole); | ||||
|     createButton = ui->buttonBox->addButton(i18n("Create"), QDialogButtonBox::ActionRole); | ||||
|     deleteButton = ui->buttonBox->addButton(i18n("Remove"), QDialogButtonBox::ActionRole); | ||||
|  | ||||
|     connect(ui->buttonBox, SIGNAL(clicked(QAbstractButton *)), this, SLOT(editItemButtonPressed(QAbstractButton *))); | ||||
|     connect(ui->buttonBox, SIGNAL(rejected()), this, SLOT(reject())); | ||||
|     connect(ui->listWidget, SIGNAL(itemActivated(QListWidgetItem *)), this, SLOT(editItemActivated(QListWidgetItem *))); | ||||
| } | ||||
|  | ||||
|  | ||||
| AbstractExtItemAggregator::~AbstractExtItemAggregator() | ||||
| void AbstractExtItemAggregator::copyItem(QListWidget *_widget) | ||||
| { | ||||
|     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; | ||||
|  | ||||
|     delete ui; | ||||
| } | ||||
|  | ||||
|  | ||||
| void AbstractExtItemAggregator::copyItem() | ||||
| { | ||||
|     AbstractExtItem *source = itemFromWidget(); | ||||
|     QString fileName = getName(); | ||||
|     int number = uniqNumber(); | ||||
|     QString dir = QString("%1/awesomewidgets/%2") | ||||
|                       .arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)) | ||||
|                       .arg(m_type); | ||||
|     auto source = itemFromWidget(_widget); | ||||
|     auto fileName = getName(); | ||||
|     auto number = uniqNumber(); | ||||
|     auto dir = QString("%1/awesomewidgets/%2") | ||||
|                    .arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation), m_type); | ||||
|     if ((!source) || (fileName.isEmpty())) { | ||||
|         qCWarning(LOG_LIB) << "Nothing to copy"; | ||||
|         return; | ||||
|     } | ||||
|     QString filePath = QString("%1/%2").arg(dir).arg(fileName); | ||||
|     auto filePath = QString("%1/%2").arg(dir, fileName); | ||||
|  | ||||
|     AbstractExtItem *newItem = source->copy(filePath, number); | ||||
|     if (newItem->showConfiguration(configArgs()) == 1) { | ||||
|     auto newItem = source->copy(filePath, number); | ||||
|     if (newItem->showConfiguration(nullptr, configArgs()) == 1) { | ||||
|         initItems(); | ||||
|         repaintList(); | ||||
|         repaintList(_widget); | ||||
|     } | ||||
| } | ||||
|  | ||||
|  | ||||
| void AbstractExtItemAggregator::deleteItem() | ||||
| void AbstractExtItemAggregator::deleteItem(QListWidget *_widget) | ||||
| { | ||||
|     AbstractExtItem *source = itemFromWidget(); | ||||
|     auto source = itemFromWidget(_widget); | ||||
|     if (!source) { | ||||
|         qCWarning(LOG_LIB) << "Nothing to delete"; | ||||
|         return; | ||||
| @ -92,30 +72,63 @@ void AbstractExtItemAggregator::deleteItem() | ||||
|  | ||||
|     if (source->tryDelete()) { | ||||
|         initItems(); | ||||
|         repaintList(); | ||||
|         repaintList(_widget); | ||||
|     } | ||||
| } | ||||
|  | ||||
|  | ||||
| void AbstractExtItemAggregator::editItem() | ||||
| void AbstractExtItemAggregator::editItem(QListWidget *_widget) | ||||
| { | ||||
|     AbstractExtItem *source = itemFromWidget(); | ||||
|     auto source = itemFromWidget(_widget); | ||||
|     if (!source) { | ||||
|         qCWarning(LOG_LIB) << "Nothing to edit"; | ||||
|         return; | ||||
|     } | ||||
|  | ||||
|     if (source->showConfiguration(configArgs()) == 1) { | ||||
|     if (source->showConfiguration(nullptr, configArgs()) == 1) { | ||||
|         initItems(); | ||||
|         repaintList(); | ||||
|         repaintList(_widget); | ||||
|     } | ||||
| } | ||||
|  | ||||
|  | ||||
| int AbstractExtItemAggregator::exec() | ||||
| { | ||||
|     auto dialog = new QDialog(); | ||||
|     auto ui = new Ui::AbstractExtItemAggregator(); | ||||
|     ui->setupUi(dialog); | ||||
|  | ||||
|     auto copyButton = ui->buttonBox->addButton(i18n("Copy"), QDialogButtonBox::ActionRole); | ||||
|     auto createButton = ui->buttonBox->addButton(i18n("Create"), QDialogButtonBox::ActionRole); | ||||
|     auto deleteButton = ui->buttonBox->addButton(i18n("Remove"), QDialogButtonBox::ActionRole); | ||||
|  | ||||
|     connect(ui->buttonBox, &QDialogButtonBox::clicked, [&](QAbstractButton *_button) { | ||||
|         if (dynamic_cast<QPushButton *>(_button) == copyButton) | ||||
|             copyItem(ui->listWidget); | ||||
|         else if (dynamic_cast<QPushButton *>(_button) == createButton) | ||||
|             doCreateItem(ui->listWidget); | ||||
|         else if (dynamic_cast<QPushButton *>(_button) == deleteButton) | ||||
|             deleteItem(ui->listWidget); | ||||
|         else if (ui->buttonBox->buttonRole(_button) == QDialogButtonBox::AcceptRole) | ||||
|             editItem(ui->listWidget); | ||||
|     }); | ||||
|     connect(ui->buttonBox, &QDialogButtonBox::rejected, [dialog]() { dialog->reject(); }); | ||||
|     connect(ui->listWidget, &QListWidget::itemActivated, [&](QListWidgetItem *) { editItem(ui->listWidget); }); | ||||
|  | ||||
|     repaintList(ui->listWidget); | ||||
|     auto ret = dialog->exec(); | ||||
|  | ||||
|     dialog->deleteLater(); | ||||
|     delete ui; | ||||
|  | ||||
|     return ret; | ||||
| } | ||||
|  | ||||
|  | ||||
| QString AbstractExtItemAggregator::getName() | ||||
| { | ||||
|     bool ok; | ||||
|     QString name = QInputDialog::getText(this, i18n("Enter file name"), i18n("File name"), QLineEdit::Normal, "", &ok); | ||||
|     auto name = QInputDialog::getText(nullptr, i18n("Enter file name"), i18n("File name"), QLineEdit::Normal, "", &ok); | ||||
|     if ((!ok) || (name.isEmpty())) | ||||
|         return ""; | ||||
|     if (!name.endsWith(".desktop")) | ||||
| @ -125,15 +138,15 @@ QString AbstractExtItemAggregator::getName() | ||||
| } | ||||
|  | ||||
|  | ||||
| AbstractExtItem *AbstractExtItemAggregator::itemFromWidget() const | ||||
| AbstractExtItem *AbstractExtItemAggregator::itemFromWidget(QListWidget *_widget) const | ||||
| { | ||||
|     QListWidgetItem *widgetItem = ui->listWidget->currentItem(); | ||||
|     auto widgetItem = _widget->currentItem(); | ||||
|     if (!widgetItem) | ||||
|         return nullptr; | ||||
|  | ||||
|     AbstractExtItem *found = nullptr; | ||||
|     for (auto &item : items()) { | ||||
|         QString fileName = QFileInfo(item->fileName()).fileName(); | ||||
|         auto fileName = QFileInfo(item->fileName()).fileName(); | ||||
|         if (fileName != widgetItem->text()) | ||||
|             continue; | ||||
|         found = item; | ||||
| @ -146,18 +159,18 @@ AbstractExtItem *AbstractExtItemAggregator::itemFromWidget() const | ||||
| } | ||||
|  | ||||
|  | ||||
| void AbstractExtItemAggregator::repaintList() const | ||||
| void AbstractExtItemAggregator::repaintList(QListWidget *_widget) const | ||||
| { | ||||
|     ui->listWidget->clear(); | ||||
|     _widget->clear(); | ||||
|     for (auto &_item : items()) { | ||||
|         QString fileName = QFileInfo(_item->fileName()).fileName(); | ||||
|         auto *item = new QListWidgetItem(fileName, ui->listWidget); | ||||
|         auto item = new QListWidgetItem(fileName, _widget); | ||||
|         QStringList tooltip; | ||||
|         tooltip.append(i18n("Name: %1", _item->name())); | ||||
|         tooltip.append(i18n("Comment: %1", _item->comment())); | ||||
|         tooltip.append(i18n("Identity: %1", _item->uniq())); | ||||
|         item->setToolTip(tooltip.join('\n')); | ||||
|         ui->listWidget->addItem(item); | ||||
|         _widget->addItem(item); | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -202,22 +215,3 @@ void AbstractExtItemAggregator::setConfigArgs(const QVariant &_configArgs) | ||||
|  | ||||
|     m_configArgs = _configArgs; | ||||
| } | ||||
|  | ||||
|  | ||||
| void AbstractExtItemAggregator::editItemActivated(QListWidgetItem *) | ||||
| { | ||||
|     return editItem(); | ||||
| } | ||||
|  | ||||
|  | ||||
| void AbstractExtItemAggregator::editItemButtonPressed(QAbstractButton *_button) | ||||
| { | ||||
|     if (dynamic_cast<QPushButton *>(_button) == copyButton) | ||||
|         return copyItem(); | ||||
|     else if (dynamic_cast<QPushButton *>(_button) == createButton) | ||||
|         return doCreateItem(); | ||||
|     else if (dynamic_cast<QPushButton *>(_button) == deleteButton) | ||||
|         return deleteItem(); | ||||
|     else if (ui->buttonBox->buttonRole(_button) == QDialogButtonBox::AcceptRole) | ||||
|         return editItem(); | ||||
| } | ||||
|  | ||||
| @ -18,7 +18,6 @@ | ||||
| #ifndef ABSTRACTEXTITEMAGGREGATOR_H | ||||
| #define ABSTRACTEXTITEMAGGREGATOR_H | ||||
|  | ||||
| #include <QDialog> | ||||
| #include <QStandardPaths> | ||||
|  | ||||
| #include "abstractextitem.h" | ||||
| @ -26,49 +25,45 @@ | ||||
|  | ||||
|  | ||||
| class QAbstractButton; | ||||
| class QListWidget; | ||||
| class QListWidgetItem; | ||||
| namespace Ui | ||||
| { | ||||
| class AbstractExtItemAggregator; | ||||
| } | ||||
|  | ||||
| class AbstractExtItemAggregator : public QDialog | ||||
| class AbstractExtItemAggregator : public QObject | ||||
| { | ||||
|     Q_OBJECT | ||||
|     Q_PROPERTY(QVariant configArgs READ configArgs WRITE setConfigArgs) | ||||
|     Q_PROPERTY(QVariant type READ type) | ||||
|  | ||||
| public: | ||||
|     explicit AbstractExtItemAggregator(QWidget *_parent, QString _type); | ||||
|     ~AbstractExtItemAggregator() override; | ||||
|     explicit AbstractExtItemAggregator(QObject *_parent, QString _type); | ||||
|     // methods | ||||
|     void copyItem(); | ||||
|     template <class T> void createItem() | ||||
|     void copyItem(QListWidget *_widget); | ||||
|     template <class T> void createItem(QListWidget *_widget) | ||||
|     { | ||||
|         QString fileName = getName(); | ||||
|         int number = uniqNumber(); | ||||
|         QString dir = QString("%1/awesomewidgets/%2") | ||||
|                           .arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)) | ||||
|                           .arg(m_type); | ||||
|         auto fileName = getName(); | ||||
|         auto number = uniqNumber(); | ||||
|         auto dir = QString("%1/awesomewidgets/%2") | ||||
|                        .arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation), m_type); | ||||
|         if (fileName.isEmpty()) { | ||||
|             qCWarning(LOG_LIB) << "Nothing to create"; | ||||
|             return; | ||||
|         } | ||||
|         QString filePath = QString("%1/%2").arg(dir).arg(fileName); | ||||
|         auto filePath = QString("%1/%2").arg(dir, fileName); | ||||
|  | ||||
|         T *newItem = new T(this, filePath); | ||||
|         auto newItem = new T(this, filePath); | ||||
|         newItem->setNumber(number); | ||||
|         if (newItem->showConfiguration(configArgs()) == 1) { | ||||
|         if (newItem->showConfiguration(nullptr, configArgs()) == 1) { | ||||
|             initItems(); | ||||
|             repaintList(); | ||||
|             repaintList(_widget); | ||||
|         } | ||||
|     }; | ||||
|     void deleteItem(); | ||||
|     void editItem(); | ||||
|     void deleteItem(QListWidget *_widget); | ||||
|     void editItem(QListWidget *_widget); | ||||
|     [[nodiscard]] int exec(); | ||||
|     QString getName(); | ||||
|     virtual void initItems() = 0; | ||||
|     [[nodiscard]] AbstractExtItem *itemFromWidget() const; | ||||
|     void repaintList() const; | ||||
|     [[nodiscard]] AbstractExtItem *itemFromWidget(QListWidget *_widget) const; | ||||
|     void repaintList(QListWidget *_widget) const; | ||||
|     [[nodiscard]] int uniqNumber() const; | ||||
|     // get methods | ||||
|     [[nodiscard]] QVariant configArgs() const; | ||||
| @ -78,21 +73,12 @@ public: | ||||
|     // set methods | ||||
|     void setConfigArgs(const QVariant &_configArgs); | ||||
|  | ||||
| private slots: | ||||
|     void editItemActivated(QListWidgetItem *); | ||||
|     void editItemButtonPressed(QAbstractButton *_button); | ||||
|  | ||||
| private: | ||||
|     // ui | ||||
|     Ui::AbstractExtItemAggregator *ui = nullptr; | ||||
|     QPushButton *copyButton = nullptr; | ||||
|     QPushButton *createButton = nullptr; | ||||
|     QPushButton *deleteButton = nullptr; | ||||
|     // properties | ||||
|     QVariant m_configArgs; | ||||
|     QString m_type; | ||||
|     // ui methods | ||||
|     virtual void doCreateItem() = 0; | ||||
|     virtual void doCreateItem(QListWidget *_widget) = 0; | ||||
| }; | ||||
|  | ||||
|  | ||||
|  | ||||
| @ -22,19 +22,13 @@ | ||||
| #include "awdebug.h" | ||||
|  | ||||
|  | ||||
| AWAbstractFormatter::AWAbstractFormatter(QWidget *_parent, const QString &_filePath) | ||||
| AWAbstractFormatter::AWAbstractFormatter(QObject *_parent, const QString &_filePath) | ||||
|     : AbstractExtItem(_parent, _filePath) | ||||
| { | ||||
|     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; | ||||
| } | ||||
|  | ||||
|  | ||||
| AWAbstractFormatter::~AWAbstractFormatter() | ||||
| { | ||||
|     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; | ||||
| } | ||||
|  | ||||
|  | ||||
| void AWAbstractFormatter::copyDefaults(AbstractExtItem *_other) const | ||||
| { | ||||
|     AbstractExtItem::copyDefaults(_other); | ||||
| @ -45,7 +39,7 @@ void AWAbstractFormatter::copyDefaults(AbstractExtItem *_other) const | ||||
|  | ||||
| QString AWAbstractFormatter::uniq() const | ||||
| { | ||||
|     return QString("%1(%2)").arg(name()).arg(strType()); | ||||
|     return QString("%1(%2)").arg(name(), strType()); | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
| @ -32,8 +32,8 @@ class AWAbstractFormatter : public AbstractExtItem | ||||
| public: | ||||
|     enum class FormatterClass { DateTime, Float, List, Script, String, NoFormat, Json }; | ||||
|  | ||||
|     explicit AWAbstractFormatter(QWidget *_parent = nullptr, const QString &_filePath = ""); | ||||
|     ~AWAbstractFormatter() override; | ||||
|     explicit AWAbstractFormatter(QObject *_parent = nullptr, const QString &_filePath = ""); | ||||
|     ~AWAbstractFormatter() override = default; | ||||
|     [[nodiscard]] virtual QString convert(const QVariant &_value) const = 0; | ||||
|     void copyDefaults(AbstractExtItem *_other) const override; | ||||
|     [[nodiscard]] QString uniq() const override; | ||||
|  | ||||
| @ -15,7 +15,6 @@ | ||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
|  | ||||
| #include "awdatetimeformatter.h" | ||||
| #include "ui_awdatetimeformatter.h" | ||||
|  | ||||
| @ -27,24 +26,13 @@ | ||||
| #include "awdebug.h" | ||||
|  | ||||
|  | ||||
| AWDateTimeFormatter::AWDateTimeFormatter(QWidget *_parent, const QString &_filePath) | ||||
| AWDateTimeFormatter::AWDateTimeFormatter(QObject *_parent, const QString &_filePath) | ||||
|     : AWAbstractFormatter(_parent, _filePath) | ||||
|     , ui(new Ui::AWDateTimeFormatter) | ||||
| { | ||||
|     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; | ||||
|  | ||||
|     if (!_filePath.isEmpty()) | ||||
|         AWDateTimeFormatter::readConfiguration(); | ||||
|     ui->setupUi(this); | ||||
|     AWDateTimeFormatter::translate(); | ||||
| } | ||||
|  | ||||
|  | ||||
| AWDateTimeFormatter::~AWDateTimeFormatter() | ||||
| { | ||||
|     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; | ||||
|  | ||||
|     delete ui; | ||||
| } | ||||
|  | ||||
|  | ||||
| @ -60,7 +48,7 @@ AWDateTimeFormatter *AWDateTimeFormatter::copy(const QString &_fileName, const i | ||||
| { | ||||
|     qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number; | ||||
|  | ||||
|     auto *item = new AWDateTimeFormatter(dynamic_cast<QWidget *>(parent()), _fileName); | ||||
|     auto item = new AWDateTimeFormatter(parent(), _fileName); | ||||
|     AWAbstractFormatter::copyDefaults(item); | ||||
|     item->setFormat(format()); | ||||
|     item->setTranslateString(translateString()); | ||||
| @ -114,27 +102,36 @@ void AWDateTimeFormatter::readConfiguration() | ||||
| } | ||||
|  | ||||
|  | ||||
| int AWDateTimeFormatter::showConfiguration(const QVariant &_args) | ||||
| int AWDateTimeFormatter::showConfiguration(QWidget *_parent, const QVariant &_args) | ||||
| { | ||||
|     Q_UNUSED(_args) | ||||
|  | ||||
|     auto dialog = new QDialog(_parent); | ||||
|     auto ui = new Ui::AWDateTimeFormatter(); | ||||
|     ui->setupUi(dialog); | ||||
|     translate(ui); | ||||
|  | ||||
|     ui->lineEdit_name->setText(name()); | ||||
|     ui->lineEdit_comment->setText(comment()); | ||||
|     ui->label_typeValue->setText("DateTime"); | ||||
|     ui->lineEdit_format->setText(format()); | ||||
|     ui->checkBox_translate->setCheckState(translateString() ? Qt::Checked : Qt::Unchecked); | ||||
|  | ||||
|     int ret = exec(); | ||||
|     if (ret != 1) | ||||
|         return ret; | ||||
|     setName(ui->lineEdit_name->text()); | ||||
|     setComment(ui->lineEdit_comment->text()); | ||||
|     setApiVersion(AW_FORMATTER_API); | ||||
|     setStrType(ui->label_typeValue->text()); | ||||
|     setFormat(ui->lineEdit_format->text()); | ||||
|     setTranslateString(ui->checkBox_translate->checkState() == Qt::Checked); | ||||
|     auto ret = dialog->exec(); | ||||
|     if (ret == 1) { | ||||
|         setName(ui->lineEdit_name->text()); | ||||
|         setComment(ui->lineEdit_comment->text()); | ||||
|         setApiVersion(AW_FORMATTER_API); | ||||
|         setStrType(ui->label_typeValue->text()); | ||||
|         setFormat(ui->lineEdit_format->text()); | ||||
|         setTranslateString(ui->checkBox_translate->checkState() == Qt::Checked); | ||||
|  | ||||
|         writeConfiguration(); | ||||
|     } | ||||
|  | ||||
|     dialog->deleteLater(); | ||||
|     delete ui; | ||||
|  | ||||
|     writeConfiguration(); | ||||
|     return ret; | ||||
| } | ||||
|  | ||||
| @ -160,9 +157,10 @@ void AWDateTimeFormatter::initLocale() | ||||
|     m_locale = m_translate ? QLocale::system() : QLocale::c(); | ||||
| } | ||||
|  | ||||
|  | ||||
| void AWDateTimeFormatter::translate() | ||||
| void AWDateTimeFormatter::translate(void *_ui) | ||||
| { | ||||
|     auto ui = reinterpret_cast<Ui::AWDateTimeFormatter *>(_ui); | ||||
|  | ||||
|     ui->label_name->setText(i18n("Name")); | ||||
|     ui->label_comment->setText(i18n("Comment")); | ||||
|     ui->label_type->setText(i18n("Type")); | ||||
|  | ||||
| @ -23,11 +23,6 @@ | ||||
| #include "awabstractformatter.h" | ||||
|  | ||||
|  | ||||
| namespace Ui | ||||
| { | ||||
| class AWDateTimeFormatter; | ||||
| } | ||||
|  | ||||
| class AWDateTimeFormatter : public AWAbstractFormatter | ||||
| { | ||||
|     Q_OBJECT | ||||
| @ -35,8 +30,7 @@ class AWDateTimeFormatter : public AWAbstractFormatter | ||||
|     Q_PROPERTY(bool translateString READ translateString WRITE setTranslateString) | ||||
|  | ||||
| public: | ||||
|     explicit AWDateTimeFormatter(QWidget *_parent = nullptr, const QString &_filePath = ""); | ||||
|     ~AWDateTimeFormatter() override; | ||||
|     explicit AWDateTimeFormatter(QObject *_parent = nullptr, const QString &_filePath = ""); | ||||
|     [[nodiscard]] QString convert(const QVariant &_value) const override; | ||||
|     AWDateTimeFormatter *copy(const QString &_fileName, int _number) override; | ||||
|     // properties | ||||
| @ -47,13 +41,12 @@ public: | ||||
|  | ||||
| public slots: | ||||
|     void readConfiguration() override; | ||||
|     int showConfiguration(const QVariant &_args) override; | ||||
|     int showConfiguration(QWidget *_parent, const QVariant &_args) override; | ||||
|     void writeConfiguration() const override; | ||||
|  | ||||
| private: | ||||
|     Ui::AWDateTimeFormatter *ui = nullptr; | ||||
|     void initLocale(); | ||||
|     void translate() override; | ||||
|     void translate(void *_ui) override; | ||||
|     // properties | ||||
|     QLocale m_locale; | ||||
|     QString m_format = ""; | ||||
|  | ||||
| @ -5,120 +5,120 @@ | ||||
|     "image": { | ||||
|         "__comment": "should be described as html image with full path inside", | ||||
|  | ||||
|         "default": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/3200.gif\">", | ||||
|         "default": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/3200.gif\">", | ||||
|  | ||||
|         "800": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/01d.png\">", | ||||
|         "800": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/01d.png\">", | ||||
|  | ||||
|         "801": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/02d.png\">", | ||||
|         "801": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/02d.png\">", | ||||
|  | ||||
|         "802": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/03d.png\">", | ||||
|         "803": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/03d.png\">", | ||||
|         "802": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/03d.png\">", | ||||
|         "803": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/03d.png\">", | ||||
|  | ||||
|         "804": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/04d.png\">", | ||||
|                 "804": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/04d.png\">", | ||||
|  | ||||
|         "300": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/09d.png\">", | ||||
|         "301": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/09d.png\">", | ||||
|         "302": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/09d.png\">", | ||||
|         "310": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/09d.png\">", | ||||
|         "311": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/09d.png\">", | ||||
|         "312": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/09d.png\">", | ||||
|         "313": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/09d.png\">", | ||||
|         "314": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/09d.png\">", | ||||
|         "321": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/09d.png\">", | ||||
|         "520": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/09d.png\">", | ||||
|         "521": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/09d.png\">", | ||||
|         "522": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/09d.png\">", | ||||
|         "531": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/09d.png\">", | ||||
|         "300": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/09d.png\">", | ||||
|         "301": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/09d.png\">", | ||||
|         "302": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/09d.png\">", | ||||
|         "310": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/09d.png\">", | ||||
|         "311": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/09d.png\">", | ||||
|         "312": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/09d.png\">", | ||||
|         "313": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/09d.png\">", | ||||
|         "314": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/09d.png\">", | ||||
|         "321": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/09d.png\">", | ||||
|         "520": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/09d.png\">", | ||||
|         "521": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/09d.png\">", | ||||
|         "522": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/09d.png\">", | ||||
|         "531": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/09d.png\">", | ||||
|  | ||||
|         "500": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/10d.png\">", | ||||
|         "501": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/10d.png\">", | ||||
|         "502": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/10d.png\">", | ||||
|         "503": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/10d.png\">", | ||||
|         "504": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/10d.png\">", | ||||
|         "500": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/10d.png\">", | ||||
|         "501": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/10d.png\">", | ||||
|         "502": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/10d.png\">", | ||||
|         "503": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/10d.png\">", | ||||
|         "504": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/10d.png\">", | ||||
|  | ||||
|         "200": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/11d.png\">", | ||||
|         "201": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/11d.png\">", | ||||
|         "202": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/11d.png\">", | ||||
|         "210": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/11d.png\">", | ||||
|         "211": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/11d.png\">", | ||||
|         "212": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/11d.png\">", | ||||
|         "221": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/11d.png\">", | ||||
|         "230": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/11d.png\">", | ||||
|         "231": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/11d.png\">", | ||||
|         "232": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/11d.png\">", | ||||
|         "200": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/11d.png\">", | ||||
|         "201": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/11d.png\">", | ||||
|         "202": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/11d.png\">", | ||||
|         "210": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/11d.png\">", | ||||
|         "211": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/11d.png\">", | ||||
|         "212": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/11d.png\">", | ||||
|         "221": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/11d.png\">", | ||||
|         "230": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/11d.png\">", | ||||
|         "231": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/11d.png\">", | ||||
|         "232": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/11d.png\">", | ||||
|  | ||||
|         "511": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/13d.png\">", | ||||
|         "600": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/13d.png\">", | ||||
|         "601": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/13d.png\">", | ||||
|         "602": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/13d.png\">", | ||||
|         "611": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/13d.png\">", | ||||
|         "612": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/13d.png\">", | ||||
|         "615": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/13d.png\">", | ||||
|         "616": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/13d.png\">", | ||||
|         "620": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/13d.png\">", | ||||
|         "621": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/13d.png\">", | ||||
|         "622": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/13d.png\">", | ||||
|         "511": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/13d.png\">", | ||||
|         "600": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/13d.png\">", | ||||
|         "601": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/13d.png\">", | ||||
|         "602": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/13d.png\">", | ||||
|         "611": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/13d.png\">", | ||||
|         "612": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/13d.png\">", | ||||
|         "615": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/13d.png\">", | ||||
|         "616": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/13d.png\">", | ||||
|         "620": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/13d.png\">", | ||||
|         "621": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/13d.png\">", | ||||
|         "622": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/13d.png\">", | ||||
|  | ||||
|         "701": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/50d.png\">", | ||||
|         "711": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/50d.png\">", | ||||
|         "721": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/50d.png\">", | ||||
|         "731": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/50d.png\">", | ||||
|         "741": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/50d.png\">", | ||||
|         "751": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/50d.png\">", | ||||
|         "761": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/50d.png\">", | ||||
|         "762": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/50d.png\">", | ||||
|         "771": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/50d.png\">", | ||||
|         "781": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/50d.png\">", | ||||
|         "701": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/50d.png\">", | ||||
|         "711": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/50d.png\">", | ||||
|         "721": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/50d.png\">", | ||||
|         "731": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/50d.png\">", | ||||
|         "741": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/50d.png\">", | ||||
|         "751": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/50d.png\">", | ||||
|         "761": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/50d.png\">", | ||||
|         "762": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/50d.png\">", | ||||
|         "771": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/50d.png\">", | ||||
|         "781": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/50d.png\">", | ||||
|  | ||||
|         "0": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/0.gif\">", | ||||
|         "1": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/1.gif\">", | ||||
|         "2": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/2.gif\">", | ||||
|         "3": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/3.gif\">", | ||||
|         "4": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/4.gif\">", | ||||
|         "5": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/5.gif\">", | ||||
|         "6": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/6.gif\">", | ||||
|         "7": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/7.gif\">", | ||||
|         "8": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/8.gif\">", | ||||
|         "9": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/9.gif\">", | ||||
|         "10": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/10.gif\">", | ||||
|         "11": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/11.gif\">", | ||||
|         "12": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/12.gif\">", | ||||
|         "13": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/13.gif\">", | ||||
|         "14": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/14.gif\">", | ||||
|         "15": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/15.gif\">", | ||||
|         "16": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/16.gif\">", | ||||
|         "17": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/17.gif\">", | ||||
|         "18": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/18.gif\">", | ||||
|         "19": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/19.gif\">", | ||||
|         "20": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/20.gif\">", | ||||
|         "21": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/21.gif\">", | ||||
|         "22": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/22.gif\">", | ||||
|         "23": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/23.gif\">", | ||||
|         "24": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/24.gif\">", | ||||
|         "25": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/25.gif\">", | ||||
|         "26": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/26.gif\">", | ||||
|         "27": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/27.gif\">", | ||||
|         "28": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/28.gif\">", | ||||
|         "29": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/29.gif\">", | ||||
|         "30": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/30.gif\">", | ||||
|         "31": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/31.gif\">", | ||||
|         "32": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/32.gif\">", | ||||
|         "33": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/33.gif\">", | ||||
|         "34": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/34.gif\">", | ||||
|         "35": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/35.gif\">", | ||||
|         "36": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/36.gif\">", | ||||
|         "37": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/37.gif\">", | ||||
|         "38": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/38.gif\">", | ||||
|         "39": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/39.gif\">", | ||||
|         "40": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/40.gif\">", | ||||
|         "41": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/41.gif\">", | ||||
|         "42": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/42.gif\">", | ||||
|         "43": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/43.gif\">", | ||||
|         "44": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/44.gif\">", | ||||
|         "45": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/45.gif\">", | ||||
|         "46": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/46.gif\">", | ||||
|         "47": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/47.gif\">", | ||||
|         "3200": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/3200.gif\">" | ||||
|         "0": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/0.gif\">", | ||||
|         "1": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/1.gif\">", | ||||
|         "2": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/2.gif\">", | ||||
|         "3": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/3.gif\">", | ||||
|         "4": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/4.gif\">", | ||||
|         "5": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/5.gif\">", | ||||
|         "6": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/6.gif\">", | ||||
|         "7": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/7.gif\">", | ||||
|         "8": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/8.gif\">", | ||||
|         "9": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/9.gif\">", | ||||
|         "10": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/10.gif\">", | ||||
|         "11": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/11.gif\">", | ||||
|         "12": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/12.gif\">", | ||||
|         "13": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/13.gif\">", | ||||
|         "14": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/14.gif\">", | ||||
|         "15": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/15.gif\">", | ||||
|         "16": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/16.gif\">", | ||||
|         "17": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/17.gif\">", | ||||
|         "18": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/18.gif\">", | ||||
|         "19": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/19.gif\">", | ||||
|         "20": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/20.gif\">", | ||||
|         "21": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/21.gif\">", | ||||
|         "22": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/22.gif\">", | ||||
|         "23": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/23.gif\">", | ||||
|         "24": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/24.gif\">", | ||||
|         "25": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/25.gif\">", | ||||
|         "26": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/26.gif\">", | ||||
|         "27": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/27.gif\">", | ||||
|         "28": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/28.gif\">", | ||||
|         "29": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/29.gif\">", | ||||
|         "30": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/30.gif\">", | ||||
|         "31": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/31.gif\">", | ||||
|         "32": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/32.gif\">", | ||||
|         "33": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/33.gif\">", | ||||
|         "34": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/34.gif\">", | ||||
|         "35": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/35.gif\">", | ||||
|         "36": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/36.gif\">", | ||||
|         "37": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/37.gif\">", | ||||
|         "38": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/38.gif\">", | ||||
|         "39": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/39.gif\">", | ||||
|         "40": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/40.gif\">", | ||||
|         "41": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/41.gif\">", | ||||
|         "42": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/42.gif\">", | ||||
|         "43": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/43.gif\">", | ||||
|         "44": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/44.gif\">", | ||||
|         "45": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/45.gif\">", | ||||
|         "46": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/46.gif\">", | ||||
|         "47": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/47.gif\">", | ||||
|         "3200": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/3200.gif\">" | ||||
|     }, | ||||
|  | ||||
|     "text": { | ||||
|  | ||||
| @ -15,7 +15,6 @@ | ||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
|  | ||||
| #include "awfloatformatter.h" | ||||
| #include "ui_awfloatformatter.h" | ||||
|  | ||||
| @ -26,24 +25,13 @@ | ||||
| #include "awdebug.h" | ||||
|  | ||||
|  | ||||
| AWFloatFormatter::AWFloatFormatter(QWidget *_parent, const QString &_filePath) | ||||
| AWFloatFormatter::AWFloatFormatter(QObject *_parent, const QString &_filePath) | ||||
|     : AWAbstractFormatter(_parent, _filePath) | ||||
|     , ui(new Ui::AWFloatFormatter) | ||||
| { | ||||
|     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; | ||||
|  | ||||
|     if (!_filePath.isEmpty()) | ||||
|         AWFloatFormatter::readConfiguration(); | ||||
|     ui->setupUi(this); | ||||
|     AWFloatFormatter::translate(); | ||||
| } | ||||
|  | ||||
|  | ||||
| AWFloatFormatter::~AWFloatFormatter() | ||||
| { | ||||
|     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; | ||||
|  | ||||
|     delete ui; | ||||
| } | ||||
|  | ||||
|  | ||||
| @ -51,7 +39,7 @@ QString AWFloatFormatter::convert(const QVariant &_value) const | ||||
| { | ||||
|     qCDebug(LOG_LIB) << "Convert value" << _value; | ||||
|  | ||||
|     QString output | ||||
|     auto output | ||||
|         = QString("%1").arg(_value.toDouble() * multiplier() + summand(), count(), format(), precision(), fillChar()); | ||||
|     if (forceWidth()) | ||||
|         output = output.left(count()); | ||||
| @ -64,7 +52,7 @@ AWFloatFormatter *AWFloatFormatter::copy(const QString &_fileName, const int _nu | ||||
| { | ||||
|     qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number; | ||||
|  | ||||
|     auto *item = new AWFloatFormatter(dynamic_cast<QWidget *>(parent()), _fileName); | ||||
|     auto item = new AWFloatFormatter(parent(), _fileName); | ||||
|     AWAbstractFormatter::copyDefaults(item); | ||||
|     item->setCount(count()); | ||||
|     item->setFormat(format()); | ||||
| @ -202,10 +190,15 @@ void AWFloatFormatter::readConfiguration() | ||||
| } | ||||
|  | ||||
|  | ||||
| int AWFloatFormatter::showConfiguration(const QVariant &_args) | ||||
| int AWFloatFormatter::showConfiguration(QWidget *_parent, const QVariant &_args) | ||||
| { | ||||
|     Q_UNUSED(_args) | ||||
|  | ||||
|     auto dialog = new QDialog(_parent); | ||||
|     auto ui = new Ui::AWFloatFormatter(); | ||||
|     ui->setupUi(dialog); | ||||
|     translate(ui); | ||||
|  | ||||
|     ui->lineEdit_name->setText(name()); | ||||
|     ui->lineEdit_comment->setText(comment()); | ||||
|     ui->label_typeValue->setText("Float"); | ||||
| @ -217,22 +210,26 @@ int AWFloatFormatter::showConfiguration(const QVariant &_args) | ||||
|     ui->doubleSpinBox_multiplier->setValue(multiplier()); | ||||
|     ui->doubleSpinBox_summand->setValue(summand()); | ||||
|  | ||||
|     int ret = exec(); | ||||
|     if (ret != 1) | ||||
|         return ret; | ||||
|     setName(ui->lineEdit_name->text()); | ||||
|     setComment(ui->lineEdit_comment->text()); | ||||
|     setApiVersion(AW_FORMATTER_API); | ||||
|     setStrType(ui->label_typeValue->text()); | ||||
|     setFormat(ui->comboBox_format->currentText().at(0).toLatin1()); | ||||
|     setPrecision(ui->spinBox_precision->value()); | ||||
|     setCount(ui->spinBox_width->value()); | ||||
|     setFillChar(ui->lineEdit_fill->text().at(0)); | ||||
|     setForceWidth(ui->checkBox_forceWidth->checkState() == Qt::Checked); | ||||
|     setMultiplier(ui->doubleSpinBox_multiplier->value()); | ||||
|     setSummand(ui->doubleSpinBox_summand->value()); | ||||
|     auto ret = dialog->exec(); | ||||
|     if (ret == 1) { | ||||
|         setName(ui->lineEdit_name->text()); | ||||
|         setComment(ui->lineEdit_comment->text()); | ||||
|         setApiVersion(AW_FORMATTER_API); | ||||
|         setStrType(ui->label_typeValue->text()); | ||||
|         setFormat(ui->comboBox_format->currentText().at(0).toLatin1()); | ||||
|         setPrecision(ui->spinBox_precision->value()); | ||||
|         setCount(ui->spinBox_width->value()); | ||||
|         setFillChar(ui->lineEdit_fill->text().at(0)); | ||||
|         setForceWidth(ui->checkBox_forceWidth->checkState() == Qt::Checked); | ||||
|         setMultiplier(ui->doubleSpinBox_multiplier->value()); | ||||
|         setSummand(ui->doubleSpinBox_summand->value()); | ||||
|  | ||||
|         writeConfiguration(); | ||||
|     } | ||||
|  | ||||
|     dialog->deleteLater(); | ||||
|     delete ui; | ||||
|  | ||||
|     writeConfiguration(); | ||||
|     return ret; | ||||
| } | ||||
|  | ||||
| @ -258,8 +255,10 @@ void AWFloatFormatter::writeConfiguration() const | ||||
| } | ||||
|  | ||||
|  | ||||
| void AWFloatFormatter::translate() | ||||
| void AWFloatFormatter::translate(void *_ui) | ||||
| { | ||||
|     auto ui = reinterpret_cast<Ui::AWFloatFormatter *>(_ui); | ||||
|  | ||||
|     ui->label_name->setText(i18n("Name")); | ||||
|     ui->label_comment->setText(i18n("Comment")); | ||||
|     ui->label_type->setText(i18n("Type")); | ||||
|  | ||||
| @ -21,11 +21,6 @@ | ||||
| #include "awabstractformatter.h" | ||||
|  | ||||
|  | ||||
| namespace Ui | ||||
| { | ||||
| class AWFloatFormatter; | ||||
| } | ||||
|  | ||||
| class AWFloatFormatter : public AWAbstractFormatter | ||||
| { | ||||
|     Q_OBJECT | ||||
| @ -38,8 +33,7 @@ class AWFloatFormatter : public AWAbstractFormatter | ||||
|     Q_PROPERTY(double summand READ summand WRITE setSummand) | ||||
|  | ||||
| public: | ||||
|     explicit AWFloatFormatter(QWidget *_parent = nullptr, const QString &_filePath = ""); | ||||
|     ~AWFloatFormatter() override; | ||||
|     explicit AWFloatFormatter(QObject *_parent = nullptr, const QString &_filePath = ""); | ||||
|     [[nodiscard]] QString convert(const QVariant &_value) const override; | ||||
|     AWFloatFormatter *copy(const QString &_fileName, int _number) override; | ||||
|     // properties | ||||
| @ -60,12 +54,11 @@ public: | ||||
|  | ||||
| public slots: | ||||
|     void readConfiguration() override; | ||||
|     int showConfiguration(const QVariant &_args) override; | ||||
|     int showConfiguration(QWidget *_parent, const QVariant &_args) override; | ||||
|     void writeConfiguration() const override; | ||||
|  | ||||
| private: | ||||
|     Ui::AWFloatFormatter *ui = nullptr; | ||||
|     void translate() override; | ||||
|     void translate(void *_ui) override; | ||||
|     // properties | ||||
|     int m_count = 0; | ||||
|     QChar m_fillChar = QChar(); | ||||
|  | ||||
| @ -15,7 +15,6 @@ | ||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
|  | ||||
| #include "awjsonformatter.h" | ||||
| #include "ui_awjsonformatter.h" | ||||
|  | ||||
| @ -27,24 +26,13 @@ | ||||
| #include "awdebug.h" | ||||
|  | ||||
|  | ||||
| AWJsonFormatter::AWJsonFormatter(QWidget *_parent, const QString &_filePath) | ||||
| AWJsonFormatter::AWJsonFormatter(QObject *_parent, const QString &_filePath) | ||||
|     : AWAbstractFormatter(_parent, _filePath) | ||||
|     , ui(new Ui::AWJsonFormatter) | ||||
| { | ||||
|     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; | ||||
|  | ||||
|     if (!_filePath.isEmpty()) | ||||
|         AWJsonFormatter::readConfiguration(); | ||||
|     ui->setupUi(this); | ||||
|     AWJsonFormatter::translate(); | ||||
| } | ||||
|  | ||||
|  | ||||
| AWJsonFormatter::~AWJsonFormatter() | ||||
| { | ||||
|     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; | ||||
|  | ||||
|     delete ui; | ||||
| } | ||||
|  | ||||
|  | ||||
| @ -54,7 +42,7 @@ QString AWJsonFormatter::convert(const QVariant &_value) const | ||||
|  | ||||
|     // check if _value is string and parse first if required | ||||
|     QJsonDocument json = _value.userType() == QMetaType::QString ? QJsonDocument::fromJson(_value.toString().toUtf8()) | ||||
|                                                            : QJsonDocument::fromVariant(_value); | ||||
|                                                                  : QJsonDocument::fromVariant(_value); | ||||
|     QVariant converted = json.toVariant(); | ||||
|     for (auto &element : m_splittedPath) | ||||
|         converted = getFromJson(converted, element); | ||||
| @ -67,7 +55,7 @@ AWJsonFormatter *AWJsonFormatter::copy(const QString &_fileName, const int _numb | ||||
| { | ||||
|     qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number; | ||||
|  | ||||
|     auto *item = new AWJsonFormatter(dynamic_cast<QWidget *>(parent()), _fileName); | ||||
|     auto item = new AWJsonFormatter(parent(), _fileName); | ||||
|     AWAbstractFormatter::copyDefaults(item); | ||||
|     item->setNumber(_number); | ||||
|     item->setPath(path()); | ||||
| @ -105,25 +93,34 @@ void AWJsonFormatter::readConfiguration() | ||||
| } | ||||
|  | ||||
|  | ||||
| int AWJsonFormatter::showConfiguration(const QVariant &args) | ||||
| int AWJsonFormatter::showConfiguration(QWidget *_parent, const QVariant &args) | ||||
| { | ||||
|     Q_UNUSED(args) | ||||
|  | ||||
|     auto dialog = new QDialog(_parent); | ||||
|     auto ui = new Ui::AWJsonFormatter(); | ||||
|     ui->setupUi(dialog); | ||||
|     translate(ui); | ||||
|  | ||||
|     ui->lineEdit_name->setText(name()); | ||||
|     ui->lineEdit_comment->setText(comment()); | ||||
|     ui->label_typeValue->setText("Json"); | ||||
|     ui->lineEdit_path->setText(path()); | ||||
|  | ||||
|     int ret = exec(); | ||||
|     if (ret != 1) | ||||
|         return ret; | ||||
|     setName(ui->lineEdit_name->text()); | ||||
|     setComment(ui->lineEdit_comment->text()); | ||||
|     setApiVersion(AW_FORMATTER_API); | ||||
|     setStrType(ui->label_typeValue->text()); | ||||
|     setPath(ui->lineEdit_path->text()); | ||||
|     auto ret = dialog->exec(); | ||||
|     if (ret == 1) { | ||||
|         setName(ui->lineEdit_name->text()); | ||||
|         setComment(ui->lineEdit_comment->text()); | ||||
|         setApiVersion(AW_FORMATTER_API); | ||||
|         setStrType(ui->label_typeValue->text()); | ||||
|         setPath(ui->lineEdit_path->text()); | ||||
|  | ||||
|         writeConfiguration(); | ||||
|     } | ||||
|  | ||||
|     dialog->deleteLater(); | ||||
|     delete ui; | ||||
|  | ||||
|     writeConfiguration(); | ||||
|     return ret; | ||||
| } | ||||
|  | ||||
| @ -187,8 +184,10 @@ void AWJsonFormatter::initPath() | ||||
| } | ||||
|  | ||||
|  | ||||
| void AWJsonFormatter::translate() | ||||
| void AWJsonFormatter::translate(void *_ui) | ||||
| { | ||||
|     auto ui = reinterpret_cast<Ui::AWJsonFormatter *>(_ui); | ||||
|  | ||||
|     ui->label_name->setText(i18n("Name")); | ||||
|     ui->label_comment->setText(i18n("Comment")); | ||||
|     ui->label_type->setText(i18n("Type")); | ||||
|  | ||||
| @ -21,19 +21,13 @@ | ||||
| #include "awabstractformatter.h" | ||||
|  | ||||
|  | ||||
| namespace Ui | ||||
| { | ||||
| class AWJsonFormatter; | ||||
| } | ||||
|  | ||||
| class AWJsonFormatter : public AWAbstractFormatter | ||||
| { | ||||
|     Q_OBJECT | ||||
|     Q_PROPERTY(QString path READ path WRITE setPath) | ||||
|  | ||||
| public: | ||||
|     explicit AWJsonFormatter(QWidget *_parent = nullptr, const QString &_filePath = ""); | ||||
|     ~AWJsonFormatter() override; | ||||
|     explicit AWJsonFormatter(QObject *_parent = nullptr, const QString &_filePath = ""); | ||||
|     [[nodiscard]] QString convert(const QVariant &_value) const override; | ||||
|     AWJsonFormatter *copy(const QString &_fileName, int _number) override; | ||||
|     // properties | ||||
| @ -42,16 +36,15 @@ public: | ||||
|  | ||||
| public slots: | ||||
|     void readConfiguration() override; | ||||
|     int showConfiguration(const QVariant &_args) override; | ||||
|     int showConfiguration(QWidget *_parent, const QVariant &_args) override; | ||||
|     void writeConfiguration() const override; | ||||
|  | ||||
| private: | ||||
|     Ui::AWJsonFormatter *ui = nullptr; | ||||
|     static QVariant getFromJson(const QVariant &_value, const QVariant &_element); | ||||
|     static QVariant getFromList(const QVariant &_value, int _index); | ||||
|     static QVariant getFromMap(const QVariant &_value, const QString &_key); | ||||
|     void initPath(); | ||||
|     void translate() override; | ||||
|     void translate(void *_ui) override; | ||||
|     // properties | ||||
|     QString m_path; | ||||
|     QVariantList m_splittedPath; | ||||
|  | ||||
| @ -15,7 +15,6 @@ | ||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
|  | ||||
| #include "awlistformatter.h" | ||||
| #include "ui_awlistformatter.h" | ||||
|  | ||||
| @ -26,24 +25,13 @@ | ||||
| #include "awdebug.h" | ||||
|  | ||||
|  | ||||
| AWListFormatter::AWListFormatter(QWidget *_parent, const QString &_filePath) | ||||
| AWListFormatter::AWListFormatter(QObject *_parent, const QString &_filePath) | ||||
|     : AWAbstractFormatter(_parent, _filePath) | ||||
|     , ui(new Ui::AWListFormatter) | ||||
| { | ||||
|     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; | ||||
|  | ||||
|     if (!_filePath.isEmpty()) | ||||
|         AWListFormatter::readConfiguration(); | ||||
|     ui->setupUi(this); | ||||
|     AWListFormatter::translate(); | ||||
| } | ||||
|  | ||||
|  | ||||
| AWListFormatter::~AWListFormatter() | ||||
| { | ||||
|     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; | ||||
|  | ||||
|     delete ui; | ||||
| } | ||||
|  | ||||
|  | ||||
| @ -51,7 +39,7 @@ QString AWListFormatter::convert(const QVariant &_value) const | ||||
| { | ||||
|     qCDebug(LOG_LIB) << "Convert value" << _value; | ||||
|  | ||||
|     QStringList output = _value.toStringList(); | ||||
|     auto output = _value.toStringList(); | ||||
|     if (isSorted()) | ||||
|         output.sort(); | ||||
|  | ||||
| @ -63,7 +51,7 @@ AWListFormatter *AWListFormatter::copy(const QString &_fileName, const int _numb | ||||
| { | ||||
|     qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number; | ||||
|  | ||||
|     auto *item = new AWListFormatter(dynamic_cast<QWidget *>(parent()), _fileName); | ||||
|     auto item = new AWListFormatter(parent(), _fileName); | ||||
|     AWAbstractFormatter::copyDefaults(item); | ||||
|     item->setFilter(filter()); | ||||
|     item->setSeparator(separator()); | ||||
| @ -133,10 +121,15 @@ void AWListFormatter::readConfiguration() | ||||
| } | ||||
|  | ||||
|  | ||||
| int AWListFormatter::showConfiguration(const QVariant &_args) | ||||
| int AWListFormatter::showConfiguration(QWidget *_parent, const QVariant &_args) | ||||
| { | ||||
|     Q_UNUSED(_args) | ||||
|  | ||||
|     auto dialog = new QDialog(_parent); | ||||
|     auto ui = new Ui::AWListFormatter(); | ||||
|     ui->setupUi(dialog); | ||||
|     translate(ui); | ||||
|  | ||||
|     ui->lineEdit_name->setText(name()); | ||||
|     ui->lineEdit_comment->setText(comment()); | ||||
|     ui->label_typeValue->setText("List"); | ||||
| @ -144,18 +137,22 @@ int AWListFormatter::showConfiguration(const QVariant &_args) | ||||
|     ui->lineEdit_separator->setText(separator()); | ||||
|     ui->checkBox_sorted->setCheckState(isSorted() ? Qt::Checked : Qt::Unchecked); | ||||
|  | ||||
|     int ret = exec(); | ||||
|     if (ret != 1) | ||||
|         return ret; | ||||
|     setName(ui->lineEdit_name->text()); | ||||
|     setComment(ui->lineEdit_comment->text()); | ||||
|     setApiVersion(AW_FORMATTER_API); | ||||
|     setStrType(ui->label_typeValue->text()); | ||||
|     setFilter(ui->lineEdit_filter->text()); | ||||
|     setSeparator(ui->lineEdit_separator->text()); | ||||
|     setSorted(ui->checkBox_sorted->checkState() == Qt::Checked); | ||||
|     auto ret = dialog->exec(); | ||||
|     if (ret == 1) { | ||||
|         setName(ui->lineEdit_name->text()); | ||||
|         setComment(ui->lineEdit_comment->text()); | ||||
|         setApiVersion(AW_FORMATTER_API); | ||||
|         setStrType(ui->label_typeValue->text()); | ||||
|         setFilter(ui->lineEdit_filter->text()); | ||||
|         setSeparator(ui->lineEdit_separator->text()); | ||||
|         setSorted(ui->checkBox_sorted->checkState() == Qt::Checked); | ||||
|  | ||||
|         writeConfiguration(); | ||||
|     } | ||||
|  | ||||
|     dialog->deleteLater(); | ||||
|     delete ui; | ||||
|  | ||||
|     writeConfiguration(); | ||||
|     return ret; | ||||
| } | ||||
|  | ||||
| @ -177,8 +174,10 @@ void AWListFormatter::writeConfiguration() const | ||||
| } | ||||
|  | ||||
|  | ||||
| void AWListFormatter::translate() | ||||
| void AWListFormatter::translate(void *_ui) | ||||
| { | ||||
|     auto ui = reinterpret_cast<Ui::AWListFormatter *>(_ui); | ||||
|  | ||||
|     ui->label_name->setText(i18n("Name")); | ||||
|     ui->label_comment->setText(i18n("Comment")); | ||||
|     ui->label_type->setText(i18n("Type")); | ||||
|  | ||||
| @ -21,11 +21,6 @@ | ||||
| #include "awabstractformatter.h" | ||||
|  | ||||
|  | ||||
| namespace Ui | ||||
| { | ||||
| class AWListFormatter; | ||||
| } | ||||
|  | ||||
| class AWListFormatter : public AWAbstractFormatter | ||||
| { | ||||
|     Q_OBJECT | ||||
| @ -34,8 +29,7 @@ class AWListFormatter : public AWAbstractFormatter | ||||
|     Q_PROPERTY(bool sorted READ isSorted WRITE setSorted) | ||||
|  | ||||
| public: | ||||
|     explicit AWListFormatter(QWidget *_parent = nullptr, const QString &_filePath = ""); | ||||
|     ~AWListFormatter() override; | ||||
|     explicit AWListFormatter(QObject *_parent = nullptr, const QString &_filePath = ""); | ||||
|     [[nodiscard]] QString convert(const QVariant &_value) const override; | ||||
|     AWListFormatter *copy(const QString &_fileName, int _number) override; | ||||
|     // properties | ||||
| @ -48,12 +42,11 @@ public: | ||||
|  | ||||
| public slots: | ||||
|     void readConfiguration() override; | ||||
|     int showConfiguration(const QVariant &_args) override; | ||||
|     int showConfiguration(QWidget *_parent, const QVariant &_args) override; | ||||
|     void writeConfiguration() const override; | ||||
|  | ||||
| private: | ||||
|     Ui::AWListFormatter *ui = nullptr; | ||||
|     void translate() override; | ||||
|     void translate(void *_ui) override; | ||||
|     // properties | ||||
|     QString m_filter = ""; | ||||
|     QString m_separator = ""; | ||||
|  | ||||
| @ -15,7 +15,6 @@ | ||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
|  | ||||
| #include "awnoformatter.h" | ||||
| #include "ui_awnoformatter.h" | ||||
|  | ||||
| @ -24,24 +23,13 @@ | ||||
| #include "awdebug.h" | ||||
|  | ||||
|  | ||||
| AWNoFormatter::AWNoFormatter(QWidget *_parent, const QString &_filePath) | ||||
| AWNoFormatter::AWNoFormatter(QObject *_parent, const QString &_filePath) | ||||
|     : AWAbstractFormatter(_parent, _filePath) | ||||
|     , ui(new Ui::AWNoFormatter) | ||||
| { | ||||
|     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; | ||||
|  | ||||
|     if (!_filePath.isEmpty()) | ||||
|         AWNoFormatter::readConfiguration(); | ||||
|     ui->setupUi(this); | ||||
|     AWNoFormatter::translate(); | ||||
| } | ||||
|  | ||||
|  | ||||
| AWNoFormatter::~AWNoFormatter() | ||||
| { | ||||
|     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; | ||||
|  | ||||
|     delete ui; | ||||
| } | ||||
|  | ||||
|  | ||||
| @ -57,7 +45,7 @@ AWNoFormatter *AWNoFormatter::copy(const QString &_fileName, const int _number) | ||||
| { | ||||
|     qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number; | ||||
|  | ||||
|     auto *item = new AWNoFormatter(dynamic_cast<QWidget *>(parent()), _fileName); | ||||
|     auto item = new AWNoFormatter(parent(), _fileName); | ||||
|     AWAbstractFormatter::copyDefaults(item); | ||||
|     item->setNumber(_number); | ||||
|  | ||||
| @ -65,29 +53,40 @@ AWNoFormatter *AWNoFormatter::copy(const QString &_fileName, const int _number) | ||||
| } | ||||
|  | ||||
|  | ||||
| int AWNoFormatter::showConfiguration(const QVariant &_args) | ||||
| int AWNoFormatter::showConfiguration(QWidget *_parent, const QVariant &_args) | ||||
| { | ||||
|     Q_UNUSED(_args) | ||||
|  | ||||
|     auto dialog = new QDialog(_parent); | ||||
|     auto ui = new Ui::AWNoFormatter(); | ||||
|     ui->setupUi(dialog); | ||||
|     translate(ui); | ||||
|  | ||||
|     ui->lineEdit_name->setText(name()); | ||||
|     ui->lineEdit_comment->setText(comment()); | ||||
|     ui->label_typeValue->setText("NoFormat"); | ||||
|  | ||||
|     int ret = exec(); | ||||
|     if (ret != 1) | ||||
|         return ret; | ||||
|     setName(ui->lineEdit_name->text()); | ||||
|     setComment(ui->lineEdit_comment->text()); | ||||
|     setApiVersion(AW_FORMATTER_API); | ||||
|     setStrType(ui->label_typeValue->text()); | ||||
|     auto ret = dialog->exec(); | ||||
|     if (ret == 1) { | ||||
|         setName(ui->lineEdit_name->text()); | ||||
|         setComment(ui->lineEdit_comment->text()); | ||||
|         setApiVersion(AW_FORMATTER_API); | ||||
|         setStrType(ui->label_typeValue->text()); | ||||
|  | ||||
|         writeConfiguration(); | ||||
|     } | ||||
|  | ||||
|     dialog->deleteLater(); | ||||
|     delete ui; | ||||
|  | ||||
|     writeConfiguration(); | ||||
|     return ret; | ||||
| } | ||||
|  | ||||
|  | ||||
| void AWNoFormatter::translate() | ||||
| void AWNoFormatter::translate(void *_ui) | ||||
| { | ||||
|     auto ui = reinterpret_cast<Ui::AWNoFormatter *>(_ui); | ||||
|  | ||||
|     ui->label_name->setText(i18n("Name")); | ||||
|     ui->label_comment->setText(i18n("Comment")); | ||||
|     ui->label_type->setText(i18n("Type")); | ||||
|  | ||||
| @ -21,27 +21,20 @@ | ||||
| #include "awabstractformatter.h" | ||||
|  | ||||
|  | ||||
| namespace Ui | ||||
| { | ||||
| class AWNoFormatter; | ||||
| } | ||||
|  | ||||
| class AWNoFormatter : public AWAbstractFormatter | ||||
| { | ||||
|     Q_OBJECT | ||||
|  | ||||
| public: | ||||
|     explicit AWNoFormatter(QWidget *_parent = nullptr, const QString &_filePath = ""); | ||||
|     ~AWNoFormatter() override; | ||||
|     explicit AWNoFormatter(QObject *_parent = nullptr, const QString &_filePath = ""); | ||||
|     [[nodiscard]] QString convert(const QVariant &_value) const override; | ||||
|     AWNoFormatter *copy(const QString &_fileName, int _number) override; | ||||
|  | ||||
| public slots: | ||||
|     int showConfiguration(const QVariant &_args) override; | ||||
|     int showConfiguration(QWidget *_parent, const QVariant &_args) override; | ||||
|  | ||||
| private: | ||||
|     Ui::AWNoFormatter *ui = nullptr; | ||||
|     void translate() override; | ||||
|     void translate(void *_ui) override; | ||||
|     // properties | ||||
| }; | ||||
|  | ||||
|  | ||||
| @ -15,7 +15,6 @@ | ||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
|  | ||||
| #include "awscriptformatter.h" | ||||
| #include "ui_awscriptformatter.h" | ||||
|  | ||||
| @ -27,24 +26,13 @@ | ||||
| #include "awdebug.h" | ||||
|  | ||||
|  | ||||
| AWScriptFormatter::AWScriptFormatter(QWidget *_parent, const QString &_filePath) | ||||
| AWScriptFormatter::AWScriptFormatter(QObject *_parent, const QString &_filePath) | ||||
|     : AWAbstractFormatter(_parent, _filePath) | ||||
|     , ui(new Ui::AWScriptFormatter) | ||||
| { | ||||
|     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; | ||||
|  | ||||
|     if (!_filePath.isEmpty()) | ||||
|         AWScriptFormatter::readConfiguration(); | ||||
|     ui->setupUi(this); | ||||
|     AWScriptFormatter::translate(); | ||||
| } | ||||
|  | ||||
|  | ||||
| AWScriptFormatter::~AWScriptFormatter() | ||||
| { | ||||
|     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; | ||||
|  | ||||
|     delete ui; | ||||
| } | ||||
|  | ||||
|  | ||||
| @ -54,9 +42,8 @@ QString AWScriptFormatter::convert(const QVariant &_value) const | ||||
|  | ||||
|     // init engine | ||||
|     QJSEngine engine; | ||||
|     QJSValue fn = engine.evaluate(m_program); | ||||
|     QJSValueList args = QJSValueList() << _value.toString(); | ||||
|     QJSValue result = fn.call(args); | ||||
|     auto fn = engine.evaluate(m_program); | ||||
|     auto result = fn.call({_value.toString()}); | ||||
|  | ||||
|     if (result.isError()) { | ||||
|         qCWarning(LOG_LIB) << "Uncaught exception at line" << result.property("lineNumber").toInt() << ":" | ||||
| @ -72,7 +59,7 @@ AWScriptFormatter *AWScriptFormatter::copy(const QString &_fileName, const int _ | ||||
| { | ||||
|     qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number; | ||||
|  | ||||
|     auto *item = new AWScriptFormatter(dynamic_cast<QWidget *>(parent()), _fileName); | ||||
|     auto item = new AWScriptFormatter(parent(), _fileName); | ||||
|     AWAbstractFormatter::copyDefaults(item); | ||||
|     item->setAppendCode(appendCode()); | ||||
|     item->setCode(code()); | ||||
| @ -150,10 +137,15 @@ void AWScriptFormatter::readConfiguration() | ||||
| } | ||||
|  | ||||
|  | ||||
| int AWScriptFormatter::showConfiguration(const QVariant &_args) | ||||
| int AWScriptFormatter::showConfiguration(QWidget *_parent, const QVariant &_args) | ||||
| { | ||||
|     Q_UNUSED(_args) | ||||
|  | ||||
|     auto dialog = new QDialog(_parent); | ||||
|     auto ui = new Ui::AWScriptFormatter(); | ||||
|     ui->setupUi(dialog); | ||||
|     translate(ui); | ||||
|  | ||||
|     ui->lineEdit_name->setText(name()); | ||||
|     ui->lineEdit_comment->setText(comment()); | ||||
|     ui->label_typeValue->setText("Script"); | ||||
| @ -161,19 +153,23 @@ int AWScriptFormatter::showConfiguration(const QVariant &_args) | ||||
|     ui->checkBox_hasReturn->setCheckState(hasReturn() ? Qt::Checked : Qt::Unchecked); | ||||
|     ui->textEdit_code->setPlainText(code()); | ||||
|  | ||||
|     int ret = exec(); | ||||
|     if (ret != 1) | ||||
|         return ret; | ||||
|     setName(ui->lineEdit_name->text()); | ||||
|     setComment(ui->lineEdit_comment->text()); | ||||
|     setApiVersion(AW_FORMATTER_API); | ||||
|     setStrType(ui->label_typeValue->text()); | ||||
|     setAppendCode(ui->checkBox_appendCode->checkState() == Qt::Checked); | ||||
|     setHasReturn(ui->checkBox_hasReturn->checkState() == Qt::Checked); | ||||
|     setCode(ui->textEdit_code->toPlainText()); | ||||
|     initProgram(); | ||||
|     int ret = dialog->exec(); | ||||
|     if (ret == 1) { | ||||
|         setName(ui->lineEdit_name->text()); | ||||
|         setComment(ui->lineEdit_comment->text()); | ||||
|         setApiVersion(AW_FORMATTER_API); | ||||
|         setStrType(ui->label_typeValue->text()); | ||||
|         setAppendCode(ui->checkBox_appendCode->checkState() == Qt::Checked); | ||||
|         setHasReturn(ui->checkBox_hasReturn->checkState() == Qt::Checked); | ||||
|         setCode(ui->textEdit_code->toPlainText()); | ||||
|         initProgram(); | ||||
|  | ||||
|         writeConfiguration(); | ||||
|     } | ||||
|  | ||||
|     dialog->deleteLater(); | ||||
|     delete ui; | ||||
|  | ||||
|     writeConfiguration(); | ||||
|     return ret; | ||||
| } | ||||
|  | ||||
| @ -199,7 +195,7 @@ void AWScriptFormatter::initProgram() | ||||
| { | ||||
|     // init JS code | ||||
|     if (appendCode()) | ||||
|         m_program = QString("(function(value) { %1%2 })").arg(code()).arg(hasReturn() ? "" : "; return output;"); | ||||
|         m_program = QString("(function(value) { %1%2 })").arg(code(), hasReturn() ? "" : "; return output;"); | ||||
|     else | ||||
|         m_program = code(); | ||||
|  | ||||
| @ -207,8 +203,10 @@ void AWScriptFormatter::initProgram() | ||||
| } | ||||
|  | ||||
|  | ||||
| void AWScriptFormatter::translate() | ||||
| void AWScriptFormatter::translate(void *_ui) | ||||
| { | ||||
|     auto ui = reinterpret_cast<Ui::AWScriptFormatter *>(_ui); | ||||
|  | ||||
|     ui->label_name->setText(i18n("Name")); | ||||
|     ui->label_comment->setText(i18n("Comment")); | ||||
|     ui->label_type->setText(i18n("Type")); | ||||
|  | ||||
| @ -21,11 +21,6 @@ | ||||
| #include "awabstractformatter.h" | ||||
|  | ||||
|  | ||||
| namespace Ui | ||||
| { | ||||
| class AWScriptFormatter; | ||||
| } | ||||
|  | ||||
| class AWScriptFormatter : public AWAbstractFormatter | ||||
| { | ||||
|     Q_OBJECT | ||||
| @ -35,8 +30,7 @@ class AWScriptFormatter : public AWAbstractFormatter | ||||
|     Q_PROPERTY(QString program READ program) | ||||
|  | ||||
| public: | ||||
|     explicit AWScriptFormatter(QWidget *_parent = nullptr, const QString &_filePath = ""); | ||||
|     ~AWScriptFormatter() override; | ||||
|     explicit AWScriptFormatter(QObject *_parent = nullptr, const QString &_filePath = ""); | ||||
|     [[nodiscard]] QString convert(const QVariant &_value) const override; | ||||
|     AWScriptFormatter *copy(const QString &_fileName, int _number) override; | ||||
|     // properties | ||||
| @ -50,13 +44,12 @@ public: | ||||
|  | ||||
| public slots: | ||||
|     void readConfiguration() override; | ||||
|     int showConfiguration(const QVariant &_args) override; | ||||
|     int showConfiguration(QWidget *_parent, const QVariant &_args) override; | ||||
|     void writeConfiguration() const override; | ||||
|  | ||||
| private: | ||||
|     Ui::AWScriptFormatter *ui = nullptr; | ||||
|     void initProgram(); | ||||
|     void translate() override; | ||||
|     void translate(void *_ui) override; | ||||
|     // properties | ||||
|     bool m_appendCode = true; | ||||
|     QString m_code = ""; | ||||
|  | ||||
| @ -15,7 +15,6 @@ | ||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
|  | ||||
| #include "awstringformatter.h" | ||||
| #include "ui_awstringformatter.h" | ||||
|  | ||||
| @ -26,24 +25,13 @@ | ||||
| #include "awdebug.h" | ||||
|  | ||||
|  | ||||
| AWStringFormatter::AWStringFormatter(QWidget *_parent, const QString &_filePath) | ||||
| AWStringFormatter::AWStringFormatter(QObject *_parent, const QString &_filePath) | ||||
|     : AWAbstractFormatter(_parent, _filePath) | ||||
|     , ui(new Ui::AWStringFormatter) | ||||
| { | ||||
|     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; | ||||
|  | ||||
|     if (!_filePath.isEmpty()) | ||||
|         AWStringFormatter::readConfiguration(); | ||||
|     ui->setupUi(this); | ||||
|     AWStringFormatter::translate(); | ||||
| } | ||||
|  | ||||
|  | ||||
| AWStringFormatter::~AWStringFormatter() | ||||
| { | ||||
|     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; | ||||
|  | ||||
|     delete ui; | ||||
| } | ||||
|  | ||||
|  | ||||
| @ -51,7 +39,7 @@ QString AWStringFormatter::convert(const QVariant &_value) const | ||||
| { | ||||
|     qCDebug(LOG_LIB) << "Convert value" << _value; | ||||
|  | ||||
|     QString output = QString("%1").arg(_value.toString(), count(), fillChar()); | ||||
|     auto output = QString("%1").arg(_value.toString(), count(), fillChar()); | ||||
|     if (forceWidth()) | ||||
|         output = output.left(count()); | ||||
|  | ||||
| @ -63,7 +51,7 @@ AWStringFormatter *AWStringFormatter::copy(const QString &_fileName, const int _ | ||||
| { | ||||
|     qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number; | ||||
|  | ||||
|     auto *item = new AWStringFormatter(dynamic_cast<QWidget *>(parent()), _fileName); | ||||
|     auto item = new AWStringFormatter(parent(), _fileName); | ||||
|     AWAbstractFormatter::copyDefaults(item); | ||||
|     item->setCount(count()); | ||||
|     item->setFillChar(fillChar()); | ||||
| @ -132,10 +120,15 @@ void AWStringFormatter::readConfiguration() | ||||
| } | ||||
|  | ||||
|  | ||||
| int AWStringFormatter::showConfiguration(const QVariant &_args) | ||||
| int AWStringFormatter::showConfiguration(QWidget *_parent, const QVariant &_args) | ||||
| { | ||||
|     Q_UNUSED(_args) | ||||
|  | ||||
|     auto dialog = new QDialog(_parent); | ||||
|     auto ui = new Ui::AWStringFormatter(); | ||||
|     ui->setupUi(dialog); | ||||
|     translate(ui); | ||||
|  | ||||
|     ui->lineEdit_name->setText(name()); | ||||
|     ui->lineEdit_comment->setText(comment()); | ||||
|     ui->label_typeValue->setText("String"); | ||||
| @ -143,18 +136,22 @@ int AWStringFormatter::showConfiguration(const QVariant &_args) | ||||
|     ui->lineEdit_fill->setText(QString(fillChar())); | ||||
|     ui->checkBox_forceWidth->setCheckState(forceWidth() ? Qt::Checked : Qt::Unchecked); | ||||
|  | ||||
|     int ret = exec(); | ||||
|     if (ret != 1) | ||||
|         return ret; | ||||
|     setName(ui->lineEdit_name->text()); | ||||
|     setComment(ui->lineEdit_comment->text()); | ||||
|     setApiVersion(AW_FORMATTER_API); | ||||
|     setStrType(ui->label_typeValue->text()); | ||||
|     setCount(ui->spinBox_width->value()); | ||||
|     setFillChar(ui->lineEdit_fill->text().at(0)); | ||||
|     setForceWidth(ui->checkBox_forceWidth->checkState() == Qt::Checked); | ||||
|     auto ret = dialog->exec(); | ||||
|     if (ret == 1) { | ||||
|         setName(ui->lineEdit_name->text()); | ||||
|         setComment(ui->lineEdit_comment->text()); | ||||
|         setApiVersion(AW_FORMATTER_API); | ||||
|         setStrType(ui->label_typeValue->text()); | ||||
|         setCount(ui->spinBox_width->value()); | ||||
|         setFillChar(ui->lineEdit_fill->text().at(0)); | ||||
|         setForceWidth(ui->checkBox_forceWidth->checkState() == Qt::Checked); | ||||
|  | ||||
|         writeConfiguration(); | ||||
|     } | ||||
|  | ||||
|     dialog->deleteLater(); | ||||
|     delete ui; | ||||
|  | ||||
|     writeConfiguration(); | ||||
|     return ret; | ||||
| } | ||||
|  | ||||
| @ -176,8 +173,10 @@ void AWStringFormatter::writeConfiguration() const | ||||
| } | ||||
|  | ||||
|  | ||||
| void AWStringFormatter::translate() | ||||
| void AWStringFormatter::translate(void *_ui) | ||||
| { | ||||
|     auto ui = reinterpret_cast<Ui::AWStringFormatter *>(_ui); | ||||
|  | ||||
|     ui->label_name->setText(i18n("Name")); | ||||
|     ui->label_comment->setText(i18n("Comment")); | ||||
|     ui->label_type->setText(i18n("Type")); | ||||
|  | ||||
| @ -21,11 +21,6 @@ | ||||
| #include "awabstractformatter.h" | ||||
|  | ||||
|  | ||||
| namespace Ui | ||||
| { | ||||
| class AWStringFormatter; | ||||
| } | ||||
|  | ||||
| class AWStringFormatter : public AWAbstractFormatter | ||||
| { | ||||
|     Q_OBJECT | ||||
| @ -34,8 +29,7 @@ class AWStringFormatter : public AWAbstractFormatter | ||||
|     Q_PROPERTY(bool forceWidth READ forceWidth WRITE setForceWidth) | ||||
|  | ||||
| public: | ||||
|     explicit AWStringFormatter(QWidget *_parent = nullptr, const QString &_filePath = ""); | ||||
|     ~AWStringFormatter() override; | ||||
|     explicit AWStringFormatter(QObject *_parent = nullptr, const QString &_filePath = ""); | ||||
|     [[nodiscard]] QString convert(const QVariant &_value) const override; | ||||
|     AWStringFormatter *copy(const QString &_fileName, int _number) override; | ||||
|     // properties | ||||
| @ -48,12 +42,11 @@ public: | ||||
|  | ||||
| public slots: | ||||
|     void readConfiguration() override; | ||||
|     int showConfiguration(const QVariant &_args) override; | ||||
|     int showConfiguration(QWidget *_parent, const QVariant &_args) override; | ||||
|     void writeConfiguration() const override; | ||||
|  | ||||
| private: | ||||
|     Ui::AWStringFormatter *ui = nullptr; | ||||
|     void translate() override; | ||||
|     void translate(void *_ui) override; | ||||
|     // properties | ||||
|     int m_count = 0; | ||||
|     QChar m_fillChar = QChar(); | ||||
|  | ||||
| @ -31,7 +31,7 @@ | ||||
| template <class T> class ExtItemAggregator : public AbstractExtItemAggregator | ||||
| { | ||||
| public: | ||||
|     explicit ExtItemAggregator(QWidget *_parent, const QString &_type) | ||||
|     explicit ExtItemAggregator(QObject *_parent, const QString &_type) | ||||
|         : AbstractExtItemAggregator(_parent, _type) | ||||
|     { | ||||
|         qSetMessagePattern(AWDebug::LOG_FORMAT); | ||||
| @ -56,8 +56,7 @@ public: | ||||
|  | ||||
|     void editItems() | ||||
|     { | ||||
|         repaintList(); | ||||
|         int ret = exec(); | ||||
|         auto ret = exec(); | ||||
|         qCInfo(LOG_LIB) << "Dialog returns" << ret; | ||||
|     }; | ||||
|  | ||||
| @ -123,7 +122,7 @@ private: | ||||
|     QList<AbstractExtItem *> m_items; | ||||
|     QList<T *> m_activeItems; | ||||
|  | ||||
|     void doCreateItem() override { return createItem<T>(); } | ||||
|     void doCreateItem(QListWidget *_widget) override { return createItem<T>(_widget); } | ||||
|  | ||||
|     QList<AbstractExtItem *> getItems() | ||||
|     { | ||||
| @ -137,7 +136,7 @@ private: | ||||
|                 if (!file.endsWith(".desktop")) | ||||
|                     continue; | ||||
|                 qCInfo(LOG_LIB) << "Found file" << file << "in" << dir; | ||||
|                 QString filePath = QString("%1/%2").arg(dir).arg(file); | ||||
|                 auto filePath = QString("%1/%2").arg(dir, file); | ||||
|                 // check if already exists | ||||
|                 if (std::any_of(items.cbegin(), items.cend(), | ||||
|                                 [&filePath](AbstractExtItem *item) { return (item->fileName() == filePath); })) | ||||
| @ -147,8 +146,7 @@ private: | ||||
|         } | ||||
|  | ||||
|         // sort items | ||||
|         std::sort(items.begin(), items.end(), | ||||
|                   [](const AbstractExtItem *lhs, const AbstractExtItem *rhs) { return lhs->number() < rhs->number(); }); | ||||
|         std::sort(items.begin(), items.end(), [](auto *lhs, auto *rhs) { return lhs->number() < rhs->number(); }); | ||||
|         return items; | ||||
|     }; | ||||
| }; | ||||
|  | ||||
| @ -27,16 +27,13 @@ | ||||
| #include "awdebug.h" | ||||
|  | ||||
|  | ||||
| ExtNetworkRequest::ExtNetworkRequest(QWidget *_parent, const QString &_filePath) | ||||
| ExtNetworkRequest::ExtNetworkRequest(QObject *_parent, const QString &_filePath) | ||||
|     : AbstractExtItem(_parent, _filePath) | ||||
|     , ui(new Ui::ExtNetworkRequest) | ||||
| { | ||||
|     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; | ||||
|  | ||||
|     if (!_filePath.isEmpty()) | ||||
|         ExtNetworkRequest::readConfiguration(); | ||||
|     ui->setupUi(this); | ||||
|     ExtNetworkRequest::translate(); | ||||
|  | ||||
|     m_values[tag("response")] = ""; | ||||
|  | ||||
| @ -57,7 +54,6 @@ ExtNetworkRequest::~ExtNetworkRequest() | ||||
|     disconnect(this, SIGNAL(requestDataUpdate()), this, SLOT(sendRequest())); | ||||
|  | ||||
|     m_manager->deleteLater(); | ||||
|     delete ui; | ||||
| } | ||||
|  | ||||
|  | ||||
| @ -65,7 +61,7 @@ ExtNetworkRequest *ExtNetworkRequest::copy(const QString &_fileName, const int _ | ||||
| { | ||||
|     qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number; | ||||
|  | ||||
|     auto *item = new ExtNetworkRequest(dynamic_cast<QWidget *>(parent()), _fileName); | ||||
|     auto item = new ExtNetworkRequest(parent(), _fileName); | ||||
|     copyDefaults(item); | ||||
|     item->setNumber(_number); | ||||
|     item->setStringUrl(stringUrl()); | ||||
| @ -119,10 +115,15 @@ QVariantHash ExtNetworkRequest::run() | ||||
| } | ||||
|  | ||||
|  | ||||
| int ExtNetworkRequest::showConfiguration(const QVariant &_args) | ||||
| int ExtNetworkRequest::showConfiguration(QWidget *_parent, const QVariant &_args) | ||||
| { | ||||
|     Q_UNUSED(_args) | ||||
|  | ||||
|     auto dialog = new QDialog(_parent); | ||||
|     auto ui = new Ui::ExtNetworkRequest(); | ||||
|     ui->setupUi(dialog); | ||||
|     translate(ui); | ||||
|  | ||||
|     ui->lineEdit_name->setText(name()); | ||||
|     ui->lineEdit_comment->setText(comment()); | ||||
|     ui->label_numberValue->setText(QString("%1").arg(number())); | ||||
| @ -132,20 +133,24 @@ int ExtNetworkRequest::showConfiguration(const QVariant &_args) | ||||
|     ui->lineEdit_socket->setText(socket()); | ||||
|     ui->spinBox_interval->setValue(interval()); | ||||
|  | ||||
|     int ret = exec(); | ||||
|     if (ret != 1) | ||||
|         return ret; | ||||
|     setName(ui->lineEdit_name->text()); | ||||
|     setComment(ui->lineEdit_comment->text()); | ||||
|     setNumber(ui->label_numberValue->text().toInt()); | ||||
|     setApiVersion(AW_EXTNETREQUEST_API); | ||||
|     setStringUrl(ui->lineEdit_url->text()); | ||||
|     setActive(ui->checkBox_active->checkState() == Qt::Checked); | ||||
|     setCron(ui->lineEdit_schedule->text()); | ||||
|     setSocket(ui->lineEdit_socket->text()); | ||||
|     setInterval(ui->spinBox_interval->value()); | ||||
|     auto ret = dialog->exec(); | ||||
|     if (ret == 1) { | ||||
|         setName(ui->lineEdit_name->text()); | ||||
|         setComment(ui->lineEdit_comment->text()); | ||||
|         setNumber(ui->label_numberValue->text().toInt()); | ||||
|         setApiVersion(AW_EXTNETREQUEST_API); | ||||
|         setStringUrl(ui->lineEdit_url->text()); | ||||
|         setActive(ui->checkBox_active->checkState() == Qt::Checked); | ||||
|         setCron(ui->lineEdit_schedule->text()); | ||||
|         setSocket(ui->lineEdit_socket->text()); | ||||
|         setInterval(ui->spinBox_interval->value()); | ||||
|  | ||||
|         writeConfiguration(); | ||||
|     } | ||||
|  | ||||
|     dialog->deleteLater(); | ||||
|     delete ui; | ||||
|  | ||||
|     writeConfiguration(); | ||||
|     return ret; | ||||
| } | ||||
|  | ||||
| @ -181,7 +186,7 @@ void ExtNetworkRequest::networkReplyReceived(QNetworkReply *_reply) | ||||
| void ExtNetworkRequest::sendRequest() | ||||
| { | ||||
|     m_isRunning = true; | ||||
|     QNetworkReply *reply = m_manager->get(QNetworkRequest(m_url)); | ||||
|     auto reply = m_manager->get(QNetworkRequest(m_url)); | ||||
|     new QReplyTimeout(reply, REQUEST_TIMEOUT); | ||||
| } | ||||
|  | ||||
| @ -192,8 +197,10 @@ void ExtNetworkRequest::initUrl() | ||||
| } | ||||
|  | ||||
|  | ||||
| void ExtNetworkRequest::translate() | ||||
| void ExtNetworkRequest::translate(void *_ui) | ||||
| { | ||||
|     auto ui = reinterpret_cast<Ui::ExtNetworkRequest *>(_ui); | ||||
|  | ||||
|     ui->label_name->setText(i18n("Name")); | ||||
|     ui->label_comment->setText(i18n("Comment")); | ||||
|     ui->label_number->setText(i18n("Tag")); | ||||
|  | ||||
| @ -23,18 +23,13 @@ | ||||
| #include "abstractextitem.h" | ||||
|  | ||||
|  | ||||
| namespace Ui | ||||
| { | ||||
| class ExtNetworkRequest; | ||||
| } | ||||
|  | ||||
| class ExtNetworkRequest : public AbstractExtItem | ||||
| { | ||||
|     Q_OBJECT | ||||
|     Q_PROPERTY(QString stringUrl READ stringUrl WRITE setStringUrl) | ||||
|  | ||||
| public: | ||||
|     explicit ExtNetworkRequest(QWidget *_parent = nullptr, const QString &_filePath = ""); | ||||
|     explicit ExtNetworkRequest(QObject *_parent = nullptr, const QString &_filePath = ""); | ||||
|     ~ExtNetworkRequest() override; | ||||
|     ExtNetworkRequest *copy(const QString &_fileName, int _number) override; | ||||
|     // get methods | ||||
| @ -46,7 +41,7 @@ public: | ||||
| public slots: | ||||
|     void readConfiguration() override; | ||||
|     QVariantHash run() override; | ||||
|     int showConfiguration(const QVariant &_args) override; | ||||
|     int showConfiguration(QWidget *_parent, const QVariant &_args) override; | ||||
|     void writeConfiguration() const override; | ||||
|  | ||||
| private slots: | ||||
| @ -57,9 +52,8 @@ private: | ||||
|     QNetworkAccessManager *m_manager = nullptr; | ||||
|     QUrl m_url; | ||||
|     bool m_isRunning = false; | ||||
|     Ui::ExtNetworkRequest *ui = nullptr; | ||||
|     void initUrl(); | ||||
|     void translate() override; | ||||
|     void translate(void *_ui) override; | ||||
|     // properties | ||||
|     QString m_stringUrl = "https://httpbin.org/get"; | ||||
|     // values | ||||
|  | ||||
| @ -20,7 +20,6 @@ | ||||
|  | ||||
| #include <KI18n/KLocalizedString> | ||||
|  | ||||
| #include <QDir> | ||||
| #include <QSettings> | ||||
|  | ||||
| #include <qreplytimeout/qreplytimeout.h> | ||||
| @ -29,16 +28,13 @@ | ||||
| #include "stooqquotesprovider.h" | ||||
|  | ||||
|  | ||||
| ExtQuotes::ExtQuotes(QWidget *_parent, const QString &_filePath) | ||||
| ExtQuotes::ExtQuotes(QObject *_parent, const QString &_filePath) | ||||
|     : AbstractExtItem(_parent, _filePath) | ||||
|     , ui(new Ui::ExtQuotes) | ||||
| { | ||||
|     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; | ||||
|  | ||||
|     if (!_filePath.isEmpty()) | ||||
|         ExtQuotes::readConfiguration(); | ||||
|     ui->setupUi(this); | ||||
|     ExtQuotes::translate(); | ||||
|  | ||||
|     m_values[tag("price")] = 0.0; | ||||
|     m_values[tag("pricechg")] = 0.0; | ||||
| @ -64,7 +60,6 @@ ExtQuotes::~ExtQuotes() | ||||
|     disconnect(this, SIGNAL(requestDataUpdate()), this, SLOT(sendRequest())); | ||||
|  | ||||
|     m_manager->deleteLater(); | ||||
|     delete ui; | ||||
| } | ||||
|  | ||||
|  | ||||
| @ -72,7 +67,7 @@ ExtQuotes *ExtQuotes::copy(const QString &_fileName, const int _number) | ||||
| { | ||||
|     qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number; | ||||
|  | ||||
|     auto *item = new ExtQuotes(dynamic_cast<QWidget *>(parent()), _fileName); | ||||
|     auto item = new ExtQuotes(parent(), _fileName); | ||||
|     copyDefaults(item); | ||||
|     item->setNumber(_number); | ||||
|     item->setTicker(ticker()); | ||||
| @ -126,10 +121,15 @@ QVariantHash ExtQuotes::run() | ||||
| } | ||||
|  | ||||
|  | ||||
| int ExtQuotes::showConfiguration(const QVariant &_args) | ||||
| int ExtQuotes::showConfiguration(QWidget *_parent, const QVariant &_args) | ||||
| { | ||||
|     Q_UNUSED(_args) | ||||
|  | ||||
|     auto dialog = new QDialog(_parent); | ||||
|     auto ui = new Ui::ExtQuotes(); | ||||
|     ui->setupUi(dialog); | ||||
|     translate(ui); | ||||
|  | ||||
|     ui->lineEdit_name->setText(name()); | ||||
|     ui->lineEdit_comment->setText(comment()); | ||||
|     ui->label_numberValue->setText(QString("%1").arg(number())); | ||||
| @ -139,20 +139,24 @@ int ExtQuotes::showConfiguration(const QVariant &_args) | ||||
|     ui->lineEdit_socket->setText(socket()); | ||||
|     ui->spinBox_interval->setValue(interval()); | ||||
|  | ||||
|     int ret = exec(); | ||||
|     if (ret != 1) | ||||
|         return ret; | ||||
|     setName(ui->lineEdit_name->text()); | ||||
|     setComment(ui->lineEdit_comment->text()); | ||||
|     setNumber(ui->label_numberValue->text().toInt()); | ||||
|     setApiVersion(AW_EXTQUOTES_API); | ||||
|     setTicker(ui->lineEdit_ticker->text()); | ||||
|     setActive(ui->checkBox_active->checkState() == Qt::Checked); | ||||
|     setCron(ui->lineEdit_schedule->text()); | ||||
|     setSocket(ui->lineEdit_socket->text()); | ||||
|     setInterval(ui->spinBox_interval->value()); | ||||
|     auto ret = dialog->exec(); | ||||
|     if (ret == 1) { | ||||
|         setName(ui->lineEdit_name->text()); | ||||
|         setComment(ui->lineEdit_comment->text()); | ||||
|         setNumber(ui->label_numberValue->text().toInt()); | ||||
|         setApiVersion(AW_EXTQUOTES_API); | ||||
|         setTicker(ui->lineEdit_ticker->text()); | ||||
|         setActive(ui->checkBox_active->checkState() == Qt::Checked); | ||||
|         setCron(ui->lineEdit_schedule->text()); | ||||
|         setSocket(ui->lineEdit_socket->text()); | ||||
|         setInterval(ui->spinBox_interval->value()); | ||||
|  | ||||
|         writeConfiguration(); | ||||
|     } | ||||
|  | ||||
|     dialog->deleteLater(); | ||||
|     delete ui; | ||||
|  | ||||
|     writeConfiguration(); | ||||
|     return ret; | ||||
| } | ||||
|  | ||||
| @ -182,7 +186,7 @@ void ExtQuotes::quotesReplyReceived(QNetworkReply *_reply) | ||||
|     auto text = _reply->readAll(); | ||||
|     _reply->deleteLater(); | ||||
|  | ||||
|     QVariantHash data = m_providerObject->parse(text, m_values); | ||||
|     auto data = m_providerObject->parse(text, m_values); | ||||
|     if (data.isEmpty()) | ||||
|         return; | ||||
|     m_values = data; | ||||
| @ -194,7 +198,7 @@ void ExtQuotes::quotesReplyReceived(QNetworkReply *_reply) | ||||
| void ExtQuotes::sendRequest() | ||||
| { | ||||
|     m_isRunning = true; | ||||
|     QNetworkReply *reply = m_manager->get(QNetworkRequest(m_providerObject->url())); | ||||
|     auto reply = m_manager->get(QNetworkRequest(m_providerObject->url())); | ||||
|     new QReplyTimeout(reply, REQUEST_TIMEOUT); | ||||
| } | ||||
|  | ||||
| @ -210,8 +214,10 @@ void ExtQuotes::initProvider() | ||||
| } | ||||
|  | ||||
|  | ||||
| void ExtQuotes::translate() | ||||
| void ExtQuotes::translate(void *_ui) | ||||
| { | ||||
|     auto ui = reinterpret_cast<Ui::ExtQuotes *>(_ui); | ||||
|  | ||||
|     ui->label_name->setText(i18n("Name")); | ||||
|     ui->label_comment->setText(i18n("Comment")); | ||||
|     ui->label_number->setText(i18n("Tag")); | ||||
|  | ||||
| @ -24,10 +24,6 @@ | ||||
|  | ||||
|  | ||||
| class AbstractQuotesProvider; | ||||
| namespace Ui | ||||
| { | ||||
| class ExtQuotes; | ||||
| } | ||||
|  | ||||
| class ExtQuotes : public AbstractExtItem | ||||
| { | ||||
| @ -35,7 +31,7 @@ class ExtQuotes : public AbstractExtItem | ||||
|     Q_PROPERTY(QString ticker READ ticker WRITE setTicker) | ||||
|  | ||||
| public: | ||||
|     explicit ExtQuotes(QWidget *_parent = nullptr, const QString &_filePath = ""); | ||||
|     explicit ExtQuotes(QObject *_parent = nullptr, const QString &_filePath = ""); | ||||
|     ~ExtQuotes() override; | ||||
|     ExtQuotes *copy(const QString &_fileName, int _number) override; | ||||
|     // get methods | ||||
| @ -47,7 +43,7 @@ public: | ||||
| public slots: | ||||
|     void readConfiguration() override; | ||||
|     QVariantHash run() override; | ||||
|     int showConfiguration(const QVariant &_args) override; | ||||
|     int showConfiguration(QWidget *_parent, const QVariant &_args) override; | ||||
|     void writeConfiguration() const override; | ||||
|  | ||||
| private slots: | ||||
| @ -58,9 +54,8 @@ private: | ||||
|     AbstractQuotesProvider *m_providerObject = nullptr; | ||||
|     QNetworkAccessManager *m_manager = nullptr; | ||||
|     bool m_isRunning = false; | ||||
|     Ui::ExtQuotes *ui = nullptr; | ||||
|     void initProvider(); | ||||
|     void translate() override; | ||||
|     void translate(void *_ui) override; | ||||
|     // properties | ||||
|     QString m_ticker = "EURUSD=X"; | ||||
|     // values | ||||
|  | ||||
| @ -28,17 +28,14 @@ | ||||
| #include "awdebug.h" | ||||
|  | ||||
|  | ||||
| ExtScript::ExtScript(QWidget *_parent, const QString &_filePath) | ||||
| ExtScript::ExtScript(QObject *_parent, const QString &_filePath) | ||||
|     : AbstractExtItem(_parent, _filePath) | ||||
|     , ui(new Ui::ExtScript) | ||||
| { | ||||
|     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; | ||||
|  | ||||
|     if (!_filePath.isEmpty()) | ||||
|         ExtScript::readConfiguration(); | ||||
|     readJsonFilters(); | ||||
|     ui->setupUi(this); | ||||
|     ExtScript::translate(); | ||||
|  | ||||
|     m_values[tag("custom")] = ""; | ||||
|  | ||||
| @ -58,7 +55,6 @@ ExtScript::~ExtScript() | ||||
|     m_process->kill(); | ||||
|     m_process->deleteLater(); | ||||
|     disconnect(this, SIGNAL(requestDataUpdate()), this, SLOT(startProcess())); | ||||
|     delete ui; | ||||
| } | ||||
|  | ||||
|  | ||||
| @ -66,7 +62,7 @@ ExtScript *ExtScript::copy(const QString &_fileName, const int _number) | ||||
| { | ||||
|     qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number; | ||||
|  | ||||
|     auto *item = new ExtScript(dynamic_cast<QWidget *>(parent()), _fileName); | ||||
|     auto item = new ExtScript(parent(), _fileName); | ||||
|     copyDefaults(item); | ||||
|     item->setExecutable(executable()); | ||||
|     item->setNumber(_number); | ||||
| @ -179,7 +175,7 @@ QString ExtScript::applyFilters(QString _value) const | ||||
|  | ||||
|     for (auto &filt : filters()) { | ||||
|         qCInfo(LOG_LIB) << "Found filter" << filt; | ||||
|         QVariantMap filter = m_jsonFilters[filt].toMap(); | ||||
|         auto filter = m_jsonFilters[filt].toMap(); | ||||
|         if (filter.isEmpty()) { | ||||
|             qCWarning(LOG_LIB) << "Could not find filter" << _value << "in the json"; | ||||
|             continue; | ||||
| @ -225,7 +221,7 @@ void ExtScript::readConfiguration() | ||||
|  | ||||
| void ExtScript::readJsonFilters() | ||||
| { | ||||
|     QString fileName = jsonFiltersFile(); | ||||
|     auto fileName = jsonFiltersFile(); | ||||
|     QFile jsonFile(fileName); | ||||
|     if (!jsonFile.open(QIODevice::ReadOnly | QIODevice::Text)) { | ||||
|         qCWarning(LOG_LIB) << "Could not open" << fileName; | ||||
| @ -235,7 +231,7 @@ void ExtScript::readJsonFilters() | ||||
|     jsonFile.close(); | ||||
|  | ||||
|     QJsonParseError error{}; | ||||
|     QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonText.toUtf8(), &error); | ||||
|     auto jsonDoc = QJsonDocument::fromJson(jsonText.toUtf8(), &error); | ||||
|     if (error.error != QJsonParseError::NoError) { | ||||
|         qCWarning(LOG_LIB) << "Parse error" << error.errorString(); | ||||
|         return; | ||||
| @ -256,10 +252,15 @@ QVariantHash ExtScript::run() | ||||
| } | ||||
|  | ||||
|  | ||||
| int ExtScript::showConfiguration(const QVariant &_args) | ||||
| int ExtScript::showConfiguration(QWidget *_parent, const QVariant &_args) | ||||
| { | ||||
|     Q_UNUSED(_args) | ||||
|  | ||||
|     auto dialog = new QDialog(_parent); | ||||
|     auto ui = new Ui::ExtScript(); | ||||
|     ui->setupUi(dialog); | ||||
|     translate(ui); | ||||
|  | ||||
|     ui->lineEdit_name->setText(name()); | ||||
|     ui->lineEdit_comment->setText(comment()); | ||||
|     ui->label_numberValue->setText(QString("%1").arg(number())); | ||||
| @ -274,25 +275,29 @@ int ExtScript::showConfiguration(const QVariant &_args) | ||||
|     ui->checkBox_linesFilter->setCheckState(filters().contains("newline") ? Qt::Checked : Qt::Unchecked); | ||||
|     ui->checkBox_spaceFilter->setCheckState(filters().contains("space") ? Qt::Checked : Qt::Unchecked); | ||||
|  | ||||
|     int ret = exec(); | ||||
|     if (ret != 1) | ||||
|         return ret; | ||||
|     setName(ui->lineEdit_name->text()); | ||||
|     setComment(ui->lineEdit_comment->text()); | ||||
|     setNumber(ui->label_numberValue->text().toInt()); | ||||
|     setApiVersion(AW_EXTSCRIPT_API); | ||||
|     setExecutable(ui->lineEdit_command->text()); | ||||
|     setActive(ui->checkBox_active->checkState() == Qt::Checked); | ||||
|     setRedirect(static_cast<Redirect>(ui->comboBox_redirect->currentIndex())); | ||||
|     setCron(ui->lineEdit_schedule->text()); | ||||
|     setSocket(ui->lineEdit_socket->text()); | ||||
|     setInterval(ui->spinBox_interval->value()); | ||||
|     // filters | ||||
|     updateFilter("color", ui->checkBox_colorFilter->checkState() == Qt::Checked); | ||||
|     updateFilter("newline", ui->checkBox_linesFilter->checkState() == Qt::Checked); | ||||
|     updateFilter("space", ui->checkBox_spaceFilter->checkState() == Qt::Checked); | ||||
|     int ret = dialog->exec(); | ||||
|     if (ret == 1) { | ||||
|         setName(ui->lineEdit_name->text()); | ||||
|         setComment(ui->lineEdit_comment->text()); | ||||
|         setNumber(ui->label_numberValue->text().toInt()); | ||||
|         setApiVersion(AW_EXTSCRIPT_API); | ||||
|         setExecutable(ui->lineEdit_command->text()); | ||||
|         setActive(ui->checkBox_active->checkState() == Qt::Checked); | ||||
|         setRedirect(static_cast<Redirect>(ui->comboBox_redirect->currentIndex())); | ||||
|         setCron(ui->lineEdit_schedule->text()); | ||||
|         setSocket(ui->lineEdit_socket->text()); | ||||
|         setInterval(ui->spinBox_interval->value()); | ||||
|         // filters | ||||
|         updateFilter("color", ui->checkBox_colorFilter->checkState() == Qt::Checked); | ||||
|         updateFilter("newline", ui->checkBox_linesFilter->checkState() == Qt::Checked); | ||||
|         updateFilter("space", ui->checkBox_spaceFilter->checkState() == Qt::Checked); | ||||
|  | ||||
|         writeConfiguration(); | ||||
|     } | ||||
|  | ||||
|     dialog->deleteLater(); | ||||
|     delete ui; | ||||
|  | ||||
|     writeConfiguration(); | ||||
|     return ret; | ||||
| } | ||||
|  | ||||
| @ -324,9 +329,9 @@ void ExtScript::startProcess() | ||||
| void ExtScript::updateValue() | ||||
| { | ||||
|     qCInfo(LOG_LIB) << "Cmd returns" << m_process->exitCode(); | ||||
|     QString qdebug = QString::fromUtf8(m_process->readAllStandardError()).trimmed(); | ||||
|     auto qdebug = QString::fromUtf8(m_process->readAllStandardError()).trimmed(); | ||||
|     qCInfo(LOG_LIB) << "Error" << qdebug; | ||||
|     QString qoutput = QString::fromUtf8(m_process->readAllStandardOutput()).trimmed(); | ||||
|     auto qoutput = QString::fromUtf8(m_process->readAllStandardOutput()).trimmed(); | ||||
|     qCInfo(LOG_LIB) << "Output" << qoutput; | ||||
|     QString strValue; | ||||
|  | ||||
| @ -350,8 +355,10 @@ void ExtScript::updateValue() | ||||
| } | ||||
|  | ||||
|  | ||||
| void ExtScript::translate() | ||||
| void ExtScript::translate(void *_ui) | ||||
| { | ||||
|     auto ui = reinterpret_cast<Ui::ExtScript *>(_ui); | ||||
|  | ||||
|     ui->label_name->setText(i18n("Name")); | ||||
|     ui->label_comment->setText(i18n("Comment")); | ||||
|     ui->label_number->setText(i18n("Tag")); | ||||
|  | ||||
| @ -23,11 +23,6 @@ | ||||
| #include "abstractextitem.h" | ||||
|  | ||||
|  | ||||
| namespace Ui | ||||
| { | ||||
| class ExtScript; | ||||
| } | ||||
|  | ||||
| class ExtScript : public AbstractExtItem | ||||
| { | ||||
|     Q_OBJECT | ||||
| @ -38,7 +33,7 @@ class ExtScript : public AbstractExtItem | ||||
| public: | ||||
|     enum class Redirect { stdout2stderr = 0, nothing = 1, stderr2stdout = 2, swap = 3 }; | ||||
|  | ||||
|     explicit ExtScript(QWidget *_parent = nullptr, const QString &_filePath = ""); | ||||
|     explicit ExtScript(QObject *_parent = nullptr, const QString &_filePath = ""); | ||||
|     ~ExtScript() override; | ||||
|     ExtScript *copy(const QString &_fileName, int _number) override; | ||||
|     static QString jsonFiltersFile(); | ||||
| @ -62,7 +57,7 @@ public slots: | ||||
|     void readConfiguration() override; | ||||
|     void readJsonFilters(); | ||||
|     QVariantHash run() override; | ||||
|     int showConfiguration(const QVariant &_args) override; | ||||
|     int showConfiguration(QWidget *_parent, const QVariant &_args) override; | ||||
|     void writeConfiguration() const override; | ||||
|  | ||||
| private slots: | ||||
| @ -71,8 +66,7 @@ private slots: | ||||
|  | ||||
| private: | ||||
|     QProcess *m_process = nullptr; | ||||
|     Ui::ExtScript *ui = nullptr; | ||||
|     void translate() override; | ||||
|     void translate(void *_ui) override; | ||||
|     // properties | ||||
|     QString m_executable = "/usr/bin/true"; | ||||
|     QStringList m_filters = QStringList(); | ||||
|  | ||||
| @ -25,16 +25,13 @@ | ||||
| #include "awdebug.h" | ||||
|  | ||||
|  | ||||
| ExtUpgrade::ExtUpgrade(QWidget *_parent, const QString &_filePath) | ||||
| ExtUpgrade::ExtUpgrade(QObject *_parent, const QString &_filePath) | ||||
|     : AbstractExtItem(_parent, _filePath) | ||||
|     , ui(new Ui::ExtUpgrade) | ||||
| { | ||||
|     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; | ||||
|  | ||||
|     if (!_filePath.isEmpty()) | ||||
|         ExtUpgrade::readConfiguration(); | ||||
|     ui->setupUi(this); | ||||
|     ExtUpgrade::translate(); | ||||
|  | ||||
|     m_values[tag("pkgcount")] = 0; | ||||
|  | ||||
| @ -53,7 +50,6 @@ ExtUpgrade::~ExtUpgrade() | ||||
|     m_process->kill(); | ||||
|     m_process->deleteLater(); | ||||
|     disconnect(this, SIGNAL(requestDataUpdate()), this, SLOT(startProcess())); | ||||
|     delete ui; | ||||
| } | ||||
|  | ||||
|  | ||||
| @ -61,7 +57,7 @@ ExtUpgrade *ExtUpgrade::copy(const QString &_fileName, const int _number) | ||||
| { | ||||
|     qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number; | ||||
|  | ||||
|     auto *item = new ExtUpgrade(dynamic_cast<QWidget *>(parent()), _fileName); | ||||
|     auto item = new ExtUpgrade(parent(), _fileName); | ||||
|     copyDefaults(item); | ||||
|     item->setExecutable(executable()); | ||||
|     item->setFilter(filter()); | ||||
| @ -149,10 +145,15 @@ QVariantHash ExtUpgrade::run() | ||||
| } | ||||
|  | ||||
|  | ||||
| int ExtUpgrade::showConfiguration(const QVariant &_args) | ||||
| int ExtUpgrade::showConfiguration(QWidget *_parent, const QVariant &_args) | ||||
| { | ||||
|     Q_UNUSED(_args) | ||||
|  | ||||
|     auto dialog = new QDialog(_parent); | ||||
|     auto ui = new Ui::ExtUpgrade(); | ||||
|     ui->setupUi(dialog); | ||||
|     translate(ui); | ||||
|  | ||||
|     ui->lineEdit_name->setText(name()); | ||||
|     ui->lineEdit_comment->setText(comment()); | ||||
|     ui->label_numberValue->setText(QString("%1").arg(number())); | ||||
| @ -164,22 +165,26 @@ int ExtUpgrade::showConfiguration(const QVariant &_args) | ||||
|     ui->lineEdit_socket->setText(socket()); | ||||
|     ui->spinBox_interval->setValue(interval()); | ||||
|  | ||||
|     int ret = exec(); | ||||
|     if (ret != 1) | ||||
|         return ret; | ||||
|     setName(ui->lineEdit_name->text()); | ||||
|     setComment(ui->lineEdit_comment->text()); | ||||
|     setNumber(ui->label_numberValue->text().toInt()); | ||||
|     setApiVersion(AW_EXTUPGRADE_API); | ||||
|     setExecutable(ui->lineEdit_command->text()); | ||||
|     setFilter(ui->lineEdit_filter->text()); | ||||
|     setActive(ui->checkBox_active->checkState() == Qt::Checked); | ||||
|     setNull(ui->spinBox_null->value()); | ||||
|     setCron(ui->lineEdit_schedule->text()); | ||||
|     setSocket(ui->lineEdit_socket->text()); | ||||
|     setInterval(ui->spinBox_interval->value()); | ||||
|     auto ret = dialog->exec(); | ||||
|     if (ret == 1) { | ||||
|         setName(ui->lineEdit_name->text()); | ||||
|         setComment(ui->lineEdit_comment->text()); | ||||
|         setNumber(ui->label_numberValue->text().toInt()); | ||||
|         setApiVersion(AW_EXTUPGRADE_API); | ||||
|         setExecutable(ui->lineEdit_command->text()); | ||||
|         setFilter(ui->lineEdit_filter->text()); | ||||
|         setActive(ui->checkBox_active->checkState() == Qt::Checked); | ||||
|         setNull(ui->spinBox_null->value()); | ||||
|         setCron(ui->lineEdit_schedule->text()); | ||||
|         setSocket(ui->lineEdit_socket->text()); | ||||
|         setInterval(ui->spinBox_interval->value()); | ||||
|  | ||||
|         writeConfiguration(); | ||||
|     } | ||||
|  | ||||
|     dialog->deleteLater(); | ||||
|     delete ui; | ||||
|  | ||||
|     writeConfiguration(); | ||||
|     return ret; | ||||
| } | ||||
|  | ||||
| @ -213,7 +218,7 @@ void ExtUpgrade::updateValue() | ||||
|     qCInfo(LOG_LIB) << "Cmd returns" << m_process->exitCode(); | ||||
|     qCInfo(LOG_LIB) << "Error" << m_process->readAllStandardError(); | ||||
|  | ||||
|     QString qoutput = QString::fromUtf8(m_process->readAllStandardOutput()).trimmed(); | ||||
|     auto qoutput = QString::fromUtf8(m_process->readAllStandardOutput()).trimmed(); | ||||
|     m_values[tag("pkgcount")] = [this](const QString &output) { | ||||
|         return filter().isEmpty() ? output.split('\n', Qt::SkipEmptyParts).count() - null() | ||||
|                                   : output.split('\n', Qt::SkipEmptyParts).filter(QRegularExpression(filter())).count(); | ||||
| @ -223,8 +228,10 @@ void ExtUpgrade::updateValue() | ||||
| } | ||||
|  | ||||
|  | ||||
| void ExtUpgrade::translate() | ||||
| void ExtUpgrade::translate(void *_ui) | ||||
| { | ||||
|     auto ui = reinterpret_cast<Ui::ExtUpgrade *>(_ui); | ||||
|  | ||||
|     ui->label_name->setText(i18n("Name")); | ||||
|     ui->label_comment->setText(i18n("Comment")); | ||||
|     ui->label_number->setText(i18n("Tag")); | ||||
|  | ||||
| @ -23,11 +23,6 @@ | ||||
| #include "abstractextitem.h" | ||||
|  | ||||
|  | ||||
| namespace Ui | ||||
| { | ||||
| class ExtUpgrade; | ||||
| } | ||||
|  | ||||
| class ExtUpgrade : public AbstractExtItem | ||||
| { | ||||
|     Q_OBJECT | ||||
| @ -36,7 +31,7 @@ class ExtUpgrade : public AbstractExtItem | ||||
|     Q_PROPERTY(int null READ null WRITE setNull) | ||||
|  | ||||
| public: | ||||
|     explicit ExtUpgrade(QWidget *_parent = nullptr, const QString &_filePath = ""); | ||||
|     explicit ExtUpgrade(QObject *_parent = nullptr, const QString &_filePath = ""); | ||||
|     ~ExtUpgrade() override; | ||||
|     ExtUpgrade *copy(const QString &_fileName, int _number) override; | ||||
|     // get methods | ||||
| @ -52,7 +47,7 @@ public: | ||||
| public slots: | ||||
|     void readConfiguration() override; | ||||
|     QVariantHash run() override; | ||||
|     int showConfiguration(const QVariant &_args) override; | ||||
|     int showConfiguration(QWidget *_parent, const QVariant &_args) override; | ||||
|     void writeConfiguration() const override; | ||||
|  | ||||
| private slots: | ||||
| @ -61,8 +56,7 @@ private slots: | ||||
|  | ||||
| private: | ||||
|     QProcess *m_process = nullptr; | ||||
|     Ui::ExtUpgrade *ui = nullptr; | ||||
|     void translate() override; | ||||
|     void translate(void *_ui) override; | ||||
|     // properties | ||||
|     QString m_executable = "/usr/bin/true"; | ||||
|     QString m_filter = ""; | ||||
|  | ||||
| @ -29,20 +29,16 @@ | ||||
|  | ||||
| #include "awdebug.h" | ||||
| #include "owmweatherprovider.h" | ||||
| #include "yahooweatherprovider.h" | ||||
|  | ||||
|  | ||||
| ExtWeather::ExtWeather(QWidget *_parent, const QString &_filePath) | ||||
| ExtWeather::ExtWeather(QObject *_parent, const QString &_filePath) | ||||
|     : AbstractExtItem(_parent, _filePath) | ||||
|     , ui(new Ui::ExtWeather) | ||||
| { | ||||
|     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; | ||||
|  | ||||
|     if (!_filePath.isEmpty()) | ||||
|         ExtWeather::readConfiguration(); | ||||
|     readJsonMap(); | ||||
|     ui->setupUi(this); | ||||
|     ExtWeather::translate(); | ||||
|  | ||||
|     m_values[tag("weatherId")] = 0; | ||||
|     m_values[tag("weather")] = ""; | ||||
| @ -67,7 +63,6 @@ ExtWeather::~ExtWeather() | ||||
|     disconnect(this, SIGNAL(requestDataUpdate()), this, SLOT(sendRequest())); | ||||
|  | ||||
|     m_manager->deleteLater(); | ||||
|     delete ui; | ||||
| } | ||||
|  | ||||
|  | ||||
| @ -75,7 +70,7 @@ ExtWeather *ExtWeather::copy(const QString &_fileName, const int _number) | ||||
| { | ||||
|     qCDebug(LOG_LIB) << "File" << _fileName << "number" << _number; | ||||
|  | ||||
|     auto *item = new ExtWeather(dynamic_cast<QWidget *>(parent()), _fileName); | ||||
|     auto item = new ExtWeather(parent(), _fileName); | ||||
|     copyDefaults(item); | ||||
|     item->setCity(city()); | ||||
|     item->setCountry(country()); | ||||
| @ -102,7 +97,7 @@ QString ExtWeather::weatherFromInt(const int _id) const | ||||
| { | ||||
|     qCDebug(LOG_LIB) << "Weather ID" << _id; | ||||
|  | ||||
|     QVariantMap map = m_jsonMap[m_image ? "image" : "text"].toMap(); | ||||
|     auto map = m_jsonMap[m_image ? "image" : "text"].toMap(); | ||||
|     return map.value(QString::number(_id), map["default"]).toString(); | ||||
| } | ||||
|  | ||||
| @ -236,7 +231,7 @@ void ExtWeather::readConfiguration() | ||||
|  | ||||
| void ExtWeather::readJsonMap() | ||||
| { | ||||
|     QString fileName = jsonMapFile(); | ||||
|     auto fileName = jsonMapFile(); | ||||
|     QFile jsonFile(fileName); | ||||
|     if (!jsonFile.open(QIODevice::ReadOnly | QIODevice::Text)) { | ||||
|         qCWarning(LOG_LIB) << "Could not open" << fileName; | ||||
| @ -246,7 +241,7 @@ void ExtWeather::readJsonMap() | ||||
|     jsonFile.close(); | ||||
|  | ||||
|     QJsonParseError error{}; | ||||
|     QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonText.toUtf8(), &error); | ||||
|     auto jsonDoc = QJsonDocument::fromJson(jsonText.toUtf8(), &error); | ||||
|     if (error.error != QJsonParseError::NoError) { | ||||
|         qCWarning(LOG_LIB) << "Parse error" << error.errorString(); | ||||
|         return; | ||||
| @ -267,10 +262,15 @@ QVariantHash ExtWeather::run() | ||||
| } | ||||
|  | ||||
|  | ||||
| int ExtWeather::showConfiguration(const QVariant &_args) | ||||
| int ExtWeather::showConfiguration(QWidget *_parent, const QVariant &_args) | ||||
| { | ||||
|     Q_UNUSED(_args) | ||||
|  | ||||
|     auto dialog = new QDialog(_parent); | ||||
|     auto ui = new Ui::ExtWeather(); | ||||
|     ui->setupUi(dialog); | ||||
|     translate(ui); | ||||
|  | ||||
|     ui->lineEdit_name->setText(name()); | ||||
|     ui->lineEdit_comment->setText(comment()); | ||||
|     ui->label_numberValue->setText(QString("%1").arg(number())); | ||||
| @ -284,24 +284,28 @@ int ExtWeather::showConfiguration(const QVariant &_args) | ||||
|     ui->lineEdit_socket->setText(socket()); | ||||
|     ui->spinBox_interval->setValue(interval()); | ||||
|  | ||||
|     int ret = exec(); | ||||
|     if (ret != 1) | ||||
|         return ret; | ||||
|     setName(ui->lineEdit_name->text()); | ||||
|     setComment(ui->lineEdit_comment->text()); | ||||
|     setNumber(ui->label_numberValue->text().toInt()); | ||||
|     setApiVersion(AW_EXTWEATHER_API); | ||||
|     setCity(ui->lineEdit_city->text()); | ||||
|     setCountry(ui->lineEdit_country->text()); | ||||
|     setProvider(static_cast<Provider>(ui->comboBox_provider->currentIndex())); | ||||
|     setTs(ui->spinBox_timestamp->value()); | ||||
|     setImage(ui->checkBox_image->checkState() == Qt::Checked); | ||||
|     setActive(ui->checkBox_active->checkState() == Qt::Checked); | ||||
|     setCron(ui->lineEdit_schedule->text()); | ||||
|     setSocket(ui->lineEdit_socket->text()); | ||||
|     setInterval(ui->spinBox_interval->value()); | ||||
|     int ret = dialog->exec(); | ||||
|     if (ret == 1) { | ||||
|         setName(ui->lineEdit_name->text()); | ||||
|         setComment(ui->lineEdit_comment->text()); | ||||
|         setNumber(ui->label_numberValue->text().toInt()); | ||||
|         setApiVersion(AW_EXTWEATHER_API); | ||||
|         setCity(ui->lineEdit_city->text()); | ||||
|         setCountry(ui->lineEdit_country->text()); | ||||
|         setProvider(static_cast<Provider>(ui->comboBox_provider->currentIndex())); | ||||
|         setTs(ui->spinBox_timestamp->value()); | ||||
|         setImage(ui->checkBox_image->checkState() == Qt::Checked); | ||||
|         setActive(ui->checkBox_active->checkState() == Qt::Checked); | ||||
|         setCron(ui->lineEdit_schedule->text()); | ||||
|         setSocket(ui->lineEdit_socket->text()); | ||||
|         setInterval(ui->spinBox_interval->value()); | ||||
|  | ||||
|         writeConfiguration(); | ||||
|     } | ||||
|  | ||||
|     dialog->deleteLater(); | ||||
|     delete ui; | ||||
|  | ||||
|     writeConfiguration(); | ||||
|     return ret; | ||||
| } | ||||
|  | ||||
| @ -328,7 +332,7 @@ void ExtWeather::writeConfiguration() const | ||||
| void ExtWeather::sendRequest() | ||||
| { | ||||
|     m_isRunning = true; | ||||
|     QNetworkReply *reply = m_manager->get(QNetworkRequest(m_providerObject->url())); | ||||
|     auto reply = m_manager->get(QNetworkRequest(m_providerObject->url())); | ||||
|     new QReplyTimeout(reply, REQUEST_TIMEOUT); | ||||
| } | ||||
|  | ||||
| @ -342,14 +346,14 @@ void ExtWeather::weatherReplyReceived(QNetworkReply *_reply) | ||||
|  | ||||
|     m_isRunning = false; | ||||
|     QJsonParseError error{}; | ||||
|     QJsonDocument jsonDoc = QJsonDocument::fromJson(_reply->readAll(), &error); | ||||
|     auto jsonDoc = QJsonDocument::fromJson(_reply->readAll(), &error); | ||||
|     _reply->deleteLater(); | ||||
|     if (error.error != QJsonParseError::NoError) { | ||||
|         qCWarning(LOG_LIB) << "Parse error" << error.errorString(); | ||||
|         return; | ||||
|     } | ||||
|  | ||||
|     QVariantHash data = m_providerObject->parse(jsonDoc.toVariant().toMap()); | ||||
|     auto data = m_providerObject->parse(jsonDoc.toVariant().toMap()); | ||||
|     if (data.isEmpty()) | ||||
|         return; | ||||
|     m_values = data; | ||||
| @ -370,8 +374,10 @@ void ExtWeather::initProvider() | ||||
| } | ||||
|  | ||||
|  | ||||
| void ExtWeather::translate() | ||||
| void ExtWeather::translate(void *_ui) | ||||
| { | ||||
|     auto ui = reinterpret_cast<Ui::ExtWeather *>(_ui); | ||||
|  | ||||
|     ui->label_name->setText(i18n("Name")); | ||||
|     ui->label_comment->setText(i18n("Comment")); | ||||
|     ui->label_number->setText(i18n("Tag")); | ||||
|  | ||||
| @ -42,7 +42,7 @@ class ExtWeather : public AbstractExtItem | ||||
| public: | ||||
|     enum class Provider { OWM = 0, Yahoo = 1 }; | ||||
|  | ||||
|     explicit ExtWeather(QWidget *_parent = nullptr, const QString &_filePath = ""); | ||||
|     explicit ExtWeather(QObject *_parent = nullptr, const QString &_filePath = ""); | ||||
|     ~ExtWeather() override; | ||||
|     ExtWeather *copy(const QString &_fileName, int _number) override; | ||||
|     static QString jsonMapFile(); | ||||
| @ -67,7 +67,7 @@ public slots: | ||||
|     void readConfiguration() override; | ||||
|     void readJsonMap(); | ||||
|     QVariantHash run() override; | ||||
|     int showConfiguration(const QVariant &_args) override; | ||||
|     int showConfiguration(QWidget *_parent, const QVariant &_args) override; | ||||
|     void writeConfiguration() const override; | ||||
|  | ||||
| private slots: | ||||
| @ -78,9 +78,8 @@ private: | ||||
|     AbstractWeatherProvider *m_providerObject = nullptr; | ||||
|     QNetworkAccessManager *m_manager = nullptr; | ||||
|     bool m_isRunning = false; | ||||
|     Ui::ExtWeather *ui = nullptr; | ||||
|     void initProvider(); | ||||
|     void translate() override; | ||||
|     void translate(void *_ui) override; | ||||
|     // properties | ||||
|     QString m_city = "London"; | ||||
|     QString m_country = "uk"; | ||||
|  | ||||
| @ -32,9 +32,8 @@ | ||||
| #include "graphicalitemhelper.h" | ||||
|  | ||||
|  | ||||
| GraphicalItem::GraphicalItem(QWidget *_parent, const QString &_filePath) | ||||
| GraphicalItem::GraphicalItem(QObject *_parent, const QString &_filePath) | ||||
|     : AbstractExtItem(_parent, _filePath) | ||||
|     , ui(new Ui::GraphicalItem) | ||||
| { | ||||
|     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; | ||||
|  | ||||
| @ -53,21 +52,6 @@ GraphicalItem::GraphicalItem(QWidget *_parent, const QString &_filePath) | ||||
|  | ||||
|     if (!_filePath.isEmpty()) | ||||
|         GraphicalItem::readConfiguration(); | ||||
|     ui->setupUi(this); | ||||
|     GraphicalItem::translate(); | ||||
|  | ||||
|     connect(ui->checkBox_custom, SIGNAL(stateChanged(int)), this, SLOT(changeValue(int))); | ||||
|     connect(ui->comboBox_type, SIGNAL(currentIndexChanged(int)), this, SLOT(changeCountState(int))); | ||||
|     connect(ui->toolButton_activeColor, SIGNAL(clicked()), this, SLOT(changeColor())); | ||||
|     connect(ui->toolButton_inactiveColor, SIGNAL(clicked()), this, SLOT(changeColor())); | ||||
| } | ||||
|  | ||||
|  | ||||
| GraphicalItem::~GraphicalItem() | ||||
| { | ||||
|     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; | ||||
|  | ||||
|     delete ui; | ||||
| } | ||||
|  | ||||
|  | ||||
| @ -75,7 +59,7 @@ GraphicalItem *GraphicalItem::copy(const QString &_fileName, const int _number) | ||||
| { | ||||
|     qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number; | ||||
|  | ||||
|     auto *item = new GraphicalItem(dynamic_cast<QWidget *>(parent()), _fileName); | ||||
|     auto item = new GraphicalItem(parent(), _fileName); | ||||
|     copyDefaults(item); | ||||
|     item->setActiveColor(activeColor()); | ||||
|     item->setBar(bar()); | ||||
| @ -100,7 +84,7 @@ QString GraphicalItem::image(const QVariant &value) | ||||
|  | ||||
|     m_scene->clear(); | ||||
|     int scale[2] = {1, 1}; | ||||
|     float converted = GraphicalItemHelper::getPercents(value.toFloat(), minValue(), maxValue()); | ||||
|     auto converted = GraphicalItemHelper::getPercents(value.toFloat(), minValue(), maxValue()); | ||||
|  | ||||
|     // paint | ||||
|     switch (m_type) { | ||||
| @ -132,11 +116,11 @@ QString GraphicalItem::image(const QVariant &value) | ||||
|     } | ||||
|  | ||||
|     // convert | ||||
|     QPixmap pixmap = m_view->grab().transformed(QTransform().scale(scale[0], scale[1])); | ||||
|     auto pixmap = m_view->grab().transformed(QTransform().scale(scale[0], scale[1])); | ||||
|     QByteArray byteArray; | ||||
|     QBuffer buffer(&byteArray); | ||||
|     pixmap.save(&buffer, "PNG"); | ||||
|     QString url = QString("<img src=\"data:image/png;base64,%1\"/>").arg(QString(byteArray.toBase64())); | ||||
|     auto url = QString("<img src=\"data:image/png;base64,%1\"/>").arg(QString(byteArray.toBase64())); | ||||
|  | ||||
|     return url; | ||||
| } | ||||
| @ -438,10 +422,21 @@ void GraphicalItem::readConfiguration() | ||||
| } | ||||
|  | ||||
|  | ||||
| int GraphicalItem::showConfiguration(const QVariant &_args) | ||||
| int GraphicalItem::showConfiguration(QWidget *_parent, const QVariant &_args) | ||||
| { | ||||
|     qCDebug(LOG_LIB) << "Combobox arguments" << _args; | ||||
|     QStringList tags = _args.toStringList(); | ||||
|     auto tags = _args.toStringList(); | ||||
|  | ||||
|     auto dialog = new QDialog(_parent); | ||||
|     auto ui = new Ui::GraphicalItem(); | ||||
|     ui->setupUi(dialog); | ||||
|     translate(ui); | ||||
|  | ||||
|     connect(ui->checkBox_custom, &QCheckBox::stateChanged, [this, ui](const int state) { changeValue(ui, state); }); | ||||
|     connect(ui->comboBox_type, &QComboBox::currentIndexChanged, | ||||
|             [this, ui](const int state) { changeCountState(ui, state); }); | ||||
|     connect(ui->toolButton_activeColor, &QToolButton::clicked, [this, ui]() { changeColor(ui); }); | ||||
|     connect(ui->toolButton_inactiveColor, &QToolButton::clicked, [this, ui]() { changeColor(ui); }); | ||||
|  | ||||
|     ui->lineEdit_name->setText(name()); | ||||
|     ui->lineEdit_comment->setText(comment()); | ||||
| @ -476,25 +471,29 @@ int GraphicalItem::showConfiguration(const QVariant &_args) | ||||
|     emit(ui->comboBox_type->currentIndexChanged(ui->comboBox_type->currentIndex())); | ||||
|     emit(ui->checkBox_custom->stateChanged(ui->checkBox_custom->checkState())); | ||||
|  | ||||
|     int ret = exec(); | ||||
|     if (ret != 1) | ||||
|         return ret; | ||||
|     setName(ui->lineEdit_name->text()); | ||||
|     setComment(ui->lineEdit_comment->text()); | ||||
|     setApiVersion(AW_GRAPHITEM_API); | ||||
|     setCount(ui->spinBox_count->value()); | ||||
|     setCustom(ui->checkBox_custom->isChecked()); | ||||
|     setBar(m_custom ? ui->lineEdit_customValue->text() : ui->comboBox_value->currentText()); | ||||
|     setMaxValue(static_cast<float>(ui->doubleSpinBox_max->value())); | ||||
|     setMinValue(static_cast<float>(ui->doubleSpinBox_min->value())); | ||||
|     setActiveColor(ui->lineEdit_activeColor->text()); | ||||
|     setInactiveColor(ui->lineEdit_inactiveColor->text()); | ||||
|     setType(static_cast<Type>(ui->comboBox_type->currentIndex())); | ||||
|     setDirection(static_cast<Direction>(ui->comboBox_direction->currentIndex())); | ||||
|     setItemHeight(ui->spinBox_height->value()); | ||||
|     setItemWidth(ui->spinBox_width->value()); | ||||
|     int ret = dialog->exec(); | ||||
|     if (ret == 1) { | ||||
|         setName(ui->lineEdit_name->text()); | ||||
|         setComment(ui->lineEdit_comment->text()); | ||||
|         setApiVersion(AW_GRAPHITEM_API); | ||||
|         setCount(ui->spinBox_count->value()); | ||||
|         setCustom(ui->checkBox_custom->isChecked()); | ||||
|         setBar(m_custom ? ui->lineEdit_customValue->text() : ui->comboBox_value->currentText()); | ||||
|         setMaxValue(static_cast<float>(ui->doubleSpinBox_max->value())); | ||||
|         setMinValue(static_cast<float>(ui->doubleSpinBox_min->value())); | ||||
|         setActiveColor(ui->lineEdit_activeColor->text()); | ||||
|         setInactiveColor(ui->lineEdit_inactiveColor->text()); | ||||
|         setType(static_cast<Type>(ui->comboBox_type->currentIndex())); | ||||
|         setDirection(static_cast<Direction>(ui->comboBox_direction->currentIndex())); | ||||
|         setItemHeight(ui->spinBox_height->value()); | ||||
|         setItemWidth(ui->spinBox_width->value()); | ||||
|  | ||||
|         writeConfiguration(); | ||||
|     } | ||||
|  | ||||
|     dialog->deleteLater(); | ||||
|     delete ui; | ||||
|  | ||||
|     writeConfiguration(); | ||||
|     return ret; | ||||
| } | ||||
|  | ||||
| @ -524,23 +523,23 @@ void GraphicalItem::writeConfiguration() const | ||||
| } | ||||
|  | ||||
|  | ||||
| void GraphicalItem::changeColor() | ||||
| void GraphicalItem::changeColor(Ui::GraphicalItem *_ui) | ||||
| { | ||||
|     QLineEdit *lineEdit; | ||||
|     int state; | ||||
|     if (sender() == ui->toolButton_activeColor) { | ||||
|         lineEdit = ui->lineEdit_activeColor; | ||||
|         state = ui->comboBox_activeImageType->currentIndex(); | ||||
|     if (sender() == _ui->toolButton_activeColor) { | ||||
|         lineEdit = _ui->lineEdit_activeColor; | ||||
|         state = _ui->comboBox_activeImageType->currentIndex(); | ||||
|     } else { | ||||
|         lineEdit = ui->lineEdit_inactiveColor; | ||||
|         state = ui->comboBox_inactiveImageType->currentIndex(); | ||||
|         lineEdit = _ui->lineEdit_inactiveColor; | ||||
|         state = _ui->comboBox_inactiveImageType->currentIndex(); | ||||
|     } | ||||
|     qCInfo(LOG_LIB) << "Using state" << state << "and lineEdit" << lineEdit; | ||||
|  | ||||
|     QString outputColor; | ||||
|     if (state == 0) { | ||||
|         QColor color = GraphicalItemHelper::stringToColor(lineEdit->text()); | ||||
|         QColor newColor = QColorDialog::getColor(color, this, i18n("Select color"), QColorDialog::ShowAlphaChannel); | ||||
|         auto color = GraphicalItemHelper::stringToColor(lineEdit->text()); | ||||
|         auto newColor = QColorDialog::getColor(color, nullptr, i18n("Select color"), QColorDialog::ShowAlphaChannel); | ||||
|         if (!newColor.isValid()) | ||||
|             return; | ||||
|         qCInfo(LOG_LIB) << "Selected color" << newColor; | ||||
| @ -553,9 +552,9 @@ void GraphicalItem::changeColor() | ||||
|  | ||||
|         outputColor = QString("color://%1").arg(colorText.join(',')); | ||||
|     } else if (state == 1) { | ||||
|         QString path = lineEdit->text(); | ||||
|         QString directory = QFileInfo(path).absolutePath(); | ||||
|         outputColor = QFileDialog::getOpenFileUrl(this, i18n("Select path"), directory, | ||||
|         auto path = lineEdit->text(); | ||||
|         auto directory = QFileInfo(path).absolutePath(); | ||||
|         outputColor = QFileDialog::getOpenFileUrl(nullptr, i18n("Select path"), directory, | ||||
|                                                   i18n("Images (*.png *.bpm *.jpg);;All files (*.*)")) | ||||
|                           .toString(); | ||||
|  | ||||
| @ -570,26 +569,28 @@ void GraphicalItem::changeColor() | ||||
| } | ||||
|  | ||||
|  | ||||
| void GraphicalItem::changeCountState(const int _state) | ||||
| void GraphicalItem::changeCountState(Ui::GraphicalItem *_ui, const int _state) | ||||
| { | ||||
|     qCDebug(LOG_LIB) << "Current state is" << _state; | ||||
|  | ||||
|     // 3 is magic number. Actually 3 is Graph mode | ||||
|     ui->widget_count->setHidden(_state != 3); | ||||
|     _ui->widget_count->setHidden(_state != 3); | ||||
| } | ||||
|  | ||||
|  | ||||
| void GraphicalItem::changeValue(const int _state) | ||||
| void GraphicalItem::changeValue(Ui::GraphicalItem *_ui, const int _state) | ||||
| { | ||||
|     qCDebug(LOG_LIB) << "Current state is" << _state; | ||||
|  | ||||
|     ui->widget_value->setHidden(_state != Qt::Unchecked); | ||||
|     ui->widget_customValue->setHidden(_state == Qt::Unchecked); | ||||
|     _ui->widget_value->setHidden(_state != Qt::Unchecked); | ||||
|     _ui->widget_customValue->setHidden(_state == Qt::Unchecked); | ||||
| } | ||||
|  | ||||
|  | ||||
| void GraphicalItem::translate() | ||||
| void GraphicalItem::translate(void *_ui) | ||||
| { | ||||
|     auto ui = reinterpret_cast<Ui::GraphicalItem *>(_ui); | ||||
|  | ||||
|     ui->label_name->setText(i18n("Name")); | ||||
|     ui->label_comment->setText(i18n("Comment")); | ||||
|     ui->label_number->setText(i18n("Tag")); | ||||
|  | ||||
| @ -52,8 +52,7 @@ public: | ||||
|     enum class Direction { LeftToRight = 0, RightToLeft = 1 }; | ||||
|     enum class Type { Horizontal = 0, Vertical = 1, Circle = 2, Graph = 3, Bars = 4 }; | ||||
|  | ||||
|     explicit GraphicalItem(QWidget *_parent = nullptr, const QString &_filePath = ""); | ||||
|     ~GraphicalItem() override; | ||||
|     explicit GraphicalItem(QObject *_parent = nullptr, const QString &_filePath = ""); | ||||
|     GraphicalItem *copy(const QString &_fileName, int _number) override; | ||||
|     QString image(const QVariant &value); | ||||
|     void initScene(); | ||||
| @ -92,20 +91,19 @@ public: | ||||
| public slots: | ||||
|     void readConfiguration() override; | ||||
|     QVariantHash run() override { return {}; }; | ||||
|     int showConfiguration(const QVariant &_args) override; | ||||
|     int showConfiguration(QWidget *_parent, const QVariant &_args) override; | ||||
|     void writeConfiguration() const override; | ||||
|  | ||||
| private slots: | ||||
|     void changeColor(); | ||||
|     void changeCountState(int _state); | ||||
|     void changeValue(int _state); | ||||
|     void changeColor(Ui::GraphicalItem *_ui); | ||||
|     void changeCountState(Ui::GraphicalItem *_ui, int _state); | ||||
|     void changeValue(Ui::GraphicalItem *_ui, int _state); | ||||
|  | ||||
| private: | ||||
|     GraphicalItemHelper *m_helper = nullptr; | ||||
|     QGraphicsScene *m_scene = nullptr; | ||||
|     QGraphicsView *m_view = nullptr; | ||||
|     Ui::GraphicalItem *ui = nullptr; | ||||
|     void translate() override; | ||||
|     void translate(void *_ui) override; | ||||
|     // properties | ||||
|     QString m_bar = "cpu"; | ||||
|     int m_count = 100; | ||||
|  | ||||
| @ -93,9 +93,9 @@ QVariantHash OWMWeatherProvider::parseSingleJson(const QVariantMap &_json) const | ||||
|     // main data | ||||
|     QVariantMap mainWeather = _json["main"].toMap(); | ||||
|     if (!weather.isEmpty()) { | ||||
|         output[tag("humidity")] = mainWeather["humidity"].toFloat(); | ||||
|         output[tag("pressure")] = mainWeather["pressure"].toFloat(); | ||||
|         output[tag("temperature")] = mainWeather["temp"].toFloat(); | ||||
|         output[tag("humidity")] = mainWeather["humidity"].toDouble(); | ||||
|         output[tag("pressure")] = mainWeather["pressure"].toDouble(); | ||||
|         output[tag("temperature")] = mainWeather["temp"].toDouble(); | ||||
|     } | ||||
|  | ||||
|     // timestamp | ||||
|  | ||||
| @ -86,7 +86,7 @@ QVariantHash YahooWeatherProvider::parseCurrent(const QVariantMap &_json, const | ||||
|     values[tag("timestamp")] = condition["date"].toString(); | ||||
|     values[tag("humidity")] = _atmosphere["humidity"].toInt(); | ||||
|     // HACK temporary fix of invalid values on Yahoo! side | ||||
|     values[tag("pressure")] = static_cast<int>(_atmosphere["pressure"].toFloat() / 33.863753); | ||||
|     values[tag("pressure")] = static_cast<int>(_atmosphere["pressure"].toDouble() / 33.863753); | ||||
|  | ||||
|     return values; | ||||
| } | ||||
| @ -103,7 +103,7 @@ QVariantHash YahooWeatherProvider::parseForecast(const QVariantMap &_json) const | ||||
|     values[tag("weatherId")] = id; | ||||
|     values[tag("timestamp")] = weatherMap["date"].toString(); | ||||
|     // yahoo provides high and low temperatures. Lets calculate average one | ||||
|     values[tag("temperature")] = (weatherMap["high"].toFloat() + weatherMap["low"].toFloat()) / 2.0; | ||||
|     values[tag("temperature")] = (weatherMap["high"].toDouble() + weatherMap["low"].toDouble()) / 2.0; | ||||
|     // ... and no forecast data for humidity and pressure | ||||
|     values[tag("humidity")] = 0; | ||||
|     values[tag("pressure")] = 0.0; | ||||
|  | ||||
| @ -1,7 +1,7 @@ | ||||
| set(SUBPROJECT plasma_applet_desktop-panel) | ||||
| message(STATUS "Subproject ${SUBPROJECT}") | ||||
|  | ||||
| configure_file(metadata.desktop ${CMAKE_CURRENT_SOURCE_DIR}/package/metadata.desktop) | ||||
| configure_file(metadata.json ${CMAKE_CURRENT_SOURCE_DIR}/package/metadata.json) | ||||
|  | ||||
| add_subdirectory(plugin) | ||||
| plasma_install_package(package org.kde.plasma.desktoppanel) | ||||
|  | ||||
| @ -1,26 +0,0 @@ | ||||
| [Desktop Entry] | ||||
| Encoding=UTF-8 | ||||
| Name=Desktop Panel | ||||
| Comment=A minimalistic Plasmoid | ||||
| Comment[en]=A minimalistic Plasmoid | ||||
| Comment[es]=Un plasmoide minimalista | ||||
| Comment[es]=Un script Plasmoïde minimaliste | ||||
| Comment[pt_BR]=Um script Plasmoid | ||||
| Comment[ru]=Минималистичный плазмоид | ||||
| Comment[uk]=Мінімалістичний плазмоїд | ||||
| X-KDE-ServiceTypes=Plasma/Applet | ||||
| Type=Service | ||||
| Icon=utilities-system-monitor | ||||
|  | ||||
| X-KDE-ServiceTypes=Plasma/Applet | ||||
| X-Plasma-API=declarativeappletscript | ||||
| X-Plasma-MainScript=ui/main.qml | ||||
|  | ||||
| X-KDE-PluginInfo-Author=Evgeniy Alekseev aka arcanis | ||||
| X-KDE-PluginInfo-Email=esalexeev@gmail.com | ||||
| X-KDE-PluginInfo-Name=org.kde.plasma.desktoppanel | ||||
| X-KDE-PluginInfo-Version=@PROJECT_VERSION@ | ||||
| X-KDE-PluginInfo-Website=https://arcanis.me/projects/awesome-widgets/ | ||||
| X-KDE-PluginInfo-Category=System Information | ||||
| X-KDE-PluginInfo-License=GPLv3 | ||||
| X-KDE-PluginInfo-EnabledByDefault=true | ||||
| @ -1,4 +1,5 @@ | ||||
| { | ||||
|     "KPackageStructure": "Plasma/Applet", | ||||
|     "KPlugin": { | ||||
|         "Authors": [ | ||||
|             { | ||||
| @ -18,12 +19,8 @@ | ||||
|         "Id": "org.kde.plasma.desktoppanel", | ||||
|         "License": "GPLv3", | ||||
|         "Name": "Desktop Panel", | ||||
|         "ServiceTypes": [ | ||||
|             "Plasma/Applet" | ||||
|         ], | ||||
|         "Version": "@PROJECT_VERSION@", | ||||
|         "Website": "https://arcanis.me/projects/awesome-widgets/" | ||||
|     }, | ||||
|     "X-Plasma-API": "declarativeappletscript", | ||||
|     "X-Plasma-MainScript": "ui/main.qml" | ||||
|     "X-Plasma-API-Minimum-Version": "6.0" | ||||
| } | ||||
|  | ||||
| @ -15,7 +15,7 @@ | ||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
| import QtQuick 2.0 | ||||
| import QtQuick 2.15 | ||||
|  | ||||
| import org.kde.plasma.configuration 2.0 | ||||
|  | ||||
|  | ||||
| @ -7,88 +7,88 @@ | ||||
|  | ||||
|     <group name="Widget"> | ||||
|         <!--   widget --> | ||||
|         <entry name="text" type="string"> | ||||
|         <entry name="text" type="String"> | ||||
|             <default>[$mark$number/$total: $name]</default> | ||||
|         </entry> | ||||
|     </group> | ||||
|  | ||||
|     <group name="Advanced"> | ||||
|         <!--   advanced --> | ||||
|         <entry name="background" type="bool"> | ||||
|         <entry name="background" type="Bool"> | ||||
|             <default>true</default> | ||||
|         </entry> | ||||
|         <entry name="verticalLayout" type="bool"> | ||||
|         <entry name="verticalLayout" type="Bool"> | ||||
|             <default>false</default> | ||||
|         </entry> | ||||
|         <entry name="height" type="int"> | ||||
|         <entry name="height" type="Int"> | ||||
|             <default>0</default> | ||||
|         </entry> | ||||
|         <entry name="width" type="int"> | ||||
|         <entry name="width" type="Int"> | ||||
|             <default>0</default> | ||||
|         </entry> | ||||
|         <entry name="mark" type="string"> | ||||
|         <entry name="mark" type="String"> | ||||
|             <default>¤</default> | ||||
|         </entry> | ||||
|         <entry name="tooltipType" type="string"> | ||||
|         <entry name="tooltipType" type="String"> | ||||
|             <default>contours</default> | ||||
|         </entry> | ||||
|         <entry name="tooltipWidth" type="int"> | ||||
|         <entry name="tooltipWidth" type="Int"> | ||||
|             <default>200</default> | ||||
|         </entry> | ||||
|         <entry name="tooltipColor" type="string"> | ||||
|         <entry name="tooltipColor" type="String"> | ||||
|             <default>#ffffff</default> | ||||
|         </entry> | ||||
|     </group> | ||||
|  | ||||
|     <group name="Appearance"> | ||||
|         <!--   appearance --> | ||||
|         <entry name="textAlign" type="string"> | ||||
|         <entry name="textAlign" type="String"> | ||||
|             <default>center</default> | ||||
|         </entry> | ||||
|         <entry name="fontFamily" type="string"> | ||||
|         <entry name="fontFamily" type="String"> | ||||
|             <default>Terminus</default> | ||||
|         </entry> | ||||
|         <entry name="fontSize" type="int"> | ||||
|         <entry name="fontSize" type="Int"> | ||||
|             <default>12</default> | ||||
|         </entry> | ||||
|         <entry name="fontColor" type="string"> | ||||
|         <entry name="fontColor" type="String"> | ||||
|             <default>#000000</default> | ||||
|         </entry> | ||||
|         <entry name="fontWeight" type="string"> | ||||
|         <entry name="fontWeight" type="String"> | ||||
|             <default>normal</default> | ||||
|         </entry> | ||||
|         <entry name="fontStyle" type="string"> | ||||
|         <entry name="fontStyle" type="String"> | ||||
|             <default>normal</default> | ||||
|         </entry> | ||||
|         <entry name="textStyle" type="string"> | ||||
|         <entry name="textStyle" type="String"> | ||||
|             <default>normal</default> | ||||
|         </entry> | ||||
|         <entry name="textStyleColor" type="string"> | ||||
|         <entry name="textStyleColor" type="String"> | ||||
|             <default>#000000</default> | ||||
|         </entry> | ||||
|         <!--   current --> | ||||
|         <entry name="currentTextAlign" type="string"> | ||||
|         <entry name="currentTextAlign" type="String"> | ||||
|             <default>center</default> | ||||
|         </entry> | ||||
|         <entry name="currentFontFamily" type="string"> | ||||
|         <entry name="currentFontFamily" type="String"> | ||||
|             <default>Terminus</default> | ||||
|         </entry> | ||||
|         <entry name="currentFontSize" type="int"> | ||||
|         <entry name="currentFontSize" type="Int"> | ||||
|             <default>12</default> | ||||
|         </entry> | ||||
|         <entry name="currentFontColor" type="string"> | ||||
|         <entry name="currentFontColor" type="String"> | ||||
|             <default>#ff0000</default> | ||||
|         </entry> | ||||
|         <entry name="currentFontWeight" type="string"> | ||||
|         <entry name="currentFontWeight" type="String"> | ||||
|             <default>normal</default> | ||||
|         </entry> | ||||
|         <entry name="currentFontStyle" type="string"> | ||||
|         <entry name="currentFontStyle" type="String"> | ||||
|             <default>normal</default> | ||||
|         </entry> | ||||
|         <entry name="currentTextStyle" type="string"> | ||||
|         <entry name="currentTextStyle" type="String"> | ||||
|             <default>normal</default> | ||||
|         </entry> | ||||
|         <entry name="currentTextStyleColor" type="string"> | ||||
|         <entry name="currentTextStyleColor" type="String"> | ||||
|             <default>#000000</default> | ||||
|         </entry> | ||||
|     </group> | ||||
|  | ||||
| @ -15,7 +15,7 @@ | ||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
| import QtQuick 2.0 | ||||
| import QtQuick 2.15 | ||||
|  | ||||
| import org.kde.plasma.private.desktoppanel 1.0 | ||||
|  | ||||
|  | ||||
| @ -15,7 +15,7 @@ | ||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
| import QtQuick 2.0 | ||||
| import QtQuick 2.15 | ||||
|  | ||||
| import org.kde.plasma.private.desktoppanel 1.0 | ||||
| import "." | ||||
|  | ||||
| @ -15,8 +15,8 @@ | ||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
| import QtQuick 2.0 | ||||
| import QtQuick.Controls 1.3 as QtControls | ||||
| import QtQuick 2.15 | ||||
| import QtQuick.Controls | ||||
|  | ||||
| import org.kde.plasma.private.desktoppanel 1.0 | ||||
|  | ||||
| @ -131,7 +131,7 @@ Item { | ||||
|             onValueEdited: cfg_mark = newValue | ||||
|         } | ||||
|  | ||||
|         QtControls.GroupBox { | ||||
|         GroupBox { | ||||
|             height: implicitHeight | ||||
|             width: parent.width | ||||
|             title: i18n("Tooltip") | ||||
|  | ||||
| @ -15,7 +15,7 @@ | ||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
| import QtQuick 2.0 | ||||
| import QtQuick 2.15 | ||||
|  | ||||
| import org.kde.plasma.private.desktoppanel 1.0 | ||||
| import "." | ||||
|  | ||||
| @ -15,18 +15,17 @@ | ||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
| import QtQuick 2.4 | ||||
| import QtQuick.Controls 1.3 as QtControls | ||||
| import QtQuick.Layouts 1.1 | ||||
| import QtQuick 2.15 | ||||
| import QtQuick.Controls | ||||
| import QtQuick.Layouts | ||||
| import org.kde.plasma.core as PlasmaCore | ||||
| import org.kde.plasma.plasmoid 2.0 | ||||
| import org.kde.plasma.core 2.0 as PlasmaCore | ||||
| import org.kde.plasma.components 2.0 as PlasmaComponents | ||||
|  | ||||
| import org.kde.plasma.private.desktoppanel 1.0 | ||||
| import "." | ||||
|  | ||||
|  | ||||
| Item { | ||||
| PlasmoidItem { | ||||
|     id: main | ||||
|     // backend | ||||
|     DPAdds { | ||||
| @ -46,9 +45,6 @@ Item { | ||||
|  | ||||
|  | ||||
|     // init | ||||
|     Plasmoid.preferredRepresentation: Plasmoid.fullRepresentation | ||||
|     Plasmoid.compactRepresentation: Plasmoid.fullRepresentation | ||||
|  | ||||
|     Layout.alignment: Qt.AlignVCenter | Qt.AlignHCenter | ||||
|  | ||||
|     Plasmoid.icon: "utilities-system-monitor" | ||||
|  | ||||
| @ -3,25 +3,25 @@ | ||||
|  | ||||
|  | ||||
| # common QML constants | ||||
| singleton General 1.0 file:///usr//awesomewidgets/qml/General.qml | ||||
| singleton General 1.0 file:///usr/share/awesomewidgets/qml/General.qml | ||||
|  | ||||
| # custom QML UI classes | ||||
| AboutTab file:///usr//awesomewidgets/qml/AboutTab.qml | ||||
| AWExtensions file:///usr//awesomewidgets/qml/AWExtensions.qml | ||||
| AWInfoLabel file:///usr//awesomewidgets/qml/AWInfoLabel.qml | ||||
| AWTagSelector file:///usr//awesomewidgets/qml/AWTagSelector.qml | ||||
| AWTextEditor file:///usr//awesomewidgets/qml/AWTextEditor.qml | ||||
| BugReport file:///usr//awesomewidgets/qml/BugReport.qml | ||||
| ButtonSelector file:///usr//awesomewidgets/qml/ButtonSelector.qml | ||||
| CheckBoxSelector file:///usr//awesomewidgets/qml/CheckBoxSelector.qml | ||||
| ColorSelector file:///usr//awesomewidgets/qml/ColorSelector.qml | ||||
| ComboBoxSelector file:///usr//awesomewidgets/qml/ComboBoxSelector.qml | ||||
| ExportDialog file:///usr//awesomewidgets/qml/ExportDialog.qml | ||||
| FontSelector file:///usr//awesomewidgets/qml/FontSelector.qml | ||||
| HtmlDefaultFunctionsBar file:///usr//awesomewidgets/qml/HtmlDefaultFunctionsBar.qml | ||||
| HtmlEditorButton file:///usr//awesomewidgets/qml/HtmlEditorButton.qml | ||||
| HtmlEditorColor file:///usr//awesomewidgets/qml/HtmlEditorColor.qml | ||||
| HtmlEditorFont file:///usr//awesomewidgets/qml/HtmlEditorFont.qml | ||||
| ImportDialog file:///usr//awesomewidgets/qml/ImportDialog.qml | ||||
| IntegerSelector file:///usr//awesomewidgets/qml/IntegerSelector.qml | ||||
| LineSelector file:///usr//awesomewidgets/qml/LineSelector.qml | ||||
| AboutTab file:///usr/share/awesomewidgets/qml/AboutTab.qml | ||||
| AWExtensions file:///usr/share/awesomewidgets/qml/AWExtensions.qml | ||||
| AWInfoLabel file:///usr/share/awesomewidgets/qml/AWInfoLabel.qml | ||||
| AWTagSelector file:///usr/share/awesomewidgets/qml/AWTagSelector.qml | ||||
| AWTextEditor file:///usr/share/awesomewidgets/qml/AWTextEditor.qml | ||||
| BugReport file:///usr/share/awesomewidgets/qml/BugReport.qml | ||||
| ButtonSelector file:///usr/share/awesomewidgets/qml/ButtonSelector.qml | ||||
| CheckBoxSelector file:///usr/share/awesomewidgets/qml/CheckBoxSelector.qml | ||||
| ColorSelector file:///usr/share/awesomewidgets/qml/ColorSelector.qml | ||||
| ComboBoxSelector file:///usr/share/awesomewidgets/qml/ComboBoxSelector.qml | ||||
| ExportDialog file:///usr/share/awesomewidgets/qml/ExportDialog.qml | ||||
| FontSelector file:///usr/share/awesomewidgets/qml/FontSelector.qml | ||||
| HtmlDefaultFunctionsBar file:///usr/share/awesomewidgets/qml/HtmlDefaultFunctionsBar.qml | ||||
| HtmlEditorButton file:///usr/share/awesomewidgets/qml/HtmlEditorButton.qml | ||||
| HtmlEditorColor file:///usr/share/awesomewidgets/qml/HtmlEditorColor.qml | ||||
| HtmlEditorFont file:///usr/share/awesomewidgets/qml/HtmlEditorFont.qml | ||||
| ImportDialog file:///usr/share/awesomewidgets/qml/ImportDialog.qml | ||||
| IntegerSelector file:///usr/share/awesomewidgets/qml/IntegerSelector.qml | ||||
| LineSelector file:///usr/share/awesomewidgets/qml/LineSelector.qml | ||||
|  | ||||
| @ -15,7 +15,7 @@ | ||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
| import QtQuick 2.0 | ||||
| import QtQuick 2.15 | ||||
|  | ||||
| import org.kde.plasma.private.desktoppanel 1.0 | ||||
| import "." | ||||
|  | ||||
| @ -1,26 +0,0 @@ | ||||
| [Desktop Entry] | ||||
| Encoding=UTF-8 | ||||
| Name=Desktop Panel | ||||
| Comment=A minimalistic Plasmoid | ||||
| Comment[en]=A minimalistic Plasmoid | ||||
| Comment[es]=Un plasmoide minimalista | ||||
| Comment[es]=Un script Plasmoïde minimaliste | ||||
| Comment[pt_BR]=Um script Plasmoid | ||||
| Comment[ru]=Минималистичный плазмоид | ||||
| Comment[uk]=Мінімалістичний плазмоїд | ||||
| X-KDE-ServiceTypes=Plasma/Applet | ||||
| Type=Service | ||||
| Icon=utilities-system-monitor | ||||
|  | ||||
| X-KDE-ServiceTypes=Plasma/Applet | ||||
| X-Plasma-API=declarativeappletscript | ||||
| X-Plasma-MainScript=ui/main.qml | ||||
|  | ||||
| X-KDE-PluginInfo-Author=Evgeniy Alekseev aka arcanis | ||||
| X-KDE-PluginInfo-Email=esalexeev@gmail.com | ||||
| X-KDE-PluginInfo-Name=org.kde.plasma.desktoppanel | ||||
| X-KDE-PluginInfo-Version=3.5.1 | ||||
| X-KDE-PluginInfo-Website=https://arcanis.me/projects/awesome-widgets/ | ||||
| X-KDE-PluginInfo-Category=System Information | ||||
| X-KDE-PluginInfo-License=GPLv3 | ||||
| X-KDE-PluginInfo-EnabledByDefault=true | ||||
							
								
								
									
										26
									
								
								sources/desktop-panel/package/metadata.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								sources/desktop-panel/package/metadata.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,26 @@ | ||||
| { | ||||
|     "KPackageStructure": "Plasma/Applet", | ||||
|     "KPlugin": { | ||||
|         "Authors": [ | ||||
|             { | ||||
|                 "Email": "esalexeev@gmail.com", | ||||
|                 "Name": "Evgeniy Alekseev aka arcanis" | ||||
|             } | ||||
|         ], | ||||
|         "Category": "System Information", | ||||
|         "Description": "A minimalistic Plasmoid", | ||||
|         "Description[en]": "A minimalistic Plasmoid", | ||||
|         "Description[es]": "Un script Plasmoïde minimaliste", | ||||
|         "Description[pt_BR]": "Um script Plasmoid", | ||||
|         "Description[ru]": "Минималистичный плазмоид", | ||||
|         "Description[uk]": "Мінімалістичний плазмоїд", | ||||
|         "EnabledByDefault": true, | ||||
|         "Icon": "utilities-system-monitor", | ||||
|         "Id": "org.kde.plasma.desktoppanel", | ||||
|         "License": "GPLv3", | ||||
|         "Name": "Desktop Panel", | ||||
|         "Version": "3.5.1", | ||||
|         "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}) | ||||
| target_link_libraries(${PLUGIN_NAME} ${Qt_LIBRARIES} ${Kf6_LIBRARIES}) | ||||
|  | ||||
| install(TARGETS ${PLUGIN_NAME} DESTINATION ${QML_INSTALL_DIR}/org/kde/plasma/private/desktoppanel) | ||||
| install(FILES qmldir DESTINATION ${QML_INSTALL_DIR}/org/kde/plasma/private/desktoppanel) | ||||
| install(TARGETS ${PLUGIN_NAME} DESTINATION ${KDE_INSTALL_QMLDIR}/org/kde/plasma/private/desktoppanel) | ||||
| install(FILES qmldir DESTINATION ${KDE_INSTALL_QMLDIR}/org/kde/plasma/private/desktoppanel) | ||||
| install(FILES ${SUBPROJECT_NOTIFY} DESTINATION ${KDE_INSTALL_KNOTIFYRCDIR}) | ||||
|  | ||||
| @ -223,7 +223,7 @@ QString DPAdds::valueByKey(const QString &_key, int _desktop) const | ||||
|  | ||||
|     QString currentMark = currentDesktop() == _desktop ? m_mark : ""; | ||||
|     if (_key == "mark") | ||||
|         return QString("%1").arg(currentMark, m_mark.count(), QLatin1Char(' ')).replace(" ", " "); | ||||
|         return QString("%1").arg(currentMark, m_mark.size(), QLatin1Char(' ')).replace(" ", " "); | ||||
|     else if (_key == "name") { | ||||
|         auto name = m_vdi->desktopNames().at(_desktop); | ||||
|         return name.replace(" ", " "); | ||||
|  | ||||
| @ -1,4 +1,4 @@ | ||||
| set(SUBPROJECT plasma_dataengine_extsysmon) | ||||
| set(SUBPROJECT ksystemstats_plugin_extsysmon) | ||||
| message(STATUS "Subproject ${SUBPROJECT}") | ||||
| add_definitions(-DTRANSLATION_DOMAIN=\"plasma_applet_org.kde.plasma.awesomewidget\") | ||||
|  | ||||
| @ -12,15 +12,10 @@ include_directories( | ||||
|         ${Kf6_INCLUDE} | ||||
| ) | ||||
|  | ||||
| file(GLOB SUBPROJECT_DESKTOP_IN *.desktop) | ||||
| file(RELATIVE_PATH SUBPROJECT_DESKTOP ${CMAKE_SOURCE_DIR} ${SUBPROJECT_DESKTOP_IN}) | ||||
| file(GLOB SUBPROJECT_SOURCE *.cpp ${CMAKE_SOURCE_DIR}/*.cpp) | ||||
| file(GLOB SUBPROJECT_HEADER *.h) | ||||
| file(GLOB SUBPROJECT_CONF *.conf) | ||||
|  | ||||
| # prepare | ||||
| configure_file(${SUBPROJECT_DESKTOP_IN} ${CMAKE_CURRENT_BINARY_DIR}/${SUBPROJECT_DESKTOP}) | ||||
|  | ||||
| # make | ||||
| add_library(${SUBPROJECT} MODULE ${SUBPROJECT_SOURCE} ${SUBPROJECT_HEADER}) | ||||
| target_link_libraries(${SUBPROJECT}  | ||||
| @ -28,6 +23,5 @@ target_link_libraries(${SUBPROJECT} | ||||
|         ${Qt_LIBRARIES} ${Kf6_LIBRARIES}) | ||||
|  | ||||
| # install | ||||
| install(TARGETS ${SUBPROJECT} DESTINATION ${PLUGIN_INSTALL_DIR}/plasma/dataengine) | ||||
| #install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${SUBPROJECT_DESKTOP} DESTINATION ${SERVICES_INSTALL_DIR}) | ||||
| install(FILES ${SUBPROJECT_CONF} DESTINATION ${KDE_INSTALL_CONFDIR}) | ||||
| install(TARGETS ${SUBPROJECT} DESTINATION ${KDE_INSTALL_PLUGINDIR}/ksystemstats) | ||||
| install(FILES ${SUBPROJECT_CONF} DESTINATION /${KDE_INSTALL_CONFDIR}) | ||||
|  | ||||
| @ -17,6 +17,9 @@ | ||||
|  | ||||
| #include "extsysmon.h" | ||||
|  | ||||
| #include <KPluginFactory> | ||||
|  | ||||
| #include <QDBusMetaType> | ||||
| #include <QFile> | ||||
| #include <QRegularExpression> | ||||
| #include <QSettings> | ||||
| @ -29,65 +32,21 @@ | ||||
|  | ||||
|  | ||||
| ExtendedSysMon::ExtendedSysMon(QObject *_parent, const QVariantList &_args) | ||||
|     : Plasma::DataEngine(_parent, _args) | ||||
|     : KSysGuard::SensorPlugin(_parent, _args) | ||||
| { | ||||
|     Q_UNUSED(_args) | ||||
|     qSetMessagePattern(AWDebug::LOG_FORMAT); | ||||
|     qCDebug(LOG_ESM) << __PRETTY_FUNCTION__; | ||||
|     for (auto &metadata : AWDebug::getBuildData()) | ||||
|         qCDebug(LOG_ESM) << metadata; | ||||
|  | ||||
|     setMinimumPollingInterval(333); | ||||
|     readConfiguration(); | ||||
|  | ||||
|     // init aggregator | ||||
|     m_aggregator = new ExtSysMonAggregator(this, m_configuration); | ||||
|     for (auto &source : m_aggregator->sources()) | ||||
|         setData(source, m_aggregator->initialData(source)); | ||||
| } | ||||
|  | ||||
|  | ||||
| ExtendedSysMon::~ExtendedSysMon() | ||||
| { | ||||
|     qCDebug(LOG_ESM) << __PRETTY_FUNCTION__; | ||||
| } | ||||
|  | ||||
|  | ||||
| QStringList ExtendedSysMon::sources() const | ||||
| { | ||||
|     return m_aggregator->sources(); | ||||
| } | ||||
|  | ||||
|  | ||||
| bool ExtendedSysMon::sourceRequestEvent(const QString &_source) | ||||
| { | ||||
|     qCDebug(LOG_ESM) << "Source" << _source; | ||||
|  | ||||
|     return updateSourceEvent(_source); | ||||
| } | ||||
|  | ||||
|  | ||||
| bool ExtendedSysMon::updateSourceEvent(const QString &_source) | ||||
| { | ||||
|     qCDebug(LOG_ESM) << "Source" << _source; | ||||
|  | ||||
|     if (m_aggregator->hasSource(_source)) { | ||||
|         QVariant data = m_aggregator->data(_source); | ||||
|         if (data.isNull()) | ||||
|             return false; | ||||
|         setData(_source, "value", data); | ||||
|     } else { | ||||
|         qCWarning(LOG_ESM) << "Unknown source" << _source; | ||||
|         return false; | ||||
|     } | ||||
|  | ||||
|     return true; | ||||
|     addContainer(new ExtSysMonAggregator("extsysmon", "Extended system monitor", this, m_configuration)); | ||||
| } | ||||
|  | ||||
|  | ||||
| void ExtendedSysMon::readConfiguration() | ||||
| { | ||||
|     QString fileName = QStandardPaths::locate(QStandardPaths::ConfigLocation, "plasma-dataengine-extsysmon.conf"); | ||||
|     auto fileName = QStandardPaths::locate(QStandardPaths::ConfigLocation, "plasma-dataengine-extsysmon.conf"); | ||||
|     qCInfo(LOG_ESM) << "Configuration file" << fileName; | ||||
|     QSettings settings(fileName, QSettings::IniFormat); | ||||
|     QHash<QString, QString> rawConfig; | ||||
| @ -120,13 +79,13 @@ QHash<QString, QString> ExtendedSysMon::updateConfiguration(QHash<QString, QStri | ||||
|     else if ((_rawConfig["GPUDEV"] != "ati") && (_rawConfig["GPUDEV"] != "nvidia")) | ||||
|         _rawConfig["GPUDEV"] = GPULoadSource::autoGpu(); | ||||
|     // hdddev | ||||
|     QStringList allHddDevices = HDDTemperatureSource::allHdd(); | ||||
|     auto allHddDevices = HDDTemperatureSource::allHdd(); | ||||
|     if (_rawConfig["HDDDEV"] == "all") { | ||||
|         _rawConfig["HDDDEV"] = allHddDevices.join(','); | ||||
|     } else if (_rawConfig["HDDDEV"] == "disable") { | ||||
|         _rawConfig["HDDDEV"] = ""; | ||||
|     } else { | ||||
|         QStringList deviceList = _rawConfig["HDDDEV"].split(',', Qt::SkipEmptyParts); | ||||
|         auto deviceList = _rawConfig["HDDDEV"].split(',', Qt::SkipEmptyParts); | ||||
|         QStringList devices; | ||||
|         auto diskRegexp = QRegularExpression("^/dev/[hms]d[a-z]$"); | ||||
|         for (auto &device : deviceList) | ||||
| @ -150,6 +109,6 @@ QHash<QString, QString> ExtendedSysMon::updateConfiguration(QHash<QString, QStri | ||||
| } | ||||
|  | ||||
|  | ||||
| K_EXPORT_PLASMA_DATAENGINE_WITH_JSON(extsysmon, ExtendedSysMon, "plasma-dataengine-extsysmon.json") | ||||
| K_PLUGIN_CLASS_WITH_JSON(ExtendedSysMon, "metadata.json") | ||||
|  | ||||
| #include "extsysmon.moc" | ||||
|  | ||||
| @ -18,27 +18,19 @@ | ||||
| #ifndef EXTSYSMON_H | ||||
| #define EXTSYSMON_H | ||||
|  | ||||
| #include <Plasma/Plasma/DataEngine> | ||||
| #include <ksysguard/systemstats/SensorPlugin.h> | ||||
|  | ||||
|  | ||||
| class ExtSysMonAggregator; | ||||
|  | ||||
| class ExtendedSysMon : public Plasma::DataEngine | ||||
| class ExtendedSysMon : public KSysGuard::SensorPlugin | ||||
| { | ||||
|     Q_OBJECT | ||||
|  | ||||
| public: | ||||
|     explicit ExtendedSysMon(QObject *_parent, const QVariantList &_args); | ||||
|     ~ExtendedSysMon() override; | ||||
|  | ||||
| protected: | ||||
|     [[nodiscard]] QStringList sources() const override; | ||||
|     bool sourceRequestEvent(const QString &_source) override; | ||||
|     bool updateSourceEvent(const QString &_source) override; | ||||
|     [[nodiscard]] QString providerName() const override { return QStringLiteral("extsysmon"); } | ||||
|  | ||||
| private: | ||||
|     // configuration | ||||
|     ExtSysMonAggregator *m_aggregator = nullptr; | ||||
|     QHash<QString, QString> m_configuration; | ||||
|     // methods | ||||
|     void readConfiguration(); | ||||
|  | ||||
| @ -21,6 +21,7 @@ | ||||
| #include "batterysource.h" | ||||
| #include "customsource.h" | ||||
| #include "desktopsource.h" | ||||
| #include "extsysmonsensor.h" | ||||
| #include "gpuloadsource.h" | ||||
| #include "gputempsource.h" | ||||
| #include "hddtempsource.h" | ||||
| @ -31,12 +32,14 @@ | ||||
| #include "quotessource.h" | ||||
| #include "requestsource.h" | ||||
| #include "systeminfosource.h" | ||||
| #include "timesource.h" | ||||
| #include "upgradesource.h" | ||||
| #include "weathersource.h" | ||||
|  | ||||
|  | ||||
| ExtSysMonAggregator::ExtSysMonAggregator(QObject *_parent, const QHash<QString, QString> &_config) | ||||
|     : QObject(_parent) | ||||
| ExtSysMonAggregator::ExtSysMonAggregator(const QString &_id, const QString &_name, KSysGuard::SensorPlugin *_parent, | ||||
|                                          const QHash<QString, QString> &_config) | ||||
|     : KSysGuard::SensorContainer(_id, _name, _parent) | ||||
| { | ||||
|     qCDebug(LOG_ESM) << __PRETTY_FUNCTION__; | ||||
|  | ||||
| @ -44,41 +47,11 @@ ExtSysMonAggregator::ExtSysMonAggregator(QObject *_parent, const QHash<QString, | ||||
| } | ||||
|  | ||||
|  | ||||
| ExtSysMonAggregator::~ExtSysMonAggregator() | ||||
| void ExtSysMonAggregator::createSensor(const QString &_id, const QString &_name, AbstractExtSysMonSource *_source) | ||||
| { | ||||
|     qCDebug(LOG_ESM) << __PRETTY_FUNCTION__; | ||||
|     qCDebug(LOG_ESM) << "Register sensor" << _name << "with id" << _id; | ||||
|  | ||||
|     m_map.clear(); | ||||
| } | ||||
|  | ||||
|  | ||||
| QVariant ExtSysMonAggregator::data(const QString &_source) const | ||||
| { | ||||
|     qCDebug(LOG_ESM) << "Source" << _source; | ||||
|  | ||||
|     return m_map[_source]->data(_source); | ||||
| } | ||||
|  | ||||
|  | ||||
| bool ExtSysMonAggregator::hasSource(const QString &_source) const | ||||
| { | ||||
|     qCDebug(LOG_ESM) << "Source" << _source; | ||||
|  | ||||
|     return m_map.contains(_source); | ||||
| } | ||||
|  | ||||
|  | ||||
| QVariantMap ExtSysMonAggregator::initialData(const QString &_source) const | ||||
| { | ||||
|     qCDebug(LOG_ESM) << "Source" << _source; | ||||
|  | ||||
|     return hasSource(_source) ? m_map[_source]->initialData(_source) : QVariantMap(); | ||||
| } | ||||
|  | ||||
|  | ||||
| QStringList ExtSysMonAggregator::sources() const | ||||
| { | ||||
|     return m_map.keys(); | ||||
|     addObject(new ExtSysMonSensor(this, _id, _name, _source)); | ||||
| } | ||||
|  | ||||
|  | ||||
| @ -87,68 +60,40 @@ void ExtSysMonAggregator::init(const QHash<QString, QString> &_config) | ||||
|     qCDebug(LOG_ESM) << "Configuration" << _config; | ||||
|  | ||||
|     // battery | ||||
|     AbstractExtSysMonSource *batteryItem = new BatterySource(this, QStringList() << _config["ACPIPATH"]); | ||||
|     for (auto &source : batteryItem->sources()) | ||||
|         m_map[source] = batteryItem; | ||||
|     createSensor("battery", i18n("Battery"), new BatterySource(this, {_config["ACPIPATH"]})); | ||||
|     // custom | ||||
|     AbstractExtSysMonSource *customItem = new CustomSource(this, QStringList()); | ||||
|     for (auto &source : customItem->sources()) | ||||
|         m_map[source] = customItem; | ||||
|     createSensor("custom", i18n("Scripts"), new CustomSource(this, {})); | ||||
|     // desktop | ||||
|     AbstractExtSysMonSource *desktopItem = new DesktopSource(this, QStringList()); | ||||
|     for (auto &source : desktopItem->sources()) | ||||
|         m_map[source] = desktopItem; | ||||
|     createSensor("desktop", i18n("Desktop"), new DesktopSource(this, {})); | ||||
|     // gpu load | ||||
|     AbstractExtSysMonSource *gpuLoadItem = new GPULoadSource(this, QStringList({_config["GPUDEV"]})); | ||||
|     for (auto &source : gpuLoadItem->sources()) | ||||
|         m_map[source] = gpuLoadItem; | ||||
|     createSensor("gpuload", i18n("GPU load"), new GPULoadSource(this, {_config["GPUDEV"]})); | ||||
|     // gpu temperature | ||||
|     AbstractExtSysMonSource *gpuTempItem = new GPUTemperatureSource(this, QStringList({_config["GPUDEV"]})); | ||||
|     for (auto &source : gpuTempItem->sources()) | ||||
|         m_map[source] = gpuTempItem; | ||||
|     createSensor("gputemp", i18n("GPU temperature"), new GPUTemperatureSource(this, {_config["GPUDEV"]})); | ||||
|     // hdd temperature | ||||
|     AbstractExtSysMonSource *hddTempItem | ||||
|         = new HDDTemperatureSource(this, QStringList({_config["HDDDEV"], _config["HDDTEMPCMD"]})); | ||||
|     for (auto &source : hddTempItem->sources()) | ||||
|         m_map[source] = hddTempItem; | ||||
|     createSensor("hdd", i18n("HDD temperature"), | ||||
|                  new HDDTemperatureSource(this, {_config["HDDDEV"], _config["HDDTEMPCMD"]})); | ||||
|     // network | ||||
|     AbstractExtSysMonSource *networkItem = new NetworkSource(this, QStringList()); | ||||
|     for (auto &source : networkItem->sources()) | ||||
|         m_map[source] = networkItem; | ||||
|     createSensor("network", i18n("Network"), new NetworkSource(this, {})); | ||||
|     // player | ||||
|     AbstractExtSysMonSource *playerItem | ||||
|         = new PlayerSource(this, QStringList({_config["PLAYER"], _config["MPDADDRESS"], _config["MPDPORT"], | ||||
|                                               _config["MPRIS"], _config["PLAYERSYMBOLS"]})); | ||||
|     for (auto &source : playerItem->sources()) | ||||
|         m_map[source] = playerItem; | ||||
|     createSensor("player", i18n("Music player"), | ||||
|                  new PlayerSource(this, {_config["PLAYER"], _config["MPDADDRESS"], _config["MPDPORT"], _config["MPRIS"], | ||||
|                                          _config["PLAYERSYMBOLS"]})); | ||||
|     // processes | ||||
|     AbstractExtSysMonSource *processesItem = new ProcessesSource(this, QStringList()); | ||||
|     for (auto &source : processesItem->sources()) | ||||
|         m_map[source] = processesItem; | ||||
|     createSensor("ps", i18n("Processes"), new ProcessesSource(this, {})); | ||||
|     // network request | ||||
|     AbstractExtSysMonSource *requestItem = new RequestSource(this, QStringList()); | ||||
|     for (auto &source : requestItem->sources()) | ||||
|         m_map[source] = requestItem; | ||||
|     createSensor("requests", i18n("Network requests"), new RequestSource(this, {})); | ||||
|     // quotes | ||||
|     AbstractExtSysMonSource *quotesItem = new QuotesSource(this, QStringList()); | ||||
|     for (auto &source : quotesItem->sources()) | ||||
|         m_map[source] = quotesItem; | ||||
|     createSensor("quotes", i18n("Quotes"), new QuotesSource(this, {})); | ||||
|     // system | ||||
|     AbstractExtSysMonSource *systemItem = new SystemInfoSource(this, QStringList()); | ||||
|     for (auto &source : systemItem->sources()) | ||||
|         m_map[source] = systemItem; | ||||
|     createSensor("system", i18n("System"), new SystemInfoSource(this, {})); | ||||
|     // current time | ||||
|     createSensor("time", i18n("Time"), new TimeSource(this, {})); | ||||
|     // upgrade | ||||
|     AbstractExtSysMonSource *upgradeItem = new UpgradeSource(this, QStringList()); | ||||
|     for (auto &source : upgradeItem->sources()) | ||||
|         m_map[source] = upgradeItem; | ||||
|     createSensor("upgrade", i18n("Upgrades"), new UpgradeSource(this, {})); | ||||
|     // weather | ||||
|     AbstractExtSysMonSource *weatherItem = new WeatherSource(this, QStringList()); | ||||
|     for (auto &source : weatherItem->sources()) | ||||
|         m_map[source] = weatherItem; | ||||
|     createSensor("weather", i18n("Weather"), new WeatherSource(this, {})); | ||||
| #ifdef BUILD_LOAD | ||||
|     // additional load source | ||||
|     AbstractExtSysMonSource *loadItem = new LoadSource(this, QStringList()); | ||||
|     for (auto &source : loadItem->sources()) | ||||
|         m_map[source] = loadItem; | ||||
|     createSensor("load", i18n("Load"), new LoadSource(this, {})); | ||||
| #endif /* BUILD_LOAD */ | ||||
| } | ||||
|  | ||||
| @ -15,30 +15,26 @@ | ||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
| #ifndef EXTSYSMONAGGREGATOR_H | ||||
| #define EXTSYSMONAGGREGATOR_H | ||||
| #pragma once | ||||
|  | ||||
| #include <QObject> | ||||
| #include <ksysguard/systemstats/SensorContainer.h> | ||||
|  | ||||
| #include "abstractextsysmonsource.h" | ||||
|  | ||||
|  | ||||
| class ExtSysMonAggregator : public QObject | ||||
| class AbstractExtSysMonSource; | ||||
| class ExtSysMonSensor; | ||||
|  | ||||
| class ExtSysMonAggregator : public KSysGuard::SensorContainer | ||||
| { | ||||
|     Q_OBJECT | ||||
|  | ||||
| public: | ||||
|     explicit ExtSysMonAggregator(QObject *_parent, const QHash<QString, QString> &_config); | ||||
|     ~ExtSysMonAggregator() override; | ||||
|     [[nodiscard]] QVariant data(const QString &_source) const; | ||||
|     [[nodiscard]] bool hasSource(const QString &_source) const; | ||||
|     [[nodiscard]] QVariantMap initialData(const QString &_source) const; | ||||
|     [[nodiscard]] QStringList sources() const; | ||||
|     explicit ExtSysMonAggregator(const QString &_id, const QString &_name, KSysGuard::SensorPlugin *_parent, | ||||
|                                  const QHash<QString, QString> &_config); | ||||
|  | ||||
| private: | ||||
|     void createSensor(const QString &_id, const QString &_name, AbstractExtSysMonSource *_source); | ||||
|     void init(const QHash<QString, QString> &_config); | ||||
|     QHash<QString, AbstractExtSysMonSource *> m_map; | ||||
| }; | ||||
|  | ||||
|  | ||||
| #endif /* EXTSYSMONAGGREGATOR_H */ | ||||
|  | ||||
							
								
								
									
										3
									
								
								sources/extsysmon/metadata.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								sources/extsysmon/metadata.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,3 @@ | ||||
| { | ||||
|     "providerName": "extsysmon" | ||||
| } | ||||
| @ -1,16 +0,0 @@ | ||||
| [Desktop Entry] | ||||
| Encoding=UTF-8 | ||||
| Name=Extended SystemMonitor | ||||
| Comment=Adds some additional functions to System DataEngine | ||||
| ServiceTypes=Plasma/DataEngine | ||||
| Type=Service | ||||
| Icon=utilities-system-monitor | ||||
|  | ||||
| X-KDE-Library=plasma_dataengine_extsysmon | ||||
|  | ||||
| X-KDE-PluginInfo-Author=Evgeniy Alekseev aka arcanis | ||||
| X-KDE-PluginInfo-Email=esalexeev@gmail.com | ||||
| X-KDE-PluginInfo-Name=extsysmon | ||||
| X-KDE-PluginInfo-Version=@PROJECT_VERSION@ | ||||
| X-KDE-PluginInfo-Category=System Information | ||||
| X-KDE-PluginInfo-License=GPL3 | ||||
| @ -1,20 +0,0 @@ | ||||
| { | ||||
|     "KPlugin": { | ||||
|         "Authors": [ | ||||
|             { | ||||
|                 "Email": "esalexeev@gmail.com", | ||||
|                 "Name": "Evgeniy Alekseev aka arcanis" | ||||
|             } | ||||
|         ], | ||||
|         "Category": "System Information", | ||||
|         "Description": "Adds some additional functions to System DataEngine", | ||||
|         "Icon": "utilities-system-monitor", | ||||
|         "Id": "extsysmon", | ||||
|         "License": "GPL3", | ||||
|         "Name": "Extended SystemMonitor", | ||||
|         "ServiceTypes": [ | ||||
|             "Plasma/DataEngine" | ||||
|         ], | ||||
|         "Version": "@PROJECT_VERSION@" | ||||
|     } | ||||
| } | ||||
| @ -23,6 +23,11 @@ | ||||
| #include <QVariant> | ||||
|  | ||||
|  | ||||
| namespace KSysGuard | ||||
| { | ||||
| class SensorInfo; | ||||
| } | ||||
|  | ||||
| class AbstractExtSysMonSource : public QObject | ||||
| { | ||||
|     Q_OBJECT | ||||
| @ -32,7 +37,7 @@ public: | ||||
|         : QObject(_parent){}; | ||||
|     ~AbstractExtSysMonSource() override = default; | ||||
|     virtual QVariant data(const QString &_source) = 0; | ||||
|     [[nodiscard]] virtual QVariantMap initialData(const QString &_source) const = 0; | ||||
|     [[nodiscard]] virtual KSysGuard::SensorInfo *initialData(const QString &_source) const = 0; | ||||
|     virtual void run() = 0; | ||||
|     [[nodiscard]] virtual QStringList sources() const = 0; | ||||
|     // used by extensions | ||||
|  | ||||
| @ -18,6 +18,9 @@ | ||||
|  | ||||
| #include "batterysource.h" | ||||
|  | ||||
| #include <ksysguard/formatter/Unit.h> | ||||
| #include <ksysguard/systemstats/SensorInfo.h> | ||||
|  | ||||
| #include <QDir> | ||||
|  | ||||
| #include <cmath> | ||||
| @ -45,12 +48,12 @@ BatterySource::~BatterySource() | ||||
| QStringList BatterySource::getSources() | ||||
| { | ||||
|     QStringList sources; | ||||
|     sources.append("battery/ac"); | ||||
|     sources.append("battery/bat"); | ||||
|     sources.append("battery/batleft"); | ||||
|     sources.append("battery/batnow"); | ||||
|     sources.append("battery/batrate"); | ||||
|     sources.append("battery/battotal"); | ||||
|     sources.append("ac"); | ||||
|     sources.append("bat"); | ||||
|     sources.append("batleft"); | ||||
|     sources.append("batnow"); | ||||
|     sources.append("batrate"); | ||||
|     sources.append("battotal"); | ||||
|  | ||||
|     auto directory = QDir(m_acpiPath); | ||||
|  | ||||
| @ -60,11 +63,11 @@ QStringList BatterySource::getSources() | ||||
|         qCInfo(LOG_ESS) << "Init batteries count as" << m_batteriesCount; | ||||
|  | ||||
|         for (int i = 0; i < m_batteriesCount; i++) { | ||||
|             sources.append(QString("battery/bat%1").arg(i)); | ||||
|             sources.append(QString("battery/batleft%1").arg(i)); | ||||
|             sources.append(QString("battery/batnow%1").arg(i)); | ||||
|             sources.append(QString("battery/batrate%1").arg(i)); | ||||
|             sources.append(QString("battery/battotal%1").arg(i)); | ||||
|             sources.append(QString("bat%1").arg(i)); | ||||
|             sources.append(QString("batleft%1").arg(i)); | ||||
|             sources.append(QString("batnow%1").arg(i)); | ||||
|             sources.append(QString("batrate%1").arg(i)); | ||||
|             sources.append(QString("battotal%1").arg(i)); | ||||
|         } | ||||
|     } | ||||
|  | ||||
| @ -79,82 +82,79 @@ QVariant BatterySource::data(const QString &_source) | ||||
|  | ||||
|     if (!m_values.contains(_source)) | ||||
|         run(); | ||||
|     QVariant value = m_values.take(_source); | ||||
|     return value; | ||||
|     return m_values.take(_source); | ||||
| } | ||||
|  | ||||
|  | ||||
| QVariantMap BatterySource::initialData(const QString &_source) const | ||||
| KSysGuard::SensorInfo *BatterySource::initialData(const QString &_source) const | ||||
| { | ||||
|     qCDebug(LOG_ESS) << "Source" << _source; | ||||
|  | ||||
|     QVariantMap data; | ||||
|     if (_source == "battery/ac") { | ||||
|         data["min"] = false; | ||||
|         data["max"] = true; | ||||
|         data["name"] = "Is AC online or not"; | ||||
|         data["type"] = "bool"; | ||||
|         data["units"] = ""; | ||||
|     } else if (_source == "battery/bat") { | ||||
|         data["min"] = 0; | ||||
|         data["max"] = 100; | ||||
|         data["name"] = "Average battery usage"; | ||||
|         data["type"] = "integer"; | ||||
|         data["units"] = "%"; | ||||
|     } else if (_source == "battery/batleft") { | ||||
|         data["min"] = 0; | ||||
|         data["max"] = 0; | ||||
|         data["name"] = "Battery discharge time"; | ||||
|         data["type"] = "integer"; | ||||
|         data["units"] = "s"; | ||||
|     } else if (_source == "battery/batnow") { | ||||
|         data["min"] = 0; | ||||
|         data["max"] = 0; | ||||
|         data["name"] = "Current battery capacity"; | ||||
|         data["type"] = "integer"; | ||||
|         data["units"] = ""; | ||||
|     } else if (_source == "battery/batrate") { | ||||
|         data["min"] = 0; | ||||
|         data["max"] = 0; | ||||
|         data["name"] = "Average battery discharge rate"; | ||||
|         data["type"] = "float"; | ||||
|         data["units"] = "1/s"; | ||||
|     } else if (_source == "battery/battotal") { | ||||
|         data["min"] = 0; | ||||
|         data["max"] = 0; | ||||
|         data["name"] = "Full battery capacity"; | ||||
|         data["type"] = "integer"; | ||||
|         data["units"] = ""; | ||||
|     } else if (_source.startsWith("battery/batleft")) { | ||||
|         data["min"] = 0; | ||||
|         data["max"] = 0; | ||||
|         data["name"] = QString("Battery %1 discharge time").arg(index(_source)); | ||||
|         data["type"] = "integer"; | ||||
|         data["units"] = "s"; | ||||
|     } else if (_source.startsWith("battery/batnow")) { | ||||
|         data["min"] = 0; | ||||
|         data["max"] = 0; | ||||
|         data["name"] = QString("Battery %1 capacity").arg(index(_source)); | ||||
|         data["type"] = "integer"; | ||||
|         data["units"] = ""; | ||||
|     } else if (_source.startsWith("battery/battotal")) { | ||||
|         data["min"] = 0; | ||||
|         data["max"] = 0; | ||||
|         data["name"] = QString("Battery %1 full capacity").arg(index(_source)); | ||||
|         data["type"] = "integer"; | ||||
|         data["units"] = ""; | ||||
|     } else if (_source.startsWith("battery/batrate")) { | ||||
|         data["min"] = 0; | ||||
|         data["max"] = 0; | ||||
|         data["name"] = QString("Battery %1 discharge rate").arg(index(_source)); | ||||
|         data["type"] = "float"; | ||||
|         data["units"] = "1/s"; | ||||
|     } else if (_source.startsWith("battery/bat")) { | ||||
|         data["min"] = 0; | ||||
|         data["max"] = 100; | ||||
|         data["name"] = QString("Battery %1 usage").arg(index(_source)); | ||||
|         data["type"] = "integer"; | ||||
|         data["units"] = "%"; | ||||
|     auto data = new KSysGuard::SensorInfo(); | ||||
|     if (_source == "ac") { | ||||
|         data->name = "Is AC online or not"; | ||||
|         data->variantType = QVariant::Bool; | ||||
|         data->unit = KSysGuard::UnitNone; | ||||
|     } else if (_source == "bat") { | ||||
|         data->min = 0; | ||||
|         data->max = 100; | ||||
|         data->name = "Average battery usage"; | ||||
|         data->variantType = QVariant::Int; | ||||
|         data->unit = KSysGuard::UnitPercent; | ||||
|     } else if (_source == "batleft") { | ||||
|         data->min = 0; | ||||
|         data->max = 0; | ||||
|         data->name = "Battery discharge time"; | ||||
|         data->variantType = QVariant::Int; | ||||
|         data->unit = KSysGuard::UnitSecond; | ||||
|     } else if (_source == "batnow") { | ||||
|         data->min = 0; | ||||
|         data->max = 0; | ||||
|         data->name = "Current battery capacity"; | ||||
|         data->variantType = QVariant::Int; | ||||
|         data->unit = KSysGuard::UnitNone; | ||||
|     } else if (_source == "batrate") { | ||||
|         data->min = 0; | ||||
|         data->max = 0; | ||||
|         data->name = "Average battery discharge rate"; | ||||
|         data->variantType = QVariant::Double; | ||||
|         data->unit = KSysGuard::UnitRate; | ||||
|     } else if (_source == "battotal") { | ||||
|         data->min = 0; | ||||
|         data->max = 0; | ||||
|         data->name = "Full battery capacity"; | ||||
|         data->variantType = QVariant::Int; | ||||
|         data->unit = KSysGuard::UnitNone; | ||||
|     } else if (_source.startsWith("batleft")) { | ||||
|         data->min = 0; | ||||
|         data->max = 0; | ||||
|         data->name = QString("Battery %1 discharge time").arg(index(_source)); | ||||
|         data->variantType = QVariant::Int; | ||||
|         data->unit = KSysGuard::UnitSecond; | ||||
|     } else if (_source.startsWith("batnow")) { | ||||
|         data->min = 0; | ||||
|         data->max = 0; | ||||
|         data->name = QString("Battery %1 capacity").arg(index(_source)); | ||||
|         data->variantType = QVariant::Int; | ||||
|         data->unit = KSysGuard::UnitNone; | ||||
|     } else if (_source.startsWith("battotal")) { | ||||
|         data->min = 0; | ||||
|         data->max = 0; | ||||
|         data->name = QString("Battery %1 full capacity").arg(index(_source)); | ||||
|         data->variantType = QVariant::Int; | ||||
|         data->unit = KSysGuard::UnitNone; | ||||
|     } else if (_source.startsWith("batrate")) { | ||||
|         data->min = 0; | ||||
|         data->max = 0; | ||||
|         data->name = QString("Battery %1 discharge rate").arg(index(_source)); | ||||
|         data->variantType = QVariant::Double; | ||||
|         data->unit = KSysGuard::UnitRate; | ||||
|     } else if (_source.startsWith("bat")) { | ||||
|         data->min = 0; | ||||
|         data->max = 100; | ||||
|         data->name = QString("Battery %1 usage").arg(index(_source)); | ||||
|         data->variantType = QVariant::Int; | ||||
|         data->unit = KSysGuard::UnitPercent; | ||||
|     } | ||||
|  | ||||
|     return data; | ||||
| @ -166,7 +166,7 @@ void BatterySource::run() | ||||
|     // adaptor | ||||
|     QFile acFile(QString("%1/AC/online").arg(m_acpiPath)); | ||||
|     if (acFile.open(QIODevice::ReadOnly | QIODevice::Text)) | ||||
|         m_values["battery/ac"] = (QString(acFile.readLine()).trimmed().toInt() == 1); | ||||
|         m_values["ac"] = (QString(acFile.readLine()).trimmed().toInt() == 1); | ||||
|     acFile.close(); | ||||
|  | ||||
|     // batteries | ||||
| @ -177,28 +177,27 @@ void BatterySource::run() | ||||
|         if (currentLevelFile.open(QIODevice::ReadOnly | QIODevice::Text)) { | ||||
|             auto value = QString(currentLevelFile.readLine()).toInt(); | ||||
|             m_trend[i + 1].append(value); | ||||
|             m_values[QString("battery/batnow%1").arg(i)] = value; | ||||
|             m_values[QString("batnow%1").arg(i)] = value; | ||||
|         } | ||||
|         currentLevelFile.close(); | ||||
|         // total | ||||
|         QFile fullLevelFile(QString("%1/BAT%2/energy_full").arg(m_acpiPath).arg(i)); | ||||
|         if (fullLevelFile.open(QIODevice::ReadOnly | QIODevice::Text)) | ||||
|             m_values[QString("battery/battotal%1").arg(i)] = QString(fullLevelFile.readLine()).toInt(); | ||||
|             m_values[QString("battotal%1").arg(i)] = QString(fullLevelFile.readLine()).toInt(); | ||||
|         fullLevelFile.close(); | ||||
|  | ||||
|         m_values[QString("battery/bat%1").arg(i)] | ||||
|             = static_cast<int>(100 * m_values[QString("battery/batnow%1").arg(i)].toFloat() | ||||
|                                / m_values[QString("battery/battotal%1").arg(i)].toFloat()); | ||||
|         m_values[QString("bat%1").arg(i)] = static_cast<int>(100 * m_values[QString("batnow%1").arg(i)].toFloat() | ||||
|                                                              / m_values[QString("battotal%1").arg(i)].toFloat()); | ||||
|         // accumulate | ||||
|         currentLevel += m_values[QString("battery/batnow%1").arg(i)].toFloat(); | ||||
|         fullLevel += m_values[QString("battery/battotal%1").arg(i)].toFloat(); | ||||
|         currentLevel += m_values[QString("batnow%1").arg(i)].toFloat(); | ||||
|         fullLevel += m_values[QString("battotal%1").arg(i)].toFloat(); | ||||
|     } | ||||
|  | ||||
|     // total | ||||
|     m_trend[0].append(static_cast<int>(currentLevel)); | ||||
|     m_values["battery/batnow"] = static_cast<int>(currentLevel); | ||||
|     m_values["battery/battotal"] = static_cast<int>(fullLevel); | ||||
|     m_values["battery/bat"] = static_cast<int>(100 * currentLevel / fullLevel); | ||||
|     m_values["batnow"] = static_cast<int>(currentLevel); | ||||
|     m_values["battotal"] = static_cast<int>(fullLevel); | ||||
|     m_values["bat"] = static_cast<int>(100 * currentLevel / fullLevel); | ||||
|  | ||||
|     calculateRates(); | ||||
| } | ||||
| @ -244,15 +243,14 @@ void BatterySource::calculateRates() | ||||
|  | ||||
|     for (int i = 0; i < m_batteriesCount; i++) { | ||||
|         auto approx = approximate(m_trend[i + 1]); | ||||
|         m_values[QString("battery/batrate%1").arg(i)] = approx / interval; | ||||
|         m_values[QString("battery/batleft%1").arg(i)] | ||||
|             = interval * m_values[QString("battery/batnow%1").arg(i)].toFloat() / approx; | ||||
|         m_values[QString("batrate%1").arg(i)] = approx / interval; | ||||
|         m_values[QString("batleft%1").arg(i)] = interval * m_values[QString("batnow%1").arg(i)].toFloat() / approx; | ||||
|     } | ||||
|  | ||||
|     // total | ||||
|     auto approx = approximate(m_trend[0]); | ||||
|     m_values["battery/batrate"] = approx / interval; | ||||
|     m_values["battery/batleft"] = interval * m_values["battery/batnow"].toFloat() / approx; | ||||
|     m_values["batrate"] = approx / interval; | ||||
|     m_values["batleft"] = interval * m_values["batnow"].toFloat() / approx; | ||||
|  | ||||
|     // old data cleanup | ||||
|     for (auto &trend : m_trend.keys()) { | ||||
|  | ||||
| @ -35,7 +35,7 @@ public: | ||||
|     ~BatterySource() override; | ||||
|     QStringList getSources(); | ||||
|     QVariant data(const QString &_source) override; | ||||
|     [[nodiscard]] QVariantMap initialData(const QString &_source) const override; | ||||
|     [[nodiscard]] KSysGuard::SensorInfo *initialData(const QString &_source) const override; | ||||
|     void run() override; | ||||
|     [[nodiscard]] QStringList sources() const override; | ||||
|  | ||||
|  | ||||
| @ -15,9 +15,11 @@ | ||||
|  *   along with awesome-widgets. If not, see http://www.gnu.org/licenses/  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
|  | ||||
| #include "customsource.h" | ||||
|  | ||||
| #include <ksysguard/formatter/Unit.h> | ||||
| #include <ksysguard/systemstats/SensorInfo.h> | ||||
|  | ||||
| #include "awdebug.h" | ||||
| #include "extscript.h" | ||||
|  | ||||
| @ -49,16 +51,14 @@ QVariant CustomSource::data(const QString &_source) | ||||
| } | ||||
|  | ||||
|  | ||||
| QVariantMap CustomSource::initialData(const QString &_source) const | ||||
| KSysGuard::SensorInfo *CustomSource::initialData(const QString &_source) const | ||||
| { | ||||
|     qCDebug(LOG_ESS) << "Source" << _source; | ||||
|  | ||||
|     QVariantMap data; | ||||
|     data["min"] = ""; | ||||
|     data["max"] = ""; | ||||
|     data["name"] = QString("Custom command '%1' output").arg(m_extScripts->itemByTagNumber(index(_source))->uniq()); | ||||
|     data["type"] = "QString"; | ||||
|     data["units"] = ""; | ||||
|     auto data = new KSysGuard::SensorInfo(); | ||||
|     data->name = QString("Custom command '%1' output").arg(m_extScripts->itemByTagNumber(index(_source))->uniq()); | ||||
|     data->variantType = QVariant::String; | ||||
|     data->unit = KSysGuard::UnitNone; | ||||
|  | ||||
|     return data; | ||||
| } | ||||
| @ -74,7 +74,7 @@ QStringList CustomSource::getSources() | ||||
| { | ||||
|     QStringList sources; | ||||
|     for (auto &item : m_extScripts->activeItems()) | ||||
|         sources.append(QString("custom/%1").arg(item->tag("custom"))); | ||||
|         sources.append(item->tag("custom")); | ||||
|  | ||||
|     return sources; | ||||
| } | ||||
|  | ||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user