Compare commits

...

5 Commits

241 changed files with 2863 additions and 4449 deletions

View File

@ -27,10 +27,10 @@ jobs:
run: pacman -Sy --noconfirm base-devel cmake extra-cmake-modules python util-linux-libs xorg-server-xvfb run: pacman -Sy --noconfirm base-devel cmake extra-cmake-modules python util-linux-libs xorg-server-xvfb
- name: install dependencies - name: install dependencies
run: pacman -S --noconfirm plasma-workspace ksysguard run: pacman -S --noconfirm plasma-workspace
- name: configure cmake - name: configure cmake
run: cmake -B build -DKDE_INSTALL_USE_QT_SYS_PATHS=ON -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DBUILD_FUTURE=ON -DBUILD_TESTING=ON sources run: cmake -B build -S sources -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DBUILD_FUTURE=ON -DBUILD_TESTING=ON
- name: build - name: build
working-directory: /repo/build working-directory: /repo/build

View File

@ -25,17 +25,17 @@ jobs:
env: env:
VERSION: ${{ steps.version.outputs.VERSION }} VERSION: ${{ steps.version.outputs.VERSION }}
- name: build debian package # - name: build debian package
run: | # run: |
sudo apt update && \ # sudo apt update && \
sudo apt install -yq cmake extra-cmake-modules g++ git gettext make && \ # sudo apt install -yq cmake extra-cmake-modules g++ git gettext make && \
sudo apt install -yq libkf5i18n-dev libkf5notifications-dev libkf5service-dev \ # sudo apt install -yq libkf5i18n-dev libkf5notifications-dev libkf5service-dev \
libkf5windowsystem-dev libkf5plasma-dev qtbase5-dev qtdeclarative5-dev \ # libkf5windowsystem-dev libkf5plasma-dev qtbase5-dev qtdeclarative5-dev \
plasma-workspace-dev && \ # plasma-workspace-dev && \
cmake -B build-deb -DKDE_INSTALL_USE_QT_SYS_PATHS=ON -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Optimization -DBUILD_FUTURE=ON -DBUILD_DEB_PACKAGE=ON sources && \ # cmake -B build-deb -DKDE_INSTALL_USE_QT_SYS_PATHS=ON -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Optimization -DBUILD_FUTURE=ON -DBUILD_DEB_PACKAGE=ON sources && \
cd build-deb && \ # cd build-deb && \
make package && \ # make package && \
cd .. # cd ..
- name: release - name: release
uses: softprops/action-gh-release@v1 uses: softprops/action-gh-release@v1
@ -45,7 +45,7 @@ jobs:
${{ steps.changelog.outputs.changelog }} ${{ steps.changelog.outputs.changelog }}
files: | files: |
awesome-widgets-*-src.tar.xz awesome-widgets-*-src.tar.xz
build-deb/plasma-widget-awesome-widgets-*.deb # build-deb/plasma-widget-awesome-widgets-*.deb
fail_on_unmatched_files: true fail_on_unmatched_files: true
env: env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View File

@ -1,3 +1,6 @@
Ver.4.0.0:
* migration to plasma 6
Ver.3.5.0: Ver.3.5.0:
+ wayland support + wayland support
* update code to latest standards * update code to latest standards
@ -12,7 +15,6 @@ Ver.3.4.2:
* update to new qt api * update to new qt api
- fix non printable spaces (#142, #143) - fix non printable spaces (#142, #143)
Ver.3.3.3: Ver.3.3.3:
+ add custom keys support (#101) + add custom keys support (#101)
* DBus interface improvements * DBus interface improvements

View File

@ -1,41 +1,30 @@
# Maintainer: Evgeniy Alekseev <arcanis at archlinux dot org> # Maintainer: Evgeniy Alekseev <arcanis at archlinux dot org>
pkgname=plasma5-applet-awesome-widgets pkgname=plasma6-applet-awesome-widgets
_pkgname=awesome-widgets _pkgname=awesome-widgets
pkgver=3.4.3 pkgver=4.0.0alpha2
pkgrel=1 pkgrel=1
pkgdesc="Collection of minimalistic Plasmoids which look like Awesome WM widgets (ex-PyTextMonitor)" pkgdesc="Collection of minimalistic Plasmoids which look like Awesome WM widgets (ex-PyTextMonitor)"
arch=('i686' 'x86_64') arch=('x86_64')
url="https://arcanis.me/projects/awesome-widgets" url="https://arcanis.me/projects/awesome-widgets"
license=('GPL3') license=('GPL3')
depends=('ksysguard' 'plasma-framework') depends=('plasma-workspace')
optdepends=("catalyst: for GPU monitor" optdepends=("mpd: for music player monitor")
"hddtemp: for HDD temperature monitor"
"smartmontools: for HDD temperature monitor"
"mpd: for music player monitor"
"nvidia-utils: for GPU monitor")
makedepends=('cmake' 'extra-cmake-modules' 'python') makedepends=('cmake' 'extra-cmake-modules' 'python')
source=(https://github.com/arcan1s/awesome-widgets/releases/download/V.${pkgver}/${_pkgname}-${pkgver}-src.tar.xz) source=(https://github.com/arcan1s/awesome-widgets/releases/download/${pkgver}/${_pkgname}-${pkgver}-src.tar.xz)
install=${pkgname}.install install="$pkgname.install"
md5sums=('5953ba518191bb6fff83cdb8633c735c')
backup=('etc/xdg/plasma-dataengine-extsysmon.conf') backup=('etc/xdg/plasma-dataengine-extsysmon.conf')
prepare() {
rm -rf "${srcdir}/build"
mkdir "${srcdir}/build"
}
build () { build () {
cd "${srcdir}/build" cmake -B build -S "${_pkgname}" \
cmake -DKDE_INSTALL_USE_QT_SYS_PATHS=ON \
-DCMAKE_BUILD_TYPE=Optimization \ -DCMAKE_BUILD_TYPE=Optimization \
-DCMAKE_INSTALL_PREFIX=/usr \
-DBUILD_FUTURE=ON \ -DBUILD_FUTURE=ON \
"../${_pkgname}" -DBUILD_TESTING=OFF
make cmake --build build
} }
package() { package() {
cd "${srcdir}/build" DESTDIR="$pkgdir" cmake --install build
make DESTDIR="${pkgdir}" install
} }
sha256sums=('b2a7b07a1df6f710f4e0d6e5898933f4ddb131818b922dc4b8e48afe3e98a664')

View File

@ -39,81 +39,6 @@ void CFont::setCurrentColor(const QColor color)
} }
int CFont::html2QFont(const int htmlWeight)
{
int weight = 16;
switch(htmlWeight) {
case 100:
weight = 16;
break;
case 200:
case 300:
weight = 25;
break;
case 400:
weight = 50;
break;
case 500:
case 600:
weight = 63;
break;
case 700:
case 800:
weight = 75;
break;
case 900:
weight = 87;
break;
default:
break;
}
return weight;
}
int CFont::qFont2html(const int weight)
{
int htmlWeight = 400;
switch(weight) {
case 16:
htmlWeight = 100;
break;
case 25:
htmlWeight = 300;
break;
case 50:
htmlWeight = 400;
break;
case 63:
htmlWeight = 600;
break;
case 75:
htmlWeight = 800;
break;
case 87:
htmlWeight = 900;
break;
default:
break;
}
return htmlWeight;
}
int CFont::htmlWeight()
{
return CFont::qFont2html(weight());
}
void CFont::setHtmlWeight(const int htmlWeight)
{
setWeight(CFont::html2QFont(htmlWeight));
}
CFont CFont::fromQFont(const QFont font, const QColor color) CFont CFont::fromQFont(const QFont font, const QColor color)
{ {
return CFont(font.family(), font.pointSize(), font.weight(), font.italic(), color); return CFont(font.family(), font.pointSize(), font.weight(), font.italic(), color);
@ -133,7 +58,7 @@ CFontDialog::CFontDialog(QWidget *parent, bool needWeight, bool needItalic)
setLayout(mainGrid); setLayout(mainGrid);
colorBox = new QComboBox(this); colorBox = new QComboBox(this);
connect(colorBox, SIGNAL(currentIndexChanged(QString)), this, SLOT(updateColor(QString))); connect(colorBox, &QComboBox::currentTextChanged, this, &CFontDialog::updateColor);
QStringList colorNames = QColor::colorNames(); QStringList colorNames = QColor::colorNames();
int index = 0; int index = 0;
for (int i=0; i<colorNames.count(); i++) { for (int i=0; i<colorNames.count(); i++) {
@ -156,8 +81,8 @@ CFontDialog::CFontDialog(QWidget *parent, bool needWeight, bool needItalic)
buttons = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, buttons = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel,
Qt::Horizontal, this); Qt::Horizontal, this);
QObject::connect(buttons, SIGNAL(accepted()), this, SLOT(accept())); QObject::connect(buttons, &QDialogButtonBox::accepted, this, &CFontDialog::accept);
QObject::connect(buttons, SIGNAL(rejected()), this, SLOT(reject())); QObject::connect(buttons, &QDialogButtonBox::rejected, this, &CFontDialog::reject);
mainGrid->addWidget(buttons, 1, 0, 1, 5); mainGrid->addWidget(buttons, 1, 0, 1, 5);
italicBox->setHidden(!needItalic); italicBox->setHidden(!needItalic);

View File

@ -15,8 +15,7 @@
* License along with this library. * * License along with this library. *
***************************************************************************/ ***************************************************************************/
#ifndef FONTDIALOG_H #pragma once
#define FONTDIALOG_H
#include <QComboBox> #include <QComboBox>
#include <QDialog> #include <QDialog>
@ -34,11 +33,6 @@ public:
// color properties // color properties
QColor color(); QColor color();
void setCurrentColor(const QColor color); void setCurrentColor(const QColor color);
// html weight properties
static int html2QFont(const int htmlWeight);
static int qFont2html(const int weight);
int htmlWeight();
void setHtmlWeight(const int htmlWeight);
// conversion to QFont // conversion to QFont
static CFont fromQFont(const QFont font, static CFont fromQFont(const QFont font,
const QColor color = QColor(QString("#000000"))); const QColor color = QColor(QString("#000000")));
@ -77,6 +71,3 @@ private:
QSpinBox *sizeBox; QSpinBox *sizeBox;
QSpinBox *weightBox; QSpinBox *weightBox;
}; };
#endif /* FONTDIALOG_H */

View File

@ -14,9 +14,9 @@ project(awesomewidgets)
set(PROJECT_AUTHOR "Evgeniy Alekseev") set(PROJECT_AUTHOR "Evgeniy Alekseev")
set(PROJECT_CONTACT "esalexeev@gmail.com") set(PROJECT_CONTACT "esalexeev@gmail.com")
set(PROJECT_LICENSE "GPL3") set(PROJECT_LICENSE "GPL3")
set(PROJECT_VERSION_MAJOR "3") set(PROJECT_VERSION_MAJOR "4")
set(PROJECT_VERSION_MINOR "5") set(PROJECT_VERSION_MINOR "0")
set(PROJECT_VERSION_PATCH "1") set(PROJECT_VERSION_PATCH "0")
set(PROJECT_VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}") set(PROJECT_VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}")
# append git version if any # append git version if any
set(PROJECT_COMMIT_SHA "Commit hash" CACHE INTERNAL "") set(PROJECT_COMMIT_SHA "Commit hash" CACHE INTERNAL "")

View File

@ -15,9 +15,7 @@
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/ ***************************************************************************/
#pragma once
#ifndef AWDEBUG_H
#define AWDEBUG_H
#include <QLoggingCategory> #include <QLoggingCategory>
@ -42,6 +40,3 @@ Q_DECLARE_LOGGING_CATEGORY(LOG_DP)
Q_DECLARE_LOGGING_CATEGORY(LOG_ESM) Q_DECLARE_LOGGING_CATEGORY(LOG_ESM)
Q_DECLARE_LOGGING_CATEGORY(LOG_ESS) Q_DECLARE_LOGGING_CATEGORY(LOG_ESS)
Q_DECLARE_LOGGING_CATEGORY(LOG_LIB) Q_DECLARE_LOGGING_CATEGORY(LOG_LIB)
#endif /* AWDEBUG_H */

View File

@ -1,7 +1,7 @@
set(SUBPROJECT plasma_applet_awesome-widget) set(SUBPROJECT plasma_applet_awesome-widget)
message(STATUS "Subproject ${SUBPROJECT}") message(STATUS "Subproject ${SUBPROJECT}")
configure_file(metadata.desktop ${CMAKE_CURRENT_SOURCE_DIR}/package/metadata.desktop) configure_file(metadata.json ${CMAKE_CURRENT_SOURCE_DIR}/package/metadata.json)
add_subdirectory(plugin) add_subdirectory(plugin)
plasma_install_package(package org.kde.plasma.awesomewidget) plasma_install_package(package org.kde.plasma.awesomewidget)

View File

@ -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

View File

@ -0,0 +1,26 @@
{
"KPackageStructure": "Plasma/Applet",
"KPlugin": {
"Authors": [
{
"Email": "esalexeev@gmail.com",
"Name": "Evgeniy Alekseev aka arcanis"
}
],
"Category": "System Information",
"Description": "A minimalistic Plasmoid",
"Description[en]": "A minimalistic Plasmoid",
"Description[es]": "Un script Plasmoïde minimaliste",
"Description[pt_BR]": "Um script Plasmoid",
"Description[ru]": "Минималистичный плазмоид",
"Description[uk]": "Мінімалістичний плазмоїд",
"EnabledByDefault": true,
"Icon": "utilities-system-monitor",
"Id": "org.kde.plasma.awesomewidget",
"License": "GPLv3",
"Name": "Awesome Widget",
"Version": "@PROJECT_VERSION@",
"Website": "https://arcanis.me/projects/awesome-widgets/"
},
"X-Plasma-API-Minimum-Version": "6.0"
}

View File

@ -15,7 +15,7 @@
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/ ***************************************************************************/
import QtQuick 2.0 import QtQuick 2.15
import org.kde.plasma.configuration 2.0 import org.kde.plasma.configuration 2.0

View File

@ -7,150 +7,150 @@
<group name="Widget"> <group name="Widget">
<!-- widget --> <!-- widget -->
<entry name="text" type="string"> <entry name="text" type="String">
<default>[cpu: $cpu%] [mem: $mem%] [swap: $swap%] [$netdev: $down/$upKB/s]</default> <default>[cpu: $cpu%] [mem: $mem%] [swap: $swap%] [$netdev: $down/$upKB/s]</default>
</entry> </entry>
</group> </group>
<group name="Advanced"> <group name="Advanced">
<!-- advanced --> <!-- advanced -->
<entry name="background" type="bool"> <entry name="background" type="Bool">
<default>true</default> <default>true</default>
</entry> </entry>
<entry name="translateStrings" type="bool"> <entry name="translateStrings" type="Bool">
<default>true</default> <default>true</default>
</entry> </entry>
<entry name="wrapNewLines" type="bool"> <entry name="wrapNewLines" type="Bool">
<default>false</default> <default>false</default>
</entry> </entry>
<entry name="wrapText" type="bool"> <entry name="wrapText" type="Bool">
<default>false</default> <default>false</default>
</entry> </entry>
<entry name="notify" type="bool"> <entry name="notify" type="Bool">
<default>true</default> <default>true</default>
</entry> </entry>
<entry name="checkUpdates" type="bool"> <entry name="checkUpdates" type="Bool">
<default>true</default> <default>true</default>
</entry> </entry>
<entry name="optimize" type="bool"> <entry name="optimize" type="Bool">
<default>true</default> <default>true</default>
</entry> </entry>
<entry name="height" type="int"> <entry name="height" type="Int">
<default>0</default> <default>0</default>
</entry> </entry>
<entry name="width" type="int"> <entry name="width" type="Int">
<default>0</default> <default>0</default>
</entry> </entry>
<entry name="interval" type="int"> <entry name="interval" type="Int">
<default>1000</default> <default>1000</default>
</entry> </entry>
<entry name="queueLimit" type="int"> <entry name="queueLimit" type="Int">
<default>0</default> <default>0</default>
</entry> </entry>
<entry name="tempUnits" type="string"> <entry name="tempUnits" type="String">
<default>Celsius</default> <default>Celsius</default>
</entry> </entry>
<entry name="customTime" type="string"> <entry name="customTime" type="String">
<default>$hh:$mm</default> <default>$hh:$mm</default>
</entry> </entry>
<entry name="customUptime" type="string"> <entry name="customUptime" type="String">
<default>$dd,$hh,$mm</default> <default>$dd,$hh,$mm</default>
</entry> </entry>
<entry name="acOnline" type="string"> <entry name="acOnline" type="String">
<default>(*)</default> <default>(*)</default>
</entry> </entry>
<entry name="acOffline" type="string"> <entry name="acOffline" type="String">
<default>( )</default> <default>( )</default>
</entry> </entry>
<entry name="telemetryCount" type="int"> <entry name="telemetryCount" type="Int">
<default>100</default> <default>100</default>
</entry> </entry>
<entry name="telemetryRemote" type="bool"> <entry name="telemetryRemote" type="Bool">
<default>false</default> <default>false</default>
</entry> </entry>
<entry name="telemetryId" type="string"> <entry name="telemetryId" type="String">
<default></default> <default></default>
</entry> </entry>
</group> </group>
<group name="Tooltip"> <group name="Tooltip">
<entry name="tooltipNumber" type="int"> <entry name="tooltipNumber" type="Int">
<default>100</default> <default>100</default>
</entry> </entry>
<entry name="useTooltipBackground" type="bool"> <entry name="useTooltipBackground" type="Bool">
<default>true</default> <default>true</default>
</entry> </entry>
<entry name="tooltipBackground" type="string"> <entry name="tooltipBackground" type="String">
<default>#ffffff</default> <default>#ffffff</default>
</entry> </entry>
<entry name="cpuTooltip" type="bool"> <entry name="cpuTooltip" type="Bool">
<default>true</default> <default>true</default>
</entry> </entry>
<entry name="cpuTooltipColor" type="string"> <entry name="cpuTooltipColor" type="String">
<default>#ff0000</default> <default>#ff0000</default>
</entry> </entry>
<entry name="cpuclTooltip" type="bool"> <entry name="cpuclTooltip" type="Bool">
<default>true</default> <default>true</default>
</entry> </entry>
<entry name="cpuclTooltipColor" type="string"> <entry name="cpuclTooltipColor" type="String">
<default>#00ff00</default> <default>#00ff00</default>
</entry> </entry>
<entry name="memTooltip" type="bool"> <entry name="memTooltip" type="Bool">
<default>true</default> <default>true</default>
</entry> </entry>
<entry name="memTooltipColor" type="string"> <entry name="memTooltipColor" type="String">
<default>#0000ff</default> <default>#0000ff</default>
</entry> </entry>
<entry name="swapTooltip" type="bool"> <entry name="swapTooltip" type="Bool">
<default>true</default> <default>true</default>
</entry> </entry>
<entry name="swapTooltipColor" type="string"> <entry name="swapTooltipColor" type="String">
<default>#ffff00</default> <default>#ffff00</default>
</entry> </entry>
<entry name="downkbTooltip" type="bool"> <entry name="downkbTooltip" type="Bool">
<default>true</default> <default>true</default>
</entry> </entry>
<entry name="downkbTooltipColor" type="string"> <entry name="downkbTooltipColor" type="String">
<default>#00ffff</default> <default>#00ffff</default>
</entry> </entry>
<entry name="upkbTooltipColor" type="string"> <entry name="upkbTooltipColor" type="String">
<default>#ff00ff</default> <default>#ff00ff</default>
</entry> </entry>
<entry name="batTooltip" type="bool"> <entry name="batTooltip" type="Bool">
<default>true</default> <default>true</default>
</entry> </entry>
<entry name="batTooltipColor" type="string"> <entry name="batTooltipColor" type="String">
<default>#008800</default> <default>#008800</default>
</entry> </entry>
<entry name="batInTooltipColor" type="string"> <entry name="batInTooltipColor" type="String">
<default>#880000</default> <default>#880000</default>
</entry> </entry>
</group> </group>
<group name="Appearance"> <group name="Appearance">
<!-- appearance --> <!-- appearance -->
<entry name="textAlign" type="string"> <entry name="textAlign" type="String">
<default>center</default> <default>center</default>
</entry> </entry>
<entry name="fontFamily" type="string"> <entry name="fontFamily" type="String">
<default>Terminus</default> <default>Terminus</default>
</entry> </entry>
<entry name="fontSize" type="int"> <entry name="fontSize" type="Int">
<default>12</default> <default>12</default>
</entry> </entry>
<entry name="fontColor" type="string"> <entry name="fontColor" type="String">
<default>#000000</default> <default>#000000</default>
</entry> </entry>
<entry name="fontWeight" type="string"> <entry name="fontWeight" type="String">
<default>normal</default> <default>normal</default>
</entry> </entry>
<entry name="fontStyle" type="string"> <entry name="fontStyle" type="String">
<default>normal</default> <default>normal</default>
</entry> </entry>
<entry name="textStyle" type="string"> <entry name="textStyle" type="String">
<default>normal</default> <default>normal</default>
</entry> </entry>
<entry name="textStyleColor" type="string"> <entry name="textStyleColor" type="String">
<default>#000000</default> <default>#000000</default>
</entry> </entry>
</group> </group>

View File

@ -15,28 +15,21 @@
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/ ***************************************************************************/
import QtQuick 2.0 import QtQuick 2.15
import org.kde.kcmutils as KCM
import org.kde.plasma.private.awesomewidget 1.0 import org.kde.plasma.private.awesomewidget 1.0
Item { KCM.SimpleKCM {
id: aboutPage id: aboutPage
// backend // backend
AWActions { AWActions {
id: awActions id: awActions
} }
width: childrenRect.width
height: childrenRect.height
property bool debug: awActions.isDebugEnabled()
AboutTab { AboutTab {
textProvider: awActions textProvider: awActions
} }
Component.onCompleted: {
if (debug) console.debug()
}
} }

View File

@ -15,26 +15,21 @@
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/ ***************************************************************************/
import QtQuick 2.0 import QtQuick 2.15
import QtQuick.Controls 1.3 as QtControls import QtQuick.Controls
import org.kde.kcmutils as KCM
import org.kde.plasma.private.awesomewidget 1.0 import org.kde.plasma.private.awesomewidget 1.0
Item { KCM.SimpleKCM {
id: advancedPage id: advancedPage
// backend // backend
AWActions { AWActions {
id: awActions id: awActions
} }
width: childrenRect.width
height: childrenRect.height
implicitWidth: pageColumn.implicitWidth
implicitHeight: pageColumn.implicitHeight
property bool debug: awActions.isDebugEnabled()
property alias cfg_background: background.checked property alias cfg_background: background.checked
property alias cfg_translateStrings: translate.checked property alias cfg_translateStrings: translate.checked
property alias cfg_wrapNewLines: wrapNewLines.checked property alias cfg_wrapNewLines: wrapNewLines.checked
@ -55,7 +50,6 @@ Item {
property alias cfg_telemetryRemote: telemetryRemote.checked property alias cfg_telemetryRemote: telemetryRemote.checked
property alias cfg_telemetryId: telemetryId.value property alias cfg_telemetryId: telemetryId.value
Column { Column {
id: pageColumn id: pageColumn
anchors.fill: parent anchors.fill: parent
@ -135,37 +129,37 @@ Item {
id: tempUnits id: tempUnits
model: [ model: [
{ {
'label': i18n("Celsius"), "label": i18n("Celsius"),
'name': "Celsius" "name": "Celsius"
}, },
{ {
'label': i18n("Fahrenheit"), "label": i18n("Fahrenheit"),
'name': "Fahrenheit" "name": "Fahrenheit"
}, },
{ {
'label': i18n("Kelvin"), "label": i18n("Kelvin"),
'name': "Kelvin" "name": "Kelvin"
}, },
{ {
'label': i18n("Reaumur"), "label": i18n("Reaumur"),
'name': "Reaumur" "name": "Reaumur"
}, },
{ {
'label': i18n("cm^-1"), "label": i18n("cm^-1"),
'name': "cm^-1" "name": "cm^-1"
}, },
{ {
'label': i18n("kJ/mol"), "label": i18n("kJ/mol"),
'name': "kJ/mol" "name": "kJ/mol"
}, },
{ {
'label': i18n("kcal/mol"), "label": i18n("kcal/mol"),
'name': "kcal/mol" "name": "kcal/mol"
} }
] ]
text: i18n("Temperature units") text: i18n("Temperature units")
value: plasmoid.configuration.tempUnits value: plasmoid.configuration.tempUnits
onValueEdited: cfg_tempUnits = newValue onValueEdited: newValue => cfg_tempUnits = newValue
} }
LineSelector { LineSelector {
@ -192,18 +186,20 @@ Item {
value: plasmoid.configuration.acOffline value: plasmoid.configuration.acOffline
} }
QtControls.GroupBox { GroupBox {
height: implicitHeight
width: parent.width width: parent.width
height: implicitHeight
title: i18n("Actions") title: i18n("Actions")
Column { Column {
height: implicitHeight height: implicitHeight
width: parent.width width: parent.width
ButtonSelector { ButtonSelector {
value: i18n("Drop key cache") value: i18n("Drop key cache")
onButtonActivated: awActions.dropCache() onButtonActivated: awActions.dropCache()
} }
ButtonSelector { ButtonSelector {
ExportDialog { ExportDialog {
id: saveConfigAs id: saveConfigAs
@ -212,11 +208,12 @@ Item {
value: i18n("Export configuration") value: i18n("Export configuration")
onButtonActivated: saveConfigAs.open() onButtonActivated: saveConfigAs.open()
} }
ButtonSelector { ButtonSelector {
ImportDialog { ImportDialog {
id: loadConfigFrom id: loadConfigFrom
onConfigurationReceived: { onConfigurationReceived: {
for (var key in configuration) for (const key in configuration)
plasmoid.configuration[key] = configuration[key] plasmoid.configuration[key] = configuration[key]
} }
} }
@ -226,7 +223,7 @@ Item {
} }
} }
QtControls.GroupBox { GroupBox {
height: implicitHeight height: implicitHeight
width: parent.width width: parent.width
title: i18n("Telemetry") title: i18n("Telemetry")
@ -234,10 +231,12 @@ Item {
Column { Column {
height: implicitHeight height: implicitHeight
width: parent.width width: parent.width
CheckBoxSelector { CheckBoxSelector {
id: telemetryRemote id: telemetryRemote
text: i18n("Enable remote telemetry") text: i18n("Enable remote telemetry")
} }
IntegerSelector { IntegerSelector {
id: telemetryCount id: telemetryCount
maximumValue: 10000 maximumValue: 10000
@ -246,6 +245,7 @@ Item {
text: i18n("History count") text: i18n("History count")
value: plasmoid.configuration.telemetryCount value: plasmoid.configuration.telemetryCount
} }
LineSelector { LineSelector {
id: telemetryId id: telemetryId
text: i18n("Telemetry ID") text: i18n("Telemetry ID")
@ -254,9 +254,4 @@ Item {
} }
} }
} }
Component.onCompleted: {
if (debug) console.debug()
}
} }

View File

@ -15,31 +15,22 @@
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/ ***************************************************************************/
import QtQuick 2.0 import QtQuick 2.15
import org.kde.kcmutils as KCM
import org.kde.plasma.private.awesomewidget 1.0 import org.kde.plasma.private.awesomewidget 1.0
import "." import "."
Item { KCM.SimpleKCM {
id: appearancePage id: appearancePage
// backend
AWActions {
id: awActions
}
width: childrenRect.width
height: childrenRect.height
implicitWidth: pageColumn.implicitWidth
implicitHeight: pageColumn.implicitHeight
property bool debug: awActions.isDebugEnabled()
property variant weight: { property variant weight: {
25: 0, 25: 0,
50: 1, 50: 1,
63: 3, 63: 3,
75: 4, 75: 4,
87: 5 87: 5,
} }
property alias cfg_fontFamily: font.value property alias cfg_fontFamily: font.value
@ -50,7 +41,6 @@ Item {
property alias cfg_textStyleColor: selectStyleColor.value property alias cfg_textStyleColor: selectStyleColor.value
property string cfg_textStyle: textStyle.value property string cfg_textStyle: textStyle.value
Column { Column {
id: pageColumn id: pageColumn
anchors.fill: parent anchors.fill: parent
@ -75,7 +65,7 @@ Item {
model: General.fontWeightModel model: General.fontWeightModel
text: i18n("Font weight") text: i18n("Font weight")
value: plasmoid.configuration.fontWeight value: plasmoid.configuration.fontWeight
onValueEdited: cfg_fontWeight = newValue onValueEdited: newValue => cfg_fontWeight = newValue
} }
ComboBoxSelector { ComboBoxSelector {
@ -83,7 +73,7 @@ Item {
model: General.fontStyleModel model: General.fontStyleModel
text: i18n("Font style") text: i18n("Font style")
value: plasmoid.configuration.fontStyle value: plasmoid.configuration.fontStyle
onValueEdited: cfg_fontStyle = newValue onValueEdited: newValue => cfg_fontStyle = newValue
} }
ColorSelector { ColorSelector {
@ -97,7 +87,7 @@ Item {
model: General.textStyleModel model: General.textStyleModel
text: i18n("Style") text: i18n("Style")
value: plasmoid.configuration.textStyle value: plasmoid.configuration.textStyle
onValueEdited: cfg_textStyle = newValue onValueEdited: newValue => cfg_textStyle = newValue
} }
ColorSelector { ColorSelector {
@ -106,9 +96,4 @@ Item {
value: plasmoid.configuration.textStyleColor value: plasmoid.configuration.textStyleColor
} }
} }
Component.onCompleted: {
if (debug) console.debug()
}
} }

View File

@ -15,105 +15,46 @@
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/ ***************************************************************************/
import QtQuick 2.0 import QtQuick 2.15
import QtQuick.Controls 1.3 as QtControls import QtQuick.Controls
import QtQuick.Dialogs 1.1 as QtDialogs import org.kde.kcmutils as KCM
import org.kde.plasma.private.awesomewidget 1.0 import org.kde.plasma.private.awesomewidget 1.0
Item { KCM.SimpleKCM {
id: dataenginePage id: dataenginePage
// backend // backend
AWKeys { AWKeys {
id: awKeys id: awKeys
} }
AWActions {
id: awActions
}
AWConfigHelper { AWConfigHelper {
id: awConfig id: awConfig
} }
width: childrenRect.width
height: childrenRect.height
implicitWidth: pageColumn.implicitWidth
implicitHeight: pageColumn.implicitHeight
property bool debug: awActions.isDebugEnabled()
property variant cfg_dataengine: awConfig.readDataEngineConfiguration() property variant cfg_dataengine: awConfig.readDataEngineConfiguration()
Column { Column {
id: pageColumn id: pageColumn
anchors.fill: parent anchors.fill: parent
QtControls.GroupBox {
GroupBox {
height: implicitHeight height: implicitHeight
width: parent.width width: parent.width
title: i18n("ACPI") title: i18n("ACPI")
LineSelector { LineSelector {
text: i18n("ACPI path") text: i18n("ACPI path")
value: cfg_dataengine["ACPIPATH"] value: cfg_dataengine["ACPIPATH"]
onValueEdited: cfg_dataengine["ACPIPATH"] = newValue onValueEdited: newValue => cfg_dataengine["ACPIPATH"] = newValue
} }
} }
QtControls.GroupBox { GroupBox {
height: implicitHeight
width: parent.width
title: i18n("GPU")
ComboBoxSelector {
model: [
{
'label': "auto",
'name': "auto"
},
{
'label': "disable",
'name': "disable"
},
{
'label': "ati",
'name': "ati"
},
{
'label': "nvidia",
'name': "nvidia"
}
]
text: i18n("GPU device")
value: cfg_dataengine["GPUDEV"]
onValueEdited: cfg_dataengine["GPUDEV"] = newValue
}
}
QtControls.GroupBox {
height: implicitHeight
width: parent.width
title: i18n("HDD temperature")
Column {
height: implicitHeight
width: parent.width
ComboBoxSelector {
id: hdd
text: i18n("HDD")
value: cfg_dataengine["HDDDEV"]
onValueEdited: cfg_dataengine["HDDDEV"] = newValue
}
LineSelector {
text: i18n("hddtemp cmd")
value: cfg_dataengine["HDDTEMPCMD"]
onValueEdited: cfg_dataengine["HDDTEMPCMD"] = newValue
}
}
}
QtControls.GroupBox {
height: implicitHeight height: implicitHeight
width: parent.width width: parent.width
title: i18n("Player") title: i18n("Player")
Column { Column {
height: implicitHeight height: implicitHeight
width: parent.width width: parent.width
@ -123,27 +64,27 @@ Item {
stepSize: 1 stepSize: 1
text: i18n("Player data symbols") text: i18n("Player data symbols")
value: cfg_dataengine["PLAYERSYMBOLS"] value: cfg_dataengine["PLAYERSYMBOLS"]
onValueEdited: cfg_dataengine["PLAYERSYMBOLS"] = newValue onValueEdited: newValue => cfg_dataengine["PLAYERSYMBOLS"] = newValue
} }
ComboBoxSelector { ComboBoxSelector {
model: [ model: [
{ {
'label': "disable", "label": "disable",
'name': "disable" "name": "disable"
}, },
{ {
'label': "mpris", "label": "mpris",
'name': "mpris" "name": "mpris"
}, },
{ {
'label': "mpd", "label": "mpd",
'name': "mpd" "name": "mpd"
} }
] ]
text: i18n("Music player") text: i18n("Music player")
value: cfg_dataengine["PLAYER"] value: cfg_dataengine["PLAYER"]
onValueEdited: cfg_dataengine["PLAYER"] = newValue onValueEdited: newValue => cfg_dataengine["PLAYER"] = newValue
} }
ComboBoxSelector { ComboBoxSelector {
@ -151,40 +92,40 @@ Item {
editable: true editable: true
model: [ model: [
{ {
'label': 'auto', "label": "auto",
'name': 'auto' "name": "auto"
}, },
{ {
'label': 'amarok', "label": "amarok",
'name': 'amarok' "name": "amarok"
}, },
{ {
'label': 'audacious', "label": "audacious",
'name': 'audacious' "name": "audacious"
}, },
{ {
'label': 'clementine', "label": "clementine",
'name': 'clementine' "name": "clementine"
}, },
{ {
'label': 'DeaDBeeF', "label": "DeaDBeeF",
'name': 'DeaDBeeF' "name": "DeaDBeeF"
}, },
{ {
'label': 'vlc', "label": "vlc",
'name': 'vlc' "name": "vlc"
}, },
{ {
'label': 'qmmp', "label": "qmmp",
'name': 'qmmp' "name": "qmmp"
}, },
{ {
'label': 'xmms2', "label": "xmms2",
'name': 'xmms2' "name": "xmms2"
}, },
{ {
'label': cfg_dataengine["MPRIS"], "label": cfg_dataengine["MPRIS"],
'name': cfg_dataengine["MPRIS"] "name": cfg_dataengine["MPRIS"]
} }
] ]
text: i18n("MPRIS player name") text: i18n("MPRIS player name")
@ -194,7 +135,7 @@ Item {
LineSelector { LineSelector {
text: i18n("MPD address") text: i18n("MPD address")
value: cfg_dataengine["MPDADDRESS"] value: cfg_dataengine["MPDADDRESS"]
onValueEdited: cfg_dataengine["MPDADDRESS"] = newValue onValueEdited: newValue => cfg_dataengine["MPDADDRESS"] = newValue
} }
IntegerSelector { IntegerSelector {
@ -203,18 +144,20 @@ Item {
stepSize: 1 stepSize: 1
text: i18n("MPD port") text: i18n("MPD port")
value: cfg_dataengine["MPDPORT"] value: cfg_dataengine["MPDPORT"]
onValueEdited: cfg_dataengine["MPDPORT"] = newValue onValueEdited: newValue => cfg_dataengine["MPDPORT"] = newValue
} }
} }
} }
QtControls.GroupBox { GroupBox {
height: implicitHeight height: implicitHeight
width: parent.width width: parent.width
title: i18n("Extensions") title: i18n("Extensions")
Column { Column {
height: implicitHeight height: implicitHeight
width: parent.width width: parent.width
ButtonSelector { ButtonSelector {
value: i18n("Custom scripts") value: i18n("Custom scripts")
onButtonActivated: awKeys.editItem("extscript") onButtonActivated: awKeys.editItem("extscript")
@ -245,8 +188,6 @@ Item {
Component.onCompleted: { Component.onCompleted: {
if (debug) console.debug()
// init submodule // init submodule
awKeys.updateCache() awKeys.updateCache()
@ -256,8 +197,6 @@ Item {
} }
Component.onDestruction: { Component.onDestruction: {
if (debug) console.debug()
cfg_dataengine["MPRIS"] = mpris.editText cfg_dataengine["MPRIS"] = mpris.editText
awConfig.writeDataEngineConfiguration(cfg_dataengine) awConfig.writeDataEngineConfiguration(cfg_dataengine)
} }

View File

@ -15,20 +15,20 @@
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/ ***************************************************************************/
import QtQuick 2.4 import QtQuick 2.15
import QtQuick.Controls 1.3 as QtControls import QtQuick.Controls
import QtQuick.Dialogs 1.2 as QtDialogs import QtQuick.Dialogs
import QtQuick.Layouts 1.1 import QtQuick.Layouts
import org.kde.plasma.core as PlasmaCore
import org.kde.plasma.plasmoid 2.0 import org.kde.plasma.plasmoid 2.0
import org.kde.plasma.core 2.0 as PlasmaCore
import org.kde.plasma.components 2.0 as PlasmaComponents
import org.kde.plasma.private.awesomewidget 1.0 import org.kde.plasma.private.awesomewidget 1.0
import "." import "."
Item { PlasmoidItem {
id: main id: main
// backend // backend
AWKeys { AWKeys {
id: awKeys id: awKeys
@ -43,7 +43,6 @@ Item {
id: bugReport id: bugReport
} }
property bool debug: awActions.isDebugEnabled()
property variant tooltipSettings: { property variant tooltipSettings: {
"tooltipNumber": plasmoid.configuration.tooltipNumber, "tooltipNumber": plasmoid.configuration.tooltipNumber,
"useTooltipBackground": plasmoid.configuration.useTooltipBackground, "useTooltipBackground": plasmoid.configuration.useTooltipBackground,
@ -73,19 +72,12 @@ Item {
signal needToolTipUpdate(string newText) signal needToolTipUpdate(string newText)
signal sizeUpdate signal sizeUpdate
Layout.fillWidth: PlasmoidItem.formFactor !== PlasmaCore.Planar
// init Layout.fillHeight: PlasmoidItem.formFactor !== PlasmaCore.Planar
Plasmoid.preferredRepresentation: Plasmoid.fullRepresentation
Plasmoid.compactRepresentation: Plasmoid.fullRepresentation
Layout.fillWidth: plasmoid.formFactor != PlasmaCore.Planar
Layout.fillHeight: plasmoid.formFactor != PlasmaCore.Planar
Layout.alignment: Qt.AlignVCenter | Qt.AlignHCenter Layout.alignment: Qt.AlignVCenter | Qt.AlignHCenter
Plasmoid.icon: "utilities-system-monitor" Plasmoid.icon: "utilities-system-monitor"
Plasmoid.backgroundHints: plasmoid.configuration.background ? "DefaultBackground" : "NoBackground" Plasmoid.backgroundHints: plasmoid.configuration.background ? "DefaultBackground" : "NoBackground"
Plasmoid.associatedApplication: "ksysguard"
// ui // ui
Text { Text {
@ -100,7 +92,7 @@ Item {
color: plasmoid.configuration.fontColor color: plasmoid.configuration.fontColor
font.family: plasmoid.configuration.fontFamily font.family: plasmoid.configuration.fontFamily
font.italic: plasmoid.configuration.fontStyle == "italic" ? true : false font.italic: plasmoid.configuration.fontStyle === "italic" ? true : false
font.pointSize: plasmoid.configuration.fontSize font.pointSize: plasmoid.configuration.fontSize
font.weight: General.fontWeight[plasmoid.configuration.fontWeight] font.weight: General.fontWeight[plasmoid.configuration.fontWeight]
@ -119,19 +111,19 @@ Item {
} }
} }
QtDialogs.Dialog { Dialog {
id: tagSelector id: tagSelector
title: i18n("Select tag") title: i18n("Select tag")
QtControls.ComboBox { ComboBox {
id: tagSelectorBox id: tagSelectorBox
width: parent.width width: parent.width
editable: true editable: true
} }
onAccepted: { onAccepted: {
var tag = tagSelectorBox.editText const tag = tagSelectorBox.editText
var message = i18n("Tag: %1", tag) let message = i18n("Tag: %1", tag)
message += "<br>" message += "<br>"
message += i18n("Value: %1", awKeys.valueByKey(tag)) message += i18n("Value: %1", awKeys.valueByKey(tag))
message += "<br>" message += "<br>"
@ -140,17 +132,37 @@ Item {
} }
} }
Plasmoid.contextualActions: [
PlasmaCore.Action {
text: i18n("Request key")
icon.name: "utilities-system-monitor"
onTriggered: {
tagSelectorBox.model = awKeys.dictKeys(true)
tagSelector.open()
}
},
PlasmaCore.Action {
text: i18n("Show README")
icon.name: "text-x-readme"
onTriggered: awActions.showReadme()
},
PlasmaCore.Action {
text: i18n("Check updates")
icon.name: "system-software-update"
onTriggered: awActions.checkUpdates(true)
},
PlasmaCore.Action {
text: i18n("Report bug")
icon.name: "tools-report-bug"
onTriggered: {
bugReport.reset()
bugReport.open()
}
}
]
Component.onCompleted: { Component.onCompleted: {
if (debug) console.debug()
// actions
// it makes no sense to use this field with optimization enable
if (!plasmoid.configuration.optimize)
plasmoid.setAction("requestKey", i18n("Request key"), "utilities-system-monitor")
plasmoid.setAction("showReadme", i18n("Show README"), "text-x-readme")
plasmoid.setAction("checkUpdates", i18n("Check updates"), "system-software-update")
plasmoid.setAction("reportBug", i18n("Report bug"), "tools-report-bug")
// init submodule // init submodule
Plasmoid.userConfiguringChanged(false) Plasmoid.userConfiguringChanged(false)
// connect data // connect data
@ -160,32 +172,26 @@ Item {
if (plasmoid.configuration.checkUpdates) return awActions.checkUpdates(false) if (plasmoid.configuration.checkUpdates) return awActions.checkUpdates(false)
} }
onNeedTextUpdate: { onNeedTextUpdate: newText => {
if (debug) console.debug()
text.text = newText text.text = newText
sizeUpdate() sizeUpdate()
} }
onNeedToolTipUpdate: { onNeedToolTipUpdate: newText => {
if (debug) console.debug()
tooltip.text = newText tooltip.text = newText
} }
onSizeUpdate: { onSizeUpdate: {
if (debug) console.debug()
// 16 is a magic number // 16 is a magic number
// in other case plasmoid will increase own size on each update // in other case plasmoid will increase own size on each update
if (plasmoid.configuration.height === 0) {
if (plasmoid.configuration.height == 0) {
Layout.minimumHeight = text.contentHeight - 16 Layout.minimumHeight = text.contentHeight - 16
Layout.maximumHeight = -1 Layout.maximumHeight = -1
} else { } else {
Layout.minimumHeight = plasmoid.configuration.height Layout.minimumHeight = plasmoid.configuration.height
Layout.maximumHeight = plasmoid.configuration.height Layout.maximumHeight = plasmoid.configuration.height
} }
if (plasmoid.configuration.width == 0) { if (plasmoid.configuration.width === 0) {
Layout.minimumWidth = text.contentWidth - 16 Layout.minimumWidth = text.contentWidth - 16
Layout.maximumWidth = -1 Layout.maximumWidth = -1
} else { } else {
@ -196,7 +202,6 @@ Item {
Plasmoid.onUserConfiguringChanged: { Plasmoid.onUserConfiguringChanged: {
if (plasmoid.userConfiguring) return if (plasmoid.userConfiguring) return
if (debug) console.debug()
// init submodule // init submodule
awKeys.initDataAggregator(tooltipSettings) awKeys.initDataAggregator(tooltipSettings)
@ -211,7 +216,7 @@ Item {
awKeys.setAggregatorProperty("tempUnits", plasmoid.configuration.tempUnits) awKeys.setAggregatorProperty("tempUnits", plasmoid.configuration.tempUnits)
awKeys.setAggregatorProperty("translate", plasmoid.configuration.translateStrings) awKeys.setAggregatorProperty("translate", plasmoid.configuration.translateStrings)
// update telemetry ID // update telemetry ID
if (plasmoid.configuration.telemetryId.length == 0) if (plasmoid.configuration.telemetryId.length === 0)
plasmoid.configuration.telemetryId = generateUuid() plasmoid.configuration.telemetryId = generateUuid()
// save telemetry // save telemetry
awTelemetryHandler.init(plasmoid.configuration.telemetryCount, awTelemetryHandler.init(plasmoid.configuration.telemetryCount,
@ -221,37 +226,10 @@ Item {
awTelemetryHandler.uploadTelemetry("awwidgetconfig", plasmoid.configuration.text) awTelemetryHandler.uploadTelemetry("awwidgetconfig", plasmoid.configuration.text)
} }
function action_checkUpdates() {
if (debug) console.debug()
return awActions.checkUpdates(true)
}
function action_showReadme() {
if (debug) console.debug()
return awActions.showReadme()
}
function action_reportBug() {
if (debug) console.debug()
bugReport.reset()
bugReport.open()
}
function action_requestKey() {
if (debug) console.debug()
tagSelectorBox.model = awKeys.dictKeys(true)
return tagSelector.open()
}
// code from http://stackoverflow.com/questions/105034/create-guid-uuid-in-javascript // code from http://stackoverflow.com/questions/105034/create-guid-uuid-in-javascript
function generateUuid() { function generateUuid() {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(c) {
var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8); let r = Math.random() * 16 | 0, v = c === "x" ? r : (r & 0x3 | 0x8);
return v.toString(16); return v.toString(16);
}); });
} }

View File

@ -15,25 +15,15 @@
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/ ***************************************************************************/
import QtQuick 2.0 import QtQuick 2.15
import QtQuick.Controls 1.3 as QtControls import QtQuick.Controls
import org.kde.kcmutils as KCM
import org.kde.plasma.private.awesomewidget 1.0 import org.kde.plasma.private.awesomewidget 1.0
Item { KCM.SimpleKCM {
id: tooltipPage id: tooltipPage
// backend
AWActions {
id: awActions
}
width: childrenRect.width
height: childrenRect.height
implicitWidth: pageColumn.implicitWidth
implicitHeight: pageColumn.implicitHeight
property bool debug: awActions.isDebugEnabled()
property alias cfg_tooltipNumber: tooltipNumber.value property alias cfg_tooltipNumber: tooltipNumber.value
property alias cfg_useTooltipBackground: useTooltipBackground.checked property alias cfg_useTooltipBackground: useTooltipBackground.checked
@ -46,18 +36,18 @@ Item {
property alias cfg_memTooltipColor: memTooltipColor.value property alias cfg_memTooltipColor: memTooltipColor.value
property alias cfg_swapTooltip: swapTooltip.checked property alias cfg_swapTooltip: swapTooltip.checked
property alias cfg_swapTooltipColor: swapTooltipColor.value property alias cfg_swapTooltipColor: swapTooltipColor.value
property alias cfg_downkbTooltip: downkbTooltip.checked property alias cfg_downkbTooltip: networkTooltip.checked
property alias cfg_downkbTooltipColor: downkbTooltipColor.value property alias cfg_downkbTooltipColor: downkbTooltipColor.value
property alias cfg_upkbTooltipColor: upkbTooltipColor.value property alias cfg_upkbTooltipColor: upkbTooltipColor.value
property alias cfg_batTooltip: batTooltip.checked property alias cfg_batTooltip: batTooltip.checked
property alias cfg_batTooltipColor: batTooltipColor.value property alias cfg_batTooltipColor: batTooltipColor.value
property alias cfg_batInTooltipColor: batInTooltipColor.value property alias cfg_batInTooltipColor: batInTooltipColor.value
Column { Column {
id: pageColumn id: pageColumn
anchors.fill: parent anchors.fill: parent
QtControls.Label {
Label {
width: parent.width width: parent.width
horizontalAlignment: Text.AlignHCenter horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter verticalAlignment: Text.AlignVCenter
@ -74,85 +64,116 @@ Item {
value: plasmoid.configuration.tooltipNumber value: plasmoid.configuration.tooltipNumber
} }
QtControls.GroupBox { GroupBox {
id: useTooltipBackground id: useTooltipBackground
height: implicitHeight
width: parent.width width: parent.width
checkable: true
title: i18n("Background") property alias checked: useTooltipBackgroundLabel.checked
label: CheckBox {
id: useTooltipBackgroundLabel
text: i18n("Background")
}
ColorSelector { ColorSelector {
id: tooltipBackground id: tooltipBackground
enabled: useTooltipBackgroundLabel.checked
text: i18n("Background color") text: i18n("Background color")
value: plasmoid.configuration.tooltipBackground value: plasmoid.configuration.tooltipBackground
} }
} }
QtControls.GroupBox { GroupBox {
id: cpuTooltip id: cpuTooltip
height: implicitHeight
width: parent.width width: parent.width
checkable: true
title: i18n("CPU") property alias checked: cpuTooltipLabel.checked
label: CheckBox {
id: cpuTooltipLabel
text: i18n("CPU")
}
ColorSelector { ColorSelector {
id: cpuTooltipColor id: cpuTooltipColor
enabled: cpuTooltipLabel.checked
text: i18n("CPU color") text: i18n("CPU color")
value: plasmoid.configuration.cpuTooltipColor value: plasmoid.configuration.cpuTooltipColor
} }
} }
QtControls.GroupBox { GroupBox {
id: cpuclTooltip id: cpuclTooltip
height: implicitHeight
width: parent.width width: parent.width
checkable: true
title: i18n("CPU clock") property alias checked: cpuclTooltipLabel.checked
label: CheckBox {
id: cpuclTooltipLabel
text: i18n("CPU clock")
}
ColorSelector { ColorSelector {
id: cpuclTooltipColor id: cpuclTooltipColor
enabled: cpuclTooltipLabel.checked
text: i18n("CPU clock color") text: i18n("CPU clock color")
value: plasmoid.configuration.cpuclTooltipColor value: plasmoid.configuration.cpuclTooltipColor
} }
} }
QtControls.GroupBox { GroupBox {
id: memTooltip id: memTooltip
height: implicitHeight
width: parent.width width: parent.width
checkable: true
title: i18n("Memory") property alias checked: memTooltipLabel.checked
label: CheckBox {
id: memTooltipLabel
text: i18n("Memory")
}
ColorSelector { ColorSelector {
id: memTooltipColor id: memTooltipColor
enabled: memTooltipLabel.checked
text: i18n("Memory color") text: i18n("Memory color")
value: plasmoid.configuration.memTooltipColor value: plasmoid.configuration.memTooltipColor
} }
} }
QtControls.GroupBox { GroupBox {
id: swapTooltip id: swapTooltip
height: implicitHeight
width: parent.width width: parent.width
checkable: true
title: i18n("Swap") property alias checked: swapTooltipLabel.checked
label: CheckBox {
id: swapTooltipLabel
text: i18n("Swap")
}
ColorSelector { ColorSelector {
id: swapTooltipColor id: swapTooltipColor
enabled: swapTooltipLabel.checked
text: i18n("Swap color") text: i18n("Swap color")
value: plasmoid.configuration.swapTooltipColor value: plasmoid.configuration.swapTooltipColor
} }
} }
QtControls.GroupBox { GroupBox {
id: downkbTooltip id: networkTooltip
height: implicitHeight
width: parent.width width: parent.width
checkable: true
title: i18n("Network") property alias checked: networkTooltipLabel.checked
label: CheckBox {
id: networkTooltipLabel
text: i18n("Network")
}
Column { Column {
height: implicitHeight
width: parent.width width: parent.width
enabled: networkTooltipLabel.checked
ColorSelector { ColorSelector {
id: downkbTooltipColor id: downkbTooltipColor
text: i18n("Download speed color") text: i18n("Download speed color")
value: plasmoid.configuration.downkbTooltipColor value: plasmoid.configuration.downkbTooltipColor
} }
ColorSelector { ColorSelector {
id: upkbTooltipColor id: upkbTooltipColor
text: i18n("Upload speed color") text: i18n("Upload speed color")
@ -161,20 +182,26 @@ Item {
} }
} }
QtControls.GroupBox { GroupBox {
id: batTooltip id: batTooltip
height: implicitHeight
width: parent.width width: parent.width
checkable: true
title: i18n("Battery") property alias checked: batteryTooltipLabel.checked
label: CheckBox {
id: batteryTooltipLabel
text: i18n("Battery")
}
Column { Column {
height: implicitHeight
width: parent.width width: parent.width
enabled: batteryTooltipLabel.checked
ColorSelector { ColorSelector {
id: batTooltipColor id: batTooltipColor
text: i18n("Battery active color") text: i18n("Battery active color")
value: plasmoid.configuration.batTooltipColor value: plasmoid.configuration.batTooltipColor
} }
ColorSelector { ColorSelector {
id: batInTooltipColor id: batInTooltipColor
text: i18n("Battery inactive color") text: i18n("Battery inactive color")
@ -183,9 +210,4 @@ Item {
} }
} }
} }
Component.onCompleted: {
if (debug) console.debug()
}
} }

View File

@ -15,14 +15,17 @@
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/ ***************************************************************************/
import QtQuick 2.2 import QtQuick 2.15
import QtQuick.Controls
import org.kde.kcmutils as KCM
import org.kde.plasma.private.awesomewidget 1.0 import org.kde.plasma.private.awesomewidget 1.0
import "." import "."
Item { KCM.SimpleKCM {
id: widgetPage id: widgetPage
// backend // backend
AWKeys { AWKeys {
id: awKeys id: awKeys
@ -31,19 +34,11 @@ Item {
id: awActions id: awActions
} }
width: childrenRect.width
height: childrenRect.height
implicitWidth: pageColumn.implicitWidth
implicitHeight: pageColumn.implicitHeight
property bool debug: awActions.isDebugEnabled()
property alias cfg_text: textPattern.text property alias cfg_text: textPattern.text
property bool lock: true property bool lock: true
signal needTextUpdate(string newText) signal needTextUpdate(string newText)
Column { Column {
id: pageColumn id: pageColumn
anchors.fill: parent anchors.fill: parent
@ -74,10 +69,7 @@ Item {
} }
} }
Component.onCompleted: { Component.onCompleted: {
if (debug) console.debug()
awKeys.needTextToBeUpdated.connect(needTextUpdate) awKeys.needTextToBeUpdated.connect(needTextUpdate)
// init submodule // init submodule
awKeys.initKeys(plasmoid.configuration.text, plasmoid.configuration.interval, awKeys.initKeys(plasmoid.configuration.text, plasmoid.configuration.interval,
@ -90,9 +82,8 @@ Item {
awKeys.setAggregatorProperty("translate", plasmoid.configuration.translateStrings) awKeys.setAggregatorProperty("translate", plasmoid.configuration.translateStrings)
} }
onNeedTextUpdate: { onNeedTextUpdate: newText => {
if (lock) return if (lock) return
if (debug) console.debug()
extensions.showMessage(newText) extensions.showMessage(newText)
lock = true lock = true

View File

@ -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

View File

@ -0,0 +1,26 @@
{
"KPackageStructure": "Plasma/Applet",
"KPlugin": {
"Authors": [
{
"Email": "esalexeev@gmail.com",
"Name": "Evgeniy Alekseev aka arcanis"
}
],
"Category": "System Information",
"Description": "A minimalistic Plasmoid",
"Description[en]": "A minimalistic Plasmoid",
"Description[es]": "Un script Plasmoïde minimaliste",
"Description[pt_BR]": "Um script Plasmoid",
"Description[ru]": "Минималистичный плазмоид",
"Description[uk]": "Мінімалістичний плазмоїд",
"EnabledByDefault": true,
"Icon": "utilities-system-monitor",
"Id": "org.kde.plasma.awesomewidget",
"License": "GPLv3",
"Name": "Awesome Widget",
"Version": "4.0.0",
"Website": "https://arcanis.me/projects/awesome-widgets/"
},
"X-Plasma-API-Minimum-Version": "6.0"
}

View File

@ -7,17 +7,17 @@ include_directories(
${CMAKE_CURRENT_SOURCE_DIR}/../../${PROJECT_LIBRARY}/ ${CMAKE_CURRENT_SOURCE_DIR}/../../${PROJECT_LIBRARY}/
${PROJECT_TRDPARTY_DIR} ${PROJECT_TRDPARTY_DIR}
${Qt_INCLUDE} ${Qt_INCLUDE}
${Kf5_INCLUDE} ${Kf6_INCLUDE}
) )
file(GLOB SUBPROJECT_SOURCE *.cpp ${PROJECT_TRDPARTY_DIR}/fontdialog/*.cpp ${CMAKE_SOURCE_DIR}/*.cpp) file(GLOB SUBPROJECT_SOURCE *.cpp ${PROJECT_TRDPARTY_DIR}/fontdialog/*.cpp ${CMAKE_SOURCE_DIR}/*.cpp)
file(GLOB SUBPROJECT_UI *.ui) file(GLOB SUBPROJECT_UI *.ui)
file(GLOB SUBPROJECT_NOTIFY *.notifyrc) file(GLOB SUBPROJECT_NOTIFY *.notifyrc)
qt5_wrap_ui(SUBPROJECT_UI_HEADER ${SUBPROJECT_UI}) qt6_wrap_ui(SUBPROJECT_UI_HEADER ${SUBPROJECT_UI})
add_library(${PLUGIN_NAME} SHARED ${SUBPROJECT_SOURCE} ${SUBPROJECT_UI_HEADER}) add_library(${PLUGIN_NAME} SHARED ${SUBPROJECT_SOURCE} ${SUBPROJECT_UI_HEADER})
target_link_libraries(${PLUGIN_NAME} ${PROJECT_LIBRARY} ${Qt_LIBRARIES} ${Kf5_LIBRARIES}) target_link_libraries(${PLUGIN_NAME} ${PROJECT_LIBRARY} ${Qt_LIBRARIES} ${Kf6_LIBRARIES})
install(TARGETS ${PLUGIN_NAME} DESTINATION ${QML_INSTALL_DIR}/org/kde/plasma/private/awesomewidget) install(TARGETS ${PLUGIN_NAME} DESTINATION ${KDE_INSTALL_QMLDIR}/org/kde/plasma/private/awesomewidget)
install(FILES qmldir DESTINATION ${QML_INSTALL_DIR}/org/kde/plasma/private/awesomewidget) install(FILES qmldir DESTINATION ${KDE_INSTALL_QMLDIR}/org/kde/plasma/private/awesomewidget)
install(FILES ${SUBPROJECT_NOTIFY} DESTINATION ${KNOTIFYRC_INSTALL_DIR}) install(FILES ${SUBPROJECT_NOTIFY} DESTINATION ${KDE_INSTALL_KNOTIFYRCDIR})

View File

@ -37,13 +37,13 @@ AWAbstractPairConfig::AWAbstractPairConfig(QWidget *_parent, const bool _hasEdit
ui->setupUi(this); ui->setupUi(this);
connect(ui->buttonBox, SIGNAL(accepted()), this, SLOT(accept())); connect(ui->buttonBox, &QDialogButtonBox::accepted, this, &AWAbstractPairConfig::accept);
connect(ui->buttonBox, SIGNAL(rejected()), this, SLOT(reject())); connect(ui->buttonBox, &QDialogButtonBox::rejected, this, &AWAbstractPairConfig::reject);
// edit feature // edit feature
if (m_hasEdit) { if (m_hasEdit) {
m_editButton = ui->buttonBox->addButton(i18n("Edit"), QDialogButtonBox::ActionRole); m_editButton = ui->buttonBox->addButton(i18n("Edit"), QDialogButtonBox::ActionRole);
connect(m_editButton, SIGNAL(clicked(bool)), this, SLOT(edit())); connect(m_editButton, &QPushButton::clicked, [this]() { return edit(); });
} }
} }
@ -84,14 +84,14 @@ void AWAbstractPairConfig::edit()
void AWAbstractPairConfig::updateUi() void AWAbstractPairConfig::updateUi()
{ {
QPair<QString, QString> current = dynamic_cast<AWAbstractSelector *>(sender())->current(); auto current = dynamic_cast<AWAbstractSelector *>(sender())->current();
int index = m_selectors.indexOf(dynamic_cast<AWAbstractSelector *>(sender())); auto index = m_selectors.indexOf(dynamic_cast<AWAbstractSelector *>(sender()));
if ((current.first.isEmpty()) && (current.second.isEmpty())) { if ((current.first.isEmpty()) && (current.second.isEmpty())) {
// remove current selector if it is empty and does not last // remove current selector if it is empty and does not last
if (sender() == m_selectors.last()) if (sender() == m_selectors.last())
return; return;
AWAbstractSelector *selector = m_selectors.takeAt(index); auto *selector = m_selectors.takeAt(index);
ui->verticalLayout->removeWidget(selector); ui->verticalLayout->removeWidget(selector);
selector->deleteLater(); selector->deleteLater();
} else { } else {
@ -112,7 +112,7 @@ void AWAbstractPairConfig::addSelector(const QStringList &_keys, const QStringLi
auto *selector = new AWAbstractSelector(ui->scrollAreaWidgetContents, m_editable); auto *selector = new AWAbstractSelector(ui->scrollAreaWidgetContents, m_editable);
selector->init(_keys, _values, _current); selector->init(_keys, _values, _current);
ui->verticalLayout->insertWidget(ui->verticalLayout->count() - 1, selector); ui->verticalLayout->insertWidget(ui->verticalLayout->count() - 1, selector);
connect(selector, SIGNAL(selectionChanged()), this, SLOT(updateUi())); connect(selector, &AWAbstractSelector::selectionChanged, this, &AWAbstractPairConfig::updateUi);
m_selectors.append(selector); m_selectors.append(selector);
} }
@ -120,7 +120,7 @@ void AWAbstractPairConfig::addSelector(const QStringList &_keys, const QStringLi
void AWAbstractPairConfig::clearSelectors() void AWAbstractPairConfig::clearSelectors()
{ {
for (auto &selector : m_selectors) { for (auto &selector : m_selectors) {
disconnect(selector, SIGNAL(selectionChanged()), this, SLOT(updateUi())); disconnect(selector, &AWAbstractSelector::selectionChanged, this, &AWAbstractPairConfig::updateUi);
ui->verticalLayout->removeWidget(selector); ui->verticalLayout->removeWidget(selector);
selector->deleteLater(); selector->deleteLater();
} }
@ -164,7 +164,7 @@ QPair<QStringList, QStringList> AWAbstractPairConfig::initKeys() const
right.append(m_helper->rightKeys().isEmpty() ? m_keys : m_helper->rightKeys()); right.append(m_helper->rightKeys().isEmpty() ? m_keys : m_helper->rightKeys());
right.sort(); right.sort();
return QPair<QStringList, QStringList>(left, right); return {left, right};
} }
@ -175,7 +175,7 @@ void AWAbstractPairConfig::updateDialog()
auto keys = initKeys(); auto keys = initKeys();
for (auto &key : m_helper->keys()) for (auto &key : m_helper->keys())
addSelector(keys.first, keys.second, QPair<QString, QString>(key, m_helper->pairs()[key])); addSelector(keys.first, keys.second, QPair<QString, QString>(key, pairs[key]));
// empty one // empty one
addSelector(keys.first, keys.second, QPair<QString, QString>()); addSelector(keys.first, keys.second, QPair<QString, QString>());
} }

View File

@ -15,9 +15,7 @@
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/ ***************************************************************************/
#pragma once
#ifndef AWABSTRACTPAIRCONFIG_H
#define AWABSTRACTPAIRCONFIG_H
#include <QDialog> #include <QDialog>
@ -67,6 +65,3 @@ private:
[[nodiscard]] QPair<QStringList, QStringList> initKeys() const; [[nodiscard]] QPair<QStringList, QStringList> initKeys() const;
void updateDialog(); void updateDialog();
}; };
#endif /* AWABSTRACTPAIRCONFIG_H */

View File

@ -15,9 +15,7 @@
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/ ***************************************************************************/
#pragma once
#ifndef AWABSTRACTPAIRHELPER_H
#define AWABSTRACTPAIRHELPER_H
#include <QHash> #include <QHash>
@ -46,6 +44,3 @@ private:
QString m_filePath; QString m_filePath;
QString m_section; QString m_section;
}; };
#endif /* AWABSTRACTPAIRHELPER_H */

View File

@ -15,9 +15,7 @@
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/ ***************************************************************************/
#pragma once
#ifndef AWABSTRACTSELECTOR_H
#define AWABSTRACTSELECTOR_H
#include <QWidget> #include <QWidget>
@ -43,6 +41,3 @@ signals:
private: private:
Ui::AWAbstractSelector *ui = nullptr; Ui::AWAbstractSelector *ui = nullptr;
}; };
#endif /* AWABSTRACTSELECTOR_H */

View File

@ -71,13 +71,6 @@ QString AWActions::getFileContent(const QString &_path)
} }
// HACK: since QML could not use QLoggingCategory I need this hack
bool AWActions::isDebugEnabled()
{
return LOG_AW().isDebugEnabled();
}
bool AWActions::runCmd(const QString &_cmd, const QStringList &_args) bool AWActions::runCmd(const QString &_cmd, const QStringList &_args)
{ {
qCDebug(LOG_AW) << "Cmd" << _cmd << "args" << _args; qCDebug(LOG_AW) << "Cmd" << _cmd << "args" << _args;

View File

@ -15,9 +15,7 @@
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/ ***************************************************************************/
#pragma once
#ifndef AWACTIONS_H
#define AWACTIONS_H
#include <QMap> #include <QMap>
#include <QObject> #include <QObject>
@ -34,7 +32,6 @@ public:
~AWActions() override; ~AWActions() override;
Q_INVOKABLE void checkUpdates(bool _showAnyway = false); Q_INVOKABLE void checkUpdates(bool _showAnyway = false);
Q_INVOKABLE static QString getFileContent(const QString &_path); Q_INVOKABLE static QString getFileContent(const QString &_path);
Q_INVOKABLE static bool isDebugEnabled();
Q_INVOKABLE static bool runCmd(const QString &_cmd, const QStringList &_args); Q_INVOKABLE static bool runCmd(const QString &_cmd, const QStringList &_args);
Q_INVOKABLE static void showLegacyInfo(); Q_INVOKABLE static void showLegacyInfo();
Q_INVOKABLE static void showReadme(); Q_INVOKABLE static void showReadme();
@ -48,6 +45,3 @@ public slots:
private: private:
AWUpdateHelper *m_updateHelper = nullptr; AWUpdateHelper *m_updateHelper = nullptr;
}; };
#endif /* AWACTIONS_H */

View File

@ -44,7 +44,7 @@ AWBugReporter::~AWBugReporter()
void AWBugReporter::doConnect() void AWBugReporter::doConnect()
{ {
// additional method for testing needs // additional method for testing needs
connect(this, SIGNAL(replyReceived(const int, const QString &)), this, SLOT(showInformation(int, const QString &))); connect(this, &AWBugReporter::replyReceived, this, &AWBugReporter::showInformation);
} }
@ -72,25 +72,25 @@ void AWBugReporter::sendBugReport(const QString &_title, const QString &_body)
qCDebug(LOG_AW) << "Send bug report with title" << _title << "and body" << _body; qCDebug(LOG_AW) << "Send bug report with title" << _title << "and body" << _body;
auto *manager = new QNetworkAccessManager(nullptr); auto *manager = new QNetworkAccessManager(nullptr);
connect(manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(issueReplyRecieved(QNetworkReply *))); connect(manager, &QNetworkAccessManager::finished, this, &AWBugReporter::issueReplyReceived);
QNetworkRequest request = QNetworkRequest(QUrl(BUGTRACKER_API)); auto request = QNetworkRequest(QUrl(BUGTRACKER_API));
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json"); request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
// generate payload // generate payload
QVariantMap payload; QVariantMap payload;
payload["title"] = _title; payload["title"] = _title;
payload["body"] = _body; payload["body"] = _body;
payload["labels"] = QStringList() << "from application"; payload["labels"] = QStringList({"from application"});
// convert to QByteArray to send request // convert to QByteArray to send request
QByteArray data = QJsonDocument::fromVariant(payload).toJson(QJsonDocument::Compact); auto data = QJsonDocument::fromVariant(payload).toJson(QJsonDocument::Compact);
qCInfo(LOG_AW) << "Send request with _body" << data.data() << "and size" << data.size(); qCInfo(LOG_AW) << "Send request with _body" << data.data() << "and size" << data.size();
manager->post(request, data); manager->post(request, data);
} }
void AWBugReporter::issueReplyRecieved(QNetworkReply *_reply) void AWBugReporter::issueReplyReceived(QNetworkReply *_reply)
{ {
if (_reply->error() != QNetworkReply::NoError) { if (_reply->error() != QNetworkReply::NoError) {
qCWarning(LOG_AW) << "An error occurs" << _reply->error() << "with message" << _reply->errorString(); qCWarning(LOG_AW) << "An error occurs" << _reply->error() << "with message" << _reply->errorString();
@ -98,7 +98,7 @@ void AWBugReporter::issueReplyRecieved(QNetworkReply *_reply)
} }
QJsonParseError error{}; QJsonParseError error{};
QJsonDocument jsonDoc = QJsonDocument::fromJson(_reply->readAll(), &error); auto jsonDoc = QJsonDocument::fromJson(_reply->readAll(), &error);
if (error.error != QJsonParseError::NoError) { if (error.error != QJsonParseError::NoError) {
qCWarning(LOG_AW) << "Parse error" << error.errorString(); qCWarning(LOG_AW) << "Parse error" << error.errorString();
return emit(replyReceived(0, "")); return emit(replyReceived(0, ""));
@ -106,9 +106,9 @@ void AWBugReporter::issueReplyRecieved(QNetworkReply *_reply)
_reply->deleteLater(); _reply->deleteLater();
// convert to map // convert to map
QVariantMap response = jsonDoc.toVariant().toMap(); auto response = jsonDoc.toVariant().toMap();
QString url = response["html_url"].toString(); auto url = response["html_url"].toString();
int number = response["number"].toInt(); auto number = response["number"].toInt();
return emit(replyReceived(number, url)); return emit(replyReceived(number, url));
} }
@ -135,7 +135,7 @@ void AWBugReporter::showInformation(const int _number, const QString &_url)
void AWBugReporter::userReplyOnBugReport(QAbstractButton *_button) void AWBugReporter::userReplyOnBugReport(QAbstractButton *_button)
{ {
QMessageBox::ButtonRole ret = dynamic_cast<QMessageBox *>(sender())->buttonRole(_button); auto ret = dynamic_cast<QMessageBox *>(sender())->buttonRole(_button);
qCInfo(LOG_AW) << "User select" << ret; qCInfo(LOG_AW) << "User select" << ret;
switch (ret) { switch (ret) {

View File

@ -15,9 +15,7 @@
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/ ***************************************************************************/
#pragma once
#ifndef AWBUGREPORTER_H
#define AWBUGREPORTER_H
#include <QObject> #include <QObject>
@ -41,13 +39,10 @@ signals:
void replyReceived(int _number, const QString &_url); void replyReceived(int _number, const QString &_url);
private slots: private slots:
void issueReplyRecieved(QNetworkReply *_reply); void issueReplyReceived(QNetworkReply *_reply);
void showInformation(int _number, const QString &_url); void showInformation(int _number, const QString &_url);
void userReplyOnBugReport(QAbstractButton *_button); void userReplyOnBugReport(QAbstractButton *_button);
private: private:
QString m_lastBugUrl; QString m_lastBugUrl;
}; };
#endif /* AWBUGREPORTER_H */

View File

@ -21,7 +21,6 @@
#include <QQmlPropertyMap> #include <QQmlPropertyMap>
#include <QSettings> #include <QSettings>
#include <QStandardPaths> #include <QStandardPaths>
#include <QTextCodec>
#include "awdebug.h" #include "awdebug.h"
@ -171,9 +170,6 @@ QVariantMap AWConfigHelper::readDataEngineConfiguration()
settings.beginGroup("Configuration"); settings.beginGroup("Configuration");
configuration["ACPIPATH"] = settings.value("ACPIPATH", "/sys/class/power_supply/"); configuration["ACPIPATH"] = settings.value("ACPIPATH", "/sys/class/power_supply/");
configuration["GPUDEV"] = settings.value("GPUDEV", "auto");
configuration["HDDDEV"] = settings.value("HDDDEV", "all");
configuration["HDDTEMPCMD"] = settings.value("HDDTEMPCMD", "sudo smartctl -a");
configuration["MPDADDRESS"] = settings.value("MPDADDRESS", "localhost"); configuration["MPDADDRESS"] = settings.value("MPDADDRESS", "localhost");
configuration["MPDPORT"] = settings.value("MPDPORT", "6600"); configuration["MPDPORT"] = settings.value("MPDPORT", "6600");
configuration["MPRIS"] = settings.value("MPRIS", "auto"); configuration["MPRIS"] = settings.value("MPRIS", "auto");
@ -198,9 +194,6 @@ bool AWConfigHelper::writeDataEngineConfiguration(const QVariantMap &_configurat
settings.beginGroup("Configuration"); settings.beginGroup("Configuration");
settings.setValue("ACPIPATH", _configuration["ACPIPATH"]); settings.setValue("ACPIPATH", _configuration["ACPIPATH"]);
settings.setValue("GPUDEV", _configuration["GPUDEV"]);
settings.setValue("HDDDEV", _configuration["HDDDEV"]);
settings.setValue("HDDTEMPCMD", _configuration["HDDTEMPCMD"]);
settings.setValue("MPDADDRESS", _configuration["MPDADDRESS"]); settings.setValue("MPDADDRESS", _configuration["MPDADDRESS"]);
settings.setValue("MPDPORT", _configuration["MPDPORT"]); settings.setValue("MPDPORT", _configuration["MPDPORT"]);
settings.setValue("MPRIS", _configuration["MPRIS"]); settings.setValue("MPRIS", _configuration["MPRIS"]);
@ -285,7 +278,6 @@ void AWConfigHelper::writeFile(QSettings &_settings, const QString &_key, const
QFile file(_fileName); QFile file(_fileName);
if (file.open(QIODevice::WriteOnly | QIODevice::Text)) { if (file.open(QIODevice::WriteOnly | QIODevice::Text)) {
QTextStream out(&file); QTextStream out(&file);
out.setCodec("UTF-8");
out << _settings.value(_key).toString().toUtf8(); out << _settings.value(_key).toString().toUtf8();
out.flush(); out.flush();
file.close(); file.close();

View File

@ -15,9 +15,7 @@
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/ ***************************************************************************/
#pragma once
#ifndef AWCONFIGHELPER_H
#define AWCONFIGHELPER_H
#include <QObject> #include <QObject>
#include <QVariant> #include <QVariant>
@ -52,6 +50,3 @@ private:
QString m_baseDir; QString m_baseDir;
QStringList m_dirs = {"desktops", "quotes", "scripts", "upgrade", "weather", "formatters"}; QStringList m_dirs = {"desktops", "quotes", "scripts", "upgrade", "weather", "formatters"};
}; };
#endif /* AWCONFIGHELPER_H */

View File

@ -15,9 +15,7 @@
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/ ***************************************************************************/
#pragma once
#ifndef AWCUSTOMKEYSCONFIG_H
#define AWCUSTOMKEYSCONFIG_H
#include "awabstractpairconfig.h" #include "awabstractpairconfig.h"
@ -30,6 +28,3 @@ public:
explicit AWCustomKeysConfig(QWidget *_parent = nullptr, const QStringList &_keys = QStringList()); explicit AWCustomKeysConfig(QWidget *_parent = nullptr, const QStringList &_keys = QStringList());
~AWCustomKeysConfig() override; ~AWCustomKeysConfig() override;
}; };
#endif /* AWCUSTOMKEYSCONFIG_H */

View File

@ -15,9 +15,7 @@
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/ ***************************************************************************/
#pragma once
#ifndef AWCUSTOMKEYSHELPER_H
#define AWCUSTOMKEYSHELPER_H
#include <QObject> #include <QObject>
@ -42,6 +40,3 @@ public:
private: private:
}; };
#endif /* AWCUSTOMKEYSHELPER_H */

View File

@ -15,9 +15,7 @@
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/ ***************************************************************************/
#pragma once
#ifndef AWTOOLTIP_H
#define AWTOOLTIP_H
#include <QObject> #include <QObject>
#include <QVariant> #include <QVariant>
@ -68,6 +66,3 @@ private:
bool m_enablePopup = false; bool m_enablePopup = false;
QStringList requiredKeys; QStringList requiredKeys;
}; };
#endif /* AWTOOLTIP_H */

View File

@ -17,30 +17,35 @@
#include "awdataengineaggregator.h" #include "awdataengineaggregator.h"
#include <Plasma/DataContainer> #include <ksysguard/formatter/Unit.h>
#include <ksysguard/systemstats/DBusInterface.h>
#include <QDBusConnection>
#include "awdebug.h" #include "awdebug.h"
AWDataEngineAggregator::AWDataEngineAggregator(QObject *_parent) AWDataEngineAggregator::AWDataEngineAggregator(QObject *_parent)
: QObject(_parent) : QObject(_parent)
, m_interface(new KSysGuard::SystemStats::DBusInterface())
{ {
qCDebug(LOG_AW) << __PRETTY_FUNCTION__; qCDebug(LOG_AW) << __PRETTY_FUNCTION__;
m_consumer = new Plasma::DataEngineConsumer(); qDBusRegisterMetaType<KSysGuard::SensorData>();
m_dataEngines["systemmonitor"] = m_consumer->dataEngine("systemmonitor"); qDBusRegisterMetaType<KSysGuard::SensorInfo>();
m_dataEngines["extsysmon"] = m_consumer->dataEngine("extsysmon"); qDBusRegisterMetaType<KSysGuard::SensorDataList>();
m_dataEngines["time"] = m_consumer->dataEngine("time"); qDBusRegisterMetaType<QHash<QString, KSysGuard::SensorInfo>>();
// additional method required by systemmonitor structure connect(m_interface, &KSysGuard::SystemStats::DBusInterface::newSensorData, this,
m_newSourceConnection &AWDataEngineAggregator::updateData);
= connect(m_dataEngines["systemmonitor"], &Plasma::DataEngine::sourceAdded, [this](const QString &source) { connect(m_interface, &KSysGuard::SystemStats::DBusInterface::sensorMetaDataChanged, this,
emit(deviceAdded(source)); &AWDataEngineAggregator::updateSensors);
m_dataEngines["systemmonitor"]->connectSource(source, parent(), 1000); connect(m_interface, &KSysGuard::SystemStats::DBusInterface::sensorAdded, this,
}); &AWDataEngineAggregator::sensorAdded);
connect(m_interface, &KSysGuard::SystemStats::DBusInterface::sensorRemoved, this,
&AWDataEngineAggregator::sensorRemoved);
// required to define Qt::QueuedConnection for signal-slot connection loadSources();
qRegisterMetaType<Plasma::DataEngine::Data>("Plasma::DataEngine::Data");
} }
@ -49,67 +54,102 @@ AWDataEngineAggregator::~AWDataEngineAggregator()
qCDebug(LOG_AW) << __PRETTY_FUNCTION__; qCDebug(LOG_AW) << __PRETTY_FUNCTION__;
disconnectSources(); disconnectSources();
m_interface->deleteLater();
}
void AWDataEngineAggregator::connectSources()
{
auto keys = m_sensors.keys();
auto newKeys = QSet(keys.cbegin(), keys.cend()) - m_subscribed;
m_interface->subscribe(newKeys.values()).waitForFinished();
m_subscribed.unite(newKeys);
} }
void AWDataEngineAggregator::disconnectSources() void AWDataEngineAggregator::disconnectSources()
{ {
for (auto dataEngine : m_dataEngines.values()) m_interface->unsubscribe(m_subscribed.values()).waitForFinished();
for (auto &source : dataEngine->sources()) m_subscribed.clear();
dataEngine->disconnectSource(source, parent());
disconnect(m_newSourceConnection);
} }
void AWDataEngineAggregator::reconnectSources(const int _interval) bool AWDataEngineAggregator::isValidSensor(const KSysGuard::SensorInfo &_sensor)
{ {
qCDebug(LOG_AW) << "Reconnect sources with interval" << _interval; return _sensor.unit != KSysGuard::UnitInvalid;
}
disconnectSources();
m_dataEngines["systemmonitor"]->connectAllSources(parent(), (uint)_interval); void AWDataEngineAggregator::loadSources()
m_dataEngines["extsysmon"]->connectAllSources(parent(), (uint)_interval); {
m_dataEngines["time"]->connectSource("Local", parent(), 1000); auto response = m_interface->allSensors();
response.waitForFinished();
m_newSourceConnection = connect( auto sensors = response.value();
m_dataEngines["systemmonitor"], &Plasma::DataEngine::sourceAdded, [this, _interval](const QString &source) { updateSensors(sensors);
emit(deviceAdded(source)); connectSources();
m_dataEngines["systemmonitor"]->connectSource(source, parent(), (uint)_interval);
});
#ifdef BUILD_FUTURE for (auto &sensor : m_sensors.keys())
createQueuedConnection(); emit(deviceAdded(sensor));
#endif /* BUILD_FUTURE */
} }
void AWDataEngineAggregator::dropSource(const QString &_source) void AWDataEngineAggregator::dropSource(const QString &_source)
{ {
qCDebug(LOG_AW) << "Source" << _source; qCDebug(LOG_AW) << "Disconnect sensor" << _source;
// HACK there is no possibility to check to which dataengine source if (m_subscribed.contains(_source)) {
// connected we will try to disconnect it from all engines m_interface->unsubscribe({_source}).waitForFinished();
for (auto dataEngine : m_dataEngines.values()) m_subscribed.remove(_source);
dataEngine->disconnectSource(_source, parent()); }
} }
void AWDataEngineAggregator::createQueuedConnection() void AWDataEngineAggregator::sensorAdded(const QString &_sensor)
{ {
// HACK additional method which forces QueuedConnection instead of Auto one qCDebug(LOG_AW) << "New sensor added" << _sensor;
// for more details refer to plasma-framework source code
for (auto &dataEngine : m_dataEngines.keys()) { // check if sensor is actually valid
// different source set for different engines auto response = m_interface->sensors({_sensor});
QStringList sources = dataEngine == "time" ? QStringList() << "Local" : m_dataEngines[dataEngine]->sources(); response.waitForFinished();
// reconnect sources
for (auto &source : sources) { auto info = response.value().value(_sensor);
Plasma::DataContainer *container = m_dataEngines[dataEngine]->containerForSource(source); if (!isValidSensor(info))
// disconnect old connections first return;
disconnect(container, SIGNAL(dataUpdated(QString, Plasma::DataEngine::Data)), parent(),
SLOT(dataUpdated(QString, Plasma::DataEngine::Data))); m_sensors[_sensor] = info;
// and now reconnect with Qt::QueuedConnection type dropSource(_sensor); // force reconnect
connect(container, SIGNAL(dataUpdated(QString, Plasma::DataEngine::Data)), parent(), if (!m_subscribed.contains(_sensor)) {
SLOT(dataUpdated(QString, Plasma::DataEngine::Data)), Qt::QueuedConnection); m_interface->subscribe({_sensor}).waitForFinished();
} m_subscribed.insert(_sensor);
}
// notify about new device
emit(deviceAdded(_sensor));
}
void AWDataEngineAggregator::sensorRemoved(const QString &_sensor)
{
qCDebug(LOG_AW) << "Sensor" << _sensor << "has been removed";
m_sensors.remove(_sensor);
dropSource(_sensor);
}
void AWDataEngineAggregator::updateData(KSysGuard::SensorDataList _data)
{
emit(dataUpdated(m_sensors, _data));
}
void AWDataEngineAggregator::updateSensors(const QHash<QString, KSysGuard::SensorInfo> &_sensors)
{
for (auto sensor = _sensors.cbegin(); sensor != _sensors.cend(); ++sensor) {
if (!isValidSensor(sensor.value()))
continue;
m_sensors.insert(sensor.key(), sensor.value());
} }
} }

View File

@ -15,16 +15,20 @@
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/ ***************************************************************************/
#pragma once
#ifndef AWDATAENGINEAGGREGATOR_H #include <ksysguard/systemstats/SensorInfo.h>
#define AWDATAENGINEAGGREGATOR_H
#include <Plasma/DataEngine>
#include <Plasma/DataEngineConsumer>
#include <QHash>
#include <QObject> #include <QObject>
#include <QSet>
namespace KSysGuard::SystemStats
{
class DBusInterface;
}
class AWDataEngineAggregator : public QObject class AWDataEngineAggregator : public QObject
{ {
Q_OBJECT Q_OBJECT
@ -32,21 +36,24 @@ class AWDataEngineAggregator : public QObject
public: public:
explicit AWDataEngineAggregator(QObject *_parent = nullptr); explicit AWDataEngineAggregator(QObject *_parent = nullptr);
~AWDataEngineAggregator() override; ~AWDataEngineAggregator() override;
void connectSources();
void disconnectSources(); void disconnectSources();
void reconnectSources(int _interval); [[nodiscard]] static bool isValidSensor(const KSysGuard::SensorInfo &_sensor);
void loadSources();
signals: signals:
void dataUpdated(const QHash<QString, KSysGuard::SensorInfo> &_sensors, const KSysGuard::SensorDataList &_data);
void deviceAdded(const QString &_source); void deviceAdded(const QString &_source);
public slots: public slots:
void dropSource(const QString &_source); void dropSource(const QString &_source);
void sensorAdded(const QString &_sensor);
void sensorRemoved(const QString &_sensor);
void updateData(KSysGuard::SensorDataList _data);
void updateSensors(const QHash<QString, KSysGuard::SensorInfo> &_sensors);
private: private:
void createQueuedConnection(); KSysGuard::SystemStats::DBusInterface *m_interface = nullptr;
Plasma::DataEngineConsumer *m_consumer = nullptr; QHash<QString, KSysGuard::SensorInfo> m_sensors;
QHash<QString, Plasma::DataEngine *> m_dataEngines; QSet<QString> m_subscribed;
QMetaObject::Connection m_newSourceConnection;
}; };
#endif /* AWDATAENGINEAGGREGATOR_H */

View File

@ -17,7 +17,7 @@
#include "awdataenginemapper.h" #include "awdataenginemapper.h"
#include <QRegExp> #include <QRegularExpression>
#include "awdebug.h" #include "awdebug.h"
#include "awformatterhelper.h" #include "awformatterhelper.h"
@ -76,106 +76,126 @@ QStringList AWDataEngineMapper::keysFromSource(const QString &_source) const
// HACK units required to define should the value be calculated as temperature // HACK units required to define should the value be calculated as temperature
// or fan data // or fan data
QStringList AWDataEngineMapper::registerSource(const QString &_source, const 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; qCDebug(LOG_AW) << "Source" << _source << "with units" << _units;
// regular expressions // regular expressions
QRegExp cpuRegExp = QRegExp("cpu/cpu.*/TotalLoad"); auto cpuRegExp = QRegularExpression("^cpu/cpu.*/usage$");
QRegExp cpuclRegExp = QRegExp("cpu/cpu.*/clock"); auto cpuclRegExp = QRegularExpression("^cpu/cpu.*/frequency$");
QRegExp hddrRegExp = QRegExp("disk/.*/Rate/rblk"); auto cpuTempRegExp = QRegularExpression("^cpu/cpu.*/temperature$");
QRegExp hddwRegExp = QRegExp("disk/.*/Rate/wblk"); auto gpuRegExp = QRegularExpression("^gpu/gpu.*/usage$");
QRegExp mountFillRegExp = QRegExp("partitions/.*/filllevel"); auto gpuTempRegExp = QRegularExpression("^gpu/gpu.*/temperature$");
QRegExp mountFreeRegExp = QRegExp("partitions/.*/freespace"); auto hddrRegExp = QRegularExpression("^disk/.*/read$");
QRegExp mountUsedRegExp = QRegExp("partitions/.*/usedspace"); auto hddwRegExp = QRegularExpression("^disk/.*/write$");
QRegExp netRegExp = QRegExp("network/interfaces/.*/(receiver|transmitter)/data$"); auto mountFillRegExp = QRegularExpression("^disk/.*/usedPercent$");
QRegExp netTotalRegExp = QRegExp("network/interfaces/.*/(receiver|transmitter)/dataTotal$"); 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 // AC
m_map.insert(_source, "ac"); m_map.insert(_source, "ac");
m_formatter["ac"] = AWKeysAggregator::FormatterType::ACFormat; m_formatter["ac"] = AWKeysAggregator::FormatterType::ACFormat;
} else if (_source.startsWith("battery/")) { } else if (_source.startsWith("extsysmon/battery/")) {
// battery stats // battery stats
QString key = _source; auto key = _source;
key.remove("battery/"); key.remove("extsysmon/battery/");
m_map.insert(_source, key); m_map.insert(_source, key);
m_formatter[key] = _source.contains("rate") ? AWKeysAggregator::FormatterType::Float m_formatter[key] = _source.contains("rate") ? AWKeysAggregator::FormatterType::Float
: AWKeysAggregator::FormatterType::IntegerThree; : AWKeysAggregator::FormatterType::IntegerThree;
} else if (_source == "cpu/system/TotalLoad") { } else if (_source == "cpu/all/usage") {
// cpu // cpu
m_map.insert(_source, "cpu"); m_map.insert(_source, "cpu");
m_formatter["cpu"] = AWKeysAggregator::FormatterType::Float; m_formatter["cpu"] = AWKeysAggregator::FormatterType::Float;
} else if (_source.contains(cpuRegExp)) { } else if (_source.contains(cpuRegExp)) {
// cpus // cpus
QString key = _source; auto key = _source;
key.remove("cpu/").remove("/TotalLoad"); key.remove("cpu/").remove("/usage");
m_map.insert(_source, key); m_map.insert(_source, key);
m_formatter[key] = AWKeysAggregator::FormatterType::Float; m_formatter[key] = AWKeysAggregator::FormatterType::Float;
} else if (_source == "cpu/system/AverageClock") { } else if (_source == "cpu/all/averageFrequency") {
// cpucl // cpucl
m_map.insert(_source, "cpucl"); m_map.insert(_source, "cpucl");
m_formatter["cpucl"] = AWKeysAggregator::FormatterType::Integer; m_formatter["cpucl"] = AWKeysAggregator::FormatterType::Integer;
} else if (_source.contains(cpuclRegExp)) { } else if (_source.contains(cpuclRegExp)) {
// cpucls // cpucls
QString key = _source; auto key = _source;
key.remove("cpu/cpu").remove("/clock"); key.remove("cpu/cpu").remove("/frequency");
key = QString("cpucl%1").arg(key); key = QString("cpucl%1").arg(key);
m_map.insert(_source, key); m_map.insert(_source, key);
m_formatter[key] = AWKeysAggregator::FormatterType::Integer; m_formatter[key] = AWKeysAggregator::FormatterType::Integer;
} else if (_source.startsWith("custom")) { } else if (_source.startsWith("extsysmon/custom")) {
// custom // custom
QString key = _source; auto key = _source;
key.remove("custom/"); key.remove("extsysmon/custom/");
m_map.insert(_source, key); m_map.insert(_source, key);
m_formatter[key] = AWKeysAggregator::FormatterType::NoFormat; m_formatter[key] = AWKeysAggregator::FormatterType::NoFormat;
} else if (_source == "desktop/current/name") { } else if (_source == "extsysmon/desktop/name") {
// current desktop name // current desktop name
m_map.insert(_source, "desktop"); m_map.insert(_source, "desktop");
m_formatter["desktop"] = AWKeysAggregator::FormatterType::NoFormat; m_formatter["desktop"] = AWKeysAggregator::FormatterType::NoFormat;
} else if (_source == "desktop/current/number") { } else if (_source == "extsysmon/desktop/number") {
// current desktop number // current desktop number
m_map.insert(_source, "ndesktop"); m_map.insert(_source, "ndesktop");
m_formatter["ndesktop"] = AWKeysAggregator::FormatterType::NoFormat; m_formatter["ndesktop"] = AWKeysAggregator::FormatterType::NoFormat;
} else if (_source == "desktop/total/number") { } else if (_source == "extsysmon/desktop/count") {
// desktop count // desktop count
m_map.insert(_source, "tdesktops"); m_map.insert(_source, "tdesktops");
m_formatter["tdesktops"] = AWKeysAggregator::FormatterType::NoFormat; m_formatter["tdesktops"] = AWKeysAggregator::FormatterType::NoFormat;
} else if (_source.contains(hddrRegExp)) { } else if (_source.contains(hddrRegExp)) {
// read speed // read speed
QString device = _source; auto device = _source;
device.remove("/Rate/rblk"); device.remove("disk/").remove("/read");
int index = m_devices["disk"].indexOf(device); auto index = m_devices["disk"].indexOf(device);
if (index > -1) { if (index > -1) {
QString key = QString("hddr%1").arg(index); QString key = QString("hddr%1").arg(index);
m_map.insert(_source, key); m_map.insert(_source, key);
m_formatter[key] = AWKeysAggregator::FormatterType::Integer; m_formatter[key] = AWKeysAggregator::FormatterType::MemKBFormat;
} }
} else if (_source.contains(hddwRegExp)) { } else if (_source.contains(hddwRegExp)) {
// write speed // write speed
QString device = _source; auto device = _source;
device.remove("/Rate/wblk"); device.remove("disk/").remove("/write");
int index = m_devices["disk"].indexOf(device); auto index = m_devices["disk"].indexOf(device);
if (index > -1) { if (index > -1) {
QString key = QString("hddw%1").arg(index); QString key = QString("hddw%1").arg(index);
m_map.insert(_source, key); m_map.insert(_source, key);
m_formatter[key] = AWKeysAggregator::FormatterType::Integer; m_formatter[key] = AWKeysAggregator::FormatterType::MemKBFormat;
} }
} else if (_source == "gpu/load") { } else if (_source == "gpu/all/usage") {
// gpu load // gpu load
m_map.insert(_source, "gpu"); m_map.insert(_source, "gpu");
m_formatter["gpu"] = AWKeysAggregator::FormatterType::Float; m_formatter["gpu"] = AWKeysAggregator::FormatterType::Float;
} else if (_source == "gpu/temperature") { } else if (_source.contains(gpuRegExp)) {
// gpu temperature // gpus
m_map.insert(_source, "gputemp"); auto device = _source;
m_formatter["gputemp"] = AWKeysAggregator::FormatterType::Temperature; device.remove("gpu/").remove("/usage");
auto index = m_devices["gpu"].indexOf(device);
if (index > -1) {
auto key = QString("gpu%1").arg(index);
m_map.insert(_source, key);
m_formatter[key] = AWKeysAggregator::FormatterType::Float;
}
} else if (_source.contains(gpuTempRegExp)) {
// gpus temps
auto device = _source;
device.remove("gpu/").remove("/temperature");
auto index = m_devices["gpu"].indexOf(device);
if (index > -1) {
auto key = QString("gputemp%1").arg(index);
m_map.insert(_source, key);
m_formatter[key] = AWKeysAggregator::FormatterType::Temperature;
}
} else if (_source.contains(mountFillRegExp)) { } else if (_source.contains(mountFillRegExp)) {
// fill level // fill level
QString device = _source; auto device = _source;
device.remove("partitions").remove("/filllevel"); device.remove("disk/").remove("/usedPercent");
int index = m_devices["mount"].indexOf(device); auto index = m_devices["mount"].indexOf(device);
if (index > -1) { if (index > -1) {
QString key = QString("hdd%1").arg(index); auto key = QString("hdd%1").arg(index);
m_map.insert(_source, key); m_map.insert(_source, key);
m_formatter[key] = AWKeysAggregator::FormatterType::Float; m_formatter[key] = AWKeysAggregator::FormatterType::Float;
// additional keys // additional keys
@ -184,9 +204,9 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const QSt
} }
} else if (_source.contains(mountFreeRegExp)) { } else if (_source.contains(mountFreeRegExp)) {
// free space // free space
QString device = _source; auto device = _source;
device.remove("partitions").remove("/freespace"); device.remove("disk/").remove("/free");
int index = m_devices["mount"].indexOf(device); auto index = m_devices["mount"].indexOf(device);
if (index > -1) { if (index > -1) {
// mb // mb
QString key = QString("hddfreemb%1").arg(index); QString key = QString("hddfreemb%1").arg(index);
@ -199,9 +219,9 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const QSt
} }
} else if (_source.contains(mountUsedRegExp)) { } else if (_source.contains(mountUsedRegExp)) {
// used // used
QString device = _source; auto device = _source;
device.remove("partitions").remove("/usedspace"); device.remove("disk/").remove("/used");
int index = m_devices["mount"].indexOf(device); auto index = m_devices["mount"].indexOf(device);
if (index > -1) { if (index > -1) {
// mb // mb
QString key = QString("hddmb%1").arg(index); QString key = QString("hddmb%1").arg(index);
@ -212,24 +232,14 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const QSt
m_map.insert(_source, key); m_map.insert(_source, key);
m_formatter[key] = AWKeysAggregator::FormatterType::MemGBFormat; m_formatter[key] = AWKeysAggregator::FormatterType::MemGBFormat;
} }
} else if (_source.startsWith("hdd/temperature")) { } else if (_source.startsWith("cpu/loadaverages/loadaverage")) {
// hdd temperature
QString device = _source;
device.remove("hdd/temperature");
int index = m_devices["hdd"].indexOf(device);
if (index > -1) {
QString key = QString("hddtemp%1").arg(index);
m_map.insert(_source, key);
m_formatter[key] = AWKeysAggregator::FormatterType::Temperature;
}
} else if (_source.startsWith("cpu/system/loadavg")) {
// load average // load average
QString time = _source; auto time = _source;
time.remove("cpu/system/loadavg"); time.remove("cpu/loadaverages/loadaverage");
QString key = QString("la%1").arg(time); auto key = QString("la%1").arg(time);
m_map.insert(_source, key); m_map.insert(_source, key);
m_formatter[key] = AWKeysAggregator::FormatterType::FloatTwoSymbols; m_formatter[key] = AWKeysAggregator::FormatterType::FloatTwoSymbols;
} else if (_source == "mem/physical/application") { } else if (_source == "memory/physical/application") {
// app memory // app memory
// mb // mb
m_map.insert(_source, "memmb"); m_map.insert(_source, "memmb");
@ -237,7 +247,7 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const QSt
// gb // gb
m_map.insert(_source, "memgb"); m_map.insert(_source, "memgb");
m_formatter["memgb"] = AWKeysAggregator::FormatterType::MemGBFormat; m_formatter["memgb"] = AWKeysAggregator::FormatterType::MemGBFormat;
} else if (_source == "mem/physical/free") { } else if (_source == "memory/physical/free") {
// free memory // free memory
// mb // mb
m_map.insert(_source, "memfreemb"); m_map.insert(_source, "memfreemb");
@ -245,7 +255,7 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const QSt
// gb // gb
m_map.insert(_source, "memfreegb"); m_map.insert(_source, "memfreegb");
m_formatter["memfreegb"] = AWKeysAggregator::FormatterType::MemGBFormat; m_formatter["memfreegb"] = AWKeysAggregator::FormatterType::MemGBFormat;
} else if (_source == "mem/physical/used") { } else if (_source == "memory/physical/used") {
// used memory // used memory
// mb // mb
m_map.insert(_source, "memusedmb"); m_map.insert(_source, "memusedmb");
@ -253,29 +263,29 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const QSt
// gb // gb
m_map.insert(_source, "memusedgb"); m_map.insert(_source, "memusedgb");
m_formatter["memusedgb"] = AWKeysAggregator::FormatterType::MemGBFormat; m_formatter["memusedgb"] = AWKeysAggregator::FormatterType::MemGBFormat;
} else if (_source == "network/current/name") { } else if (_source == "extsysmon/network/device") {
// network device // network device
m_map.insert(_source, "netdev"); m_map.insert(_source, "netdev");
m_formatter["netdev"] = AWKeysAggregator::FormatterType::NoFormat; m_formatter["netdev"] = AWKeysAggregator::FormatterType::NoFormat;
} else if (_source == "network/current/ssid") { } else if (_source == "extsysmon/network/ssid") {
// current ssid // current ssid
m_map.insert(_source, "ssid"); m_map.insert(_source, "ssid");
m_formatter["ssid"] = AWKeysAggregator::FormatterType::NoFormat; m_formatter["ssid"] = AWKeysAggregator::FormatterType::NoFormat;
} else if (_source.startsWith("network/response")) { } else if (_source.startsWith("extsysmon/requests/response")) {
// network response // network response
QString key = _source; auto key = _source;
key.remove("network/"); key.remove("extsysmon/requests/");
m_map.insert(_source, key); m_map.insert(_source, key);
m_formatter[key] = AWKeysAggregator::FormatterType::NoFormat; m_formatter[key] = AWKeysAggregator::FormatterType::NoFormat;
} else if (_source.contains(netRegExp)) { } else if (_source.contains(netRegExp)) {
// network speed // network speed
QString type = _source.contains("receiver") ? "down" : "up"; auto type = _source.endsWith("download") ? "down" : "up";
int index = m_devices["net"].indexOf(_source.split('/')[2]); auto index = m_devices["net"].indexOf(_source.split('/')[1]);
if (index > -1) { if (index > -1) {
// kb // kb
QString key = QString("%1kb%2").arg(type).arg(index); auto key = QString("%1kb%2").arg(type).arg(index);
m_map.insert(_source, key); m_map.insert(_source, key);
m_formatter[key] = AWKeysAggregator::FormatterType::Integer; m_formatter[key] = AWKeysAggregator::FormatterType::MemKBFormat;
// smart // smart
key = QString("%1%2").arg(type).arg(index); key = QString("%1%2").arg(type).arg(index);
m_map.insert(_source, key); m_map.insert(_source, key);
@ -287,49 +297,49 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const QSt
} }
} else if (_source.contains(netTotalRegExp)) { } else if (_source.contains(netTotalRegExp)) {
// network data total // network data total
QString type = _source.contains("receiver") ? "down" : "up"; auto type = _source.endsWith("Download") ? "down" : "up";
int index = m_devices["net"].indexOf(_source.split('/')[2]); auto index = m_devices["net"].indexOf(_source.split('/')[1]);
if (index > -1) { if (index > -1) {
// kb // kb
QString key = QString("%1totkb%2").arg(type).arg(index); auto key = QString("%1totkb%2").arg(type).arg(index);
m_map.insert(_source, key); m_map.insert(_source, key);
m_formatter[key] = AWKeysAggregator::FormatterType::Integer; m_formatter[key] = AWKeysAggregator::FormatterType::MemKBFormat;
// mb // mb
key = QString("%1tot%2").arg(type).arg(index); key = QString("%1tot%2").arg(type).arg(index);
m_map.insert(_source, key); m_map.insert(_source, key);
m_formatter[key] = AWKeysAggregator::FormatterType::MemMBFormat; m_formatter[key] = AWKeysAggregator::FormatterType::MemMBFormat;
} }
} else if (_source.startsWith("upgrade")) { } else if (_source.startsWith("extsysmon/upgrade")) {
// package manager // package manager
QString key = _source; auto key = _source;
key.remove("upgrade/"); key.remove("extsysmon/upgrade/");
m_map.insert(_source, key); m_map.insert(_source, key);
m_formatter[key] = AWKeysAggregator::FormatterType::IntegerThree; m_formatter[key] = AWKeysAggregator::FormatterType::IntegerThree;
} else if (_source.startsWith("player")) { } else if (_source.startsWith("extsysmon/player")) {
// player // player
QString key = _source; auto key = _source;
key.remove("player/"); key.remove("extsysmon/player/");
m_map.insert(_source, key); m_map.insert(_source, key);
m_formatter[key] = AWKeysAggregator::FormatterType::NoFormat; m_formatter[key] = AWKeysAggregator::FormatterType::NoFormat;
} else if (_source == "ps/running/count") { } else if (_source == "extsysmon/ps/running") {
// running processes count // running processes count
m_map.insert(_source, "pscount"); m_map.insert(_source, "pscount");
m_formatter["pscount"] = AWKeysAggregator::FormatterType::NoFormat; m_formatter["pscount"] = AWKeysAggregator::FormatterType::NoFormat;
} else if (_source == "ps/running/list") { } else if (_source == "extsysmon/ps/list") {
// list of running processes // list of running processes
m_map.insert(_source, "ps"); m_map.insert(_source, "ps");
m_formatter["ps"] = AWKeysAggregator::FormatterType::List; m_formatter["ps"] = AWKeysAggregator::FormatterType::List;
} else if (_source == "ps/total/count") { } else if (_source == "extsysmon/ps/count") {
// total processes count // total processes count
m_map.insert(_source, "pstot"); m_map.insert(_source, "pstot");
m_formatter["pstot"] = AWKeysAggregator::FormatterType::NoFormat; m_formatter["pstot"] = AWKeysAggregator::FormatterType::NoFormat;
} else if (_source.startsWith("quotes")) { } else if (_source.startsWith("extsysmon/quotes")) {
// quotes // quotes
QString key = _source; auto key = _source;
key.remove("quotes/"); key.remove("extsysmon/quotes/");
m_map.insert(_source, key); m_map.insert(_source, key);
m_formatter[key] = AWKeysAggregator::FormatterType::Quotes; m_formatter[key] = AWKeysAggregator::FormatterType::Quotes;
} else if (_source == "mem/swap/free") { } else if (_source == "memory/swap/free") {
// free swap // free swap
// mb // mb
m_map.insert(_source, "swapfreemb"); m_map.insert(_source, "swapfreemb");
@ -337,7 +347,7 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const QSt
// gb // gb
m_map.insert(_source, "swapfreegb"); m_map.insert(_source, "swapfreegb");
m_formatter["swapfreegb"] = AWKeysAggregator::FormatterType::MemGBFormat; m_formatter["swapfreegb"] = AWKeysAggregator::FormatterType::MemGBFormat;
} else if (_source == "mem/swap/used") { } else if (_source == "memory/swap/used") {
// used swap // used swap
// mb // mb
m_map.insert(_source, "swapmb"); m_map.insert(_source, "swapmb");
@ -345,19 +355,20 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const QSt
// gb // gb
m_map.insert(_source, "swapgb"); m_map.insert(_source, "swapgb");
m_formatter["swapgb"] = AWKeysAggregator::FormatterType::MemGBFormat; m_formatter["swapgb"] = AWKeysAggregator::FormatterType::MemGBFormat;
} else if (_source.startsWith("lmsensors/")) { } else if (_source.startsWith("lmsensors/") || _source.contains(cpuTempRegExp)
|| _source == "cpu/all/averageTemperature") {
// temperature // temperature
int index = m_devices["temp"].indexOf(_source); auto index = m_devices["temp"].indexOf(_source);
// HACK on DE initialization there are no units key // HACK on DE initialization there are no units key
if (_units.isEmpty()) if (_units == KSysGuard::UnitInvalid)
return QStringList({QString("temp%1").arg(index)}); return QStringList({QString("temp%1").arg(index)});
if (index > -1) { if (index > -1) {
QString key = QString("temp%1").arg(index); auto key = QString("temp%1").arg(index);
m_map.insert(_source, key); m_map.insert(_source, key);
m_formatter[key] = _units == "°C" ? AWKeysAggregator::FormatterType::Temperature m_formatter[key] = _units == KSysGuard::UnitCelsius ? AWKeysAggregator::FormatterType::Temperature
: AWKeysAggregator::FormatterType::Integer; : AWKeysAggregator::FormatterType::Integer;
} }
} else if (_source == "Local") { } else if (_source == "extsysmon/time/now") {
// time // time
m_map.insert(_source, "time"); m_map.insert(_source, "time");
m_formatter["time"] = AWKeysAggregator::FormatterType::Time; m_formatter["time"] = AWKeysAggregator::FormatterType::Time;
@ -376,40 +387,40 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const QSt
// timestamp // timestamp
m_map.insert(_source, "tstime"); m_map.insert(_source, "tstime");
m_formatter["tstime"] = AWKeysAggregator::FormatterType::Timestamp; m_formatter["tstime"] = AWKeysAggregator::FormatterType::Timestamp;
} else if (_source == "system/brightness") { } else if (_source == "extsysmon/system/brightness") {
m_map.insert(_source, "brightness"); m_map.insert(_source, "brightness");
m_formatter["brightness"] = AWKeysAggregator::FormatterType::IntegerThree; m_formatter["brightness"] = AWKeysAggregator::FormatterType::IntegerThree;
} else if (_source == "system/volume") { } else if (_source == "extsysmon/system/volume") {
m_map.insert(_source, "volume"); m_map.insert(_source, "volume");
m_formatter["volume"] = AWKeysAggregator::FormatterType::IntegerThree; m_formatter["volume"] = AWKeysAggregator::FormatterType::IntegerThree;
} else if (_source == "system/uptime") { } else if (_source == "os/system/uptime") {
// uptime // uptime
m_map.insert(_source, "uptime"); m_map.insert(_source, "uptime");
m_formatter["uptime"] = AWKeysAggregator::FormatterType::Uptime; m_formatter["uptime"] = AWKeysAggregator::FormatterType::Uptime;
// custom uptime // custom uptime
m_map.insert(_source, "cuptime"); m_map.insert(_source, "cuptime");
m_formatter["cuptime"] = AWKeysAggregator::FormatterType::UptimeCustom; m_formatter["cuptime"] = AWKeysAggregator::FormatterType::UptimeCustom;
} else if (_source.startsWith("weather/temperature")) { } else if (_source.startsWith("extsysmon/weather/temperature")) {
// temperature // temperature
QString key = _source; auto key = _source;
key.remove("weather/"); key.remove("extsysmon/weather/");
m_map.insert(_source, key); m_map.insert(_source, key);
m_formatter[key] = AWKeysAggregator::FormatterType::Temperature; m_formatter[key] = AWKeysAggregator::FormatterType::Temperature;
} else if (_source.startsWith("weather/")) { } else if (_source.startsWith("extsysmon/weather/")) {
// other weather // other weather
QString key = _source; auto key = _source;
key.remove("weather/"); key.remove("extsysmon/weather/");
m_map.insert(_source, key); m_map.insert(_source, key);
m_formatter[key] = AWKeysAggregator::FormatterType::NoFormat; m_formatter[key] = AWKeysAggregator::FormatterType::NoFormat;
} else if (_source.startsWith("load/load")) { } else if (_source.startsWith("extsysmon/load/load")) {
// load source // load source
QString key = _source; auto key = _source;
key.remove("load/"); key.remove("extsysmon/load/");
m_map.insert(_source, key); m_map.insert(_source, key);
m_formatter[key] = AWKeysAggregator::FormatterType::Temperature; m_formatter[key] = AWKeysAggregator::FormatterType::Temperature;
} }
QStringList foundKeys = keysFromSource(_source); auto foundKeys = keysFromSource(_source);
// rewrite formatters for custom ones // rewrite formatters for custom ones
QStringList customFormattersKeys; QStringList customFormattersKeys;
@ -424,7 +435,7 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const QSt
// drop key from dictionary if no one user requested key required it // drop key from dictionary if no one user requested key required it
qCInfo(LOG_AW) << "Looking for keys" << foundKeys << "in" << _keys; qCInfo(LOG_AW) << "Looking for keys" << foundKeys << "in" << _keys;
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); return _keys.contains(key);
}); });
if (!required) { if (!required) {

View File

@ -15,9 +15,9 @@
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/ ***************************************************************************/
#pragma once
#ifndef AWDATAENGINEMAPPER_H #include <ksysguard/formatter/Unit.h>
#define AWDATAENGINEMAPPER_H
#include <QMultiHash> #include <QMultiHash>
#include <QObject> #include <QObject>
@ -38,7 +38,7 @@ public:
[[nodiscard]] AWKeysAggregator::FormatterType formatter(const QString &_key) const; [[nodiscard]] AWKeysAggregator::FormatterType formatter(const QString &_key) const;
[[nodiscard]] QStringList keysFromSource(const QString &_source) const; [[nodiscard]] QStringList keysFromSource(const QString &_source) const;
// set methods // set methods
QStringList registerSource(const QString &_source, const QString &_units, const QStringList &_keys); QStringList registerSource(const QString &_source, const KSysGuard::Unit _units, const QStringList &_keys);
void setDevices(const QHash<QString, QStringList> &_devices); void setDevices(const QHash<QString, QStringList> &_devices);
private: private:
@ -48,6 +48,3 @@ private:
QHash<QString, AWKeysAggregator::FormatterType> m_formatter; QHash<QString, AWKeysAggregator::FormatterType> m_formatter;
QMultiHash<QString, QString> m_map; QMultiHash<QString, QString> m_map;
}; };
#endif /* AWDATAENGINEMAPPER_H */

View File

@ -15,9 +15,7 @@
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/ ***************************************************************************/
#pragma once
#ifndef AWDBUSADAPTOR_H
#define AWDBUSADAPTOR_H
#include <QDBusAbstractAdaptor> #include <QDBusAbstractAdaptor>
@ -50,6 +48,3 @@ private:
AWKeys *m_plugin = nullptr; AWKeys *m_plugin = nullptr;
QStringList m_logLevels = {"debug", "info", "warning", "critical"}; QStringList m_logLevels = {"debug", "info", "warning", "critical"};
}; };
#endif /* AWDBUSADAPTOR_H */

View File

@ -15,9 +15,7 @@
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/ ***************************************************************************/
#pragma once
#ifndef AWPLUGIN_H
#define AWPLUGIN_H
#include <QQmlExtensionPlugin> #include <QQmlExtensionPlugin>
@ -30,6 +28,3 @@ class AWPlugin : public QQmlExtensionPlugin
public: public:
void registerTypes(const char *uri) override; void registerTypes(const char *uri) override;
}; };
#endif /* AWPLUGIN_H */

View File

@ -15,9 +15,7 @@
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/ ***************************************************************************/
#pragma once
#ifndef AWFORMATTERCONFIG_H
#define AWFORMATTERCONFIG_H
#include "awabstractpairconfig.h" #include "awabstractpairconfig.h"
@ -30,6 +28,3 @@ public:
explicit AWFormatterConfig(QWidget *_parent = nullptr, const QStringList &_keys = QStringList()); explicit AWFormatterConfig(QWidget *_parent = nullptr, const QStringList &_keys = QStringList());
~AWFormatterConfig() override; ~AWFormatterConfig() override;
}; };
#endif /* AWFORMATTERCONFIG_H */

View File

@ -114,8 +114,7 @@ QStringList AWFormatterHelper::rightKeys()
void AWFormatterHelper::editItems() void AWFormatterHelper::editItems()
{ {
repaintList(); auto ret = exec();
int ret = exec();
qCInfo(LOG_AW) << "Dialog returns" << ret; qCInfo(LOG_AW) << "Dialog returns" << ret;
} }
@ -200,20 +199,20 @@ QPair<QString, AWAbstractFormatter::FormatterClass> AWFormatterHelper::readMetad
QSettings settings(_filePath, QSettings::IniFormat); QSettings settings(_filePath, QSettings::IniFormat);
settings.beginGroup("Desktop Entry"); settings.beginGroup("Desktop Entry");
QString name = settings.value("Name", _filePath).toString(); auto name = settings.value("Name", _filePath).toString();
QString type = settings.value("X-AW-Type", "NoFormat").toString(); auto type = settings.value("X-AW-Type", "NoFormat").toString();
AWAbstractFormatter::FormatterClass formatter = defineFormatterClass(type); auto formatter = defineFormatterClass(type);
settings.endGroup(); settings.endGroup();
return QPair<QString, AWAbstractFormatter::FormatterClass>(name, formatter); return QPair<QString, AWAbstractFormatter::FormatterClass>(name, formatter);
} }
void AWFormatterHelper::doCreateItem() void AWFormatterHelper::doCreateItem(QListWidget *_widget)
{ {
QStringList selection = {"NoFormat", "DateTime", "Float", "List", "Script", "String", "Json"}; QStringList selection = {"NoFormat", "DateTime", "Float", "List", "Script", "String", "Json"};
bool ok; 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) { if (!ok) {
qCWarning(LOG_AW) << "No type selected"; qCWarning(LOG_AW) << "No type selected";
return; return;
@ -223,18 +222,18 @@ void AWFormatterHelper::doCreateItem()
AWAbstractFormatter::FormatterClass formatter = defineFormatterClass(select); AWAbstractFormatter::FormatterClass formatter = defineFormatterClass(select);
switch (formatter) { switch (formatter) {
case AWAbstractFormatter::FormatterClass::DateTime: case AWAbstractFormatter::FormatterClass::DateTime:
return createItem<AWDateTimeFormatter>(); return createItem<AWDateTimeFormatter>(_widget);
case AWAbstractFormatter::FormatterClass::Float: case AWAbstractFormatter::FormatterClass::Float:
return createItem<AWFloatFormatter>(); return createItem<AWFloatFormatter>(_widget);
case AWAbstractFormatter::FormatterClass::List: case AWAbstractFormatter::FormatterClass::List:
return createItem<AWListFormatter>(); return createItem<AWListFormatter>(_widget);
case AWAbstractFormatter::FormatterClass::Script: case AWAbstractFormatter::FormatterClass::Script:
return createItem<AWScriptFormatter>(); return createItem<AWScriptFormatter>(_widget);
case AWAbstractFormatter::FormatterClass::String: case AWAbstractFormatter::FormatterClass::String:
return createItem<AWStringFormatter>(); return createItem<AWStringFormatter>(_widget);
case AWAbstractFormatter::FormatterClass::Json: case AWAbstractFormatter::FormatterClass::Json:
return createItem<AWJsonFormatter>(); return createItem<AWJsonFormatter>(_widget);
case AWAbstractFormatter::FormatterClass::NoFormat: case AWAbstractFormatter::FormatterClass::NoFormat:
return createItem<AWNoFormatter>(); return createItem<AWNoFormatter>(_widget);
} }
} }

View File

@ -15,9 +15,7 @@
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/ ***************************************************************************/
#pragma once
#ifndef AWFORMATTERHELPER_H
#define AWFORMATTERHELPER_H
#include "abstractextitemaggregator.h" #include "abstractextitemaggregator.h"
#include "awabstractformatter.h" #include "awabstractformatter.h"
@ -51,11 +49,8 @@ private:
void initFormatters(); void initFormatters();
[[nodiscard]] static QPair<QString, AWAbstractFormatter::FormatterClass> readMetadata(const QString &_filePath); [[nodiscard]] static QPair<QString, AWAbstractFormatter::FormatterClass> readMetadata(const QString &_filePath);
// parent methods // parent methods
void doCreateItem() override; void doCreateItem(QListWidget *_widget) override;
// properties // properties
QHash<QString, AWAbstractFormatter *> m_formatters; QHash<QString, AWAbstractFormatter *> m_formatters;
QHash<QString, AWAbstractFormatter *> m_formattersClasses; QHash<QString, AWAbstractFormatter *> m_formattersClasses;
}; };
#endif /* AWFORMATTERHELPER_H */

View File

@ -20,6 +20,7 @@
#include <QDir> #include <QDir>
#include <QNetworkInterface> #include <QNetworkInterface>
#include <QRegularExpression>
#include <QSettings> #include <QSettings>
#include <QStandardPaths> #include <QStandardPaths>
@ -30,7 +31,7 @@ bool AWKeyCache::addKeyToCache(const QString &_type, const QString &_key)
{ {
qCDebug(LOG_AW) << "Key" << _key << "with type" << _type; qCDebug(LOG_AW) << "Key" << _key << "with type" << _type;
QString fileName auto fileName
= QString("%1/awesomewidgets.ndx").arg(QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation)); = QString("%1/awesomewidgets.ndx").arg(QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation));
qCInfo(LOG_AW) << "Cache file" << fileName; qCInfo(LOG_AW) << "Cache file" << fileName;
QSettings cache(fileName, QSettings::IniFormat); QSettings cache(fileName, QSettings::IniFormat);
@ -40,19 +41,8 @@ bool AWKeyCache::addKeyToCache(const QString &_type, const QString &_key)
for (auto &number : cache.allKeys()) for (auto &number : cache.allKeys())
cachedValues.append(cache.value(number).toString()); cachedValues.append(cache.value(number).toString());
if (_type == "hdd") { if (_type == "net") {
QStringList allDevices = QDir("/dev").entryList(QDir::System, QDir::Name); auto rawInterfaceList = QNetworkInterface::allInterfaces();
QStringList devices = allDevices.filter(QRegExp("^[hms]d[a-z]$"));
for (auto &dev : devices) {
QString device = QString("/dev/%1").arg(dev);
if (cachedValues.contains(device))
continue;
qCInfo(LOG_AW) << "Found new key" << device << "for type" << _type;
cachedValues.append(device);
cache.setValue(QString("%1").arg(cache.allKeys().count(), 3, 10, QChar('0')), device);
}
} else if (_type == "net") {
QList<QNetworkInterface> rawInterfaceList = QNetworkInterface::allInterfaces();
for (auto &interface : rawInterfaceList) { for (auto &interface : rawInterfaceList) {
QString device = interface.name(); QString device = interface.name();
if (cachedValues.contains(device)) if (cachedValues.contains(device))
@ -93,19 +83,19 @@ QStringList AWKeyCache::getRequiredKeys(const QStringList &_keys, const QStringL
// insert depending keys, refer to AWKeys::calculateValues() // insert depending keys, refer to AWKeys::calculateValues()
// hddtotmb* // hddtotmb*
for (auto &key : _allKeys.filter(QRegExp("^hddtotmb"))) { for (auto &key : _allKeys.filter(QRegularExpression("^hddtotmb"))) {
if (!used.contains(key)) if (!used.contains(key))
continue; continue;
key.remove("hddtotmb"); key.remove("hddtotmb");
int index = key.toInt(); auto index = key.toInt();
used << QString("hddfreemb%1").arg(index) << QString("hddmb%1").arg(index); used << QString("hddfreemb%1").arg(index) << QString("hddmb%1").arg(index);
} }
// hddtotgb* // hddtotgb*
for (auto &key : _allKeys.filter(QRegExp("^hddtotgb"))) { for (auto &key : _allKeys.filter(QRegularExpression("^hddtotgb"))) {
if (!used.contains(key)) if (!used.contains(key))
continue; continue;
key.remove("hddtotgb"); key.remove("hddtotgb");
int index = key.toInt(); auto index = key.toInt();
used << QString("hddfreegb%1").arg(index) << QString("hddgb%1").arg(index); used << QString("hddfreegb%1").arg(index) << QString("hddgb%1").arg(index);
} }
// mem // mem
@ -138,7 +128,7 @@ QStringList AWKeyCache::getRequiredKeys(const QStringList &_keys, const QStringL
for (auto &key : netKeys) { for (auto &key : netKeys) {
if (!used.contains(key)) if (!used.contains(key))
continue; continue;
QStringList filt = _allKeys.filter(QRegExp(QString("^%1[0-9]{1,}").arg(key))); auto filt = _allKeys.filter(QRegularExpression(QString("^%1[0-9]{1,}").arg(key)));
for (auto &filtered : filt) for (auto &filtered : filt)
used << filtered; used << filtered;
} }
@ -157,7 +147,7 @@ QStringList AWKeyCache::getRequiredKeys(const QStringList &_keys, const QStringL
QHash<QString, QStringList> AWKeyCache::loadKeysFromCache() QHash<QString, QStringList> AWKeyCache::loadKeysFromCache()
{ {
QString fileName auto fileName
= QString("%1/awesomewidgets.ndx").arg(QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation)); = QString("%1/awesomewidgets.ndx").arg(QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation));
qCInfo(LOG_AW) << "Cache file" << fileName; qCInfo(LOG_AW) << "Cache file" << fileName;
QSettings cache(fileName, QSettings::IniFormat); QSettings cache(fileName, QSettings::IniFormat);

View File

@ -15,9 +15,7 @@
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/ ***************************************************************************/
#pragma once
#ifndef AWKEYCACHE_H
#define AWKEYCACHE_H
#include <QHash> #include <QHash>
#include <QString> #include <QString>
@ -31,6 +29,3 @@ QStringList getRequiredKeys(const QStringList &_keys, const QStringList &_bars,
const QStringList &_userKeys, const QStringList &_allKeys); const QStringList &_userKeys, const QStringList &_allKeys);
QHash<QString, QStringList> loadKeysFromCache(); QHash<QString, QStringList> loadKeysFromCache();
} // namespace AWKeyCache } // namespace AWKeyCache
#endif /* AWKEYCACHE_H */

View File

@ -18,7 +18,7 @@
#include "awkeyoperations.h" #include "awkeyoperations.h"
#include <QDir> #include <QDir>
#include <QRegExp> #include <QRegularExpression>
#include <QThread> #include <QThread>
#include "awcustomkeyshelper.h" #include "awcustomkeyshelper.h"
@ -72,7 +72,6 @@ QHash<QString, QStringList> AWKeyOperations::devices() const
void AWKeyOperations::updateCache() void AWKeyOperations::updateCache()
{ {
// update network and hdd list // update network and hdd list
addKeyToCache("hdd");
addKeyToCache("net"); addKeyToCache("net");
} }
@ -90,15 +89,20 @@ QStringList AWKeyOperations::dictKeys() const
allKeys.append(item->tag("timestamp")); allKeys.append(item->tag("timestamp"));
} }
// cpuclock & cpu // cpuclock & cpu
for (int i = 0; i < QThread::idealThreadCount(); i++) { for (auto i = 0; i < QThread::idealThreadCount(); i++) {
allKeys.append(QString("cpucl%1").arg(i)); allKeys.append(QString("cpucl%1").arg(i));
allKeys.append(QString("cpu%1").arg(i)); allKeys.append(QString("cpu%1").arg(i));
} }
// temperature // temperature
for (int i = 0; i < m_devices["temp"].count(); i++) for (auto i = 0; i < m_devices["temp"].count(); i++)
allKeys.append(QString("temp%1").arg(i)); allKeys.append(QString("temp%1").arg(i));
// gpu
for (auto i = 0; i < m_devices["gpu"].count(); i++) {
allKeys.append(QString("gpu%1").arg(i));
allKeys.append(QString("gputemp%1").arg(i));
}
// hdd // hdd
for (int i = 0; i < m_devices["mount"].count(); i++) { for (auto i = 0; i < m_devices["mount"].count(); i++) {
allKeys.append(QString("hddmb%1").arg(i)); allKeys.append(QString("hddmb%1").arg(i));
allKeys.append(QString("hddgb%1").arg(i)); allKeys.append(QString("hddgb%1").arg(i));
allKeys.append(QString("hddfreemb%1").arg(i)); allKeys.append(QString("hddfreemb%1").arg(i));
@ -108,15 +112,12 @@ QStringList AWKeyOperations::dictKeys() const
allKeys.append(QString("hdd%1").arg(i)); allKeys.append(QString("hdd%1").arg(i));
} }
// hdd speed // hdd speed
for (int i = 0; i < m_devices["disk"].count(); i++) { for (auto i = 0; i < m_devices["disk"].count(); i++) {
allKeys.append(QString("hddr%1").arg(i)); allKeys.append(QString("hddr%1").arg(i));
allKeys.append(QString("hddw%1").arg(i)); allKeys.append(QString("hddw%1").arg(i));
} }
// hdd temp
for (int i = 0; i < m_devices["hdd"].count(); i++)
allKeys.append(QString("hddtemp%1").arg(i));
// network // network
for (int i = 0; i < m_devices["net"].count(); i++) { for (auto i = 0; i < m_devices["net"].count(); i++) {
allKeys.append(QString("downunits%1").arg(i)); allKeys.append(QString("downunits%1").arg(i));
allKeys.append(QString("upunits%1").arg(i)); allKeys.append(QString("upunits%1").arg(i));
allKeys.append(QString("downtotkb%1").arg(i)); allKeys.append(QString("downtotkb%1").arg(i));
@ -129,8 +130,7 @@ QStringList AWKeyOperations::dictKeys() const
allKeys.append(QString("up%1").arg(i)); allKeys.append(QString("up%1").arg(i));
} }
// battery // battery
QStringList allBatteryDevices auto allBatteryDevices = QDir("/sys/class/power_supply")
= QDir("/sys/class/power_supply")
.entryList(QStringList({"BAT*"}), QDir::Dirs | QDir::NoDotAndDotDot, QDir::Name); .entryList(QStringList({"BAT*"}), QDir::Dirs | QDir::NoDotAndDotDot, QDir::Name);
for (int i = 0; i < allBatteryDevices.count(); i++) { for (int i = 0; i < allBatteryDevices.count(); i++) {
allKeys.append(QString("bat%1").arg(i)); allKeys.append(QString("bat%1").arg(i));
@ -205,52 +205,48 @@ QString AWKeyOperations::infoByKey(const QString &_key) const
{ {
qCDebug(LOG_AW) << "Requested key" << _key; qCDebug(LOG_AW) << "Requested key" << _key;
QString stripped = _key; auto stripped = _key;
stripped.remove(QRegExp("\\d+")); stripped.remove(QRegularExpression("\\d+"));
QString output; QString output;
if (_key.startsWith("bar")) { if (_key.startsWith("bar")) {
AbstractExtItem *item = m_graphicalItems->itemByTag(_key, stripped); auto *item = m_graphicalItems->itemByTag(_key, stripped);
if (item) if (item)
output = item->uniq(); output = item->uniq();
} else if (_key.startsWith("custom")) { } else if (_key.startsWith("custom")) {
AbstractExtItem *item = m_extScripts->itemByTag(_key, stripped); auto *item = m_extScripts->itemByTag(_key, stripped);
if (item) if (item)
output = item->uniq(); output = item->uniq();
} else if (_key.contains(QRegExp("^hdd[rw]"))) { } else if (_key.contains(QRegularExpression("^hdd[rw]"))) {
QString index = _key; auto index = _key;
index.remove(QRegExp("hdd[rw]")); index.remove(QRegularExpression("hdd[rw]"));
output = m_devices["disk"][index.toInt()]; output = m_devices["disk"][index.toInt()];
} else if (_key.contains(QRegExp("^hdd([0-9]|mb|gb|freemb|freegb|totmb|totgb)"))) { } else if (_key.contains(QRegularExpression("^hdd([0-9]|mb|gb|freemb|freegb|totmb|totgb)"))) {
QString index = _key; auto index = _key;
index.remove(QRegExp("^hdd(|mb|gb|freemb|freegb|totmb|totgb)")); index.remove(QRegularExpression("^hdd(|mb|gb|freemb|freegb|totmb|totgb)"));
output = m_devices["mount"][index.toInt()]; output = m_devices["mount"][index.toInt()];
} else if (_key.startsWith("hddtemp")) { } else if (_key.contains(QRegularExpression("^(down|up)[0-9]"))) {
QString index = _key; auto index = _key;
index.remove("hddtemp"); index.remove(QRegularExpression("^(down|up)"));
output = m_devices["hdd"][index.toInt()];
} else if (_key.contains(QRegExp("^(down|up)[0-9]"))) {
QString index = _key;
index.remove(QRegExp("^(down|up)"));
output = m_devices["net"][index.toInt()]; output = m_devices["net"][index.toInt()];
} else if (_key.startsWith("pkgcount")) { } else if (_key.startsWith("pkgcount")) {
AbstractExtItem *item = m_extUpgrade->itemByTag(_key, stripped); auto *item = m_extUpgrade->itemByTag(_key, stripped);
if (item) if (item)
output = item->uniq(); output = item->uniq();
} else if (_key.contains(QRegExp("(^|perc)(ask|bid|price)(chg|)"))) { } else if (_key.contains(QRegularExpression("(^|perc)(ask|bid|price)(chg|)"))) {
AbstractExtItem *item = m_extQuotes->itemByTag(_key, stripped); auto *item = m_extQuotes->itemByTag(_key, stripped);
if (item) if (item)
output = item->uniq(); output = item->uniq();
} else if (_key.contains(QRegExp("(weather|weatherId|humidity|pressure|temperature)"))) { } else if (_key.contains(QRegularExpression("(weather|weatherId|humidity|pressure|temperature)"))) {
AbstractExtItem *item = m_extWeather->itemByTag(_key, stripped); auto *item = m_extWeather->itemByTag(_key, stripped);
if (item) if (item)
output = item->uniq(); output = item->uniq();
} else if (_key.startsWith("temp")) { } else if (_key.startsWith("temp")) {
QString index = _key; auto index = _key;
index.remove("temp"); index.remove("temp");
output = m_devices["temp"][index.toInt()]; output = m_devices["temp"][index.toInt()];
} else if (_key.startsWith("response")) { } else if (_key.startsWith("response")) {
AbstractExtItem *item = m_extNetRequest->itemByTag(_key, stripped); auto *item = m_extNetRequest->itemByTag(_key, stripped);
if (item) if (item)
output = item->uniq(); output = item->uniq();
} else { } else {
@ -280,7 +276,7 @@ void AWKeyOperations::editItem(const QString &_type)
qCDebug(LOG_AW) << "Item type" << _type; qCDebug(LOG_AW) << "Item type" << _type;
if (_type == "graphicalitem") { if (_type == "graphicalitem") {
QStringList keys = dictKeys().filter(QRegExp("^(cpu(?!cl).*|gpu$|mem$|swap$|hdd[0-9].*|bat.*)")); QStringList keys = dictKeys().filter(QRegularExpression("^(cpu(?!cl).*|gpu$|mem$|swap$|hdd[0-9].*|bat.*)"));
keys.sort(); keys.sort();
m_graphicalItems->setConfigArgs(keys); m_graphicalItems->setConfigArgs(keys);
return m_graphicalItems->editItems(); return m_graphicalItems->editItems();
@ -302,19 +298,26 @@ void AWKeyOperations::addDevice(const QString &_source)
{ {
qCDebug(LOG_AW) << "Source" << _source; qCDebug(LOG_AW) << "Source" << _source;
QRegExp diskRegexp = QRegExp("disk/(?:md|sd|hd)[a-z|0-9]_.*/Rate/(?:rblk)"); auto diskRegexp = QRegularExpression("^disk/.*/read$");
QRegExp mountRegexp = QRegExp("partitions/.*/filllevel"); auto mountRegexp = QRegularExpression("^disk/.*/usedPercent$");
auto cpuTempRegExp = QRegularExpression("^cpu/cpu.*/temperature$");
auto gpuRegExp = QRegularExpression("^gpu/gpu.*/usage$");
if (_source.contains(diskRegexp)) { if (_source.contains(diskRegexp)) {
QString device = _source; auto device = _source;
device.remove("/Rate/rblk"); device.remove("disk/").remove("/read");
addKeyToCache("disk", device); addKeyToCache("disk", device);
} else if (_source.contains(mountRegexp)) { } else if (_source.contains(mountRegexp)) {
QString device = _source; auto device = _source;
device.remove("partitions").remove("/filllevel"); device.remove("disk/").remove("/usedPercent");
addKeyToCache("mount", device); addKeyToCache("mount", device);
} else if (_source.startsWith("lmsensors")) { } else if (_source.startsWith("lmsensors") || _source.contains(cpuTempRegExp)
|| _source == "cpu/all/averageTemperature") {
addKeyToCache("temp", _source); addKeyToCache("temp", _source);
} else if (_source.contains(gpuRegExp)) {
auto device = _source;
device.remove("gpu/").remove("/usage");
addKeyToCache("gpu", device);
} }
} }

View File

@ -15,9 +15,7 @@
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/ ***************************************************************************/
#pragma once
#ifndef AWKEYOPERATIONS_H
#define AWKEYOPERATIONS_H
#include <QObject> #include <QObject>
@ -78,6 +76,3 @@ private:
QHash<QString, QStringList> m_devices; QHash<QString, QStringList> m_devices;
QString m_pattern; QString m_pattern;
}; };
#endif /* AWKEYOPERATIONS_H */

View File

@ -56,16 +56,17 @@ AWKeys::AWKeys(QObject *_parent)
createDBusInterface(); createDBusInterface();
// update key data if required // update key data if required
connect(m_keyOperator, SIGNAL(updateKeys(const QStringList &)), this, SLOT(reinitKeys(const QStringList &))); connect(m_keyOperator, &AWKeyOperations::updateKeys, this, &AWKeys::reinitKeys);
connect(m_timer, SIGNAL(timeout()), this, SLOT(updateTextData())); connect(m_timer, &QTimer::timeout, this, &AWKeys::updateTextData);
// transfer signal from AWDataAggregator object to QML ui // transfer signal from AWDataAggregator object to QML ui
connect(m_dataAggregator, SIGNAL(toolTipPainted(const QString &)), this, connect(m_dataAggregator, &AWDataAggregator::toolTipPainted,
SIGNAL(needToolTipToBeUpdated(const QString &))); [this](const QString &_tooltip) { emit(needToolTipToBeUpdated(_tooltip)); });
connect(this, SIGNAL(dropSourceFromDataengine(const QString &)), m_dataEngineAggregator,
SLOT(dropSource(const QString &))); connect(this, &AWKeys::dropSourceFromDataengine, m_dataEngineAggregator, &AWDataEngineAggregator::dropSource);
connect(m_dataEngineAggregator, &AWDataEngineAggregator::dataUpdated, this, &AWKeys::dataUpdated);
// transfer signal from dataengine to update source list // transfer signal from dataengine to update source list
connect(m_dataEngineAggregator, SIGNAL(deviceAdded(const QString &)), m_keyOperator, connect(m_dataEngineAggregator, &AWDataEngineAggregator::deviceAdded, m_keyOperator, &AWKeyOperations::addDevice);
SLOT(addDevice(const QString &)));
} }
@ -102,7 +103,7 @@ void AWKeys::initKeys(const QString &_currentPattern, const int _interval, const
m_aggregator->initFormatters(); m_aggregator->initFormatters();
m_keyOperator->setPattern(_currentPattern); m_keyOperator->setPattern(_currentPattern);
m_keyOperator->updateCache(); m_keyOperator->updateCache();
m_dataEngineAggregator->reconnectSources(_interval); m_dataEngineAggregator->loadSources();
// timer // timer
m_timer->setInterval(_interval); m_timer->setInterval(_interval);
@ -148,7 +149,7 @@ QStringList AWKeys::dictKeys(const bool _sorted, const QString &_regexp) const
if (_sorted) if (_sorted)
allKeys.sort(); allKeys.sort();
return allKeys.filter(QRegExp(_regexp)); return allKeys.filter(QRegularExpression(_regexp));
} }
@ -185,9 +186,9 @@ QString AWKeys::valueByKey(const QString &_key) const
{ {
qCDebug(LOG_AW) << "Requested value for key" << _key; qCDebug(LOG_AW) << "Requested value for key" << _key;
QString trueKey = _key.startsWith("bar") ? m_keyOperator->infoByKey(_key) : _key; auto realKey = _key.startsWith("bar") ? m_keyOperator->infoByKey(_key) : _key;
return m_aggregator->formatter(m_values[trueKey], trueKey, true); return m_aggregator->formatter(m_values[realKey], realKey, true);
} }
@ -199,10 +200,15 @@ void AWKeys::editItem(const QString &_type)
} }
void AWKeys::dataUpdated(const QString &_sourceName, const Plasma::DataEngine::Data &_data) void AWKeys::dataUpdated(const QHash<QString, KSysGuard::SensorInfo> &_sensors, const KSysGuard::SensorDataList &_data)
{ {
// run concurrent data update for (auto &single : _data) {
QtConcurrent::run(m_threadPool, this, &AWKeys::setDataBySource, _sourceName, _data); if (_sensors.contains(single.sensorProperty)) {
setDataBySource(single.sensorProperty, _sensors.value(single.sensorProperty), single);
}
// TODO use QtConcurrent::map or something like that
// QtConcurrent::run(m_threadPool, this, &AWKeys::setDataBySource, "ss", sensor);
}
} }
@ -239,7 +245,7 @@ void AWKeys::updateTextData()
// do not do it in parallel to avoid race condition // do not do it in parallel to avoid race condition
m_mutex.lock(); m_mutex.lock();
calculateValues(); calculateValues();
QString text = parsePattern(m_keyOperator->pattern()); auto text = parsePattern(m_keyOperator->pattern());
// update tooltip values under lock // update tooltip values under lock
m_dataAggregator->dataUpdate(m_values); m_dataAggregator->dataUpdate(m_values);
m_mutex.unlock(); m_mutex.unlock();
@ -256,17 +262,17 @@ void AWKeys::calculateValues()
QStringList mountDevices = m_keyOperator->devices("mount"); QStringList mountDevices = m_keyOperator->devices("mount");
for (auto &device : mountDevices) { for (auto &device : mountDevices) {
int index = mountDevices.indexOf(device); int index = mountDevices.indexOf(device);
m_values[QString("hddtotmb%1").arg(index)] m_values[QString("hddtotmb%1").arg(index)] = m_values[QString("hddfreemb%1").arg(index)].toDouble()
= m_values[QString("hddfreemb%1").arg(index)].toFloat() + m_values[QString("hddmb%1").arg(index)].toFloat(); + m_values[QString("hddmb%1").arg(index)].toDouble();
m_values[QString("hddtotgb%1").arg(index)] m_values[QString("hddtotgb%1").arg(index)] = m_values[QString("hddfreegb%1").arg(index)].toDouble()
= m_values[QString("hddfreegb%1").arg(index)].toFloat() + m_values[QString("hddgb%1").arg(index)].toFloat(); + m_values[QString("hddgb%1").arg(index)].toDouble();
} }
// memtot* // memtot*
m_values["memtotmb"] = m_values["memusedmb"].toInt() + m_values["memfreemb"].toInt(); m_values["memtotmb"] = m_values["memusedmb"].toLongLong() + m_values["memfreemb"].toLongLong();
m_values["memtotgb"] = m_values["memusedgb"].toFloat() + m_values["memfreegb"].toFloat(); m_values["memtotgb"] = m_values["memusedgb"].toDouble() + m_values["memfreegb"].toDouble();
// mem // 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 // up, down, upkb, downkb, upunits, downunits
int netIndex = m_keyOperator->devices("net").indexOf(m_values["netdev"].toString()); int netIndex = m_keyOperator->devices("net").indexOf(m_values["netdev"].toString());
@ -282,10 +288,10 @@ void AWKeys::calculateValues()
m_values["upunits"] = m_values[QString("upunits%1").arg(netIndex)]; m_values["upunits"] = m_values[QString("upunits%1").arg(netIndex)];
// swaptot* // swaptot*
m_values["swaptotmb"] = m_values["swapmb"].toInt() + m_values["swapfreemb"].toInt(); m_values["swaptotmb"] = m_values["swapmb"].toLongLong() + m_values["swapfreemb"].toLongLong();
m_values["swaptotgb"] = m_values["swapgb"].toFloat() + m_values["swapfreegb"].toFloat(); m_values["swaptotgb"] = m_values["swapgb"].toDouble() + m_values["swapfreegb"].toDouble();
// swap // 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 // user defined keys
for (auto &key : m_keyOperator->userKeys()) for (auto &key : m_keyOperator->userKeys())
@ -323,7 +329,7 @@ void AWKeys::createDBusInterface()
QString AWKeys::parsePattern(QString _pattern) const QString AWKeys::parsePattern(QString _pattern) const
{ {
// screen sign // screen sign
_pattern.replace("$$", QString(0x1d)); _pattern.replace("$$", QChar(0x1d));
// lambdas // lambdas
for (auto &key : m_foundLambdas) for (auto &key : m_foundLambdas)
@ -343,7 +349,7 @@ QString AWKeys::parsePattern(QString _pattern) const
} }
// prepare strings // prepare strings
_pattern.replace(QString(0x1d), "$"); _pattern.replace(QChar(0x1d), "$");
if (m_wrapNewLines) if (m_wrapNewLines)
_pattern.replace("\n", "<br>"); _pattern.replace("\n", "<br>");
@ -351,25 +357,23 @@ QString AWKeys::parsePattern(QString _pattern) const
} }
void AWKeys::setDataBySource(const QString &_sourceName, const QVariantMap &_data) void AWKeys::setDataBySource(const QString &_source, const KSysGuard::SensorInfo &_sensor,
const KSysGuard::SensorData &_data)
{ {
qCDebug(LOG_AW) << "Source" << _sourceName << "with data" << _data; qCDebug(LOG_AW) << "Source" << _source << _sensor.name << "with data" << _data.payload;
// first list init // first list init
QStringList tags = m_aggregator->keysFromSource(_sourceName); auto tags = m_aggregator->keysFromSource(_source);
if (tags.isEmpty()) 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 // update data or drop source if there are no matches and exit
if (tags.isEmpty()) { if (tags.isEmpty()) {
qCInfo(LOG_AW) << "Source" << _sourceName << "not found"; qCInfo(LOG_AW) << "Sensor" << _source << "not found";
return emit(dropSourceFromDataengine(_sourceName)); return emit(dropSourceFromDataengine(_source));
} }
m_mutex.lock(); m_mutex.lock();
// HACK workaround for time values which are stored in the different path std::for_each(tags.cbegin(), tags.cend(), [this, &_data](const QString &tag) { m_values[tag] = _data.payload; });
std::for_each(tags.cbegin(), tags.cend(), [this, &_data, &_sourceName](const QString &tag) {
m_values[tag] = _sourceName == "Local" ? _data["DateTime"] : _data["value"];
});
m_mutex.unlock(); m_mutex.unlock();
} }

View File

@ -15,15 +15,13 @@
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/ ***************************************************************************/
#pragma once
#ifndef AWKEYS_H
#define AWKEYS_H
#include <Plasma/DataEngine>
#include <QMutex> #include <QMutex>
#include <QObject> #include <QObject>
#include <ksysguard/systemstats/SensorInfo.h>
class AWDataAggregator; class AWDataAggregator;
class AWDataEngineAggregator; class AWDataEngineAggregator;
@ -56,9 +54,7 @@ public:
Q_INVOKABLE void editItem(const QString &_type); Q_INVOKABLE void editItem(const QString &_type);
public slots: public slots:
void dataUpdated(const QString &_sourceName, const Plasma::DataEngine::Data &_data); void dataUpdated(const QHash<QString, KSysGuard::SensorInfo> &_sensors, const KSysGuard::SensorDataList &_data);
// dummy method required by DataEngine connections
static void modelChanged(const QString &, QAbstractItemModel *){};
signals: signals:
void dropSourceFromDataengine(const QString &_source); void dropSourceFromDataengine(const QString &_source);
@ -74,7 +70,8 @@ private:
void calculateValues(); void calculateValues();
void createDBusInterface(); void createDBusInterface();
[[nodiscard]] QString parsePattern(QString _pattern) const; [[nodiscard]] QString parsePattern(QString _pattern) const;
void setDataBySource(const QString &_sourceName, const QVariantMap &_data); void setDataBySource(const QString &_source, const KSysGuard::SensorInfo &_sensor,
const KSysGuard::SensorData &_data);
// objects // objects
AWDataAggregator *m_dataAggregator = nullptr; AWDataAggregator *m_dataAggregator = nullptr;
AWDataEngineAggregator *m_dataEngineAggregator = nullptr; AWDataEngineAggregator *m_dataEngineAggregator = nullptr;
@ -91,6 +88,3 @@ private:
QThreadPool *m_threadPool = nullptr; QThreadPool *m_threadPool = nullptr;
QMutex m_mutex; QMutex m_mutex;
}; };
#endif /* AWKEYS_H */

View File

@ -64,19 +64,19 @@ QString AWKeysAggregator::formatter(const QVariant &_data, const QString &_key,
// case block // case block
switch (m_mapper->formatter(_key)) { switch (m_mapper->formatter(_key)) {
case FormatterType::Float: case FormatterType::Float:
output = QString("%1").arg(_data.toFloat(), 5, 'f', 1); output = QString("%1").arg(_data.toDouble(), 5, 'f', 1);
break; break;
case FormatterType::FloatTwoSymbols: case FormatterType::FloatTwoSymbols:
output = QString("%1").arg(_data.toFloat(), 5, 'f', 2); output = QString("%1").arg(_data.toDouble(), 5, 'f', 2);
break; break;
case FormatterType::Integer: case FormatterType::Integer:
output = QString("%1").arg(_data.toFloat(), 4, 'f', 0); output = QString("%1").arg(_data.toDouble(), 4, 'f', 0);
break; break;
case FormatterType::IntegerFive: case FormatterType::IntegerFive:
output = QString("%1").arg(_data.toFloat(), 5, 'f', 0); output = QString("%1").arg(_data.toDouble(), 5, 'f', 0);
break; break;
case FormatterType::IntegerThree: case FormatterType::IntegerThree:
output = QString("%1").arg(_data.toFloat(), 3, 'f', 0); output = QString("%1").arg(_data.toDouble(), 3, 'f', 0);
break; break;
case FormatterType::List: case FormatterType::List:
output = _data.toStringList().join(','); output = _data.toStringList().join(',');
@ -85,21 +85,24 @@ QString AWKeysAggregator::formatter(const QVariant &_data, const QString &_key,
output = _data.toBool() ? m_acOnline : m_acOffline; output = _data.toBool() ? m_acOnline : m_acOffline;
break; break;
case FormatterType::MemGBFormat: case FormatterType::MemGBFormat:
output = QString("%1").arg(_data.toFloat() / (1024.0 * 1024.0), 5, 'f', 1); output = QString("%1").arg(_data.toDouble() / GBinBytes, 5, 'f', 1);
break; break;
case FormatterType::MemMBFormat: case FormatterType::MemMBFormat:
output = QString("%1").arg(_data.toFloat() / 1024.0, 5, 'f', 0); output = QString("%1").arg(_data.toDouble() / MBinBytes, 5, 'f', 0);
break;
case FormatterType::MemKBFormat:
output = QString("%1").arg(_data.toDouble() / KBinBytes, 5, 'f', 0);
break; break;
case FormatterType::NetSmartFormat: case FormatterType::NetSmartFormat:
output = [](const float value) { output = [](const double value) {
if (value > 1024.0) if (value > MBinBytes)
return QString("%1").arg(value / 1024.0, 4, 'f', 1); return QString("%1").arg(value / MBinBytes, 4, 'f', 1);
else else
return QString("%1").arg(value, 4, 'f', 0); return QString("%1").arg(value / KBinBytes, 4, 'f', 0);
}(_data.toFloat()); }(_data.toDouble());
break; break;
case FormatterType::NetSmartUnits: case FormatterType::NetSmartUnits:
if (_data.toFloat() > 1024.0) if (_data.toDouble() > MBinBytes)
output = m_translate ? i18n("MB/s") : "MB/s"; output = m_translate ? i18n("MB/s") : "MB/s";
else else
output = m_translate ? i18n("KB/s") : "KB/s"; output = m_translate ? i18n("KB/s") : "KB/s";
@ -110,29 +113,29 @@ QString AWKeysAggregator::formatter(const QVariant &_data, const QString &_key,
output = output.rightJustified(8, QLatin1Char(' '), true); output = output.rightJustified(8, QLatin1Char(' '), true);
break; break;
case FormatterType::Temperature: case FormatterType::Temperature:
output = QString("%1").arg(temperature(_data.toFloat()), 5, 'f', 1); output = QString("%1").arg(temperature(_data.toDouble()), 5, 'f', 1);
break; break;
case FormatterType::Time: case FormatterType::Time:
output = _data.toDateTime().toString(); output = QDateTime::fromSecsSinceEpoch(_data.toLongLong()).toString();
break; break;
case FormatterType::TimeCustom: case FormatterType::TimeCustom:
output = m_customTime; output = m_customTime;
[&output, loc, this](const QDateTime &dt) { [&output, loc, this](const QDateTime &dt) {
for (auto &key : m_timeKeys) for (auto &key : m_timeKeys)
output.replace(QString("$%1").arg(key), loc.toString(dt, key)); output.replace(QString("$%1").arg(key), loc.toString(dt, key));
}(_data.toDateTime()); }(QDateTime::fromSecsSinceEpoch(_data.toLongLong()));
break; break;
case FormatterType::TimeISO: case FormatterType::TimeISO:
output = _data.toDateTime().toString(Qt::ISODate); output = QDateTime::fromSecsSinceEpoch(_data.toLongLong()).toString(Qt::ISODate);
break; break;
case FormatterType::TimeLong: case FormatterType::TimeLong:
output = loc.toString(_data.toDateTime(), QLocale::LongFormat); output = loc.toString(QDateTime::fromSecsSinceEpoch(_data.toLongLong()), QLocale::LongFormat);
break; break;
case FormatterType::TimeShort: case FormatterType::TimeShort:
output = loc.toString(_data.toDateTime(), QLocale::ShortFormat); output = loc.toString(QDateTime::fromSecsSinceEpoch(_data.toLongLong()), QLocale::ShortFormat);
break; break;
case FormatterType::Timestamp: case FormatterType::Timestamp:
output = QString("%1").arg(_data.toDateTime().toMSecsSinceEpoch() / 1000.0, 10, 'f', 0); output = _data.toString();
break; break;
case FormatterType::Uptime: case FormatterType::Uptime:
case FormatterType::UptimeCustom: case FormatterType::UptimeCustom:
@ -150,7 +153,7 @@ QString AWKeysAggregator::formatter(const QVariant &_data, const QString &_key,
source.replace("$m", QString("%1").arg(minutes)); source.replace("$m", QString("%1").arg(minutes));
return source; return source;
}(m_mapper->formatter(_key) == FormatterType::Uptime ? "$ddd$hhh$mmm" : m_customUptime, }(m_mapper->formatter(_key) == FormatterType::Uptime ? "$ddd$hhh$mmm" : m_customUptime,
static_cast<int>(_data.toFloat())); static_cast<int>(_data.toDouble()));
break; break;
case FormatterType::NoFormat: case FormatterType::NoFormat:
output = _data.toString(); output = _data.toString();
@ -234,7 +237,8 @@ void AWKeysAggregator::setTranslate(const bool _translate)
} }
QStringList AWKeysAggregator::registerSource(const QString &_source, const QString &_units, const QStringList &_keys) QStringList AWKeysAggregator::registerSource(const QString &_source, const KSysGuard::Unit _units,
const QStringList &_keys)
{ {
qCDebug(LOG_AW) << "Source" << _source << "with units" << _units; qCDebug(LOG_AW) << "Source" << _source << "with units" << _units;
@ -242,24 +246,24 @@ QStringList AWKeysAggregator::registerSource(const QString &_source, const QStri
} }
float AWKeysAggregator::temperature(const float temp) const double AWKeysAggregator::temperature(const double temp) const
{ {
qCDebug(LOG_AW) << "Temperature value" << temp; qCDebug(LOG_AW) << "Temperature value" << temp;
float converted = temp; auto converted = temp;
if (m_tempUnits == "Celsius") { if (m_tempUnits == "Celsius") {
} else if (m_tempUnits == "Fahrenheit") { } else if (m_tempUnits == "Fahrenheit") {
converted = temp * 9.0f / 5.0f + 32.0f; converted = temp * 9.0f / 5.0 + 32.0;
} else if (m_tempUnits == "Kelvin") { } else if (m_tempUnits == "Kelvin") {
converted = temp + 273.15f; converted = temp + 273.15;
} else if (m_tempUnits == "Reaumur") { } else if (m_tempUnits == "Reaumur") {
converted = temp * 0.8f; converted = temp * 0.8;
} else if (m_tempUnits == "cm^-1") { } else if (m_tempUnits == "cm^-1") {
converted = (temp + 273.15f) * 0.695f; converted = (temp + 273.15) * 0.695;
} else if (m_tempUnits == "kJ/mol") { } else if (m_tempUnits == "kJ/mol") {
converted = (temp + 273.15f) * 8.31f; converted = (temp + 273.15) * 8.31;
} else if (m_tempUnits == "kcal/mol") { } else if (m_tempUnits == "kcal/mol") {
converted = (temp + 273.15f) * 1.98f; converted = (temp + 273.15) * 1.98;
} else { } else {
qCWarning(LOG_AW) << "Invalid units" << m_tempUnits; qCWarning(LOG_AW) << "Invalid units" << m_tempUnits;
} }

View File

@ -15,9 +15,9 @@
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/ ***************************************************************************/
#pragma once
#ifndef AWKEYSAGGREGATOR_H #include <ksysguard/formatter/Unit.h>
#define AWKEYSAGGREGATOR_H
#include <QHash> #include <QHash>
#include <QObject> #include <QObject>
@ -51,6 +51,7 @@ public:
ACFormat, ACFormat,
MemGBFormat, MemGBFormat,
MemMBFormat, MemMBFormat,
MemKBFormat,
NetSmartFormat, NetSmartFormat,
NetSmartUnits, NetSmartUnits,
Quotes, Quotes,
@ -65,6 +66,10 @@ public:
UptimeCustom UptimeCustom
}; };
static constexpr double KBinBytes = 1024.0;
static constexpr double MBinBytes = 1024.0 * KBinBytes;
static constexpr double GBinBytes = 1024.0 * MBinBytes;
explicit AWKeysAggregator(QObject *_parent = nullptr); explicit AWKeysAggregator(QObject *_parent = nullptr);
~AWKeysAggregator() override; ~AWKeysAggregator() override;
void initFormatters(); void initFormatters();
@ -81,10 +86,10 @@ public:
void setTranslate(bool _translate); void setTranslate(bool _translate);
public slots: 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: private:
[[nodiscard]] float temperature(float temp) const; [[nodiscard]] double temperature(double temp) const;
AWFormatterHelper *m_customFormatters = nullptr; AWFormatterHelper *m_customFormatters = nullptr;
AWDataEngineMapper *m_mapper = nullptr; AWDataEngineMapper *m_mapper = nullptr;
QStringList m_timeKeys; QStringList m_timeKeys;
@ -96,6 +101,3 @@ private:
QString m_tempUnits; QString m_tempUnits;
bool m_translate = false; bool m_translate = false;
}; };
#endif /* AWKEYSAGGREGATOR_H */

View File

@ -15,9 +15,7 @@
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/ ***************************************************************************/
#pragma once
#ifndef AWPAIRCONFIGFACTORY_H
#define AWPAIRCONFIGFACTORY_H
#include <QObject> #include <QObject>
@ -34,6 +32,3 @@ public:
private: private:
}; };
#endif /* AWPAIRCONFIGFACTORY_H */

View File

@ -105,9 +105,9 @@ QList<AWPatternFunctions::AWFunction> AWPatternFunctions::findFunctionCalls(cons
metadata.args = QStringList(); metadata.args = QStringList();
} else { } else {
// replace '$,' to 0x1d // replace '$,' to 0x1d
argsString.replace("$,", QString(0x1d)); argsString.replace("$,", QChar(0x1d));
QStringList args = argsString.split(','); 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; metadata.args = args;
} }
// other variables // other variables
@ -130,7 +130,7 @@ QString AWPatternFunctions::insertAllKeys(QString _code, const QStringList &_key
QList<AWPatternFunctions::AWFunction> found = AWPatternFunctions::findFunctionCalls("aw_all", _code); QList<AWPatternFunctions::AWFunction> found = AWPatternFunctions::findFunctionCalls("aw_all", _code);
for (auto &function : found) { for (auto &function : found) {
QString separator = function.args.isEmpty() ? "," : function.args.at(0); QString separator = function.args.isEmpty() ? "," : function.args.at(0);
QStringList required = _keys.filter(QRegExp(function.body)); QStringList required = _keys.filter(QRegularExpression(function.body));
std::for_each(required.begin(), required.end(), [](QString &value) { value = QString("%1: $%1").arg(value); }); std::for_each(required.begin(), required.end(), [](QString &value) { value = QString("%1: $%1").arg(value); });
_code.replace(function.what, required.join(separator)); _code.replace(function.what, required.join(separator));
@ -146,7 +146,7 @@ QString AWPatternFunctions::insertKeyCount(QString _code, const QStringList &_ke
QList<AWPatternFunctions::AWFunction> found = AWPatternFunctions::findFunctionCalls("aw_count", _code); QList<AWPatternFunctions::AWFunction> found = AWPatternFunctions::findFunctionCalls("aw_count", _code);
for (auto &function : found) { for (auto &function : found) {
int count = _keys.filter(QRegExp(function.body)).count(); int count = _keys.filter(QRegularExpression(function.body)).count();
_code.replace(function.what, QString::number(count)); _code.replace(function.what, QString::number(count));
} }
@ -162,7 +162,7 @@ QString AWPatternFunctions::insertKeyNames(QString _code, const QStringList &_ke
QList<AWPatternFunctions::AWFunction> found = AWPatternFunctions::findFunctionCalls("aw_names", _code); QList<AWPatternFunctions::AWFunction> found = AWPatternFunctions::findFunctionCalls("aw_names", _code);
for (auto &function : found) { for (auto &function : found) {
QString separator = function.args.isEmpty() ? "," : function.args.at(0); QString separator = function.args.isEmpty() ? "," : function.args.at(0);
QStringList required = _keys.filter(QRegExp(function.body)); QStringList required = _keys.filter(QRegularExpression(function.body));
_code.replace(function.what, required.join(separator)); _code.replace(function.what, required.join(separator));
} }
@ -178,7 +178,7 @@ QString AWPatternFunctions::insertKeys(QString _code, const QStringList &_keys)
QList<AWPatternFunctions::AWFunction> found = AWPatternFunctions::findFunctionCalls("aw_keys", _code); QList<AWPatternFunctions::AWFunction> found = AWPatternFunctions::findFunctionCalls("aw_keys", _code);
for (auto &function : found) { for (auto &function : found) {
QString separator = function.args.isEmpty() ? "," : function.args.at(0); QString separator = function.args.isEmpty() ? "," : function.args.at(0);
QStringList required = _keys.filter(QRegExp(function.body)); QStringList required = _keys.filter(QRegularExpression(function.body));
std::for_each(required.begin(), required.end(), [](QString &value) { value = QString("$%1").arg(value); }); std::for_each(required.begin(), required.end(), [](QString &value) { value = QString("$%1").arg(value); });
_code.replace(function.what, required.join(separator)); _code.replace(function.what, required.join(separator));

View File

@ -15,9 +15,7 @@
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/ ***************************************************************************/
#pragma once
#ifndef AWPATTERNFUNCTIONS_H
#define AWPATTERNFUNCTIONS_H
#include <QString> #include <QString>
#include <QVariant> #include <QVariant>
@ -47,6 +45,3 @@ QString insertMacros(QString _code);
QStringList findKeys(const QString &_code, const QStringList &_keys, bool _isBars); QStringList findKeys(const QString &_code, const QStringList &_keys, bool _isBars);
QStringList findLambdas(const QString &_code); QStringList findLambdas(const QString &_code);
} // namespace AWPatternFunctions } // namespace AWPatternFunctions
#endif /* AWPATTERNFUNCTIONS_H */

View File

@ -127,7 +127,7 @@ void AWTelemetryHandler::uploadTelemetry(const QString &_group, const QString &_
} }
auto *manager = new QNetworkAccessManager(nullptr); auto *manager = new QNetworkAccessManager(nullptr);
connect(manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(telemetryReplyRecieved(QNetworkReply *))); connect(manager, &QNetworkAccessManager::finished, this, &AWTelemetryHandler::telemetryReplyReceived);
QUrl url(REMOTE_TELEMETRY_URL); QUrl url(REMOTE_TELEMETRY_URL);
QNetworkRequest request(url); QNetworkRequest request(url);
@ -140,14 +140,14 @@ void AWTelemetryHandler::uploadTelemetry(const QString &_group, const QString &_
payload["metadata"] = _value; payload["metadata"] = _value;
payload["type"] = _group; payload["type"] = _group;
// convert to QByteArray to send request // convert to QByteArray to send request
QByteArray data = QJsonDocument::fromVariant(payload).toJson(QJsonDocument::Compact); auto data = QJsonDocument::fromVariant(payload).toJson(QJsonDocument::Compact);
qCInfo(LOG_AW) << "Send request with body" << data.data() << "and size" << data.size(); qCInfo(LOG_AW) << "Send request with body" << data.data() << "and size" << data.size();
manager->post(request, data); manager->post(request, data);
} }
void AWTelemetryHandler::telemetryReplyRecieved(QNetworkReply *_reply) void AWTelemetryHandler::telemetryReplyReceived(QNetworkReply *_reply)
{ {
if (_reply->error() != QNetworkReply::NoError) { if (_reply->error() != QNetworkReply::NoError) {
qCWarning(LOG_AW) << "An error occurs" << _reply->error() << "with message" << _reply->errorString(); qCWarning(LOG_AW) << "An error occurs" << _reply->error() << "with message" << _reply->errorString();
@ -155,7 +155,7 @@ void AWTelemetryHandler::telemetryReplyRecieved(QNetworkReply *_reply)
} }
QJsonParseError error{}; QJsonParseError error{};
QJsonDocument jsonDoc = QJsonDocument::fromJson(_reply->readAll(), &error); auto jsonDoc = QJsonDocument::fromJson(_reply->readAll(), &error);
if (error.error != QJsonParseError::NoError) { if (error.error != QJsonParseError::NoError) {
qCWarning(LOG_AW) << "Parse error" << error.errorString(); qCWarning(LOG_AW) << "Parse error" << error.errorString();
return; return;
@ -163,8 +163,8 @@ void AWTelemetryHandler::telemetryReplyRecieved(QNetworkReply *_reply)
_reply->deleteLater(); _reply->deleteLater();
// convert to map // convert to map
QVariantMap response = jsonDoc.toVariant().toMap(); auto response = jsonDoc.toVariant().toMap();
QString message = response["message"].toString(); auto message = response["message"].toString();
qCInfo(LOG_AW) << "Server reply on telemetry" << message; qCInfo(LOG_AW) << "Server reply on telemetry" << message;
return emit(replyReceived(message)); return emit(replyReceived(message));

View File

@ -15,9 +15,7 @@
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/ ***************************************************************************/
#pragma once
#ifndef AWTELEMETRYHANDLER_H
#define AWTELEMETRYHANDLER_H
#include <QObject> #include <QObject>
@ -43,7 +41,7 @@ signals:
void replyReceived(const QString &_message); void replyReceived(const QString &_message);
private slots: private slots:
void telemetryReplyRecieved(QNetworkReply *_reply); void telemetryReplyReceived(QNetworkReply *_reply);
private: private:
static QString getKey(int _count); static QString getKey(int _count);
@ -52,6 +50,3 @@ private:
int m_storeCount = 0; int m_storeCount = 0;
bool m_uploadEnabled = false; bool m_uploadEnabled = false;
}; };
#endif /* AWTELEMETRYHANDLER_H */

View File

@ -24,6 +24,7 @@
#include <QNetworkAccessManager> #include <QNetworkAccessManager>
#include <QNetworkReply> #include <QNetworkReply>
#include <QSettings> #include <QSettings>
#include <QStandardPaths>
#include "awdebug.h" #include "awdebug.h"
@ -53,7 +54,7 @@ void AWUpdateHelper::checkUpdates(const bool _showAnyway)
// request. In case of automatic check no message will be shown // request. In case of automatic check no message will be shown
auto *manager = new QNetworkAccessManager(nullptr); auto *manager = new QNetworkAccessManager(nullptr);
connect(manager, &QNetworkAccessManager::finished, connect(manager, &QNetworkAccessManager::finished,
[_showAnyway, this](QNetworkReply *reply) { return versionReplyRecieved(reply, _showAnyway); }); [_showAnyway, this](QNetworkReply *reply) { return versionReplyReceived(reply, _showAnyway); });
manager->get(QNetworkRequest(QUrl(VERSION_API))); manager->get(QNetworkRequest(QUrl(VERSION_API)));
} }
@ -62,7 +63,7 @@ void AWUpdateHelper::checkUpdates(const bool _showAnyway)
bool AWUpdateHelper::checkVersion() bool AWUpdateHelper::checkVersion()
{ {
QSettings settings(m_genericConfig, QSettings::IniFormat); QSettings settings(m_genericConfig, QSettings::IniFormat);
QVersionNumber version = QVersionNumber::fromString(settings.value("Version", QString(VERSION)).toString()); auto version = QVersionNumber::fromString(settings.value("Version", QString(VERSION)).toString());
// update version // update version
settings.setValue("Version", QString(VERSION)); settings.setValue("Version", QString(VERSION));
settings.sync(); settings.sync();
@ -87,7 +88,7 @@ void AWUpdateHelper::showInfo(const QVersionNumber &_version)
{ {
qCDebug(LOG_AW) << "Version" << _version; qCDebug(LOG_AW) << "Version" << _version;
QString text = i18n("You are using the actual version %1", _version.toString()); auto text = i18n("You are using the actual version %1", _version.toString());
if (!QString(COMMIT_SHA).isEmpty()) if (!QString(COMMIT_SHA).isEmpty())
text += QString(" (%1)").arg(QString(COMMIT_SHA)); text += QString(" (%1)").arg(QString(COMMIT_SHA));
return genMessageBox(i18n("No new version found"), text, QMessageBox::Ok)->open(); return genMessageBox(i18n("No new version found"), text, QMessageBox::Ok)->open();
@ -111,7 +112,7 @@ void AWUpdateHelper::showUpdates(const QVersionNumber &_version)
void AWUpdateHelper::userReplyOnUpdates(QAbstractButton *_button) void AWUpdateHelper::userReplyOnUpdates(QAbstractButton *_button)
{ {
QMessageBox::ButtonRole ret = dynamic_cast<QMessageBox *>(sender())->buttonRole(_button); auto ret = dynamic_cast<QMessageBox *>(sender())->buttonRole(_button);
qCInfo(LOG_AW) << "User select" << ret; qCInfo(LOG_AW) << "User select" << ret;
switch (ret) { switch (ret) {
@ -125,7 +126,7 @@ void AWUpdateHelper::userReplyOnUpdates(QAbstractButton *_button)
} }
void AWUpdateHelper::versionReplyRecieved(QNetworkReply *_reply, const bool _showAnyway) void AWUpdateHelper::versionReplyReceived(QNetworkReply *_reply, const bool _showAnyway)
{ {
qCDebug(LOG_AW) << "Show message anyway" << _showAnyway; qCDebug(LOG_AW) << "Show message anyway" << _showAnyway;
if (_reply->error() != QNetworkReply::NoError) { if (_reply->error() != QNetworkReply::NoError) {
@ -133,8 +134,8 @@ void AWUpdateHelper::versionReplyRecieved(QNetworkReply *_reply, const bool _sho
return; return;
} }
QJsonParseError error = QJsonParseError(); auto error = QJsonParseError();
QJsonDocument jsonDoc = QJsonDocument::fromJson(_reply->readAll(), &error); auto jsonDoc = QJsonDocument::fromJson(_reply->readAll(), &error);
if (error.error != QJsonParseError::NoError) { if (error.error != QJsonParseError::NoError) {
qCWarning(LOG_AW) << "Parse error" << error.errorString(); qCWarning(LOG_AW) << "Parse error" << error.errorString();
return; return;
@ -142,13 +143,13 @@ void AWUpdateHelper::versionReplyRecieved(QNetworkReply *_reply, const bool _sho
_reply->deleteLater(); _reply->deleteLater();
// convert to map // convert to map
QVariantMap firstRelease = jsonDoc.toVariant().toList().first().toMap(); auto firstRelease = jsonDoc.toVariant().toList().first().toMap();
QString version = firstRelease["tag_name"].toString(); auto version = firstRelease["tag_name"].toString();
version.remove("V."); version.remove("V.");
m_foundVersion = QVersionNumber::fromString(version); m_foundVersion = QVersionNumber::fromString(version);
qCInfo(LOG_AW) << "Update found version to" << m_foundVersion; qCInfo(LOG_AW) << "Update found version to" << m_foundVersion;
QVersionNumber oldVersion = QVersionNumber::fromString(VERSION); auto oldVersion = QVersionNumber::fromString(VERSION);
if (oldVersion < m_foundVersion) if (oldVersion < m_foundVersion)
return showUpdates(m_foundVersion); return showUpdates(m_foundVersion);
else if (_showAnyway) else if (_showAnyway)

View File

@ -15,9 +15,7 @@
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/ ***************************************************************************/
#pragma once
#ifndef AWUPDATEHELPER_H
#define AWUPDATEHELPER_H
#include <QMessageBox> #include <QMessageBox>
#include <QObject> #include <QObject>
@ -40,7 +38,7 @@ private slots:
static void showInfo(const QVersionNumber &_version); static void showInfo(const QVersionNumber &_version);
void showUpdates(const QVersionNumber &_version); void showUpdates(const QVersionNumber &_version);
void userReplyOnUpdates(QAbstractButton *_button); void userReplyOnUpdates(QAbstractButton *_button);
void versionReplyRecieved(QNetworkReply *_reply, bool _showAnyway); void versionReplyReceived(QNetworkReply *_reply, bool _showAnyway);
private: private:
static QMessageBox *genMessageBox(const QString &_title, const QString &_body, static QMessageBox *genMessageBox(const QString &_title, const QString &_body,
@ -48,6 +46,3 @@ private:
QVersionNumber m_foundVersion; QVersionNumber m_foundVersion;
QString m_genericConfig; QString m_genericConfig;
}; };
#endif /* AWUPDATEHELPER_H */

View File

@ -7,7 +7,7 @@ include_directories(
${CMAKE_BINARY_DIR} ${CMAKE_BINARY_DIR}
${PROJECT_TRDPARTY_DIR} ${PROJECT_TRDPARTY_DIR}
${Qt_INCLUDE} ${Qt_INCLUDE}
${Kf5_INCLUDE} ${Kf6_INCLUDE}
) )
file(GLOB SUBPROJECT_SOURCE *.cpp ${PROJECT_TRDPARTY_DIR}/qreplytimeout/*.cpp ${CMAKE_SOURCE_DIR}/*.cpp) file(GLOB SUBPROJECT_SOURCE *.cpp ${PROJECT_TRDPARTY_DIR}/qreplytimeout/*.cpp ${CMAKE_SOURCE_DIR}/*.cpp)
@ -28,18 +28,18 @@ file(RELATIVE_PATH SUBPROJECT_WEATHER_JSON ${CMAKE_SOURCE_DIR} ${SUBPROJECT_WEAT
# prepare # prepare
configure_file(${SUBPROJECT_WEATHER_JSON_IN} ${CMAKE_CURRENT_BINARY_DIR}/${SUBPROJECT_WEATHER_JSON}) configure_file(${SUBPROJECT_WEATHER_JSON_IN} ${CMAKE_CURRENT_BINARY_DIR}/${SUBPROJECT_WEATHER_JSON})
qt5_wrap_ui(SUBPROJECT_UI_HEADER ${SUBPROJECT_UI}) qt6_wrap_ui(SUBPROJECT_UI_HEADER ${SUBPROJECT_UI})
add_library(${SUBPROJECT} STATIC ${SUBPROJECT_SOURCE} ${SUBPROJECT_HEADER} ${SUBPROJECT_UI_HEADER}) add_library(${SUBPROJECT} STATIC ${SUBPROJECT_SOURCE} ${SUBPROJECT_HEADER} ${SUBPROJECT_UI_HEADER})
target_link_libraries(${SUBPROJECT} ${Qt_LIBRARIES} ${Kf5_LIBRARIES}) target_link_libraries(${SUBPROJECT} ${Qt_LIBRARIES} ${Kf6_LIBRARIES})
# install # install
install(DIRECTORY ${SUBPROJECT_CONFIGS} DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME}) install(DIRECTORY ${SUBPROJECT_CONFIGS} DESTINATION ${KDE_INSTALL_DATADIR}/${PROJECT_NAME})
install(DIRECTORY ${SUBPROJECT_FORMATTERS} DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME}) install(DIRECTORY ${SUBPROJECT_FORMATTERS} DESTINATION ${KDE_INSTALL_DATADIR}/${PROJECT_NAME})
install(DIRECTORY ${SUBPROJECT_GRAPHITEMS} DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME}) install(DIRECTORY ${SUBPROJECT_GRAPHITEMS} DESTINATION ${KDE_INSTALL_DATADIR}/${PROJECT_NAME})
install(DIRECTORY ${SUBPROJECT_QUOTES} DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME}) install(DIRECTORY ${SUBPROJECT_QUOTES} DESTINATION ${KDE_INSTALL_DATADIR}/${PROJECT_NAME})
install(DIRECTORY ${SUBPROJECT_SCRIPTS} DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME}) install(DIRECTORY ${SUBPROJECT_SCRIPTS} DESTINATION ${KDE_INSTALL_DATADIR}/${PROJECT_NAME})
install(DIRECTORY ${SUBPROJECT_REQUESTS} DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME}) install(DIRECTORY ${SUBPROJECT_REQUESTS} DESTINATION ${KDE_INSTALL_DATADIR}/${PROJECT_NAME})
install(DIRECTORY ${SUBPROJECT_UPGRADE} DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME}) install(DIRECTORY ${SUBPROJECT_UPGRADE} DESTINATION ${KDE_INSTALL_DATADIR}/${PROJECT_NAME})
install(DIRECTORY ${SUBPROJECT_WEATHER} DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME}) install(DIRECTORY ${SUBPROJECT_WEATHER} DESTINATION ${KDE_INSTALL_DATADIR}/${PROJECT_NAME})
install(FILES ${SUBPROJECT_INI} DESTINATION ${CONFIG_INSTALL_DIR}) 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(FILES ${CMAKE_CURRENT_BINARY_DIR}/${SUBPROJECT_WEATHER_JSON} DESTINATION ${KDE_INSTALL_DATADIR}/${PROJECT_NAME}/weather)

View File

@ -27,8 +27,8 @@
#include "qcronscheduler.h" #include "qcronscheduler.h"
AbstractExtItem::AbstractExtItem(QWidget *_parent, const QString &_filePath) AbstractExtItem::AbstractExtItem(QObject *_parent, const QString &_filePath)
: QDialog(_parent) : QObject(_parent)
, m_fileName(_filePath) , m_fileName(_filePath)
{ {
qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; qCDebug(LOG_LIB) << __PRETTY_FUNCTION__;
@ -97,15 +97,13 @@ void AbstractExtItem::startTimer()
QString AbstractExtItem::writtableConfig() const QString AbstractExtItem::writtableConfig() const
{ {
QString path = m_fileName; auto path = m_fileName;
QString name = QFileInfo(path).fileName(); auto name = QFileInfo(path).fileName();
path.remove(path.count() - name.count() - 1, name.count() + 1); 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") return QString("%1/awesomewidgets/%2/%3")
.arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)) .arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation), dir, name);
.arg(dir)
.arg(name);
} }
@ -200,7 +198,7 @@ void AbstractExtItem::setCron(const QString &_cron)
qCDebug(LOG_LIB) << "Cron string" << _cron; qCDebug(LOG_LIB) << "Cron string" << _cron;
// deinit module first // deinit module first
if (m_scheduler) { if (m_scheduler) {
disconnect(m_scheduler, SIGNAL(activated()), this, SIGNAL(requestDataUpdate())); disconnect(m_scheduler, &QCronScheduler::activated, this, &AbstractExtItem::requestDataUpdate);
delete m_scheduler; delete m_scheduler;
} }
@ -211,7 +209,7 @@ void AbstractExtItem::setCron(const QString &_cron)
// init scheduler // init scheduler
m_scheduler = new QCronScheduler(this); m_scheduler = new QCronScheduler(this);
m_scheduler->parse(cron()); m_scheduler->parse(cron());
connect(m_scheduler, SIGNAL(activated()), this, SIGNAL(requestDataUpdate())); connect(m_scheduler, &QCronScheduler::activated, this, &AbstractExtItem::requestDataUpdate);
} }
@ -236,7 +234,7 @@ void AbstractExtItem::setName(const QString &_name)
void AbstractExtItem::setNumber(int _number) void AbstractExtItem::setNumber(int _number)
{ {
qCDebug(LOG_LIB) << "Number" << _number; qCDebug(LOG_LIB) << "Number" << _number;
bool generateNumber = (_number == -1); auto generateNumber = (_number == -1);
if (generateNumber) { if (generateNumber) {
_number = []() { _number = []() {
qCWarning(LOG_LIB) << "Number is empty, generate new one"; qCWarning(LOG_LIB) << "Number is empty, generate new one";
@ -269,8 +267,8 @@ void AbstractExtItem::deinitSocket()
m_socket->close(); m_socket->close();
QLocalServer::removeServer(socket()); QLocalServer::removeServer(socket());
disconnect(m_socket, &QLocalServer::newConnection, this, &AbstractExtItem::newConnectionReceived);
delete m_socket; delete m_socket;
disconnect(m_socket, SIGNAL(newConnection()), this, SLOT(newConnectionReceived()));
} }
@ -280,9 +278,9 @@ void AbstractExtItem::initSocket()
deinitSocket(); deinitSocket();
m_socket = new QLocalServer(this); m_socket = new QLocalServer(this);
bool listening = m_socket->listen(socket()); auto listening = m_socket->listen(socket());
qCInfo(LOG_LIB) << "Server listening on" << socket() << listening; qCInfo(LOG_LIB) << "Server listening on" << socket() << listening;
connect(m_socket, SIGNAL(newConnection()), this, SLOT(newConnectionReceived())); connect(m_socket, &QLocalServer::newConnection, this, &AbstractExtItem::newConnectionReceived);
} }
@ -305,7 +303,7 @@ void AbstractExtItem::readConfiguration()
bool AbstractExtItem::tryDelete() const bool AbstractExtItem::tryDelete() const
{ {
bool status = QFile::remove(m_fileName); auto status = QFile::remove(m_fileName);
qCInfo(LOG_LIB) << "Remove file" << m_fileName << status; qCInfo(LOG_LIB) << "Remove file" << m_fileName << status;
return status; return status;

View File

@ -15,17 +15,16 @@
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/ ***************************************************************************/
#ifndef ABSTRACTEXTITEM_H #pragma once
#define ABSTRACTEXTITEM_H
#include <QDialog>
#include <QVariant> #include <QVariant>
class QCronScheduler; class QCronScheduler;
class QLocalServer; class QLocalServer;
class QWidget;
class AbstractExtItem : public QDialog class AbstractExtItem : public QObject
{ {
Q_OBJECT Q_OBJECT
Q_PROPERTY(bool active READ isActive WRITE setActive) Q_PROPERTY(bool active READ isActive WRITE setActive)
@ -40,7 +39,7 @@ class AbstractExtItem : public QDialog
Q_PROPERTY(QString uniq READ uniq) Q_PROPERTY(QString uniq READ uniq)
public: public:
explicit AbstractExtItem(QWidget *_parent = nullptr, const QString &_filePath = ""); explicit AbstractExtItem(QObject *_parent = nullptr, const QString &_filePath = "");
~AbstractExtItem() override; ~AbstractExtItem() override;
virtual void bumpApi(int _newVer); virtual void bumpApi(int _newVer);
virtual AbstractExtItem *copy(const QString &_fileName, int _number) = 0; virtual AbstractExtItem *copy(const QString &_fileName, int _number) = 0;
@ -78,7 +77,7 @@ public slots:
virtual void initSocket(); virtual void initSocket();
virtual void readConfiguration(); virtual void readConfiguration();
virtual QVariantHash run() = 0; virtual QVariantHash run() = 0;
virtual int showConfiguration(const QVariant &_args) = 0; virtual int showConfiguration(QWidget *_parent, const QVariant &_args) = 0;
[[nodiscard]] virtual bool tryDelete() const; [[nodiscard]] virtual bool tryDelete() const;
virtual void writeConfiguration() const; virtual void writeConfiguration() const;
@ -89,7 +88,8 @@ private:
QCronScheduler *m_scheduler = nullptr; QCronScheduler *m_scheduler = nullptr;
QString m_fileName = "/dev/null"; QString m_fileName = "/dev/null";
int m_times = 0; int m_times = 0;
virtual void translate() = 0; // FIXME find a better way to do it
virtual void translate(void *_ui) = 0;
// properties // properties
int m_apiVersion = 0; int m_apiVersion = 0;
bool m_active = true; bool m_active = true;
@ -101,6 +101,3 @@ private:
QLocalServer *m_socket = nullptr; QLocalServer *m_socket = nullptr;
QString m_socketFile = ""; QString m_socketFile = "";
}; };
#endif /* ABSTRACTEXTITEM_H */

View File

@ -26,65 +26,45 @@
#include <utility> #include <utility>
AbstractExtItemAggregator::AbstractExtItemAggregator(QWidget *_parent, QString _type) AbstractExtItemAggregator::AbstractExtItemAggregator(QObject *_parent, QString _type)
: QDialog(_parent) : QObject(_parent)
, ui(new Ui::AbstractExtItemAggregator)
, m_type(std::move(_type)) , m_type(std::move(_type))
{ {
qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; qCDebug(LOG_LIB) << __PRETTY_FUNCTION__;
// create directory at $HOME // create directory at $HOME
QString localDir = QString("%1/awesomewidgets/%2") auto localDir = QString("%1/awesomewidgets/%2")
.arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)) .arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation), type());
.arg(type());
QDir localDirectory; QDir localDirectory;
if (localDirectory.mkpath(localDir)) if (localDirectory.mkpath(localDir))
qCInfo(LOG_LIB) << "Created directory" << localDir; qCInfo(LOG_LIB) << "Created directory" << localDir;
ui->setupUi(this);
copyButton = ui->buttonBox->addButton(i18n("Copy"), QDialogButtonBox::ActionRole);
createButton = ui->buttonBox->addButton(i18n("Create"), QDialogButtonBox::ActionRole);
deleteButton = ui->buttonBox->addButton(i18n("Remove"), QDialogButtonBox::ActionRole);
connect(ui->buttonBox, SIGNAL(clicked(QAbstractButton *)), this, SLOT(editItemButtonPressed(QAbstractButton *)));
connect(ui->buttonBox, SIGNAL(rejected()), this, SLOT(reject()));
connect(ui->listWidget, SIGNAL(itemActivated(QListWidgetItem *)), this, SLOT(editItemActivated(QListWidgetItem *)));
} }
AbstractExtItemAggregator::~AbstractExtItemAggregator() void AbstractExtItemAggregator::copyItem(QListWidget *_widget)
{ {
qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; auto source = itemFromWidget(_widget);
auto fileName = getName();
delete ui; auto number = uniqNumber();
} auto dir = QString("%1/awesomewidgets/%2")
.arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation), m_type);
void AbstractExtItemAggregator::copyItem()
{
AbstractExtItem *source = itemFromWidget();
QString fileName = getName();
int number = uniqNumber();
QString dir = QString("%1/awesomewidgets/%2")
.arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation))
.arg(m_type);
if ((!source) || (fileName.isEmpty())) { if ((!source) || (fileName.isEmpty())) {
qCWarning(LOG_LIB) << "Nothing to copy"; qCWarning(LOG_LIB) << "Nothing to copy";
return; return;
} }
QString filePath = QString("%1/%2").arg(dir).arg(fileName); auto filePath = QString("%1/%2").arg(dir, fileName);
AbstractExtItem *newItem = source->copy(filePath, number); auto newItem = source->copy(filePath, number);
if (newItem->showConfiguration(configArgs()) == 1) { if (newItem->showConfiguration(nullptr, configArgs()) == 1) {
initItems(); initItems();
repaintList(); repaintList(_widget);
} }
} }
void AbstractExtItemAggregator::deleteItem() void AbstractExtItemAggregator::deleteItem(QListWidget *_widget)
{ {
AbstractExtItem *source = itemFromWidget(); auto source = itemFromWidget(_widget);
if (!source) { if (!source) {
qCWarning(LOG_LIB) << "Nothing to delete"; qCWarning(LOG_LIB) << "Nothing to delete";
return; return;
@ -92,30 +72,63 @@ void AbstractExtItemAggregator::deleteItem()
if (source->tryDelete()) { if (source->tryDelete()) {
initItems(); initItems();
repaintList(); repaintList(_widget);
} }
} }
void AbstractExtItemAggregator::editItem() void AbstractExtItemAggregator::editItem(QListWidget *_widget)
{ {
AbstractExtItem *source = itemFromWidget(); auto source = itemFromWidget(_widget);
if (!source) { if (!source) {
qCWarning(LOG_LIB) << "Nothing to edit"; qCWarning(LOG_LIB) << "Nothing to edit";
return; return;
} }
if (source->showConfiguration(configArgs()) == 1) { if (source->showConfiguration(nullptr, configArgs()) == 1) {
initItems(); 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() QString AbstractExtItemAggregator::getName()
{ {
bool ok; 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())) if ((!ok) || (name.isEmpty()))
return ""; return "";
if (!name.endsWith(".desktop")) 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) if (!widgetItem)
return nullptr; return nullptr;
AbstractExtItem *found = nullptr; AbstractExtItem *found = nullptr;
for (auto &item : items()) { for (auto &item : items()) {
QString fileName = QFileInfo(item->fileName()).fileName(); auto fileName = QFileInfo(item->fileName()).fileName();
if (fileName != widgetItem->text()) if (fileName != widgetItem->text())
continue; continue;
found = item; 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()) { for (auto &_item : items()) {
QString fileName = QFileInfo(_item->fileName()).fileName(); QString fileName = QFileInfo(_item->fileName()).fileName();
auto *item = new QListWidgetItem(fileName, ui->listWidget); auto item = new QListWidgetItem(fileName, _widget);
QStringList tooltip; QStringList tooltip;
tooltip.append(i18n("Name: %1", _item->name())); tooltip.append(i18n("Name: %1", _item->name()));
tooltip.append(i18n("Comment: %1", _item->comment())); tooltip.append(i18n("Comment: %1", _item->comment()));
tooltip.append(i18n("Identity: %1", _item->uniq())); tooltip.append(i18n("Identity: %1", _item->uniq()));
item->setToolTip(tooltip.join('\n')); item->setToolTip(tooltip.join('\n'));
ui->listWidget->addItem(item); _widget->addItem(item);
} }
} }
@ -202,22 +215,3 @@ void AbstractExtItemAggregator::setConfigArgs(const QVariant &_configArgs)
m_configArgs = _configArgs; m_configArgs = _configArgs;
} }
void AbstractExtItemAggregator::editItemActivated(QListWidgetItem *)
{
return editItem();
}
void AbstractExtItemAggregator::editItemButtonPressed(QAbstractButton *_button)
{
if (dynamic_cast<QPushButton *>(_button) == copyButton)
return copyItem();
else if (dynamic_cast<QPushButton *>(_button) == createButton)
return doCreateItem();
else if (dynamic_cast<QPushButton *>(_button) == deleteButton)
return deleteItem();
else if (ui->buttonBox->buttonRole(_button) == QDialogButtonBox::AcceptRole)
return editItem();
}

View File

@ -15,10 +15,8 @@
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/ ***************************************************************************/
#ifndef ABSTRACTEXTITEMAGGREGATOR_H #pragma once
#define ABSTRACTEXTITEMAGGREGATOR_H
#include <QDialog>
#include <QStandardPaths> #include <QStandardPaths>
#include "abstractextitem.h" #include "abstractextitem.h"
@ -26,49 +24,45 @@
class QAbstractButton; class QAbstractButton;
class QListWidget;
class QListWidgetItem; class QListWidgetItem;
namespace Ui
{
class AbstractExtItemAggregator;
}
class AbstractExtItemAggregator : public QDialog class AbstractExtItemAggregator : public QObject
{ {
Q_OBJECT Q_OBJECT
Q_PROPERTY(QVariant configArgs READ configArgs WRITE setConfigArgs) Q_PROPERTY(QVariant configArgs READ configArgs WRITE setConfigArgs)
Q_PROPERTY(QVariant type READ type) Q_PROPERTY(QVariant type READ type)
public: public:
explicit AbstractExtItemAggregator(QWidget *_parent, QString _type); explicit AbstractExtItemAggregator(QObject *_parent, QString _type);
~AbstractExtItemAggregator() override;
// methods // methods
void copyItem(); void copyItem(QListWidget *_widget);
template <class T> void createItem() template <class T> void createItem(QListWidget *_widget)
{ {
QString fileName = getName(); auto fileName = getName();
int number = uniqNumber(); auto number = uniqNumber();
QString dir = QString("%1/awesomewidgets/%2") auto dir = QString("%1/awesomewidgets/%2")
.arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)) .arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation), m_type);
.arg(m_type);
if (fileName.isEmpty()) { if (fileName.isEmpty()) {
qCWarning(LOG_LIB) << "Nothing to create"; qCWarning(LOG_LIB) << "Nothing to create";
return; 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); newItem->setNumber(number);
if (newItem->showConfiguration(configArgs()) == 1) { if (newItem->showConfiguration(nullptr, configArgs()) == 1) {
initItems(); initItems();
repaintList(); repaintList(_widget);
} }
}; };
void deleteItem(); void deleteItem(QListWidget *_widget);
void editItem(); void editItem(QListWidget *_widget);
[[nodiscard]] int exec();
QString getName(); QString getName();
virtual void initItems() = 0; virtual void initItems() = 0;
[[nodiscard]] AbstractExtItem *itemFromWidget() const; [[nodiscard]] AbstractExtItem *itemFromWidget(QListWidget *_widget) const;
void repaintList() const; void repaintList(QListWidget *_widget) const;
[[nodiscard]] int uniqNumber() const; [[nodiscard]] int uniqNumber() const;
// get methods // get methods
[[nodiscard]] QVariant configArgs() const; [[nodiscard]] QVariant configArgs() const;
@ -78,22 +72,10 @@ public:
// set methods // set methods
void setConfigArgs(const QVariant &_configArgs); void setConfigArgs(const QVariant &_configArgs);
private slots:
void editItemActivated(QListWidgetItem *);
void editItemButtonPressed(QAbstractButton *_button);
private: private:
// ui
Ui::AbstractExtItemAggregator *ui = nullptr;
QPushButton *copyButton = nullptr;
QPushButton *createButton = nullptr;
QPushButton *deleteButton = nullptr;
// properties // properties
QVariant m_configArgs; QVariant m_configArgs;
QString m_type; QString m_type;
// ui methods // ui methods
virtual void doCreateItem() = 0; virtual void doCreateItem(QListWidget *_widget) = 0;
}; };
#endif /* ABSTRACTEXTITEMAGGREGATOR_H */

View File

@ -15,8 +15,7 @@
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/ ***************************************************************************/
#ifndef ABSTRACTQUOTESPROVIDER_H #pragma once
#define ABSTRACTQUOTESPROVIDER_H
#include <QObject> #include <QObject>
#include <QUrl> #include <QUrl>
@ -40,6 +39,3 @@ public:
}; };
[[nodiscard]] virtual QUrl url() const = 0; [[nodiscard]] virtual QUrl url() const = 0;
}; };
#endif /* ABSTRACTQUOTESPROVIDER_H */

View File

@ -15,8 +15,7 @@
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/ ***************************************************************************/
#ifndef ABSTRACTWEATHERPROVIDER_H #pragma once
#define ABSTRACTWEATHERPROVIDER_H
#include <QObject> #include <QObject>
#include <QUrl> #include <QUrl>
@ -40,6 +39,3 @@ public:
}; };
[[nodiscard]] virtual QUrl url() const = 0; [[nodiscard]] virtual QUrl url() const = 0;
}; };
#endif /* ABSTRACTWEATHERPROVIDER_H */

View File

@ -22,19 +22,13 @@
#include "awdebug.h" #include "awdebug.h"
AWAbstractFormatter::AWAbstractFormatter(QWidget *_parent, const QString &_filePath) AWAbstractFormatter::AWAbstractFormatter(QObject *_parent, const QString &_filePath)
: AbstractExtItem(_parent, _filePath) : AbstractExtItem(_parent, _filePath)
{ {
qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; qCDebug(LOG_LIB) << __PRETTY_FUNCTION__;
} }
AWAbstractFormatter::~AWAbstractFormatter()
{
qCDebug(LOG_LIB) << __PRETTY_FUNCTION__;
}
void AWAbstractFormatter::copyDefaults(AbstractExtItem *_other) const void AWAbstractFormatter::copyDefaults(AbstractExtItem *_other) const
{ {
AbstractExtItem::copyDefaults(_other); AbstractExtItem::copyDefaults(_other);
@ -45,7 +39,7 @@ void AWAbstractFormatter::copyDefaults(AbstractExtItem *_other) const
QString AWAbstractFormatter::uniq() const QString AWAbstractFormatter::uniq() const
{ {
return QString("%1(%2)").arg(name()).arg(strType()); return QString("%1(%2)").arg(name(), strType());
} }

View File

@ -15,8 +15,9 @@
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/ ***************************************************************************/
#ifndef AWABSTRACTFORMATTER_H #pragma once
#define AWABSTRACTFORMATTER_H
#include <QRegularExpression>
#include "abstractextitem.h" #include "abstractextitem.h"
@ -30,8 +31,8 @@ class AWAbstractFormatter : public AbstractExtItem
public: public:
enum class FormatterClass { DateTime, Float, List, Script, String, NoFormat, Json }; enum class FormatterClass { DateTime, Float, List, Script, String, NoFormat, Json };
explicit AWAbstractFormatter(QWidget *_parent = nullptr, const QString &_filePath = ""); explicit AWAbstractFormatter(QObject *_parent = nullptr, const QString &_filePath = "");
~AWAbstractFormatter() override; ~AWAbstractFormatter() override = default;
[[nodiscard]] virtual QString convert(const QVariant &_value) const = 0; [[nodiscard]] virtual QString convert(const QVariant &_value) const = 0;
void copyDefaults(AbstractExtItem *_other) const override; void copyDefaults(AbstractExtItem *_other) const override;
[[nodiscard]] QString uniq() const override; [[nodiscard]] QString uniq() const override;
@ -50,6 +51,3 @@ private:
// properties // properties
FormatterClass m_type = FormatterClass::NoFormat; FormatterClass m_type = FormatterClass::NoFormat;
}; };
#endif /* AWABSTRACTFORMATTER_H */

View File

@ -15,7 +15,6 @@
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/ ***************************************************************************/
#include "awdatetimeformatter.h" #include "awdatetimeformatter.h"
#include "ui_awdatetimeformatter.h" #include "ui_awdatetimeformatter.h"
@ -27,24 +26,13 @@
#include "awdebug.h" #include "awdebug.h"
AWDateTimeFormatter::AWDateTimeFormatter(QWidget *_parent, const QString &_filePath) AWDateTimeFormatter::AWDateTimeFormatter(QObject *_parent, const QString &_filePath)
: AWAbstractFormatter(_parent, _filePath) : AWAbstractFormatter(_parent, _filePath)
, ui(new Ui::AWDateTimeFormatter)
{ {
qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; qCDebug(LOG_LIB) << __PRETTY_FUNCTION__;
if (!_filePath.isEmpty()) if (!_filePath.isEmpty())
AWDateTimeFormatter::readConfiguration(); AWDateTimeFormatter::readConfiguration();
ui->setupUi(this);
AWDateTimeFormatter::translate();
}
AWDateTimeFormatter::~AWDateTimeFormatter()
{
qCDebug(LOG_LIB) << __PRETTY_FUNCTION__;
delete ui;
} }
@ -60,7 +48,7 @@ AWDateTimeFormatter *AWDateTimeFormatter::copy(const QString &_fileName, const i
{ {
qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number; qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number;
auto *item = new AWDateTimeFormatter(dynamic_cast<QWidget *>(parent()), _fileName); auto item = new AWDateTimeFormatter(parent(), _fileName);
AWAbstractFormatter::copyDefaults(item); AWAbstractFormatter::copyDefaults(item);
item->setFormat(format()); item->setFormat(format());
item->setTranslateString(translateString()); item->setTranslateString(translateString());
@ -114,19 +102,23 @@ void AWDateTimeFormatter::readConfiguration()
} }
int AWDateTimeFormatter::showConfiguration(const QVariant &_args) int AWDateTimeFormatter::showConfiguration(QWidget *_parent, const QVariant &_args)
{ {
Q_UNUSED(_args) Q_UNUSED(_args)
auto dialog = new QDialog(_parent);
auto ui = new Ui::AWDateTimeFormatter();
ui->setupUi(dialog);
translate(ui);
ui->lineEdit_name->setText(name()); ui->lineEdit_name->setText(name());
ui->lineEdit_comment->setText(comment()); ui->lineEdit_comment->setText(comment());
ui->label_typeValue->setText("DateTime"); ui->label_typeValue->setText("DateTime");
ui->lineEdit_format->setText(format()); ui->lineEdit_format->setText(format());
ui->checkBox_translate->setCheckState(translateString() ? Qt::Checked : Qt::Unchecked); ui->checkBox_translate->setCheckState(translateString() ? Qt::Checked : Qt::Unchecked);
int ret = exec(); auto ret = dialog->exec();
if (ret != 1) if (ret == 1) {
return ret;
setName(ui->lineEdit_name->text()); setName(ui->lineEdit_name->text());
setComment(ui->lineEdit_comment->text()); setComment(ui->lineEdit_comment->text());
setApiVersion(AW_FORMATTER_API); setApiVersion(AW_FORMATTER_API);
@ -135,6 +127,11 @@ int AWDateTimeFormatter::showConfiguration(const QVariant &_args)
setTranslateString(ui->checkBox_translate->checkState() == Qt::Checked); setTranslateString(ui->checkBox_translate->checkState() == Qt::Checked);
writeConfiguration(); writeConfiguration();
}
dialog->deleteLater();
delete ui;
return ret; return ret;
} }
@ -160,9 +157,10 @@ void AWDateTimeFormatter::initLocale()
m_locale = m_translate ? QLocale::system() : QLocale::c(); m_locale = m_translate ? QLocale::system() : QLocale::c();
} }
void AWDateTimeFormatter::translate(void *_ui)
void AWDateTimeFormatter::translate()
{ {
auto ui = reinterpret_cast<Ui::AWDateTimeFormatter *>(_ui);
ui->label_name->setText(i18n("Name")); ui->label_name->setText(i18n("Name"));
ui->label_comment->setText(i18n("Comment")); ui->label_comment->setText(i18n("Comment"));
ui->label_type->setText(i18n("Type")); ui->label_type->setText(i18n("Type"));

View File

@ -15,19 +15,13 @@
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/ ***************************************************************************/
#ifndef AWDATETIMEFORMATTER_H #pragma once
#define AWDATETIMEFORMATTER_H
#include <QLocale> #include <QLocale>
#include "awabstractformatter.h" #include "awabstractformatter.h"
namespace Ui
{
class AWDateTimeFormatter;
}
class AWDateTimeFormatter : public AWAbstractFormatter class AWDateTimeFormatter : public AWAbstractFormatter
{ {
Q_OBJECT Q_OBJECT
@ -35,8 +29,7 @@ class AWDateTimeFormatter : public AWAbstractFormatter
Q_PROPERTY(bool translateString READ translateString WRITE setTranslateString) Q_PROPERTY(bool translateString READ translateString WRITE setTranslateString)
public: public:
explicit AWDateTimeFormatter(QWidget *_parent = nullptr, const QString &_filePath = ""); explicit AWDateTimeFormatter(QObject *_parent = nullptr, const QString &_filePath = "");
~AWDateTimeFormatter() override;
[[nodiscard]] QString convert(const QVariant &_value) const override; [[nodiscard]] QString convert(const QVariant &_value) const override;
AWDateTimeFormatter *copy(const QString &_fileName, int _number) override; AWDateTimeFormatter *copy(const QString &_fileName, int _number) override;
// properties // properties
@ -47,18 +40,14 @@ public:
public slots: public slots:
void readConfiguration() override; void readConfiguration() override;
int showConfiguration(const QVariant &_args) override; int showConfiguration(QWidget *_parent, const QVariant &_args) override;
void writeConfiguration() const override; void writeConfiguration() const override;
private: private:
Ui::AWDateTimeFormatter *ui = nullptr;
void initLocale(); void initLocale();
void translate() override; void translate(void *_ui) override;
// properties // properties
QLocale m_locale; QLocale m_locale;
QString m_format = ""; QString m_format = "";
bool m_translate = true; bool m_translate = true;
}; };
#endif /* AWDATETIMEFORMATTER_H */

View File

@ -5,120 +5,120 @@
"image": { "image": {
"__comment": "should be described as html image with full path inside", "__comment": "should be described as html image with full path inside",
"default": "<img src=\"@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\">", "802": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/03d.png\">",
"803": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/03d.png\">", "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\">", "300": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/09d.png\">",
"301": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/09d.png\">", "301": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/09d.png\">",
"302": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/09d.png\">", "302": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/09d.png\">",
"310": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/09d.png\">", "310": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/09d.png\">",
"311": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/09d.png\">", "311": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/09d.png\">",
"312": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/09d.png\">", "312": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/09d.png\">",
"313": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/09d.png\">", "313": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/09d.png\">",
"314": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/09d.png\">", "314": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/09d.png\">",
"321": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/09d.png\">", "321": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/09d.png\">",
"520": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/09d.png\">", "520": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/09d.png\">",
"521": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/09d.png\">", "521": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/09d.png\">",
"522": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/09d.png\">", "522": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/09d.png\">",
"531": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/09d.png\">", "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\">", "500": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/10d.png\">",
"501": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/10d.png\">", "501": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/10d.png\">",
"502": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/10d.png\">", "502": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/10d.png\">",
"503": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/10d.png\">", "503": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/10d.png\">",
"504": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/10d.png\">", "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\">", "200": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/11d.png\">",
"201": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/11d.png\">", "201": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/11d.png\">",
"202": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/11d.png\">", "202": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/11d.png\">",
"210": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/11d.png\">", "210": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/11d.png\">",
"211": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/11d.png\">", "211": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/11d.png\">",
"212": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/11d.png\">", "212": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/11d.png\">",
"221": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/11d.png\">", "221": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/11d.png\">",
"230": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/11d.png\">", "230": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/11d.png\">",
"231": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/11d.png\">", "231": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/11d.png\">",
"232": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/11d.png\">", "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\">", "511": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/13d.png\">",
"600": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/13d.png\">", "600": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/13d.png\">",
"601": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/13d.png\">", "601": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/13d.png\">",
"602": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/13d.png\">", "602": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/13d.png\">",
"611": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/13d.png\">", "611": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/13d.png\">",
"612": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/13d.png\">", "612": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/13d.png\">",
"615": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/13d.png\">", "615": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/13d.png\">",
"616": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/13d.png\">", "616": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/13d.png\">",
"620": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/13d.png\">", "620": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/13d.png\">",
"621": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/13d.png\">", "621": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/13d.png\">",
"622": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/13d.png\">", "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\">", "701": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/50d.png\">",
"711": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/50d.png\">", "711": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/50d.png\">",
"721": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/50d.png\">", "721": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/50d.png\">",
"731": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/50d.png\">", "731": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/50d.png\">",
"741": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/50d.png\">", "741": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/50d.png\">",
"751": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/50d.png\">", "751": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/50d.png\">",
"761": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/50d.png\">", "761": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/50d.png\">",
"762": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/50d.png\">", "762": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/50d.png\">",
"771": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/50d.png\">", "771": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/50d.png\">",
"781": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/50d.png\">", "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\">", "0": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/0.gif\">",
"1": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/1.gif\">", "1": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/1.gif\">",
"2": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/2.gif\">", "2": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/2.gif\">",
"3": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/3.gif\">", "3": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/3.gif\">",
"4": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/4.gif\">", "4": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/4.gif\">",
"5": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/5.gif\">", "5": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/5.gif\">",
"6": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/6.gif\">", "6": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/6.gif\">",
"7": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/7.gif\">", "7": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/7.gif\">",
"8": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/8.gif\">", "8": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/8.gif\">",
"9": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/9.gif\">", "9": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/9.gif\">",
"10": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/10.gif\">", "10": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/10.gif\">",
"11": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/11.gif\">", "11": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/11.gif\">",
"12": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/12.gif\">", "12": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/12.gif\">",
"13": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/13.gif\">", "13": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/13.gif\">",
"14": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/14.gif\">", "14": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/14.gif\">",
"15": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/15.gif\">", "15": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/15.gif\">",
"16": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/16.gif\">", "16": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/16.gif\">",
"17": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/17.gif\">", "17": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/17.gif\">",
"18": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/18.gif\">", "18": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/18.gif\">",
"19": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/19.gif\">", "19": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/19.gif\">",
"20": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/20.gif\">", "20": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/20.gif\">",
"21": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/21.gif\">", "21": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/21.gif\">",
"22": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/22.gif\">", "22": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/22.gif\">",
"23": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/23.gif\">", "23": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/23.gif\">",
"24": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/24.gif\">", "24": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/24.gif\">",
"25": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/25.gif\">", "25": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/25.gif\">",
"26": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/26.gif\">", "26": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/26.gif\">",
"27": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/27.gif\">", "27": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/27.gif\">",
"28": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/28.gif\">", "28": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/28.gif\">",
"29": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/29.gif\">", "29": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/29.gif\">",
"30": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/30.gif\">", "30": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/30.gif\">",
"31": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/31.gif\">", "31": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/31.gif\">",
"32": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/32.gif\">", "32": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/32.gif\">",
"33": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/33.gif\">", "33": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/33.gif\">",
"34": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/34.gif\">", "34": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/34.gif\">",
"35": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/35.gif\">", "35": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/35.gif\">",
"36": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/36.gif\">", "36": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/36.gif\">",
"37": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/37.gif\">", "37": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/37.gif\">",
"38": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/38.gif\">", "38": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/38.gif\">",
"39": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/39.gif\">", "39": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/39.gif\">",
"40": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/40.gif\">", "40": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/40.gif\">",
"41": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/41.gif\">", "41": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/41.gif\">",
"42": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/42.gif\">", "42": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/42.gif\">",
"43": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/43.gif\">", "43": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/43.gif\">",
"44": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/44.gif\">", "44": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/44.gif\">",
"45": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/45.gif\">", "45": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/45.gif\">",
"46": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/46.gif\">", "46": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/46.gif\">",
"47": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/47.gif\">", "47": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/47.gif\">",
"3200": "<img src=\"@CMAKE_INSTALL_PREFIX@/@DATA_INSTALL_DIR@/@PROJECT_NAME@/weather/3200.gif\">" "3200": "<img src=\"@KDE_INSTALL_FULL_DATADIR@/@PROJECT_NAME@/weather/3200.gif\">"
}, },
"text": { "text": {

View File

@ -15,7 +15,6 @@
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/ ***************************************************************************/
#include "awfloatformatter.h" #include "awfloatformatter.h"
#include "ui_awfloatformatter.h" #include "ui_awfloatformatter.h"
@ -26,24 +25,13 @@
#include "awdebug.h" #include "awdebug.h"
AWFloatFormatter::AWFloatFormatter(QWidget *_parent, const QString &_filePath) AWFloatFormatter::AWFloatFormatter(QObject *_parent, const QString &_filePath)
: AWAbstractFormatter(_parent, _filePath) : AWAbstractFormatter(_parent, _filePath)
, ui(new Ui::AWFloatFormatter)
{ {
qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; qCDebug(LOG_LIB) << __PRETTY_FUNCTION__;
if (!_filePath.isEmpty()) if (!_filePath.isEmpty())
AWFloatFormatter::readConfiguration(); AWFloatFormatter::readConfiguration();
ui->setupUi(this);
AWFloatFormatter::translate();
}
AWFloatFormatter::~AWFloatFormatter()
{
qCDebug(LOG_LIB) << __PRETTY_FUNCTION__;
delete ui;
} }
@ -51,7 +39,7 @@ QString AWFloatFormatter::convert(const QVariant &_value) const
{ {
qCDebug(LOG_LIB) << "Convert value" << _value; qCDebug(LOG_LIB) << "Convert value" << _value;
QString output auto output
= QString("%1").arg(_value.toDouble() * multiplier() + summand(), count(), format(), precision(), fillChar()); = QString("%1").arg(_value.toDouble() * multiplier() + summand(), count(), format(), precision(), fillChar());
if (forceWidth()) if (forceWidth())
output = output.left(count()); output = output.left(count());
@ -64,7 +52,7 @@ AWFloatFormatter *AWFloatFormatter::copy(const QString &_fileName, const int _nu
{ {
qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number; qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number;
auto *item = new AWFloatFormatter(dynamic_cast<QWidget *>(parent()), _fileName); auto item = new AWFloatFormatter(parent(), _fileName);
AWAbstractFormatter::copyDefaults(item); AWAbstractFormatter::copyDefaults(item);
item->setCount(count()); item->setCount(count());
item->setFormat(format()); 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) Q_UNUSED(_args)
auto dialog = new QDialog(_parent);
auto ui = new Ui::AWFloatFormatter();
ui->setupUi(dialog);
translate(ui);
ui->lineEdit_name->setText(name()); ui->lineEdit_name->setText(name());
ui->lineEdit_comment->setText(comment()); ui->lineEdit_comment->setText(comment());
ui->label_typeValue->setText("Float"); ui->label_typeValue->setText("Float");
@ -217,9 +210,8 @@ int AWFloatFormatter::showConfiguration(const QVariant &_args)
ui->doubleSpinBox_multiplier->setValue(multiplier()); ui->doubleSpinBox_multiplier->setValue(multiplier());
ui->doubleSpinBox_summand->setValue(summand()); ui->doubleSpinBox_summand->setValue(summand());
int ret = exec(); auto ret = dialog->exec();
if (ret != 1) if (ret == 1) {
return ret;
setName(ui->lineEdit_name->text()); setName(ui->lineEdit_name->text());
setComment(ui->lineEdit_comment->text()); setComment(ui->lineEdit_comment->text());
setApiVersion(AW_FORMATTER_API); setApiVersion(AW_FORMATTER_API);
@ -233,6 +225,11 @@ int AWFloatFormatter::showConfiguration(const QVariant &_args)
setSummand(ui->doubleSpinBox_summand->value()); setSummand(ui->doubleSpinBox_summand->value());
writeConfiguration(); writeConfiguration();
}
dialog->deleteLater();
delete ui;
return ret; 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_name->setText(i18n("Name"));
ui->label_comment->setText(i18n("Comment")); ui->label_comment->setText(i18n("Comment"));
ui->label_type->setText(i18n("Type")); ui->label_type->setText(i18n("Type"));

View File

@ -15,17 +15,11 @@
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/ ***************************************************************************/
#ifndef AWFLOATFORMATTER_H #pragma once
#define AWFLOATFORMATTER_H
#include "awabstractformatter.h" #include "awabstractformatter.h"
namespace Ui
{
class AWFloatFormatter;
}
class AWFloatFormatter : public AWAbstractFormatter class AWFloatFormatter : public AWAbstractFormatter
{ {
Q_OBJECT Q_OBJECT
@ -38,8 +32,7 @@ class AWFloatFormatter : public AWAbstractFormatter
Q_PROPERTY(double summand READ summand WRITE setSummand) Q_PROPERTY(double summand READ summand WRITE setSummand)
public: public:
explicit AWFloatFormatter(QWidget *_parent = nullptr, const QString &_filePath = ""); explicit AWFloatFormatter(QObject *_parent = nullptr, const QString &_filePath = "");
~AWFloatFormatter() override;
[[nodiscard]] QString convert(const QVariant &_value) const override; [[nodiscard]] QString convert(const QVariant &_value) const override;
AWFloatFormatter *copy(const QString &_fileName, int _number) override; AWFloatFormatter *copy(const QString &_fileName, int _number) override;
// properties // properties
@ -60,12 +53,11 @@ public:
public slots: public slots:
void readConfiguration() override; void readConfiguration() override;
int showConfiguration(const QVariant &_args) override; int showConfiguration(QWidget *_parent, const QVariant &_args) override;
void writeConfiguration() const override; void writeConfiguration() const override;
private: private:
Ui::AWFloatFormatter *ui = nullptr; void translate(void *_ui) override;
void translate() override;
// properties // properties
int m_count = 0; int m_count = 0;
QChar m_fillChar = QChar(); QChar m_fillChar = QChar();
@ -75,6 +67,3 @@ private:
int m_precision = -1; int m_precision = -1;
double m_summand = 0.0; double m_summand = 0.0;
}; };
#endif /* AWFLOATFORMATTER_H */

View File

@ -15,7 +15,6 @@
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/ ***************************************************************************/
#include "awjsonformatter.h" #include "awjsonformatter.h"
#include "ui_awjsonformatter.h" #include "ui_awjsonformatter.h"
@ -27,24 +26,13 @@
#include "awdebug.h" #include "awdebug.h"
AWJsonFormatter::AWJsonFormatter(QWidget *_parent, const QString &_filePath) AWJsonFormatter::AWJsonFormatter(QObject *_parent, const QString &_filePath)
: AWAbstractFormatter(_parent, _filePath) : AWAbstractFormatter(_parent, _filePath)
, ui(new Ui::AWJsonFormatter)
{ {
qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; qCDebug(LOG_LIB) << __PRETTY_FUNCTION__;
if (!_filePath.isEmpty()) if (!_filePath.isEmpty())
AWJsonFormatter::readConfiguration(); AWJsonFormatter::readConfiguration();
ui->setupUi(this);
AWJsonFormatter::translate();
}
AWJsonFormatter::~AWJsonFormatter()
{
qCDebug(LOG_LIB) << __PRETTY_FUNCTION__;
delete ui;
} }
@ -53,7 +41,7 @@ QString AWJsonFormatter::convert(const QVariant &_value) const
qCDebug(LOG_LIB) << "Convert value" << _value; qCDebug(LOG_LIB) << "Convert value" << _value;
// check if _value is string and parse first if required // check if _value is string and parse first if required
QJsonDocument json = _value.type() == QVariant::String ? QJsonDocument::fromJson(_value.toString().toUtf8()) QJsonDocument json = _value.userType() == QMetaType::QString ? QJsonDocument::fromJson(_value.toString().toUtf8())
: QJsonDocument::fromVariant(_value); : QJsonDocument::fromVariant(_value);
QVariant converted = json.toVariant(); QVariant converted = json.toVariant();
for (auto &element : m_splittedPath) for (auto &element : m_splittedPath)
@ -67,7 +55,7 @@ AWJsonFormatter *AWJsonFormatter::copy(const QString &_fileName, const int _numb
{ {
qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number; 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); AWAbstractFormatter::copyDefaults(item);
item->setNumber(_number); item->setNumber(_number);
item->setPath(path()); item->setPath(path());
@ -105,18 +93,22 @@ void AWJsonFormatter::readConfiguration()
} }
int AWJsonFormatter::showConfiguration(const QVariant &args) int AWJsonFormatter::showConfiguration(QWidget *_parent, const QVariant &args)
{ {
Q_UNUSED(args) Q_UNUSED(args)
auto dialog = new QDialog(_parent);
auto ui = new Ui::AWJsonFormatter();
ui->setupUi(dialog);
translate(ui);
ui->lineEdit_name->setText(name()); ui->lineEdit_name->setText(name());
ui->lineEdit_comment->setText(comment()); ui->lineEdit_comment->setText(comment());
ui->label_typeValue->setText("Json"); ui->label_typeValue->setText("Json");
ui->lineEdit_path->setText(path()); ui->lineEdit_path->setText(path());
int ret = exec(); auto ret = dialog->exec();
if (ret != 1) if (ret == 1) {
return ret;
setName(ui->lineEdit_name->text()); setName(ui->lineEdit_name->text());
setComment(ui->lineEdit_comment->text()); setComment(ui->lineEdit_comment->text());
setApiVersion(AW_FORMATTER_API); setApiVersion(AW_FORMATTER_API);
@ -124,6 +116,11 @@ int AWJsonFormatter::showConfiguration(const QVariant &args)
setPath(ui->lineEdit_path->text()); setPath(ui->lineEdit_path->text());
writeConfiguration(); writeConfiguration();
}
dialog->deleteLater();
delete ui;
return ret; return ret;
} }
@ -147,9 +144,9 @@ QVariant AWJsonFormatter::getFromJson(const QVariant &_value, const QVariant &_e
{ {
qCDebug(LOG_LIB) << "Looking for element" << _element << "in" << _value; qCDebug(LOG_LIB) << "Looking for element" << _element << "in" << _value;
if (_element.type() == QVariant::String) { if (_element.userType() == QMetaType::QString) {
return getFromMap(_value, _element.toString()); return getFromMap(_value, _element.toString());
} else if (_element.type() == QVariant::Int) { } else if (_element.userType() == QMetaType::Int) {
return getFromList(_value, _element.toInt()); return getFromList(_value, _element.toInt());
} else { } else {
qCWarning(LOG_LIB) << "Unknown type" << _element.typeName(); qCWarning(LOG_LIB) << "Unknown type" << _element.typeName();
@ -187,8 +184,10 @@ void AWJsonFormatter::initPath()
} }
void AWJsonFormatter::translate() void AWJsonFormatter::translate(void *_ui)
{ {
auto ui = reinterpret_cast<Ui::AWJsonFormatter *>(_ui);
ui->label_name->setText(i18n("Name")); ui->label_name->setText(i18n("Name"));
ui->label_comment->setText(i18n("Comment")); ui->label_comment->setText(i18n("Comment"));
ui->label_type->setText(i18n("Type")); ui->label_type->setText(i18n("Type"));

View File

@ -15,25 +15,18 @@
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/ ***************************************************************************/
#ifndef AWJSONFORMATTER_H #pragma once
#define AWJSONFORMATTER_H
#include "awabstractformatter.h" #include "awabstractformatter.h"
namespace Ui
{
class AWJsonFormatter;
}
class AWJsonFormatter : public AWAbstractFormatter class AWJsonFormatter : public AWAbstractFormatter
{ {
Q_OBJECT Q_OBJECT
Q_PROPERTY(QString path READ path WRITE setPath) Q_PROPERTY(QString path READ path WRITE setPath)
public: public:
explicit AWJsonFormatter(QWidget *_parent = nullptr, const QString &_filePath = ""); explicit AWJsonFormatter(QObject *_parent = nullptr, const QString &_filePath = "");
~AWJsonFormatter() override;
[[nodiscard]] QString convert(const QVariant &_value) const override; [[nodiscard]] QString convert(const QVariant &_value) const override;
AWJsonFormatter *copy(const QString &_fileName, int _number) override; AWJsonFormatter *copy(const QString &_fileName, int _number) override;
// properties // properties
@ -42,20 +35,16 @@ public:
public slots: public slots:
void readConfiguration() override; void readConfiguration() override;
int showConfiguration(const QVariant &_args) override; int showConfiguration(QWidget *_parent, const QVariant &_args) override;
void writeConfiguration() const override; void writeConfiguration() const override;
private: private:
Ui::AWJsonFormatter *ui = nullptr;
static QVariant getFromJson(const QVariant &_value, const QVariant &_element); static QVariant getFromJson(const QVariant &_value, const QVariant &_element);
static QVariant getFromList(const QVariant &_value, int _index); static QVariant getFromList(const QVariant &_value, int _index);
static QVariant getFromMap(const QVariant &_value, const QString &_key); static QVariant getFromMap(const QVariant &_value, const QString &_key);
void initPath(); void initPath();
void translate() override; void translate(void *_ui) override;
// properties // properties
QString m_path; QString m_path;
QVariantList m_splittedPath; QVariantList m_splittedPath;
}; };
#endif /* AWJSONFORMATTER_H */

View File

@ -15,7 +15,6 @@
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/ ***************************************************************************/
#include "awlistformatter.h" #include "awlistformatter.h"
#include "ui_awlistformatter.h" #include "ui_awlistformatter.h"
@ -26,24 +25,13 @@
#include "awdebug.h" #include "awdebug.h"
AWListFormatter::AWListFormatter(QWidget *_parent, const QString &_filePath) AWListFormatter::AWListFormatter(QObject *_parent, const QString &_filePath)
: AWAbstractFormatter(_parent, _filePath) : AWAbstractFormatter(_parent, _filePath)
, ui(new Ui::AWListFormatter)
{ {
qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; qCDebug(LOG_LIB) << __PRETTY_FUNCTION__;
if (!_filePath.isEmpty()) if (!_filePath.isEmpty())
AWListFormatter::readConfiguration(); AWListFormatter::readConfiguration();
ui->setupUi(this);
AWListFormatter::translate();
}
AWListFormatter::~AWListFormatter()
{
qCDebug(LOG_LIB) << __PRETTY_FUNCTION__;
delete ui;
} }
@ -51,7 +39,7 @@ QString AWListFormatter::convert(const QVariant &_value) const
{ {
qCDebug(LOG_LIB) << "Convert value" << _value; qCDebug(LOG_LIB) << "Convert value" << _value;
QStringList output = _value.toStringList(); auto output = _value.toStringList();
if (isSorted()) if (isSorted())
output.sort(); output.sort();
@ -63,7 +51,7 @@ AWListFormatter *AWListFormatter::copy(const QString &_fileName, const int _numb
{ {
qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number; qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number;
auto *item = new AWListFormatter(dynamic_cast<QWidget *>(parent()), _fileName); auto item = new AWListFormatter(parent(), _fileName);
AWAbstractFormatter::copyDefaults(item); AWAbstractFormatter::copyDefaults(item);
item->setFilter(filter()); item->setFilter(filter());
item->setSeparator(separator()); item->setSeparator(separator());
@ -97,7 +85,7 @@ void AWListFormatter::setFilter(const QString &_filter)
qCDebug(LOG_LIB) << "Filter" << _filter; qCDebug(LOG_LIB) << "Filter" << _filter;
m_filter = _filter; m_filter = _filter;
m_regex = QRegExp(m_filter); m_regex = QRegularExpression(m_filter);
} }
@ -133,10 +121,15 @@ void AWListFormatter::readConfiguration()
} }
int AWListFormatter::showConfiguration(const QVariant &_args) int AWListFormatter::showConfiguration(QWidget *_parent, const QVariant &_args)
{ {
Q_UNUSED(_args) Q_UNUSED(_args)
auto dialog = new QDialog(_parent);
auto ui = new Ui::AWListFormatter();
ui->setupUi(dialog);
translate(ui);
ui->lineEdit_name->setText(name()); ui->lineEdit_name->setText(name());
ui->lineEdit_comment->setText(comment()); ui->lineEdit_comment->setText(comment());
ui->label_typeValue->setText("List"); ui->label_typeValue->setText("List");
@ -144,9 +137,8 @@ int AWListFormatter::showConfiguration(const QVariant &_args)
ui->lineEdit_separator->setText(separator()); ui->lineEdit_separator->setText(separator());
ui->checkBox_sorted->setCheckState(isSorted() ? Qt::Checked : Qt::Unchecked); ui->checkBox_sorted->setCheckState(isSorted() ? Qt::Checked : Qt::Unchecked);
int ret = exec(); auto ret = dialog->exec();
if (ret != 1) if (ret == 1) {
return ret;
setName(ui->lineEdit_name->text()); setName(ui->lineEdit_name->text());
setComment(ui->lineEdit_comment->text()); setComment(ui->lineEdit_comment->text());
setApiVersion(AW_FORMATTER_API); setApiVersion(AW_FORMATTER_API);
@ -156,6 +148,11 @@ int AWListFormatter::showConfiguration(const QVariant &_args)
setSorted(ui->checkBox_sorted->checkState() == Qt::Checked); setSorted(ui->checkBox_sorted->checkState() == Qt::Checked);
writeConfiguration(); writeConfiguration();
}
dialog->deleteLater();
delete ui;
return ret; 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_name->setText(i18n("Name"));
ui->label_comment->setText(i18n("Comment")); ui->label_comment->setText(i18n("Comment"));
ui->label_type->setText(i18n("Type")); ui->label_type->setText(i18n("Type"));

View File

@ -15,17 +15,11 @@
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/ ***************************************************************************/
#ifndef AWLISTFORMATTER_H #pragma once
#define AWLISTFORMATTER_H
#include "awabstractformatter.h" #include "awabstractformatter.h"
namespace Ui
{
class AWListFormatter;
}
class AWListFormatter : public AWAbstractFormatter class AWListFormatter : public AWAbstractFormatter
{ {
Q_OBJECT Q_OBJECT
@ -34,8 +28,7 @@ class AWListFormatter : public AWAbstractFormatter
Q_PROPERTY(bool sorted READ isSorted WRITE setSorted) Q_PROPERTY(bool sorted READ isSorted WRITE setSorted)
public: public:
explicit AWListFormatter(QWidget *_parent = nullptr, const QString &_filePath = ""); explicit AWListFormatter(QObject *_parent = nullptr, const QString &_filePath = "");
~AWListFormatter() override;
[[nodiscard]] QString convert(const QVariant &_value) const override; [[nodiscard]] QString convert(const QVariant &_value) const override;
AWListFormatter *copy(const QString &_fileName, int _number) override; AWListFormatter *copy(const QString &_fileName, int _number) override;
// properties // properties
@ -48,18 +41,14 @@ public:
public slots: public slots:
void readConfiguration() override; void readConfiguration() override;
int showConfiguration(const QVariant &_args) override; int showConfiguration(QWidget *_parent, const QVariant &_args) override;
void writeConfiguration() const override; void writeConfiguration() const override;
private: private:
Ui::AWListFormatter *ui = nullptr; void translate(void *_ui) override;
void translate() override;
// properties // properties
QString m_filter = ""; QString m_filter = "";
QString m_separator = ""; QString m_separator = "";
bool m_sorted = false; bool m_sorted = false;
QRegExp m_regex; QRegularExpression m_regex;
}; };
#endif /* AWLISTFORMATTER_H */

View File

@ -15,7 +15,6 @@
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/ ***************************************************************************/
#include "awnoformatter.h" #include "awnoformatter.h"
#include "ui_awnoformatter.h" #include "ui_awnoformatter.h"
@ -24,24 +23,13 @@
#include "awdebug.h" #include "awdebug.h"
AWNoFormatter::AWNoFormatter(QWidget *_parent, const QString &_filePath) AWNoFormatter::AWNoFormatter(QObject *_parent, const QString &_filePath)
: AWAbstractFormatter(_parent, _filePath) : AWAbstractFormatter(_parent, _filePath)
, ui(new Ui::AWNoFormatter)
{ {
qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; qCDebug(LOG_LIB) << __PRETTY_FUNCTION__;
if (!_filePath.isEmpty()) if (!_filePath.isEmpty())
AWNoFormatter::readConfiguration(); AWNoFormatter::readConfiguration();
ui->setupUi(this);
AWNoFormatter::translate();
}
AWNoFormatter::~AWNoFormatter()
{
qCDebug(LOG_LIB) << __PRETTY_FUNCTION__;
delete ui;
} }
@ -57,7 +45,7 @@ AWNoFormatter *AWNoFormatter::copy(const QString &_fileName, const int _number)
{ {
qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number; qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number;
auto *item = new AWNoFormatter(dynamic_cast<QWidget *>(parent()), _fileName); auto item = new AWNoFormatter(parent(), _fileName);
AWAbstractFormatter::copyDefaults(item); AWAbstractFormatter::copyDefaults(item);
item->setNumber(_number); 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) Q_UNUSED(_args)
auto dialog = new QDialog(_parent);
auto ui = new Ui::AWNoFormatter();
ui->setupUi(dialog);
translate(ui);
ui->lineEdit_name->setText(name()); ui->lineEdit_name->setText(name());
ui->lineEdit_comment->setText(comment()); ui->lineEdit_comment->setText(comment());
ui->label_typeValue->setText("NoFormat"); ui->label_typeValue->setText("NoFormat");
int ret = exec(); auto ret = dialog->exec();
if (ret != 1) if (ret == 1) {
return ret;
setName(ui->lineEdit_name->text()); setName(ui->lineEdit_name->text());
setComment(ui->lineEdit_comment->text()); setComment(ui->lineEdit_comment->text());
setApiVersion(AW_FORMATTER_API); setApiVersion(AW_FORMATTER_API);
setStrType(ui->label_typeValue->text()); setStrType(ui->label_typeValue->text());
writeConfiguration(); writeConfiguration();
}
dialog->deleteLater();
delete ui;
return ret; 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_name->setText(i18n("Name"));
ui->label_comment->setText(i18n("Comment")); ui->label_comment->setText(i18n("Comment"));
ui->label_type->setText(i18n("Type")); ui->label_type->setText(i18n("Type"));

View File

@ -15,35 +15,24 @@
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/ ***************************************************************************/
#ifndef AWNOFORMATTER_H #pragma once
#define AWNOFORMATTER_H
#include "awabstractformatter.h" #include "awabstractformatter.h"
namespace Ui
{
class AWNoFormatter;
}
class AWNoFormatter : public AWAbstractFormatter class AWNoFormatter : public AWAbstractFormatter
{ {
Q_OBJECT Q_OBJECT
public: public:
explicit AWNoFormatter(QWidget *_parent = nullptr, const QString &_filePath = ""); explicit AWNoFormatter(QObject *_parent = nullptr, const QString &_filePath = "");
~AWNoFormatter() override;
[[nodiscard]] QString convert(const QVariant &_value) const override; [[nodiscard]] QString convert(const QVariant &_value) const override;
AWNoFormatter *copy(const QString &_fileName, int _number) override; AWNoFormatter *copy(const QString &_fileName, int _number) override;
public slots: public slots:
int showConfiguration(const QVariant &_args) override; int showConfiguration(QWidget *_parent, const QVariant &_args) override;
private: private:
Ui::AWNoFormatter *ui = nullptr; void translate(void *_ui) override;
void translate() override;
// properties // properties
}; };
#endif /* AWNOFORMATTER_H */

View File

@ -15,7 +15,6 @@
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/ ***************************************************************************/
#include "awscriptformatter.h" #include "awscriptformatter.h"
#include "ui_awscriptformatter.h" #include "ui_awscriptformatter.h"
@ -27,24 +26,13 @@
#include "awdebug.h" #include "awdebug.h"
AWScriptFormatter::AWScriptFormatter(QWidget *_parent, const QString &_filePath) AWScriptFormatter::AWScriptFormatter(QObject *_parent, const QString &_filePath)
: AWAbstractFormatter(_parent, _filePath) : AWAbstractFormatter(_parent, _filePath)
, ui(new Ui::AWScriptFormatter)
{ {
qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; qCDebug(LOG_LIB) << __PRETTY_FUNCTION__;
if (!_filePath.isEmpty()) if (!_filePath.isEmpty())
AWScriptFormatter::readConfiguration(); AWScriptFormatter::readConfiguration();
ui->setupUi(this);
AWScriptFormatter::translate();
}
AWScriptFormatter::~AWScriptFormatter()
{
qCDebug(LOG_LIB) << __PRETTY_FUNCTION__;
delete ui;
} }
@ -54,9 +42,8 @@ QString AWScriptFormatter::convert(const QVariant &_value) const
// init engine // init engine
QJSEngine engine; QJSEngine engine;
QJSValue fn = engine.evaluate(m_program); auto fn = engine.evaluate(m_program);
QJSValueList args = QJSValueList() << _value.toString(); auto result = fn.call({_value.toString()});
QJSValue result = fn.call(args);
if (result.isError()) { if (result.isError()) {
qCWarning(LOG_LIB) << "Uncaught exception at line" << result.property("lineNumber").toInt() << ":" qCWarning(LOG_LIB) << "Uncaught exception at line" << result.property("lineNumber").toInt() << ":"
@ -72,7 +59,7 @@ AWScriptFormatter *AWScriptFormatter::copy(const QString &_fileName, const int _
{ {
qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number; qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number;
auto *item = new AWScriptFormatter(dynamic_cast<QWidget *>(parent()), _fileName); auto item = new AWScriptFormatter(parent(), _fileName);
AWAbstractFormatter::copyDefaults(item); AWAbstractFormatter::copyDefaults(item);
item->setAppendCode(appendCode()); item->setAppendCode(appendCode());
item->setCode(code()); 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) Q_UNUSED(_args)
auto dialog = new QDialog(_parent);
auto ui = new Ui::AWScriptFormatter();
ui->setupUi(dialog);
translate(ui);
ui->lineEdit_name->setText(name()); ui->lineEdit_name->setText(name());
ui->lineEdit_comment->setText(comment()); ui->lineEdit_comment->setText(comment());
ui->label_typeValue->setText("Script"); ui->label_typeValue->setText("Script");
@ -161,9 +153,8 @@ int AWScriptFormatter::showConfiguration(const QVariant &_args)
ui->checkBox_hasReturn->setCheckState(hasReturn() ? Qt::Checked : Qt::Unchecked); ui->checkBox_hasReturn->setCheckState(hasReturn() ? Qt::Checked : Qt::Unchecked);
ui->textEdit_code->setPlainText(code()); ui->textEdit_code->setPlainText(code());
int ret = exec(); int ret = dialog->exec();
if (ret != 1) if (ret == 1) {
return ret;
setName(ui->lineEdit_name->text()); setName(ui->lineEdit_name->text());
setComment(ui->lineEdit_comment->text()); setComment(ui->lineEdit_comment->text());
setApiVersion(AW_FORMATTER_API); setApiVersion(AW_FORMATTER_API);
@ -174,6 +165,11 @@ int AWScriptFormatter::showConfiguration(const QVariant &_args)
initProgram(); initProgram();
writeConfiguration(); writeConfiguration();
}
dialog->deleteLater();
delete ui;
return ret; return ret;
} }
@ -199,7 +195,7 @@ void AWScriptFormatter::initProgram()
{ {
// init JS code // init JS code
if (appendCode()) 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 else
m_program = code(); 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_name->setText(i18n("Name"));
ui->label_comment->setText(i18n("Comment")); ui->label_comment->setText(i18n("Comment"));
ui->label_type->setText(i18n("Type")); ui->label_type->setText(i18n("Type"));

View File

@ -15,17 +15,11 @@
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/ ***************************************************************************/
#ifndef AWSCRIPTFORMATTER_H #pragma once
#define AWSCRIPTFORMATTER_H
#include "awabstractformatter.h" #include "awabstractformatter.h"
namespace Ui
{
class AWScriptFormatter;
}
class AWScriptFormatter : public AWAbstractFormatter class AWScriptFormatter : public AWAbstractFormatter
{ {
Q_OBJECT Q_OBJECT
@ -35,8 +29,7 @@ class AWScriptFormatter : public AWAbstractFormatter
Q_PROPERTY(QString program READ program) Q_PROPERTY(QString program READ program)
public: public:
explicit AWScriptFormatter(QWidget *_parent = nullptr, const QString &_filePath = ""); explicit AWScriptFormatter(QObject *_parent = nullptr, const QString &_filePath = "");
~AWScriptFormatter() override;
[[nodiscard]] QString convert(const QVariant &_value) const override; [[nodiscard]] QString convert(const QVariant &_value) const override;
AWScriptFormatter *copy(const QString &_fileName, int _number) override; AWScriptFormatter *copy(const QString &_fileName, int _number) override;
// properties // properties
@ -50,19 +43,15 @@ public:
public slots: public slots:
void readConfiguration() override; void readConfiguration() override;
int showConfiguration(const QVariant &_args) override; int showConfiguration(QWidget *_parent, const QVariant &_args) override;
void writeConfiguration() const override; void writeConfiguration() const override;
private: private:
Ui::AWScriptFormatter *ui = nullptr;
void initProgram(); void initProgram();
void translate() override; void translate(void *_ui) override;
// properties // properties
bool m_appendCode = true; bool m_appendCode = true;
QString m_code = ""; QString m_code = "";
bool m_hasReturn = false; bool m_hasReturn = false;
QString m_program; QString m_program;
}; };
#endif /* AWSCRIPTFORMATTER_H */

View File

@ -15,7 +15,6 @@
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/ ***************************************************************************/
#include "awstringformatter.h" #include "awstringformatter.h"
#include "ui_awstringformatter.h" #include "ui_awstringformatter.h"
@ -26,24 +25,13 @@
#include "awdebug.h" #include "awdebug.h"
AWStringFormatter::AWStringFormatter(QWidget *_parent, const QString &_filePath) AWStringFormatter::AWStringFormatter(QObject *_parent, const QString &_filePath)
: AWAbstractFormatter(_parent, _filePath) : AWAbstractFormatter(_parent, _filePath)
, ui(new Ui::AWStringFormatter)
{ {
qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; qCDebug(LOG_LIB) << __PRETTY_FUNCTION__;
if (!_filePath.isEmpty()) if (!_filePath.isEmpty())
AWStringFormatter::readConfiguration(); AWStringFormatter::readConfiguration();
ui->setupUi(this);
AWStringFormatter::translate();
}
AWStringFormatter::~AWStringFormatter()
{
qCDebug(LOG_LIB) << __PRETTY_FUNCTION__;
delete ui;
} }
@ -51,7 +39,7 @@ QString AWStringFormatter::convert(const QVariant &_value) const
{ {
qCDebug(LOG_LIB) << "Convert value" << _value; 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()) if (forceWidth())
output = output.left(count()); output = output.left(count());
@ -63,7 +51,7 @@ AWStringFormatter *AWStringFormatter::copy(const QString &_fileName, const int _
{ {
qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number; qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number;
auto *item = new AWStringFormatter(dynamic_cast<QWidget *>(parent()), _fileName); auto item = new AWStringFormatter(parent(), _fileName);
AWAbstractFormatter::copyDefaults(item); AWAbstractFormatter::copyDefaults(item);
item->setCount(count()); item->setCount(count());
item->setFillChar(fillChar()); 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) Q_UNUSED(_args)
auto dialog = new QDialog(_parent);
auto ui = new Ui::AWStringFormatter();
ui->setupUi(dialog);
translate(ui);
ui->lineEdit_name->setText(name()); ui->lineEdit_name->setText(name());
ui->lineEdit_comment->setText(comment()); ui->lineEdit_comment->setText(comment());
ui->label_typeValue->setText("String"); ui->label_typeValue->setText("String");
@ -143,9 +136,8 @@ int AWStringFormatter::showConfiguration(const QVariant &_args)
ui->lineEdit_fill->setText(QString(fillChar())); ui->lineEdit_fill->setText(QString(fillChar()));
ui->checkBox_forceWidth->setCheckState(forceWidth() ? Qt::Checked : Qt::Unchecked); ui->checkBox_forceWidth->setCheckState(forceWidth() ? Qt::Checked : Qt::Unchecked);
int ret = exec(); auto ret = dialog->exec();
if (ret != 1) if (ret == 1) {
return ret;
setName(ui->lineEdit_name->text()); setName(ui->lineEdit_name->text());
setComment(ui->lineEdit_comment->text()); setComment(ui->lineEdit_comment->text());
setApiVersion(AW_FORMATTER_API); setApiVersion(AW_FORMATTER_API);
@ -155,6 +147,11 @@ int AWStringFormatter::showConfiguration(const QVariant &_args)
setForceWidth(ui->checkBox_forceWidth->checkState() == Qt::Checked); setForceWidth(ui->checkBox_forceWidth->checkState() == Qt::Checked);
writeConfiguration(); writeConfiguration();
}
dialog->deleteLater();
delete ui;
return ret; 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_name->setText(i18n("Name"));
ui->label_comment->setText(i18n("Comment")); ui->label_comment->setText(i18n("Comment"));
ui->label_type->setText(i18n("Type")); ui->label_type->setText(i18n("Type"));

View File

@ -15,17 +15,11 @@
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/ ***************************************************************************/
#ifndef AWSTRINGFORMATTER_H #pragma once
#define AWSTRINGFORMATTER_H
#include "awabstractformatter.h" #include "awabstractformatter.h"
namespace Ui
{
class AWStringFormatter;
}
class AWStringFormatter : public AWAbstractFormatter class AWStringFormatter : public AWAbstractFormatter
{ {
Q_OBJECT Q_OBJECT
@ -34,8 +28,7 @@ class AWStringFormatter : public AWAbstractFormatter
Q_PROPERTY(bool forceWidth READ forceWidth WRITE setForceWidth) Q_PROPERTY(bool forceWidth READ forceWidth WRITE setForceWidth)
public: public:
explicit AWStringFormatter(QWidget *_parent = nullptr, const QString &_filePath = ""); explicit AWStringFormatter(QObject *_parent = nullptr, const QString &_filePath = "");
~AWStringFormatter() override;
[[nodiscard]] QString convert(const QVariant &_value) const override; [[nodiscard]] QString convert(const QVariant &_value) const override;
AWStringFormatter *copy(const QString &_fileName, int _number) override; AWStringFormatter *copy(const QString &_fileName, int _number) override;
// properties // properties
@ -48,17 +41,13 @@ public:
public slots: public slots:
void readConfiguration() override; void readConfiguration() override;
int showConfiguration(const QVariant &_args) override; int showConfiguration(QWidget *_parent, const QVariant &_args) override;
void writeConfiguration() const override; void writeConfiguration() const override;
private: private:
Ui::AWStringFormatter *ui = nullptr; void translate(void *_ui) override;
void translate() override;
// properties // properties
int m_count = 0; int m_count = 0;
QChar m_fillChar = QChar(); QChar m_fillChar = QChar();
bool m_forceWidth = false; bool m_forceWidth = false;
}; };
#endif /* AWSTRINGFORMATTER_H */

View File

@ -15,8 +15,7 @@
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/ ***************************************************************************/
#ifndef EXTITEMAGGREGATOR_H #pragma once
#define EXTITEMAGGREGATOR_H
#include <KI18n/KLocalizedString> #include <KI18n/KLocalizedString>
@ -31,7 +30,7 @@
template <class T> class ExtItemAggregator : public AbstractExtItemAggregator template <class T> class ExtItemAggregator : public AbstractExtItemAggregator
{ {
public: public:
explicit ExtItemAggregator(QWidget *_parent, const QString &_type) explicit ExtItemAggregator(QObject *_parent, const QString &_type)
: AbstractExtItemAggregator(_parent, _type) : AbstractExtItemAggregator(_parent, _type)
{ {
qSetMessagePattern(AWDebug::LOG_FORMAT); qSetMessagePattern(AWDebug::LOG_FORMAT);
@ -56,8 +55,7 @@ public:
void editItems() void editItems()
{ {
repaintList(); auto ret = exec();
int ret = exec();
qCInfo(LOG_LIB) << "Dialog returns" << ret; qCInfo(LOG_LIB) << "Dialog returns" << ret;
}; };
@ -123,7 +121,7 @@ private:
QList<AbstractExtItem *> m_items; QList<AbstractExtItem *> m_items;
QList<T *> m_activeItems; QList<T *> m_activeItems;
void doCreateItem() override { return createItem<T>(); } void doCreateItem(QListWidget *_widget) override { return createItem<T>(_widget); }
QList<AbstractExtItem *> getItems() QList<AbstractExtItem *> getItems()
{ {
@ -137,7 +135,7 @@ private:
if (!file.endsWith(".desktop")) if (!file.endsWith(".desktop"))
continue; continue;
qCInfo(LOG_LIB) << "Found file" << file << "in" << dir; qCInfo(LOG_LIB) << "Found file" << file << "in" << dir;
QString filePath = QString("%1/%2").arg(dir).arg(file); auto filePath = QString("%1/%2").arg(dir, file);
// check if already exists // check if already exists
if (std::any_of(items.cbegin(), items.cend(), if (std::any_of(items.cbegin(), items.cend(),
[&filePath](AbstractExtItem *item) { return (item->fileName() == filePath); })) [&filePath](AbstractExtItem *item) { return (item->fileName() == filePath); }))
@ -147,11 +145,7 @@ private:
} }
// sort items // sort items
std::sort(items.begin(), items.end(), std::sort(items.begin(), items.end(), [](auto *lhs, auto *rhs) { return lhs->number() < rhs->number(); });
[](const AbstractExtItem *lhs, const AbstractExtItem *rhs) { return lhs->number() < rhs->number(); });
return items; return items;
}; };
}; };
#endif /* EXTITEMAGGREGATOR_H */

View File

@ -20,34 +20,28 @@
#include <KI18n/KLocalizedString> #include <KI18n/KLocalizedString>
#include <QDir>
#include <QSettings> #include <QSettings>
#include <QTextCodec>
#include <qreplytimeout/qreplytimeout.h> #include <qreplytimeout/qreplytimeout.h>
#include "awdebug.h" #include "awdebug.h"
ExtNetworkRequest::ExtNetworkRequest(QWidget *_parent, const QString &_filePath) ExtNetworkRequest::ExtNetworkRequest(QObject *_parent, const QString &_filePath)
: AbstractExtItem(_parent, _filePath) : AbstractExtItem(_parent, _filePath)
, ui(new Ui::ExtNetworkRequest)
{ {
qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; qCDebug(LOG_LIB) << __PRETTY_FUNCTION__;
if (!_filePath.isEmpty()) if (!_filePath.isEmpty())
ExtNetworkRequest::readConfiguration(); ExtNetworkRequest::readConfiguration();
ui->setupUi(this);
ExtNetworkRequest::translate();
m_values[tag("response")] = ""; m_values[tag("response")] = "";
// HACK declare as child of nullptr to avoid crash with plasmawindowed // HACK declare as child of nullptr to avoid crash with plasmawindowed
// in the destructor // in the destructor
m_manager = new QNetworkAccessManager(nullptr); m_manager = new QNetworkAccessManager(nullptr);
connect(m_manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(networkReplyReceived(QNetworkReply *))); connect(m_manager, &QNetworkAccessManager::finished, this, &ExtNetworkRequest::networkReplyReceived);
connect(this, &ExtNetworkRequest::requestDataUpdate, this, &ExtNetworkRequest::sendRequest);
connect(this, SIGNAL(requestDataUpdate()), this, SLOT(sendRequest()));
} }
@ -55,11 +49,10 @@ ExtNetworkRequest::~ExtNetworkRequest()
{ {
qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; qCDebug(LOG_LIB) << __PRETTY_FUNCTION__;
disconnect(m_manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(networkReplyReceived(QNetworkReply *))); disconnect(m_manager, &QNetworkAccessManager::finished, this, &ExtNetworkRequest::networkReplyReceived);
disconnect(this, SIGNAL(requestDataUpdate()), this, SLOT(sendRequest())); disconnect(this, &ExtNetworkRequest::requestDataUpdate, this, &ExtNetworkRequest::sendRequest);
m_manager->deleteLater(); m_manager->deleteLater();
delete ui;
} }
@ -67,7 +60,7 @@ ExtNetworkRequest *ExtNetworkRequest::copy(const QString &_fileName, const int _
{ {
qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number; 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); copyDefaults(item);
item->setNumber(_number); item->setNumber(_number);
item->setStringUrl(stringUrl()); item->setStringUrl(stringUrl());
@ -121,10 +114,15 @@ QVariantHash ExtNetworkRequest::run()
} }
int ExtNetworkRequest::showConfiguration(const QVariant &_args) int ExtNetworkRequest::showConfiguration(QWidget *_parent, const QVariant &_args)
{ {
Q_UNUSED(_args) Q_UNUSED(_args)
auto dialog = new QDialog(_parent);
auto ui = new Ui::ExtNetworkRequest();
ui->setupUi(dialog);
translate(ui);
ui->lineEdit_name->setText(name()); ui->lineEdit_name->setText(name());
ui->lineEdit_comment->setText(comment()); ui->lineEdit_comment->setText(comment());
ui->label_numberValue->setText(QString("%1").arg(number())); ui->label_numberValue->setText(QString("%1").arg(number()));
@ -134,9 +132,8 @@ int ExtNetworkRequest::showConfiguration(const QVariant &_args)
ui->lineEdit_socket->setText(socket()); ui->lineEdit_socket->setText(socket());
ui->spinBox_interval->setValue(interval()); ui->spinBox_interval->setValue(interval());
int ret = exec(); auto ret = dialog->exec();
if (ret != 1) if (ret == 1) {
return ret;
setName(ui->lineEdit_name->text()); setName(ui->lineEdit_name->text());
setComment(ui->lineEdit_comment->text()); setComment(ui->lineEdit_comment->text());
setNumber(ui->label_numberValue->text().toInt()); setNumber(ui->label_numberValue->text().toInt());
@ -148,6 +145,11 @@ int ExtNetworkRequest::showConfiguration(const QVariant &_args)
setInterval(ui->spinBox_interval->value()); setInterval(ui->spinBox_interval->value());
writeConfiguration(); writeConfiguration();
}
dialog->deleteLater();
delete ui;
return ret; return ret;
} }
@ -174,7 +176,7 @@ void ExtNetworkRequest::networkReplyReceived(QNetworkReply *_reply)
} }
m_isRunning = false; m_isRunning = false;
m_values[tag("response")] = QTextCodec::codecForMib(106)->toUnicode(_reply->readAll()).trimmed(); m_values[tag("response")] = QString::fromUtf8(_reply->readAll()).trimmed();
emit(dataReceived(m_values)); emit(dataReceived(m_values));
} }
@ -183,7 +185,7 @@ void ExtNetworkRequest::networkReplyReceived(QNetworkReply *_reply)
void ExtNetworkRequest::sendRequest() void ExtNetworkRequest::sendRequest()
{ {
m_isRunning = true; m_isRunning = true;
QNetworkReply *reply = m_manager->get(QNetworkRequest(m_url)); auto reply = m_manager->get(QNetworkRequest(m_url));
new QReplyTimeout(reply, REQUEST_TIMEOUT); new QReplyTimeout(reply, REQUEST_TIMEOUT);
} }
@ -194,8 +196,10 @@ void ExtNetworkRequest::initUrl()
} }
void ExtNetworkRequest::translate() void ExtNetworkRequest::translate(void *_ui)
{ {
auto ui = reinterpret_cast<Ui::ExtNetworkRequest *>(_ui);
ui->label_name->setText(i18n("Name")); ui->label_name->setText(i18n("Name"));
ui->label_comment->setText(i18n("Comment")); ui->label_comment->setText(i18n("Comment"));
ui->label_number->setText(i18n("Tag")); ui->label_number->setText(i18n("Tag"));

View File

@ -15,26 +15,20 @@
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/ ***************************************************************************/
#ifndef EXTNETWORKREQUEST_H #pragma once
#define EXTNETWORKREQUEST_H
#include <QNetworkReply> #include <QNetworkReply>
#include "abstractextitem.h" #include "abstractextitem.h"
namespace Ui
{
class ExtNetworkRequest;
}
class ExtNetworkRequest : public AbstractExtItem class ExtNetworkRequest : public AbstractExtItem
{ {
Q_OBJECT Q_OBJECT
Q_PROPERTY(QString stringUrl READ stringUrl WRITE setStringUrl) Q_PROPERTY(QString stringUrl READ stringUrl WRITE setStringUrl)
public: public:
explicit ExtNetworkRequest(QWidget *_parent = nullptr, const QString &_filePath = ""); explicit ExtNetworkRequest(QObject *_parent = nullptr, const QString &_filePath = "");
~ExtNetworkRequest() override; ~ExtNetworkRequest() override;
ExtNetworkRequest *copy(const QString &_fileName, int _number) override; ExtNetworkRequest *copy(const QString &_fileName, int _number) override;
// get methods // get methods
@ -46,7 +40,7 @@ public:
public slots: public slots:
void readConfiguration() override; void readConfiguration() override;
QVariantHash run() override; QVariantHash run() override;
int showConfiguration(const QVariant &_args) override; int showConfiguration(QWidget *_parent, const QVariant &_args) override;
void writeConfiguration() const override; void writeConfiguration() const override;
private slots: private slots:
@ -57,14 +51,10 @@ private:
QNetworkAccessManager *m_manager = nullptr; QNetworkAccessManager *m_manager = nullptr;
QUrl m_url; QUrl m_url;
bool m_isRunning = false; bool m_isRunning = false;
Ui::ExtNetworkRequest *ui = nullptr;
void initUrl(); void initUrl();
void translate() override; void translate(void *_ui) override;
// properties // properties
QString m_stringUrl = "https://httpbin.org/get"; QString m_stringUrl = "https://httpbin.org/get";
// values // values
QVariantHash m_values; QVariantHash m_values;
}; };
#endif /* EXTNETWORKREQUEST_H */

View File

@ -20,7 +20,6 @@
#include <KI18n/KLocalizedString> #include <KI18n/KLocalizedString>
#include <QDir>
#include <QSettings> #include <QSettings>
#include <qreplytimeout/qreplytimeout.h> #include <qreplytimeout/qreplytimeout.h>
@ -29,16 +28,13 @@
#include "stooqquotesprovider.h" #include "stooqquotesprovider.h"
ExtQuotes::ExtQuotes(QWidget *_parent, const QString &_filePath) ExtQuotes::ExtQuotes(QObject *_parent, const QString &_filePath)
: AbstractExtItem(_parent, _filePath) : AbstractExtItem(_parent, _filePath)
, ui(new Ui::ExtQuotes)
{ {
qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; qCDebug(LOG_LIB) << __PRETTY_FUNCTION__;
if (!_filePath.isEmpty()) if (!_filePath.isEmpty())
ExtQuotes::readConfiguration(); ExtQuotes::readConfiguration();
ui->setupUi(this);
ExtQuotes::translate();
m_values[tag("price")] = 0.0; m_values[tag("price")] = 0.0;
m_values[tag("pricechg")] = 0.0; m_values[tag("pricechg")] = 0.0;
@ -50,9 +46,8 @@ ExtQuotes::ExtQuotes(QWidget *_parent, const QString &_filePath)
// HACK declare as child of nullptr to avoid crash with plasmawindowed // HACK declare as child of nullptr to avoid crash with plasmawindowed
// in the destructor // in the destructor
m_manager = new QNetworkAccessManager(nullptr); m_manager = new QNetworkAccessManager(nullptr);
connect(m_manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(quotesReplyReceived(QNetworkReply *))); connect(m_manager, &QNetworkAccessManager::finished, this, &ExtQuotes::quotesReplyReceived);
connect(this, &ExtQuotes::requestDataUpdate, this, &ExtQuotes::sendRequest);
connect(this, SIGNAL(requestDataUpdate()), this, SLOT(sendRequest()));
} }
@ -60,11 +55,10 @@ ExtQuotes::~ExtQuotes()
{ {
qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; qCDebug(LOG_LIB) << __PRETTY_FUNCTION__;
disconnect(m_manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(quotesReplyReceived(QNetworkReply *))); disconnect(m_manager, &QNetworkAccessManager::finished, this, &ExtQuotes::quotesReplyReceived);
disconnect(this, SIGNAL(requestDataUpdate()), this, SLOT(sendRequest())); disconnect(this, &ExtQuotes::requestDataUpdate, this, &ExtQuotes::sendRequest);
m_manager->deleteLater(); m_manager->deleteLater();
delete ui;
} }
@ -72,7 +66,7 @@ ExtQuotes *ExtQuotes::copy(const QString &_fileName, const int _number)
{ {
qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number; 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); copyDefaults(item);
item->setNumber(_number); item->setNumber(_number);
item->setTicker(ticker()); item->setTicker(ticker());
@ -126,10 +120,15 @@ QVariantHash ExtQuotes::run()
} }
int ExtQuotes::showConfiguration(const QVariant &_args) int ExtQuotes::showConfiguration(QWidget *_parent, const QVariant &_args)
{ {
Q_UNUSED(_args) Q_UNUSED(_args)
auto dialog = new QDialog(_parent);
auto ui = new Ui::ExtQuotes();
ui->setupUi(dialog);
translate(ui);
ui->lineEdit_name->setText(name()); ui->lineEdit_name->setText(name());
ui->lineEdit_comment->setText(comment()); ui->lineEdit_comment->setText(comment());
ui->label_numberValue->setText(QString("%1").arg(number())); ui->label_numberValue->setText(QString("%1").arg(number()));
@ -139,9 +138,8 @@ int ExtQuotes::showConfiguration(const QVariant &_args)
ui->lineEdit_socket->setText(socket()); ui->lineEdit_socket->setText(socket());
ui->spinBox_interval->setValue(interval()); ui->spinBox_interval->setValue(interval());
int ret = exec(); auto ret = dialog->exec();
if (ret != 1) if (ret == 1) {
return ret;
setName(ui->lineEdit_name->text()); setName(ui->lineEdit_name->text());
setComment(ui->lineEdit_comment->text()); setComment(ui->lineEdit_comment->text());
setNumber(ui->label_numberValue->text().toInt()); setNumber(ui->label_numberValue->text().toInt());
@ -153,6 +151,11 @@ int ExtQuotes::showConfiguration(const QVariant &_args)
setInterval(ui->spinBox_interval->value()); setInterval(ui->spinBox_interval->value());
writeConfiguration(); writeConfiguration();
}
dialog->deleteLater();
delete ui;
return ret; return ret;
} }
@ -182,7 +185,7 @@ void ExtQuotes::quotesReplyReceived(QNetworkReply *_reply)
auto text = _reply->readAll(); auto text = _reply->readAll();
_reply->deleteLater(); _reply->deleteLater();
QVariantHash data = m_providerObject->parse(text, m_values); auto data = m_providerObject->parse(text, m_values);
if (data.isEmpty()) if (data.isEmpty())
return; return;
m_values = data; m_values = data;
@ -194,7 +197,7 @@ void ExtQuotes::quotesReplyReceived(QNetworkReply *_reply)
void ExtQuotes::sendRequest() void ExtQuotes::sendRequest()
{ {
m_isRunning = true; 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); new QReplyTimeout(reply, REQUEST_TIMEOUT);
} }
@ -210,8 +213,10 @@ void ExtQuotes::initProvider()
} }
void ExtQuotes::translate() void ExtQuotes::translate(void *_ui)
{ {
auto ui = reinterpret_cast<Ui::ExtQuotes *>(_ui);
ui->label_name->setText(i18n("Name")); ui->label_name->setText(i18n("Name"));
ui->label_comment->setText(i18n("Comment")); ui->label_comment->setText(i18n("Comment"));
ui->label_number->setText(i18n("Tag")); ui->label_number->setText(i18n("Tag"));

View File

@ -15,8 +15,7 @@
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/ ***************************************************************************/
#ifndef EXTQUOTES_H #pragma once
#define EXTQUOTES_H
#include <QNetworkReply> #include <QNetworkReply>
@ -24,10 +23,6 @@
class AbstractQuotesProvider; class AbstractQuotesProvider;
namespace Ui
{
class ExtQuotes;
}
class ExtQuotes : public AbstractExtItem class ExtQuotes : public AbstractExtItem
{ {
@ -35,7 +30,7 @@ class ExtQuotes : public AbstractExtItem
Q_PROPERTY(QString ticker READ ticker WRITE setTicker) Q_PROPERTY(QString ticker READ ticker WRITE setTicker)
public: public:
explicit ExtQuotes(QWidget *_parent = nullptr, const QString &_filePath = ""); explicit ExtQuotes(QObject *_parent = nullptr, const QString &_filePath = "");
~ExtQuotes() override; ~ExtQuotes() override;
ExtQuotes *copy(const QString &_fileName, int _number) override; ExtQuotes *copy(const QString &_fileName, int _number) override;
// get methods // get methods
@ -47,7 +42,7 @@ public:
public slots: public slots:
void readConfiguration() override; void readConfiguration() override;
QVariantHash run() override; QVariantHash run() override;
int showConfiguration(const QVariant &_args) override; int showConfiguration(QWidget *_parent, const QVariant &_args) override;
void writeConfiguration() const override; void writeConfiguration() const override;
private slots: private slots:
@ -58,14 +53,10 @@ private:
AbstractQuotesProvider *m_providerObject = nullptr; AbstractQuotesProvider *m_providerObject = nullptr;
QNetworkAccessManager *m_manager = nullptr; QNetworkAccessManager *m_manager = nullptr;
bool m_isRunning = false; bool m_isRunning = false;
Ui::ExtQuotes *ui = nullptr;
void initProvider(); void initProvider();
void translate() override; void translate(void *_ui) override;
// properties // properties
QString m_ticker = "EURUSD=X"; QString m_ticker = "EURUSD=X";
// values // values
QVariantHash m_values; QVariantHash m_values;
}; };
#endif /* EXTQUOTES_H */

View File

@ -24,30 +24,26 @@
#include <QJsonDocument> #include <QJsonDocument>
#include <QSettings> #include <QSettings>
#include <QStandardPaths> #include <QStandardPaths>
#include <QTextCodec>
#include "awdebug.h" #include "awdebug.h"
ExtScript::ExtScript(QWidget *_parent, const QString &_filePath) ExtScript::ExtScript(QObject *_parent, const QString &_filePath)
: AbstractExtItem(_parent, _filePath) : AbstractExtItem(_parent, _filePath)
, ui(new Ui::ExtScript)
{ {
qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; qCDebug(LOG_LIB) << __PRETTY_FUNCTION__;
if (!_filePath.isEmpty()) if (!_filePath.isEmpty())
ExtScript::readConfiguration(); ExtScript::readConfiguration();
readJsonFilters(); readJsonFilters();
ui->setupUi(this);
ExtScript::translate();
m_values[tag("custom")] = ""; m_values[tag("custom")] = "";
m_process = new QProcess(nullptr); m_process = new QProcess(nullptr);
connect(m_process, SIGNAL(finished(int, QProcess::ExitStatus)), this, SLOT(updateValue())); connect(m_process, &QProcess::finished, [this]() { return updateValue(); });
m_process->waitForFinished(0); m_process->waitForFinished(0);
connect(this, SIGNAL(requestDataUpdate()), this, SLOT(startProcess())); connect(this, &ExtScript::requestDataUpdate, this, &ExtScript::startProcess);
} }
@ -55,11 +51,9 @@ ExtScript::~ExtScript()
{ {
qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; qCDebug(LOG_LIB) << __PRETTY_FUNCTION__;
disconnect(m_process, SIGNAL(finished(int, QProcess::ExitStatus)), this, SLOT(updateValue()));
m_process->kill(); m_process->kill();
m_process->deleteLater(); m_process->deleteLater();
disconnect(this, SIGNAL(requestDataUpdate()), this, SLOT(startProcess())); disconnect(this, &ExtScript::requestDataUpdate, this, &ExtScript::startProcess);
delete ui;
} }
@ -67,7 +61,7 @@ ExtScript *ExtScript::copy(const QString &_fileName, const int _number)
{ {
qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number; qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number;
auto *item = new ExtScript(dynamic_cast<QWidget *>(parent()), _fileName); auto item = new ExtScript(parent(), _fileName);
copyDefaults(item); copyDefaults(item);
item->setExecutable(executable()); item->setExecutable(executable());
item->setNumber(_number); item->setNumber(_number);
@ -180,7 +174,7 @@ QString ExtScript::applyFilters(QString _value) const
for (auto &filt : filters()) { for (auto &filt : filters()) {
qCInfo(LOG_LIB) << "Found filter" << filt; qCInfo(LOG_LIB) << "Found filter" << filt;
QVariantMap filter = m_jsonFilters[filt].toMap(); auto filter = m_jsonFilters[filt].toMap();
if (filter.isEmpty()) { if (filter.isEmpty()) {
qCWarning(LOG_LIB) << "Could not find filter" << _value << "in the json"; qCWarning(LOG_LIB) << "Could not find filter" << _value << "in the json";
continue; continue;
@ -226,17 +220,17 @@ void ExtScript::readConfiguration()
void ExtScript::readJsonFilters() void ExtScript::readJsonFilters()
{ {
QString fileName = jsonFiltersFile(); auto fileName = jsonFiltersFile();
QFile jsonFile(fileName); QFile jsonFile(fileName);
if (!jsonFile.open(QIODevice::ReadOnly | QIODevice::Text)) { if (!jsonFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
qCWarning(LOG_LIB) << "Could not open" << fileName; qCWarning(LOG_LIB) << "Could not open" << fileName;
return; return;
} }
QString jsonText = jsonFile.readAll(); auto jsonText = jsonFile.readAll();
jsonFile.close(); jsonFile.close();
QJsonParseError error{}; QJsonParseError error{};
QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonText.toUtf8(), &error); auto jsonDoc = QJsonDocument::fromJson(jsonText, &error);
if (error.error != QJsonParseError::NoError) { if (error.error != QJsonParseError::NoError) {
qCWarning(LOG_LIB) << "Parse error" << error.errorString(); qCWarning(LOG_LIB) << "Parse error" << error.errorString();
return; return;
@ -257,10 +251,15 @@ QVariantHash ExtScript::run()
} }
int ExtScript::showConfiguration(const QVariant &_args) int ExtScript::showConfiguration(QWidget *_parent, const QVariant &_args)
{ {
Q_UNUSED(_args) Q_UNUSED(_args)
auto dialog = new QDialog(_parent);
auto ui = new Ui::ExtScript();
ui->setupUi(dialog);
translate(ui);
ui->lineEdit_name->setText(name()); ui->lineEdit_name->setText(name());
ui->lineEdit_comment->setText(comment()); ui->lineEdit_comment->setText(comment());
ui->label_numberValue->setText(QString("%1").arg(number())); ui->label_numberValue->setText(QString("%1").arg(number()));
@ -275,9 +274,8 @@ int ExtScript::showConfiguration(const QVariant &_args)
ui->checkBox_linesFilter->setCheckState(filters().contains("newline") ? Qt::Checked : Qt::Unchecked); ui->checkBox_linesFilter->setCheckState(filters().contains("newline") ? Qt::Checked : Qt::Unchecked);
ui->checkBox_spaceFilter->setCheckState(filters().contains("space") ? Qt::Checked : Qt::Unchecked); ui->checkBox_spaceFilter->setCheckState(filters().contains("space") ? Qt::Checked : Qt::Unchecked);
int ret = exec(); int ret = dialog->exec();
if (ret != 1) if (ret == 1) {
return ret;
setName(ui->lineEdit_name->text()); setName(ui->lineEdit_name->text());
setComment(ui->lineEdit_comment->text()); setComment(ui->lineEdit_comment->text());
setNumber(ui->label_numberValue->text().toInt()); setNumber(ui->label_numberValue->text().toInt());
@ -294,6 +292,11 @@ int ExtScript::showConfiguration(const QVariant &_args)
updateFilter("space", ui->checkBox_spaceFilter->checkState() == Qt::Checked); updateFilter("space", ui->checkBox_spaceFilter->checkState() == Qt::Checked);
writeConfiguration(); writeConfiguration();
}
dialog->deleteLater();
delete ui;
return ret; return ret;
} }
@ -325,9 +328,9 @@ void ExtScript::startProcess()
void ExtScript::updateValue() void ExtScript::updateValue()
{ {
qCInfo(LOG_LIB) << "Cmd returns" << m_process->exitCode(); qCInfo(LOG_LIB) << "Cmd returns" << m_process->exitCode();
QString qdebug = QTextCodec::codecForMib(106)->toUnicode(m_process->readAllStandardError()).trimmed(); auto qdebug = QString::fromUtf8(m_process->readAllStandardError()).trimmed();
qCInfo(LOG_LIB) << "Error" << qdebug; qCInfo(LOG_LIB) << "Error" << qdebug;
QString qoutput = QTextCodec::codecForMib(106)->toUnicode(m_process->readAllStandardOutput()).trimmed(); auto qoutput = QString::fromUtf8(m_process->readAllStandardOutput()).trimmed();
qCInfo(LOG_LIB) << "Output" << qoutput; qCInfo(LOG_LIB) << "Output" << qoutput;
QString strValue; QString strValue;
@ -351,8 +354,10 @@ void ExtScript::updateValue()
} }
void ExtScript::translate() void ExtScript::translate(void *_ui)
{ {
auto ui = reinterpret_cast<Ui::ExtScript *>(_ui);
ui->label_name->setText(i18n("Name")); ui->label_name->setText(i18n("Name"));
ui->label_comment->setText(i18n("Comment")); ui->label_comment->setText(i18n("Comment"));
ui->label_number->setText(i18n("Tag")); ui->label_number->setText(i18n("Tag"));

View File

@ -15,19 +15,13 @@
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/ ***************************************************************************/
#ifndef EXTSCRIPT_H #pragma once
#define EXTSCRIPT_H
#include <QProcess> #include <QProcess>
#include "abstractextitem.h" #include "abstractextitem.h"
namespace Ui
{
class ExtScript;
}
class ExtScript : public AbstractExtItem class ExtScript : public AbstractExtItem
{ {
Q_OBJECT Q_OBJECT
@ -38,7 +32,7 @@ class ExtScript : public AbstractExtItem
public: public:
enum class Redirect { stdout2stderr = 0, nothing = 1, stderr2stdout = 2, swap = 3 }; enum class Redirect { stdout2stderr = 0, nothing = 1, stderr2stdout = 2, swap = 3 };
explicit ExtScript(QWidget *_parent = nullptr, const QString &_filePath = ""); explicit ExtScript(QObject *_parent = nullptr, const QString &_filePath = "");
~ExtScript() override; ~ExtScript() override;
ExtScript *copy(const QString &_fileName, int _number) override; ExtScript *copy(const QString &_fileName, int _number) override;
static QString jsonFiltersFile(); static QString jsonFiltersFile();
@ -62,7 +56,7 @@ public slots:
void readConfiguration() override; void readConfiguration() override;
void readJsonFilters(); void readJsonFilters();
QVariantHash run() override; QVariantHash run() override;
int showConfiguration(const QVariant &_args) override; int showConfiguration(QWidget *_parent, const QVariant &_args) override;
void writeConfiguration() const override; void writeConfiguration() const override;
private slots: private slots:
@ -71,8 +65,7 @@ private slots:
private: private:
QProcess *m_process = nullptr; QProcess *m_process = nullptr;
Ui::ExtScript *ui = nullptr; void translate(void *_ui) override;
void translate() override;
// properties // properties
QString m_executable = "/usr/bin/true"; QString m_executable = "/usr/bin/true";
QStringList m_filters = QStringList(); QStringList m_filters = QStringList();
@ -82,6 +75,3 @@ private:
QVariantMap m_jsonFilters; QVariantMap m_jsonFilters;
QVariantHash m_values; QVariantHash m_values;
}; };
#endif /* EXTSCRIPT_H */

View File

@ -21,29 +21,25 @@
#include <KI18n/KLocalizedString> #include <KI18n/KLocalizedString>
#include <QSettings> #include <QSettings>
#include <QTextCodec>
#include "awdebug.h" #include "awdebug.h"
ExtUpgrade::ExtUpgrade(QWidget *_parent, const QString &_filePath) ExtUpgrade::ExtUpgrade(QObject *_parent, const QString &_filePath)
: AbstractExtItem(_parent, _filePath) : AbstractExtItem(_parent, _filePath)
, ui(new Ui::ExtUpgrade)
{ {
qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; qCDebug(LOG_LIB) << __PRETTY_FUNCTION__;
if (!_filePath.isEmpty()) if (!_filePath.isEmpty())
ExtUpgrade::readConfiguration(); ExtUpgrade::readConfiguration();
ui->setupUi(this);
ExtUpgrade::translate();
m_values[tag("pkgcount")] = 0; m_values[tag("pkgcount")] = 0;
m_process = new QProcess(nullptr); m_process = new QProcess(nullptr);
connect(m_process, SIGNAL(finished(int)), this, SLOT(updateValue())); connect(m_process, &QProcess::finished, [this]() { return updateValue(); });
m_process->waitForFinished(0); m_process->waitForFinished(0);
connect(this, SIGNAL(requestDataUpdate()), this, SLOT(startProcess())); connect(this, &ExtUpgrade::requestDataUpdate, this, &ExtUpgrade::startProcess);
} }
@ -53,8 +49,7 @@ ExtUpgrade::~ExtUpgrade()
m_process->kill(); m_process->kill();
m_process->deleteLater(); m_process->deleteLater();
disconnect(this, SIGNAL(requestDataUpdate()), this, SLOT(startProcess())); disconnect(this, &ExtUpgrade::requestDataUpdate, this, &ExtUpgrade::startProcess);
delete ui;
} }
@ -62,7 +57,7 @@ ExtUpgrade *ExtUpgrade::copy(const QString &_fileName, const int _number)
{ {
qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number; qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number;
auto *item = new ExtUpgrade(dynamic_cast<QWidget *>(parent()), _fileName); auto item = new ExtUpgrade(parent(), _fileName);
copyDefaults(item); copyDefaults(item);
item->setExecutable(executable()); item->setExecutable(executable());
item->setFilter(filter()); item->setFilter(filter());
@ -150,10 +145,15 @@ QVariantHash ExtUpgrade::run()
} }
int ExtUpgrade::showConfiguration(const QVariant &_args) int ExtUpgrade::showConfiguration(QWidget *_parent, const QVariant &_args)
{ {
Q_UNUSED(_args) Q_UNUSED(_args)
auto dialog = new QDialog(_parent);
auto ui = new Ui::ExtUpgrade();
ui->setupUi(dialog);
translate(ui);
ui->lineEdit_name->setText(name()); ui->lineEdit_name->setText(name());
ui->lineEdit_comment->setText(comment()); ui->lineEdit_comment->setText(comment());
ui->label_numberValue->setText(QString("%1").arg(number())); ui->label_numberValue->setText(QString("%1").arg(number()));
@ -165,9 +165,8 @@ int ExtUpgrade::showConfiguration(const QVariant &_args)
ui->lineEdit_socket->setText(socket()); ui->lineEdit_socket->setText(socket());
ui->spinBox_interval->setValue(interval()); ui->spinBox_interval->setValue(interval());
int ret = exec(); auto ret = dialog->exec();
if (ret != 1) if (ret == 1) {
return ret;
setName(ui->lineEdit_name->text()); setName(ui->lineEdit_name->text());
setComment(ui->lineEdit_comment->text()); setComment(ui->lineEdit_comment->text());
setNumber(ui->label_numberValue->text().toInt()); setNumber(ui->label_numberValue->text().toInt());
@ -181,6 +180,11 @@ int ExtUpgrade::showConfiguration(const QVariant &_args)
setInterval(ui->spinBox_interval->value()); setInterval(ui->spinBox_interval->value());
writeConfiguration(); writeConfiguration();
}
dialog->deleteLater();
delete ui;
return ret; return ret;
} }
@ -214,18 +218,20 @@ void ExtUpgrade::updateValue()
qCInfo(LOG_LIB) << "Cmd returns" << m_process->exitCode(); qCInfo(LOG_LIB) << "Cmd returns" << m_process->exitCode();
qCInfo(LOG_LIB) << "Error" << m_process->readAllStandardError(); qCInfo(LOG_LIB) << "Error" << m_process->readAllStandardError();
QString qoutput = QTextCodec::codecForMib(106)->toUnicode(m_process->readAllStandardOutput()).trimmed(); auto qoutput = QString::fromUtf8(m_process->readAllStandardOutput()).trimmed();
m_values[tag("pkgcount")] = [this](const QString &output) { m_values[tag("pkgcount")] = [this](const QString &output) {
return filter().isEmpty() ? output.split('\n', Qt::SkipEmptyParts).count() - null() return filter().isEmpty() ? output.split('\n', Qt::SkipEmptyParts).count() - null()
: output.split('\n', Qt::SkipEmptyParts).filter(QRegExp(filter())).count(); : output.split('\n', Qt::SkipEmptyParts).filter(QRegularExpression(filter())).count();
}(qoutput); }(qoutput);
emit(dataReceived(m_values)); emit(dataReceived(m_values));
} }
void ExtUpgrade::translate() void ExtUpgrade::translate(void *_ui)
{ {
auto ui = reinterpret_cast<Ui::ExtUpgrade *>(_ui);
ui->label_name->setText(i18n("Name")); ui->label_name->setText(i18n("Name"));
ui->label_comment->setText(i18n("Comment")); ui->label_comment->setText(i18n("Comment"));
ui->label_number->setText(i18n("Tag")); ui->label_number->setText(i18n("Tag"));

View File

@ -15,19 +15,13 @@
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/ ***************************************************************************/
#ifndef EXTUPGRADE_H #pragma once
#define EXTUPGRADE_H
#include <QProcess> #include <QProcess>
#include "abstractextitem.h" #include "abstractextitem.h"
namespace Ui
{
class ExtUpgrade;
}
class ExtUpgrade : public AbstractExtItem class ExtUpgrade : public AbstractExtItem
{ {
Q_OBJECT Q_OBJECT
@ -36,7 +30,7 @@ class ExtUpgrade : public AbstractExtItem
Q_PROPERTY(int null READ null WRITE setNull) Q_PROPERTY(int null READ null WRITE setNull)
public: public:
explicit ExtUpgrade(QWidget *_parent = nullptr, const QString &_filePath = ""); explicit ExtUpgrade(QObject *_parent = nullptr, const QString &_filePath = "");
~ExtUpgrade() override; ~ExtUpgrade() override;
ExtUpgrade *copy(const QString &_fileName, int _number) override; ExtUpgrade *copy(const QString &_fileName, int _number) override;
// get methods // get methods
@ -52,7 +46,7 @@ public:
public slots: public slots:
void readConfiguration() override; void readConfiguration() override;
QVariantHash run() override; QVariantHash run() override;
int showConfiguration(const QVariant &_args) override; int showConfiguration(QWidget *_parent, const QVariant &_args) override;
void writeConfiguration() const override; void writeConfiguration() const override;
private slots: private slots:
@ -61,8 +55,7 @@ private slots:
private: private:
QProcess *m_process = nullptr; QProcess *m_process = nullptr;
Ui::ExtUpgrade *ui = nullptr; void translate(void *_ui) override;
void translate() override;
// properties // properties
QString m_executable = "/usr/bin/true"; QString m_executable = "/usr/bin/true";
QString m_filter = ""; QString m_filter = "";
@ -70,6 +63,3 @@ private:
// internal properties // internal properties
QVariantHash m_values; QVariantHash m_values;
}; };
#endif /* EXTUPGRADE_H */

View File

@ -29,20 +29,16 @@
#include "awdebug.h" #include "awdebug.h"
#include "owmweatherprovider.h" #include "owmweatherprovider.h"
#include "yahooweatherprovider.h"
ExtWeather::ExtWeather(QWidget *_parent, const QString &_filePath) ExtWeather::ExtWeather(QObject *_parent, const QString &_filePath)
: AbstractExtItem(_parent, _filePath) : AbstractExtItem(_parent, _filePath)
, ui(new Ui::ExtWeather)
{ {
qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; qCDebug(LOG_LIB) << __PRETTY_FUNCTION__;
if (!_filePath.isEmpty()) if (!_filePath.isEmpty())
ExtWeather::readConfiguration(); ExtWeather::readConfiguration();
readJsonMap(); readJsonMap();
ui->setupUi(this);
ExtWeather::translate();
m_values[tag("weatherId")] = 0; m_values[tag("weatherId")] = 0;
m_values[tag("weather")] = ""; m_values[tag("weather")] = "";
@ -53,9 +49,8 @@ ExtWeather::ExtWeather(QWidget *_parent, const QString &_filePath)
// HACK declare as child of nullptr to avoid crash with plasmawindowed // HACK declare as child of nullptr to avoid crash with plasmawindowed
// in the destructor // in the destructor
m_manager = new QNetworkAccessManager(nullptr); m_manager = new QNetworkAccessManager(nullptr);
connect(m_manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(weatherReplyReceived(QNetworkReply *))); connect(m_manager, &QNetworkAccessManager::finished, this, &ExtWeather::weatherReplyReceived);
connect(this, &ExtWeather::requestDataUpdate, this, &ExtWeather::sendRequest);
connect(this, SIGNAL(requestDataUpdate()), this, SLOT(sendRequest()));
} }
@ -63,11 +58,10 @@ ExtWeather::~ExtWeather()
{ {
qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; qCDebug(LOG_LIB) << __PRETTY_FUNCTION__;
disconnect(m_manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(weatherReplyReceived(QNetworkReply *))); disconnect(m_manager, &QNetworkAccessManager::finished, this, &ExtWeather::weatherReplyReceived);
disconnect(this, SIGNAL(requestDataUpdate()), this, SLOT(sendRequest())); disconnect(this, &ExtWeather::requestDataUpdate, this, &ExtWeather::sendRequest);
m_manager->deleteLater(); m_manager->deleteLater();
delete ui;
} }
@ -75,7 +69,7 @@ ExtWeather *ExtWeather::copy(const QString &_fileName, const int _number)
{ {
qCDebug(LOG_LIB) << "File" << _fileName << "number" << _number; qCDebug(LOG_LIB) << "File" << _fileName << "number" << _number;
auto *item = new ExtWeather(dynamic_cast<QWidget *>(parent()), _fileName); auto item = new ExtWeather(parent(), _fileName);
copyDefaults(item); copyDefaults(item);
item->setCity(city()); item->setCity(city());
item->setCountry(country()); item->setCountry(country());
@ -102,7 +96,7 @@ QString ExtWeather::weatherFromInt(const int _id) const
{ {
qCDebug(LOG_LIB) << "Weather ID" << _id; 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(); return map.value(QString::number(_id), map["default"]).toString();
} }
@ -155,7 +149,7 @@ int ExtWeather::ts() const
QString ExtWeather::uniq() const QString ExtWeather::uniq() const
{ {
return QString("%1 (%2) at %3").arg(city()).arg(country()).arg(ts()); return QString("%1 (%2) at %3").arg(city(), country()).arg(ts());
} }
@ -236,17 +230,17 @@ void ExtWeather::readConfiguration()
void ExtWeather::readJsonMap() void ExtWeather::readJsonMap()
{ {
QString fileName = jsonMapFile(); auto fileName = jsonMapFile();
QFile jsonFile(fileName); QFile jsonFile(fileName);
if (!jsonFile.open(QIODevice::ReadOnly | QIODevice::Text)) { if (!jsonFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
qCWarning(LOG_LIB) << "Could not open" << fileName; qCWarning(LOG_LIB) << "Could not open" << fileName;
return; return;
} }
QString jsonText = jsonFile.readAll(); auto jsonText = jsonFile.readAll();
jsonFile.close(); jsonFile.close();
QJsonParseError error{}; QJsonParseError error{};
QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonText.toUtf8(), &error); auto jsonDoc = QJsonDocument::fromJson(jsonText, &error);
if (error.error != QJsonParseError::NoError) { if (error.error != QJsonParseError::NoError) {
qCWarning(LOG_LIB) << "Parse error" << error.errorString(); qCWarning(LOG_LIB) << "Parse error" << error.errorString();
return; return;
@ -267,10 +261,15 @@ QVariantHash ExtWeather::run()
} }
int ExtWeather::showConfiguration(const QVariant &_args) int ExtWeather::showConfiguration(QWidget *_parent, const QVariant &_args)
{ {
Q_UNUSED(_args) Q_UNUSED(_args)
auto dialog = new QDialog(_parent);
auto ui = new Ui::ExtWeather();
ui->setupUi(dialog);
translate(ui);
ui->lineEdit_name->setText(name()); ui->lineEdit_name->setText(name());
ui->lineEdit_comment->setText(comment()); ui->lineEdit_comment->setText(comment());
ui->label_numberValue->setText(QString("%1").arg(number())); ui->label_numberValue->setText(QString("%1").arg(number()));
@ -284,9 +283,8 @@ int ExtWeather::showConfiguration(const QVariant &_args)
ui->lineEdit_socket->setText(socket()); ui->lineEdit_socket->setText(socket());
ui->spinBox_interval->setValue(interval()); ui->spinBox_interval->setValue(interval());
int ret = exec(); int ret = dialog->exec();
if (ret != 1) if (ret == 1) {
return ret;
setName(ui->lineEdit_name->text()); setName(ui->lineEdit_name->text());
setComment(ui->lineEdit_comment->text()); setComment(ui->lineEdit_comment->text());
setNumber(ui->label_numberValue->text().toInt()); setNumber(ui->label_numberValue->text().toInt());
@ -302,6 +300,11 @@ int ExtWeather::showConfiguration(const QVariant &_args)
setInterval(ui->spinBox_interval->value()); setInterval(ui->spinBox_interval->value());
writeConfiguration(); writeConfiguration();
}
dialog->deleteLater();
delete ui;
return ret; return ret;
} }
@ -328,7 +331,7 @@ void ExtWeather::writeConfiguration() const
void ExtWeather::sendRequest() void ExtWeather::sendRequest()
{ {
m_isRunning = true; 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); new QReplyTimeout(reply, REQUEST_TIMEOUT);
} }
@ -342,14 +345,14 @@ void ExtWeather::weatherReplyReceived(QNetworkReply *_reply)
m_isRunning = false; m_isRunning = false;
QJsonParseError error{}; QJsonParseError error{};
QJsonDocument jsonDoc = QJsonDocument::fromJson(_reply->readAll(), &error); auto jsonDoc = QJsonDocument::fromJson(_reply->readAll(), &error);
_reply->deleteLater(); _reply->deleteLater();
if (error.error != QJsonParseError::NoError) { if (error.error != QJsonParseError::NoError) {
qCWarning(LOG_LIB) << "Parse error" << error.errorString(); qCWarning(LOG_LIB) << "Parse error" << error.errorString();
return; return;
} }
QVariantHash data = m_providerObject->parse(jsonDoc.toVariant().toMap()); auto data = m_providerObject->parse(jsonDoc.toVariant().toMap());
if (data.isEmpty()) if (data.isEmpty())
return; return;
m_values = data; m_values = data;
@ -370,8 +373,10 @@ void ExtWeather::initProvider()
} }
void ExtWeather::translate() void ExtWeather::translate(void *_ui)
{ {
auto ui = reinterpret_cast<Ui::ExtWeather *>(_ui);
ui->label_name->setText(i18n("Name")); ui->label_name->setText(i18n("Name"));
ui->label_comment->setText(i18n("Comment")); ui->label_comment->setText(i18n("Comment"));
ui->label_number->setText(i18n("Tag")); ui->label_number->setText(i18n("Tag"));

View File

@ -15,8 +15,7 @@
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/ ***************************************************************************/
#ifndef EXTWEATHER_H #pragma once
#define EXTWEATHER_H
#include <QNetworkReply> #include <QNetworkReply>
@ -42,7 +41,7 @@ class ExtWeather : public AbstractExtItem
public: public:
enum class Provider { OWM = 0, Yahoo = 1 }; 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() override;
ExtWeather *copy(const QString &_fileName, int _number) override; ExtWeather *copy(const QString &_fileName, int _number) override;
static QString jsonMapFile(); static QString jsonMapFile();
@ -67,7 +66,7 @@ public slots:
void readConfiguration() override; void readConfiguration() override;
void readJsonMap(); void readJsonMap();
QVariantHash run() override; QVariantHash run() override;
int showConfiguration(const QVariant &_args) override; int showConfiguration(QWidget *_parent, const QVariant &_args) override;
void writeConfiguration() const override; void writeConfiguration() const override;
private slots: private slots:
@ -78,9 +77,8 @@ private:
AbstractWeatherProvider *m_providerObject = nullptr; AbstractWeatherProvider *m_providerObject = nullptr;
QNetworkAccessManager *m_manager = nullptr; QNetworkAccessManager *m_manager = nullptr;
bool m_isRunning = false; bool m_isRunning = false;
Ui::ExtWeather *ui = nullptr;
void initProvider(); void initProvider();
void translate() override; void translate(void *_ui) override;
// properties // properties
QString m_city = "London"; QString m_city = "London";
QString m_country = "uk"; QString m_country = "uk";
@ -91,6 +89,3 @@ private:
// values // values
QVariantHash m_values; QVariantHash m_values;
}; };
#endif /* EXTWEATHER_H */

View File

@ -32,9 +32,8 @@
#include "graphicalitemhelper.h" #include "graphicalitemhelper.h"
GraphicalItem::GraphicalItem(QWidget *_parent, const QString &_filePath) GraphicalItem::GraphicalItem(QObject *_parent, const QString &_filePath)
: AbstractExtItem(_parent, _filePath) : AbstractExtItem(_parent, _filePath)
, ui(new Ui::GraphicalItem)
{ {
qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; qCDebug(LOG_LIB) << __PRETTY_FUNCTION__;
@ -53,21 +52,6 @@ GraphicalItem::GraphicalItem(QWidget *_parent, const QString &_filePath)
if (!_filePath.isEmpty()) if (!_filePath.isEmpty())
GraphicalItem::readConfiguration(); GraphicalItem::readConfiguration();
ui->setupUi(this);
GraphicalItem::translate();
connect(ui->checkBox_custom, SIGNAL(stateChanged(int)), this, SLOT(changeValue(int)));
connect(ui->comboBox_type, SIGNAL(currentIndexChanged(int)), this, SLOT(changeCountState(int)));
connect(ui->toolButton_activeColor, SIGNAL(clicked()), this, SLOT(changeColor()));
connect(ui->toolButton_inactiveColor, SIGNAL(clicked()), this, SLOT(changeColor()));
}
GraphicalItem::~GraphicalItem()
{
qCDebug(LOG_LIB) << __PRETTY_FUNCTION__;
delete ui;
} }
@ -75,7 +59,7 @@ GraphicalItem *GraphicalItem::copy(const QString &_fileName, const int _number)
{ {
qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number; qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number;
auto *item = new GraphicalItem(dynamic_cast<QWidget *>(parent()), _fileName); auto item = new GraphicalItem(parent(), _fileName);
copyDefaults(item); copyDefaults(item);
item->setActiveColor(activeColor()); item->setActiveColor(activeColor());
item->setBar(bar()); item->setBar(bar());
@ -100,7 +84,7 @@ QString GraphicalItem::image(const QVariant &value)
m_scene->clear(); m_scene->clear();
int scale[2] = {1, 1}; int scale[2] = {1, 1};
float converted = GraphicalItemHelper::getPercents(value.toFloat(), minValue(), maxValue()); auto converted = GraphicalItemHelper::getPercents(value.toFloat(), minValue(), maxValue());
// paint // paint
switch (m_type) { switch (m_type) {
@ -132,11 +116,11 @@ QString GraphicalItem::image(const QVariant &value)
} }
// convert // 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; QByteArray byteArray;
QBuffer buffer(&byteArray); QBuffer buffer(&byteArray);
pixmap.save(&buffer, "PNG"); 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; 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; 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_name->setText(name());
ui->lineEdit_comment->setText(comment()); ui->lineEdit_comment->setText(comment());
@ -476,9 +471,8 @@ int GraphicalItem::showConfiguration(const QVariant &_args)
emit(ui->comboBox_type->currentIndexChanged(ui->comboBox_type->currentIndex())); emit(ui->comboBox_type->currentIndexChanged(ui->comboBox_type->currentIndex()));
emit(ui->checkBox_custom->stateChanged(ui->checkBox_custom->checkState())); emit(ui->checkBox_custom->stateChanged(ui->checkBox_custom->checkState()));
int ret = exec(); int ret = dialog->exec();
if (ret != 1) if (ret == 1) {
return ret;
setName(ui->lineEdit_name->text()); setName(ui->lineEdit_name->text());
setComment(ui->lineEdit_comment->text()); setComment(ui->lineEdit_comment->text());
setApiVersion(AW_GRAPHITEM_API); setApiVersion(AW_GRAPHITEM_API);
@ -495,6 +489,11 @@ int GraphicalItem::showConfiguration(const QVariant &_args)
setItemWidth(ui->spinBox_width->value()); setItemWidth(ui->spinBox_width->value());
writeConfiguration(); writeConfiguration();
}
dialog->deleteLater();
delete ui;
return ret; return ret;
} }
@ -524,23 +523,23 @@ void GraphicalItem::writeConfiguration() const
} }
void GraphicalItem::changeColor() void GraphicalItem::changeColor(Ui::GraphicalItem *_ui)
{ {
QLineEdit *lineEdit; QLineEdit *lineEdit;
int state; int state;
if (sender() == ui->toolButton_activeColor) { if (sender() == _ui->toolButton_activeColor) {
lineEdit = ui->lineEdit_activeColor; lineEdit = _ui->lineEdit_activeColor;
state = ui->comboBox_activeImageType->currentIndex(); state = _ui->comboBox_activeImageType->currentIndex();
} else { } else {
lineEdit = ui->lineEdit_inactiveColor; lineEdit = _ui->lineEdit_inactiveColor;
state = ui->comboBox_inactiveImageType->currentIndex(); state = _ui->comboBox_inactiveImageType->currentIndex();
} }
qCInfo(LOG_LIB) << "Using state" << state << "and lineEdit" << lineEdit; qCInfo(LOG_LIB) << "Using state" << state << "and lineEdit" << lineEdit;
QString outputColor; QString outputColor;
if (state == 0) { if (state == 0) {
QColor color = GraphicalItemHelper::stringToColor(lineEdit->text()); auto color = GraphicalItemHelper::stringToColor(lineEdit->text());
QColor newColor = QColorDialog::getColor(color, this, i18n("Select color"), QColorDialog::ShowAlphaChannel); auto newColor = QColorDialog::getColor(color, nullptr, i18n("Select color"), QColorDialog::ShowAlphaChannel);
if (!newColor.isValid()) if (!newColor.isValid())
return; return;
qCInfo(LOG_LIB) << "Selected color" << newColor; qCInfo(LOG_LIB) << "Selected color" << newColor;
@ -553,9 +552,9 @@ void GraphicalItem::changeColor()
outputColor = QString("color://%1").arg(colorText.join(',')); outputColor = QString("color://%1").arg(colorText.join(','));
} else if (state == 1) { } else if (state == 1) {
QString path = lineEdit->text(); auto path = lineEdit->text();
QString directory = QFileInfo(path).absolutePath(); auto directory = QFileInfo(path).absolutePath();
outputColor = QFileDialog::getOpenFileUrl(this, i18n("Select path"), directory, outputColor = QFileDialog::getOpenFileUrl(nullptr, i18n("Select path"), directory,
i18n("Images (*.png *.bpm *.jpg);;All files (*.*)")) i18n("Images (*.png *.bpm *.jpg);;All files (*.*)"))
.toString(); .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; qCDebug(LOG_LIB) << "Current state is" << _state;
// 3 is magic number. Actually 3 is Graph mode // 3 is magic number. Actually 3 is Graph mode
ui->widget_count->setHidden(_state != 3); _ui->widget_count->setHidden(_state != 3);
} }
void GraphicalItem::changeValue(const int _state) void GraphicalItem::changeValue(Ui::GraphicalItem *_ui, const int _state)
{ {
qCDebug(LOG_LIB) << "Current state is" << _state; qCDebug(LOG_LIB) << "Current state is" << _state;
ui->widget_value->setHidden(_state != Qt::Unchecked); _ui->widget_value->setHidden(_state != Qt::Unchecked);
ui->widget_customValue->setHidden(_state == Qt::Unchecked); _ui->widget_customValue->setHidden(_state == Qt::Unchecked);
} }
void GraphicalItem::translate() void GraphicalItem::translate(void *_ui)
{ {
auto ui = reinterpret_cast<Ui::GraphicalItem *>(_ui);
ui->label_name->setText(i18n("Name")); ui->label_name->setText(i18n("Name"));
ui->label_comment->setText(i18n("Comment")); ui->label_comment->setText(i18n("Comment"));
ui->label_number->setText(i18n("Tag")); ui->label_number->setText(i18n("Tag"));

View File

@ -15,8 +15,7 @@
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/ ***************************************************************************/
#ifndef GRAPHICALITEM_H #pragma once
#define GRAPHICALITEM_H
#include <QColor> #include <QColor>
@ -52,8 +51,7 @@ public:
enum class Direction { LeftToRight = 0, RightToLeft = 1 }; enum class Direction { LeftToRight = 0, RightToLeft = 1 };
enum class Type { Horizontal = 0, Vertical = 1, Circle = 2, Graph = 3, Bars = 4 }; enum class Type { Horizontal = 0, Vertical = 1, Circle = 2, Graph = 3, Bars = 4 };
explicit GraphicalItem(QWidget *_parent = nullptr, const QString &_filePath = ""); explicit GraphicalItem(QObject *_parent = nullptr, const QString &_filePath = "");
~GraphicalItem() override;
GraphicalItem *copy(const QString &_fileName, int _number) override; GraphicalItem *copy(const QString &_fileName, int _number) override;
QString image(const QVariant &value); QString image(const QVariant &value);
void initScene(); void initScene();
@ -92,20 +90,19 @@ public:
public slots: public slots:
void readConfiguration() override; void readConfiguration() override;
QVariantHash run() override { return {}; }; QVariantHash run() override { return {}; };
int showConfiguration(const QVariant &_args) override; int showConfiguration(QWidget *_parent, const QVariant &_args) override;
void writeConfiguration() const override; void writeConfiguration() const override;
private slots: private slots:
void changeColor(); void changeColor(Ui::GraphicalItem *_ui);
void changeCountState(int _state); void changeCountState(Ui::GraphicalItem *_ui, int _state);
void changeValue(int _state); void changeValue(Ui::GraphicalItem *_ui, int _state);
private: private:
GraphicalItemHelper *m_helper = nullptr; GraphicalItemHelper *m_helper = nullptr;
QGraphicsScene *m_scene = nullptr; QGraphicsScene *m_scene = nullptr;
QGraphicsView *m_view = nullptr; QGraphicsView *m_view = nullptr;
Ui::GraphicalItem *ui = nullptr; void translate(void *_ui) override;
void translate() override;
// properties // properties
QString m_bar = "cpu"; QString m_bar = "cpu";
int m_count = 100; int m_count = 100;
@ -120,6 +117,3 @@ private:
QStringList m_usedKeys; QStringList m_usedKeys;
int m_width = 100; int m_width = 100;
}; };
#endif /* GRAPHICALITEM_H */

View File

@ -15,8 +15,7 @@
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/ ***************************************************************************/
#ifndef GRAPHICALITEMHELPER_H #pragma once
#define GRAPHICALITEMHELPER_H
#include <QColor> #include <QColor>
#include <QObject> #include <QObject>
@ -56,6 +55,3 @@ private:
// list of values which will be used to store data for graph type only // list of values which will be used to store data for graph type only
QList<float> m_values; QList<float> m_values;
}; };
#endif /* GRAPHICALITEMHELPER_H */

View File

@ -93,13 +93,13 @@ QVariantHash OWMWeatherProvider::parseSingleJson(const QVariantMap &_json) const
// main data // main data
QVariantMap mainWeather = _json["main"].toMap(); QVariantMap mainWeather = _json["main"].toMap();
if (!weather.isEmpty()) { if (!weather.isEmpty()) {
output[tag("humidity")] = mainWeather["humidity"].toFloat(); output[tag("humidity")] = mainWeather["humidity"].toDouble();
output[tag("pressure")] = mainWeather["pressure"].toFloat(); output[tag("pressure")] = mainWeather["pressure"].toDouble();
output[tag("temperature")] = mainWeather["temp"].toFloat(); output[tag("temperature")] = mainWeather["temp"].toDouble();
} }
// timestamp // timestamp
output[tag("timestamp")] = QDateTime::fromTime_t(_json["dt"].toUInt()).toUTC(); output[tag("timestamp")] = QDateTime::fromSecsSinceEpoch(_json["dt"].toUInt()).toUTC();
return output; return output;
} }

Some files were not shown because too many files have changed in this diff Show More