Compare commits

..

1 Commits

Author SHA1 Message Date
e6aecaf685 port dataengin 2024-03-15 18:01:03 +02:00
109 changed files with 1665 additions and 1712 deletions

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

View File

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

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 "4") set(PROJECT_VERSION_MAJOR "3")
set(PROJECT_VERSION_MINOR "0") set(PROJECT_VERSION_MINOR "5")
set(PROJECT_VERSION_PATCH "0") set(PROJECT_VERSION_PATCH "1")
set(PROJECT_VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}") set(PROJECT_VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}")
# append git version if any # append git version if any
set(PROJECT_COMMIT_SHA "Commit hash" CACHE INTERNAL "") set(PROJECT_COMMIT_SHA "Commit hash" CACHE INTERNAL "")

View File

@ -17,17 +17,14 @@
#include "awdataengineaggregator.h" #include "awdataengineaggregator.h"
#include <ksysguard/formatter/Unit.h>
#include <ksysguard/systemstats/DBusInterface.h>
#include <QDBusConnection> #include <QDBusConnection>
#include <ksysguard/systemstats/DBusInterface.h>
#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__;
@ -36,14 +33,15 @@ AWDataEngineAggregator::AWDataEngineAggregator(QObject *_parent)
qDBusRegisterMetaType<KSysGuard::SensorDataList>(); qDBusRegisterMetaType<KSysGuard::SensorDataList>();
qDBusRegisterMetaType<QHash<QString, KSysGuard::SensorInfo>>(); qDBusRegisterMetaType<QHash<QString, KSysGuard::SensorInfo>>();
connect(m_interface, &KSysGuard::SystemStats::DBusInterface::newSensorData, this, m_interface = new KSysGuard::SystemStats::DBusInterface(
&AWDataEngineAggregator::updateData); KSysGuard::SystemStats::ServiceName, KSysGuard::SystemStats::ObjectPath, QDBusConnection::sessionBus(), this);
connect(m_interface, &KSysGuard::SystemStats::DBusInterface::sensorMetaDataChanged, this,
&AWDataEngineAggregator::updateSensors); connect(m_interface, SIGNAL(newSensorData(KSysGuard::SensorDataList)), this,
connect(m_interface, &KSysGuard::SystemStats::DBusInterface::sensorAdded, this, SLOT(updateData(KSysGuard::SensorDataList)));
&AWDataEngineAggregator::sensorAdded); connect(m_interface, SIGNAL(sensorMetaDataChanged(const QHash<QString, KSysGuard::SensorInfo> &)), this,
connect(m_interface, &KSysGuard::SystemStats::DBusInterface::sensorRemoved, this, SLOT(updateSensors(const QHash<QString, KSysGuard::SensorInfo> &)));
&AWDataEngineAggregator::sensorRemoved); connect(m_interface, SIGNAL(sensorAdded(const QString &)), this, SLOT(sensorAdded(const QString &)));
connect(m_interface, SIGNAL(sensorRemoved(const QString &)), this, SLOT(sensorRemoved(const QString &)));
loadSources(); loadSources();
} }
@ -54,30 +52,12 @@ AWDataEngineAggregator::~AWDataEngineAggregator()
qCDebug(LOG_AW) << __PRETTY_FUNCTION__; qCDebug(LOG_AW) << __PRETTY_FUNCTION__;
disconnectSources(); disconnectSources();
m_interface->deleteLater();
}
void AWDataEngineAggregator::connectSources()
{
auto keys = m_sensors.keys();
auto newKeys = QSet(keys.cbegin(), keys.cend()) - m_subscribed;
m_interface->subscribe(newKeys.values()).waitForFinished();
m_subscribed.unite(newKeys);
} }
void AWDataEngineAggregator::disconnectSources() void AWDataEngineAggregator::disconnectSources()
{ {
m_interface->unsubscribe(m_subscribed.values()).waitForFinished(); m_interface->unsubscribe(m_sensors.keys());
m_subscribed.clear();
}
bool AWDataEngineAggregator::isValidSensor(const KSysGuard::SensorInfo &_sensor)
{
return _sensor.unit != KSysGuard::UnitInvalid;
} }
@ -88,18 +68,25 @@ void AWDataEngineAggregator::loadSources()
auto sensors = response.value(); auto sensors = response.value();
updateSensors(sensors); updateSensors(sensors);
connectSources(); for (auto &sensor : sensors.keys())
sensorAdded(sensor);
}
void AWDataEngineAggregator::reconnectSources(const int interval)
{
qCDebug(LOG_AW) << "Reconnect all sources with update interval" << interval;
disconnectSources();
m_interface->subscribe(m_sensors.keys());
} }
void AWDataEngineAggregator::dropSource(const QString &_source) void AWDataEngineAggregator::dropSource(const QString &_source)
{ {
qCDebug(LOG_AW) << "Disconnect sensor" << _source; qCDebug(LOG_AW) << "Disconnect source" << _source;
if (m_subscribed.contains(_source)) { m_interface->unsubscribe({_source});
m_interface->unsubscribe({_source}).waitForFinished();
m_subscribed.remove(_source);
}
} }
@ -107,20 +94,7 @@ void AWDataEngineAggregator::sensorAdded(const QString &_sensor)
{ {
qCDebug(LOG_AW) << "New sensor added" << _sensor; qCDebug(LOG_AW) << "New sensor added" << _sensor;
// check if sensor is actually valid m_interface->subscribe({_sensor});
auto response = m_interface->sensors({_sensor});
response.waitForFinished();
auto info = response.value().value(_sensor);
if (!isValidSensor(info))
return;
m_sensors[_sensor] = info;
dropSource(_sensor); // force reconnect
if (!m_subscribed.contains(_sensor)) {
m_interface->subscribe({_sensor}).waitForFinished();
m_subscribed.insert(_sensor);
}
} }
@ -129,10 +103,9 @@ void AWDataEngineAggregator::sensorRemoved(const QString &_sensor)
qCDebug(LOG_AW) << "Sensor" << _sensor << "has been removed"; qCDebug(LOG_AW) << "Sensor" << _sensor << "has been removed";
m_sensors.remove(_sensor); m_sensors.remove(_sensor);
dropSource(_sensor); m_interface->unsubscribe({_sensor});
} }
void AWDataEngineAggregator::updateData(KSysGuard::SensorDataList _data) void AWDataEngineAggregator::updateData(KSysGuard::SensorDataList _data)
{ {
emit(dataUpdated(m_sensors, _data)); emit(dataUpdated(m_sensors, _data));
@ -141,9 +114,6 @@ void AWDataEngineAggregator::updateData(KSysGuard::SensorDataList _data)
void AWDataEngineAggregator::updateSensors(const QHash<QString, KSysGuard::SensorInfo> &_sensors) void AWDataEngineAggregator::updateSensors(const QHash<QString, KSysGuard::SensorInfo> &_sensors)
{ {
for (auto sensor = _sensors.cbegin(); sensor != _sensors.cend(); ++sensor) { for (auto sensor = _sensors.cbegin(); sensor != _sensors.cend(); ++sensor)
if (!isValidSensor(sensor.value()))
continue;
m_sensors.insert(sensor.key(), sensor.value()); m_sensors.insert(sensor.key(), sensor.value());
}
} }

View File

@ -15,20 +15,23 @@
* 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
#define AWDATAENGINEAGGREGATOR_H
#include <ksysguard/systemstats/SensorInfo.h> #include <ksysguard/systemstats/SensorInfo.h>
#include <QHash>
#include <QObject> #include <QObject>
#include <QHash>
#include <QSet> #include <QSet>
namespace KSysGuard::SystemStats namespace KSysGuard::SystemStats
{ {
class DBusInterface; class DBusInterface;
} }
class AWDataEngineAggregator : public QObject class AWDataEngineAggregator : public QObject
{ {
Q_OBJECT Q_OBJECT
@ -36,10 +39,9 @@ class AWDataEngineAggregator : public QObject
public: public:
explicit AWDataEngineAggregator(QObject *_parent = nullptr); explicit AWDataEngineAggregator(QObject *_parent = nullptr);
~AWDataEngineAggregator() override; ~AWDataEngineAggregator() override;
void connectSources();
void disconnectSources(); void disconnectSources();
[[nodiscard]] static bool isValidSensor(const KSysGuard::SensorInfo &_sensor);
void loadSources(); void loadSources();
void reconnectSources(const int interval);
signals: signals:
void dataUpdated(const QHash<QString, KSysGuard::SensorInfo> &_sensors, const KSysGuard::SensorDataList &_data); void dataUpdated(const QHash<QString, KSysGuard::SensorInfo> &_sensors, const KSysGuard::SensorDataList &_data);
@ -55,5 +57,7 @@ public slots:
private: private:
KSysGuard::SystemStats::DBusInterface *m_interface = nullptr; KSysGuard::SystemStats::DBusInterface *m_interface = nullptr;
QHash<QString, KSysGuard::SensorInfo> m_sensors; QHash<QString, KSysGuard::SensorInfo> m_sensors;
QSet<QString> m_subscribed;
}; };
#endif /* AWDATAENGINEAGGREGATOR_H */

View File

@ -76,15 +76,13 @@ QStringList AWDataEngineMapper::keysFromSource(const QString &_source) const
// HACK units required to define should the value be calculated as temperature // HACK units required to define should the value be calculated as temperature
// or fan data // or fan data
QStringList AWDataEngineMapper::registerSource(const QString &_source, const KSysGuard::Unit _units, QStringList AWDataEngineMapper::registerSource(const QString &_source, const KSysGuard::Unit _units, const QStringList &_keys)
const QStringList &_keys)
{ {
qCDebug(LOG_AW) << "Source" << _source << "with units" << _units; qCDebug(LOG_AW) << "Source" << _source << "with units" << _units;
// regular expressions // regular expressions
auto cpuRegExp = QRegularExpression("^cpu/cpu.*/usage$"); auto cpuRegExp = QRegularExpression("^cpu/cpu.*/usage$");
auto cpuclRegExp = QRegularExpression("^cpu/cpu.*/frequency$"); auto cpuclRegExp = QRegularExpression("^cpu/cpu.*/frequency$");
auto cpuTempRegExp = QRegularExpression("^cpu/cpu.*/temperature$");
auto hddrRegExp = QRegularExpression("^disk/.*/read$"); auto hddrRegExp = QRegularExpression("^disk/.*/read$");
auto hddwRegExp = QRegularExpression("^disk/.*/write$"); auto hddwRegExp = QRegularExpression("^disk/.*/write$");
auto mountFillRegExp = QRegularExpression("^disk/.*/usedPercent$"); auto mountFillRegExp = QRegularExpression("^disk/.*/usedPercent$");
@ -93,14 +91,14 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const KSy
auto netRegExp = QRegularExpression("^network/.*/(download|upload)$"); auto netRegExp = QRegularExpression("^network/.*/(download|upload)$");
auto netTotalRegExp = QRegularExpression("^network/.*/(totalDownload|totalUpload)$"); auto netTotalRegExp = QRegularExpression("^network/.*/(totalDownload|totalUpload)$");
if (_source == "extsysmon/battery/ac") { if (_source == "battery/ac") {
// AC // AC
m_map.insert(_source, "ac"); m_map.insert(_source, "ac");
m_formatter["ac"] = AWKeysAggregator::FormatterType::ACFormat; m_formatter["ac"] = AWKeysAggregator::FormatterType::ACFormat;
} else if (_source.startsWith("extsysmon/battery/")) { } else if (_source.startsWith("battery/")) {
// battery stats // battery stats
QString key = _source; QString key = _source;
key.remove("extsysmon/battery/"); key.remove("battery/");
m_map.insert(_source, key); m_map.insert(_source, key);
m_formatter[key] = _source.contains("rate") ? AWKeysAggregator::FormatterType::Float m_formatter[key] = _source.contains("rate") ? AWKeysAggregator::FormatterType::Float
: AWKeysAggregator::FormatterType::IntegerThree; : AWKeysAggregator::FormatterType::IntegerThree;
@ -125,21 +123,21 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const KSy
key = QString("cpucl%1").arg(key); key = QString("cpucl%1").arg(key);
m_map.insert(_source, key); m_map.insert(_source, key);
m_formatter[key] = AWKeysAggregator::FormatterType::Integer; m_formatter[key] = AWKeysAggregator::FormatterType::Integer;
} else if (_source.startsWith("extsysmon/custom")) { } else if (_source.startsWith("custom")) {
// custom // custom
QString key = _source; QString key = _source;
key.remove("extsysmon/custom/"); key.remove("custom/");
m_map.insert(_source, key); m_map.insert(_source, key);
m_formatter[key] = AWKeysAggregator::FormatterType::NoFormat; m_formatter[key] = AWKeysAggregator::FormatterType::NoFormat;
} else if (_source == "extsysmon/desktop/name") { } else if (_source == "desktop/current/name") {
// current desktop name // current desktop name
m_map.insert(_source, "desktop"); m_map.insert(_source, "desktop");
m_formatter["desktop"] = AWKeysAggregator::FormatterType::NoFormat; m_formatter["desktop"] = AWKeysAggregator::FormatterType::NoFormat;
} else if (_source == "extsysmon/desktop/number") { } else if (_source == "desktop/current/number") {
// current desktop number // current desktop number
m_map.insert(_source, "ndesktop"); m_map.insert(_source, "ndesktop");
m_formatter["ndesktop"] = AWKeysAggregator::FormatterType::NoFormat; m_formatter["ndesktop"] = AWKeysAggregator::FormatterType::NoFormat;
} else if (_source == "extsysmon/desktop/count") { } else if (_source == "desktop/total/number") {
// desktop count // desktop count
m_map.insert(_source, "tdesktops"); m_map.insert(_source, "tdesktops");
m_formatter["tdesktops"] = AWKeysAggregator::FormatterType::NoFormat; m_formatter["tdesktops"] = AWKeysAggregator::FormatterType::NoFormat;
@ -163,11 +161,11 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const KSy
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 == "extsysmon/gpuload/load") { } else if (_source == "gpu/load") {
// gpu load // gpu load
m_map.insert(_source, "gpu"); m_map.insert(_source, "gpu");
m_formatter["gpu"] = AWKeysAggregator::FormatterType::Float; m_formatter["gpu"] = AWKeysAggregator::FormatterType::Float;
} else if (_source == "extsysmon/gputemp/temperature") { } else if (_source == "gpu/temperature") {
// gpu temperature // gpu temperature
m_map.insert(_source, "gputemp"); m_map.insert(_source, "gputemp");
m_formatter["gputemp"] = AWKeysAggregator::FormatterType::Temperature; m_formatter["gputemp"] = AWKeysAggregator::FormatterType::Temperature;
@ -214,10 +212,10 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const KSy
m_map.insert(_source, key); m_map.insert(_source, key);
m_formatter[key] = AWKeysAggregator::FormatterType::MemGBFormat; m_formatter[key] = AWKeysAggregator::FormatterType::MemGBFormat;
} }
} else if (_source.startsWith("extsysmon/hdd/temperature")) { } else if (_source.startsWith("hdd/temperature")) {
// hdd temperature // hdd temperature
QString device = _source; QString device = _source;
device.remove("extsysmon/hdd/temperature"); device.remove("hdd/temperature");
int index = m_devices["hdd"].indexOf(device); int index = m_devices["hdd"].indexOf(device);
if (index > -1) { if (index > -1) {
QString key = QString("hddtemp%1").arg(index); QString key = QString("hddtemp%1").arg(index);
@ -255,18 +253,18 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const KSy
// gb // gb
m_map.insert(_source, "memusedgb"); m_map.insert(_source, "memusedgb");
m_formatter["memusedgb"] = AWKeysAggregator::FormatterType::MemGBFormat; m_formatter["memusedgb"] = AWKeysAggregator::FormatterType::MemGBFormat;
} else if (_source == "extsysmon/network/device") { } else if (_source == "network/current/name") {
// network device // network device
m_map.insert(_source, "netdev"); m_map.insert(_source, "netdev");
m_formatter["netdev"] = AWKeysAggregator::FormatterType::NoFormat; m_formatter["netdev"] = AWKeysAggregator::FormatterType::NoFormat;
} else if (_source == "extsysmon/network/ssid") { } else if (_source == "network/current/ssid") {
// current ssid // current ssid
m_map.insert(_source, "ssid"); m_map.insert(_source, "ssid");
m_formatter["ssid"] = AWKeysAggregator::FormatterType::NoFormat; m_formatter["ssid"] = AWKeysAggregator::FormatterType::NoFormat;
} else if (_source.startsWith("extsysmon/requests/response")) { } else if (_source.startsWith("network/response")) {
// network response // network response
QString key = _source; QString key = _source;
key.remove("extsysmon/requests/"); key.remove("network/");
m_map.insert(_source, key); m_map.insert(_source, key);
m_formatter[key] = AWKeysAggregator::FormatterType::NoFormat; m_formatter[key] = AWKeysAggregator::FormatterType::NoFormat;
} else if (_source.contains(netRegExp)) { } else if (_source.contains(netRegExp)) {
@ -301,34 +299,34 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const KSy
m_map.insert(_source, key); m_map.insert(_source, key);
m_formatter[key] = AWKeysAggregator::FormatterType::MemMBFormat; m_formatter[key] = AWKeysAggregator::FormatterType::MemMBFormat;
} }
} else if (_source.startsWith("extsysmon/upgrade")) { } else if (_source.startsWith("upgrade")) {
// package manager // package manager
QString key = _source; QString key = _source;
key.remove("extsysmon/upgrade/"); key.remove("upgrade/");
m_map.insert(_source, key); m_map.insert(_source, key);
m_formatter[key] = AWKeysAggregator::FormatterType::IntegerThree; m_formatter[key] = AWKeysAggregator::FormatterType::IntegerThree;
} else if (_source.startsWith("extsysmon/player")) { } else if (_source.startsWith("player")) {
// player // player
QString key = _source; QString key = _source;
key.remove("extsysmon/player/"); key.remove("player/");
m_map.insert(_source, key); m_map.insert(_source, key);
m_formatter[key] = AWKeysAggregator::FormatterType::NoFormat; m_formatter[key] = AWKeysAggregator::FormatterType::NoFormat;
} else if (_source == "extsysmon/ps/running") { } else if (_source == "ps/running/count") {
// running processes count // running processes count
m_map.insert(_source, "pscount"); m_map.insert(_source, "pscount");
m_formatter["pscount"] = AWKeysAggregator::FormatterType::NoFormat; m_formatter["pscount"] = AWKeysAggregator::FormatterType::NoFormat;
} else if (_source == "extsysmon/ps/list") { } else if (_source == "ps/running/list") {
// list of running processes // list of running processes
m_map.insert(_source, "ps"); m_map.insert(_source, "ps");
m_formatter["ps"] = AWKeysAggregator::FormatterType::List; m_formatter["ps"] = AWKeysAggregator::FormatterType::List;
} else if (_source == "extsysmon/ps/count") { } else if (_source == "ps/total/count") {
// total processes count // total processes count
m_map.insert(_source, "pstot"); m_map.insert(_source, "pstot");
m_formatter["pstot"] = AWKeysAggregator::FormatterType::NoFormat; m_formatter["pstot"] = AWKeysAggregator::FormatterType::NoFormat;
} else if (_source.startsWith("extsysmon/quotes")) { } else if (_source.startsWith("quotes")) {
// quotes // quotes
QString key = _source; QString key = _source;
key.remove("extsysmon/quotes/"); key.remove("quotes/");
m_map.insert(_source, key); m_map.insert(_source, key);
m_formatter[key] = AWKeysAggregator::FormatterType::Quotes; m_formatter[key] = AWKeysAggregator::FormatterType::Quotes;
} else if (_source == "memory/swap/free") { } else if (_source == "memory/swap/free") {
@ -347,10 +345,9 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const KSy
// gb // gb
m_map.insert(_source, "swapgb"); m_map.insert(_source, "swapgb");
m_formatter["swapgb"] = AWKeysAggregator::FormatterType::MemGBFormat; m_formatter["swapgb"] = AWKeysAggregator::FormatterType::MemGBFormat;
} else if (_source.startsWith("lmsensors/") || _source.contains(cpuTempRegExp) } else if (_source.startsWith("lmsensors/")) {
|| _source == "cpu/all/averageTemperature") {
// temperature // temperature
auto index = m_devices["temp"].indexOf(_source); int index = m_devices["temp"].indexOf(_source);
// HACK on DE initialization there are no units key // HACK on DE initialization there are no units key
if (_units == KSysGuard::UnitInvalid) if (_units == KSysGuard::UnitInvalid)
return QStringList({QString("temp%1").arg(index)}); return QStringList({QString("temp%1").arg(index)});
@ -360,7 +357,7 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const KSy
m_formatter[key] = _units == KSysGuard::UnitCelsius ? AWKeysAggregator::FormatterType::Temperature m_formatter[key] = _units == KSysGuard::UnitCelsius ? AWKeysAggregator::FormatterType::Temperature
: AWKeysAggregator::FormatterType::Integer; : AWKeysAggregator::FormatterType::Integer;
} }
} else if (_source == "extsysmon/time/now") { } else if (_source == "Local") {
// time // time
m_map.insert(_source, "time"); m_map.insert(_source, "time");
m_formatter["time"] = AWKeysAggregator::FormatterType::Time; m_formatter["time"] = AWKeysAggregator::FormatterType::Time;
@ -379,40 +376,40 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const KSy
// timestamp // timestamp
m_map.insert(_source, "tstime"); m_map.insert(_source, "tstime");
m_formatter["tstime"] = AWKeysAggregator::FormatterType::Timestamp; m_formatter["tstime"] = AWKeysAggregator::FormatterType::Timestamp;
} else if (_source == "extsysmon/system/brightness") { } else if (_source == "system/brightness") {
m_map.insert(_source, "brightness"); m_map.insert(_source, "brightness");
m_formatter["brightness"] = AWKeysAggregator::FormatterType::IntegerThree; m_formatter["brightness"] = AWKeysAggregator::FormatterType::IntegerThree;
} else if (_source == "extsysmon/system/volume") { } else if (_source == "system/volume") {
m_map.insert(_source, "volume"); m_map.insert(_source, "volume");
m_formatter["volume"] = AWKeysAggregator::FormatterType::IntegerThree; m_formatter["volume"] = AWKeysAggregator::FormatterType::IntegerThree;
} else if (_source == "os/system/uptime") { } else if (_source == "system/uptime") {
// uptime // uptime
m_map.insert(_source, "uptime"); m_map.insert(_source, "uptime");
m_formatter["uptime"] = AWKeysAggregator::FormatterType::Uptime; m_formatter["uptime"] = AWKeysAggregator::FormatterType::Uptime;
// custom uptime // custom uptime
m_map.insert(_source, "cuptime"); m_map.insert(_source, "cuptime");
m_formatter["cuptime"] = AWKeysAggregator::FormatterType::UptimeCustom; m_formatter["cuptime"] = AWKeysAggregator::FormatterType::UptimeCustom;
} else if (_source.startsWith("extsysmon/weather/temperature")) { } else if (_source.startsWith("weather/temperature")) {
// temperature // temperature
QString key = _source; QString key = _source;
key.remove("extsysmon/weather/"); key.remove("weather/");
m_map.insert(_source, key); m_map.insert(_source, key);
m_formatter[key] = AWKeysAggregator::FormatterType::Temperature; m_formatter[key] = AWKeysAggregator::FormatterType::Temperature;
} else if (_source.startsWith("extsysmon/weather/")) { } else if (_source.startsWith("weather/")) {
// other weather // other weather
QString key = _source; QString key = _source;
key.remove("extsysmon/weather/"); key.remove("weather/");
m_map.insert(_source, key); m_map.insert(_source, key);
m_formatter[key] = AWKeysAggregator::FormatterType::NoFormat; m_formatter[key] = AWKeysAggregator::FormatterType::NoFormat;
} else if (_source.startsWith("extsysmon/load/load")) { } else if (_source.startsWith("load/load")) {
// load source // load source
QString key = _source; QString key = _source;
key.remove("extsysmon/load/"); key.remove("load/");
m_map.insert(_source, key); m_map.insert(_source, key);
m_formatter[key] = AWKeysAggregator::FormatterType::Temperature; m_formatter[key] = AWKeysAggregator::FormatterType::Temperature;
} }
auto foundKeys = keysFromSource(_source); QStringList foundKeys = keysFromSource(_source);
// rewrite formatters for custom ones // rewrite formatters for custom ones
QStringList customFormattersKeys; QStringList customFormattersKeys;
@ -427,7 +424,7 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const KSy
// drop key from dictionary if no one user requested key required it // drop key from dictionary if no one user requested key required it
qCInfo(LOG_AW) << "Looking for keys" << foundKeys << "in" << _keys; qCInfo(LOG_AW) << "Looking for keys" << foundKeys << "in" << _keys;
auto required = _keys.isEmpty() || std::any_of(foundKeys.cbegin(), foundKeys.cend(), [&_keys](const QString &key) { bool required = _keys.isEmpty() || std::any_of(foundKeys.cbegin(), foundKeys.cend(), [&_keys](const QString &key) {
return _keys.contains(key); return _keys.contains(key);
}); });
if (!required) { if (!required) {

View File

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

View File

@ -51,7 +51,7 @@ private:
void initFormatters(); void initFormatters();
[[nodiscard]] static QPair<QString, AWAbstractFormatter::FormatterClass> readMetadata(const QString &_filePath); [[nodiscard]] static QPair<QString, AWAbstractFormatter::FormatterClass> readMetadata(const QString &_filePath);
// parent methods // parent methods
void doCreateItem(QListWidget *_widget) override; void doCreateItem() override;
// properties // properties
QHash<QString, AWAbstractFormatter *> m_formatters; QHash<QString, AWAbstractFormatter *> m_formatters;
QHash<QString, AWAbstractFormatter *> m_formattersClasses; QHash<QString, AWAbstractFormatter *> m_formattersClasses;

View File

@ -302,20 +302,18 @@ void AWKeyOperations::addDevice(const QString &_source)
{ {
qCDebug(LOG_AW) << "Source" << _source; qCDebug(LOG_AW) << "Source" << _source;
auto diskRegexp = QRegularExpression("disk/.*/read"); auto diskRegexp = QRegularExpression("disk/(?:md|sd|hd)[a-z|0-9]_.*/Rate/(?:rblk)");
auto mountRegexp = QRegularExpression("disk/.*/usedPercent"); auto mountRegexp = QRegularExpression("partitions/.*/filllevel");
auto cpuTempRegExp = QRegularExpression("^cpu/cpu.*/temperature$");
if (_source.contains(diskRegexp)) { if (_source.contains(diskRegexp)) {
auto device = _source; QString device = _source;
device.remove("disk/").remove("/read"); device.remove("/Rate/rblk");
addKeyToCache("disk", device); addKeyToCache("disk", device);
} else if (_source.contains(mountRegexp)) { } else if (_source.contains(mountRegexp)) {
auto device = _source; QString device = _source;
device.remove("disk/").remove("/usedPercent"); device.remove("partitions").remove("/filllevel");
addKeyToCache("mount", device); addKeyToCache("mount", device);
} else if (_source.startsWith("lmsensors") || _source.contains(cpuTempRegExp) } else if (_source.startsWith("lmsensors")) {
|| _source == "cpu/all/averageTemperature") {
addKeyToCache("temp", _source); addKeyToCache("temp", _source);
} }
} }

View File

@ -56,17 +56,20 @@ AWKeys::AWKeys(QObject *_parent)
createDBusInterface(); createDBusInterface();
// update key data if required // update key data if required
connect(m_keyOperator, &AWKeyOperations::updateKeys, this, &AWKeys::reinitKeys); connect(m_keyOperator, SIGNAL(updateKeys(const QStringList &)), this, SLOT(reinitKeys(const QStringList &)));
connect(m_timer, &QTimer::timeout, this, &AWKeys::updateTextData); connect(m_timer, SIGNAL(timeout()), this, SLOT(updateTextData()));
// transfer signal from AWDataAggregator object to QML ui // transfer signal from AWDataAggregator object to QML ui
connect(m_dataAggregator, &AWDataAggregator::toolTipPainted, connect(m_dataAggregator, SIGNAL(toolTipPainted(const QString &)), this,
[this](const QString &_tooltip) { emit(needToolTipToBeUpdated(_tooltip)); }); SIGNAL(needToolTipToBeUpdated(const QString &)));
connect(this, &AWKeys::dropSourceFromDataengine, m_dataEngineAggregator, &AWDataEngineAggregator::dropSource); connect(this, SIGNAL(dropSourceFromDataengine(const QString &)), m_dataEngineAggregator,
connect(m_dataEngineAggregator, &AWDataEngineAggregator::dataUpdated, this, &AWKeys::dataUpdated); SLOT(dropSource(const QString &)));
connect(m_dataEngineAggregator, SIGNAL(dataUpdated(const QHash<QString, KSysGuard::SensorInfo> &, const KSysGuard::SensorDataList &)),
this, SLOT(dataUpdated(const QHash<QString, KSysGuard::SensorInfo> &, const KSysGuard::SensorDataList &)));
// transfer signal from dataengine to update source list // transfer signal from dataengine to update source list
connect(m_dataEngineAggregator, &AWDataEngineAggregator::deviceAdded, m_keyOperator, &AWKeyOperations::addDevice); connect(m_dataEngineAggregator, SIGNAL(deviceAdded(const QString &)), m_keyOperator,
SLOT(addDevice(const QString &)));
} }
@ -103,6 +106,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);
// timer // timer
m_timer->setInterval(_interval); m_timer->setInterval(_interval);
@ -206,7 +210,7 @@ void AWKeys::dataUpdated(const QHash<QString, KSysGuard::SensorInfo> &_sensors,
setDataBySource(single.sensorProperty, _sensors.value(single.sensorProperty), single); setDataBySource(single.sensorProperty, _sensors.value(single.sensorProperty), single);
} }
// TODO use QtConcurrent::map or something like that // TODO use QtConcurrent::map or something like that
// QtConcurrent::run(m_threadPool, this, &AWKeys::setDataBySource, "ss", sensor); // QtConcurrent::run(m_threadPool, this, &AWKeys::setDataBySource, "ss", sensor);
} }
} }
@ -261,10 +265,10 @@ void AWKeys::calculateValues()
QStringList mountDevices = m_keyOperator->devices("mount"); QStringList mountDevices = m_keyOperator->devices("mount");
for (auto &device : mountDevices) { for (auto &device : mountDevices) {
int index = mountDevices.indexOf(device); int index = mountDevices.indexOf(device);
m_values[QString("hddtotmb%1").arg(index)] = m_values[QString("hddfreemb%1").arg(index)].toDouble() m_values[QString("hddtotmb%1").arg(index)]
+ m_values[QString("hddmb%1").arg(index)].toDouble(); = m_values[QString("hddfreemb%1").arg(index)].toDouble() + m_values[QString("hddmb%1").arg(index)].toDouble();
m_values[QString("hddtotgb%1").arg(index)] = m_values[QString("hddfreegb%1").arg(index)].toDouble() m_values[QString("hddtotgb%1").arg(index)]
+ m_values[QString("hddgb%1").arg(index)].toDouble(); = m_values[QString("hddfreegb%1").arg(index)].toDouble() + m_values[QString("hddgb%1").arg(index)].toDouble();
} }
// memtot* // memtot*
@ -356,8 +360,7 @@ QString AWKeys::parsePattern(QString _pattern) const
} }
void AWKeys::setDataBySource(const QString &_source, const KSysGuard::SensorInfo &_sensor, void AWKeys::setDataBySource(const QString &_source, const KSysGuard::SensorInfo &_sensor, const KSysGuard::SensorData &_data)
const KSysGuard::SensorData &_data)
{ {
qCDebug(LOG_AW) << "Source" << _source << _sensor.name << "with data" << _data.payload; qCDebug(LOG_AW) << "Source" << _source << _sensor.name << "with data" << _data.payload;
@ -368,11 +371,14 @@ void AWKeys::setDataBySource(const QString &_source, const KSysGuard::SensorInfo
// update data or drop source if there are no matches and exit // update data or drop source if there are no matches and exit
if (tags.isEmpty()) { if (tags.isEmpty()) {
qCInfo(LOG_AW) << "Sensor" << _source << "not found"; qCInfo(LOG_AW) << "Source" << _source << "not found";
return emit(dropSourceFromDataengine(_source)); return emit(dropSourceFromDataengine(_source));
} }
m_mutex.lock(); m_mutex.lock();
std::for_each(tags.cbegin(), tags.cend(), [this, &_data](const QString &tag) { m_values[tag] = _data.payload; }); // HACK workaround for time values which are stored in the different path
std::for_each(tags.cbegin(), tags.cend(), [this, &_data](const QString &tag) {
m_values[tag] = _data.payload;
});
m_mutex.unlock(); m_mutex.unlock();
} }

View File

@ -72,8 +72,7 @@ private:
void calculateValues(); void calculateValues();
void createDBusInterface(); void createDBusInterface();
[[nodiscard]] QString parsePattern(QString _pattern) const; [[nodiscard]] QString parsePattern(QString _pattern) const;
void setDataBySource(const QString &_source, const KSysGuard::SensorInfo &_sensor, void setDataBySource(const QString &_source, const KSysGuard::SensorInfo &_sensor, const KSysGuard::SensorData &_data);
const KSysGuard::SensorData &_data);
// objects // objects
AWDataAggregator *m_dataAggregator = nullptr; AWDataAggregator *m_dataAggregator = nullptr;
AWDataEngineAggregator *m_dataEngineAggregator = nullptr; AWDataEngineAggregator *m_dataEngineAggregator = nullptr;

View File

@ -113,26 +113,26 @@ QString AWKeysAggregator::formatter(const QVariant &_data, const QString &_key,
output = QString("%1").arg(temperature(_data.toDouble()), 5, 'f', 1); output = QString("%1").arg(temperature(_data.toDouble()), 5, 'f', 1);
break; break;
case FormatterType::Time: case FormatterType::Time:
output = QDateTime::fromSecsSinceEpoch(_data.toLongLong()).toString(); output = _data.toDateTime().toString();
break; break;
case FormatterType::TimeCustom: case FormatterType::TimeCustom:
output = m_customTime; output = m_customTime;
[&output, loc, this](const QDateTime &dt) { [&output, loc, this](const QDateTime &dt) {
for (auto &key : m_timeKeys) for (auto &key : m_timeKeys)
output.replace(QString("$%1").arg(key), loc.toString(dt, key)); output.replace(QString("$%1").arg(key), loc.toString(dt, key));
}(QDateTime::fromSecsSinceEpoch(_data.toLongLong())); }(_data.toDateTime());
break; break;
case FormatterType::TimeISO: case FormatterType::TimeISO:
output = QDateTime::fromSecsSinceEpoch(_data.toLongLong()).toString(Qt::ISODate); output = _data.toDateTime().toString(Qt::ISODate);
break; break;
case FormatterType::TimeLong: case FormatterType::TimeLong:
output = loc.toString(QDateTime::fromSecsSinceEpoch(_data.toLongLong()), QLocale::LongFormat); output = loc.toString(_data.toDateTime(), QLocale::LongFormat);
break; break;
case FormatterType::TimeShort: case FormatterType::TimeShort:
output = loc.toString(QDateTime::fromSecsSinceEpoch(_data.toLongLong()), QLocale::ShortFormat); output = loc.toString(_data.toDateTime(), QLocale::ShortFormat);
break; break;
case FormatterType::Timestamp: case FormatterType::Timestamp:
output = _data.toString(); output = QString("%1").arg(_data.toDateTime().toMSecsSinceEpoch() / 1000.0, 10, 'f', 0);
break; break;
case FormatterType::Uptime: case FormatterType::Uptime:
case FormatterType::UptimeCustom: case FormatterType::UptimeCustom:
@ -234,8 +234,7 @@ void AWKeysAggregator::setTranslate(const bool _translate)
} }
QStringList AWKeysAggregator::registerSource(const QString &_source, const KSysGuard::Unit &_units, QStringList AWKeysAggregator::registerSource(const QString &_source, const KSysGuard::Unit &_units, const QStringList &_keys)
const QStringList &_keys)
{ {
qCDebug(LOG_AW) << "Source" << _source << "with units" << _units; qCDebug(LOG_AW) << "Source" << _source << "with units" << _units;

View File

@ -33,13 +33,13 @@ add_library(${SUBPROJECT} STATIC ${SUBPROJECT_SOURCE} ${SUBPROJECT_HEADER} ${SUB
target_link_libraries(${SUBPROJECT} ${Qt_LIBRARIES} ${Kf6_LIBRARIES}) target_link_libraries(${SUBPROJECT} ${Qt_LIBRARIES} ${Kf6_LIBRARIES})
# install # install
install(DIRECTORY ${SUBPROJECT_CONFIGS} DESTINATION ${KDE_INSTALL_DATADIR}/${PROJECT_NAME}) install(DIRECTORY ${SUBPROJECT_CONFIGS} DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME})
install(DIRECTORY ${SUBPROJECT_FORMATTERS} DESTINATION ${KDE_INSTALL_DATADIR}/${PROJECT_NAME}) install(DIRECTORY ${SUBPROJECT_FORMATTERS} DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME})
install(DIRECTORY ${SUBPROJECT_GRAPHITEMS} DESTINATION ${KDE_INSTALL_DATADIR}/${PROJECT_NAME}) install(DIRECTORY ${SUBPROJECT_GRAPHITEMS} DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME})
install(DIRECTORY ${SUBPROJECT_QUOTES} DESTINATION ${KDE_INSTALL_DATADIR}/${PROJECT_NAME}) install(DIRECTORY ${SUBPROJECT_QUOTES} DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME})
install(DIRECTORY ${SUBPROJECT_SCRIPTS} DESTINATION ${KDE_INSTALL_DATADIR}/${PROJECT_NAME}) install(DIRECTORY ${SUBPROJECT_SCRIPTS} DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME})
install(DIRECTORY ${SUBPROJECT_REQUESTS} DESTINATION ${KDE_INSTALL_DATADIR}/${PROJECT_NAME}) install(DIRECTORY ${SUBPROJECT_REQUESTS} DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME})
install(DIRECTORY ${SUBPROJECT_UPGRADE} DESTINATION ${KDE_INSTALL_DATADIR}/${PROJECT_NAME}) install(DIRECTORY ${SUBPROJECT_UPGRADE} DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME})
install(DIRECTORY ${SUBPROJECT_WEATHER} DESTINATION ${KDE_INSTALL_DATADIR}/${PROJECT_NAME}) install(DIRECTORY ${SUBPROJECT_WEATHER} DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME})
install(FILES ${SUBPROJECT_INI} DESTINATION /${KDE_INSTALL_CONFDIR}) install(FILES ${SUBPROJECT_INI} DESTINATION ${KDE_INSTALL_CONFDIR})
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${SUBPROJECT_WEATHER_JSON} DESTINATION ${KDE_INSTALL_DATADIR}/${PROJECT_NAME}/weather) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${SUBPROJECT_WEATHER_JSON} DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME}/weather)

View File

@ -27,8 +27,8 @@
#include "qcronscheduler.h" #include "qcronscheduler.h"
AbstractExtItem::AbstractExtItem(QObject *_parent, const QString &_filePath) AbstractExtItem::AbstractExtItem(QWidget *_parent, const QString &_filePath)
: QObject(_parent) : QDialog(_parent)
, m_fileName(_filePath) , m_fileName(_filePath)
{ {
qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; qCDebug(LOG_LIB) << __PRETTY_FUNCTION__;
@ -97,13 +97,15 @@ void AbstractExtItem::startTimer()
QString AbstractExtItem::writtableConfig() const QString AbstractExtItem::writtableConfig() const
{ {
auto path = m_fileName; QString path = m_fileName;
auto name = QFileInfo(path).fileName(); QString name = QFileInfo(path).fileName();
path.remove(path.length() - name.length() - 1, name.length() + 1); path.remove(path.length() - name.length() - 1, name.length() + 1);
auto dir = QFileInfo(path).fileName(); QString dir = QFileInfo(path).fileName();
return QString("%1/awesomewidgets/%2/%3") return QString("%1/awesomewidgets/%2/%3")
.arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation), dir, name); .arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation))
.arg(dir)
.arg(name);
} }
@ -267,8 +269,8 @@ void AbstractExtItem::deinitSocket()
m_socket->close(); m_socket->close();
QLocalServer::removeServer(socket()); QLocalServer::removeServer(socket());
disconnect(m_socket, SIGNAL(newConnection()), this, SLOT(newConnectionReceived()));
delete m_socket; delete m_socket;
disconnect(m_socket, SIGNAL(newConnection()), this, SLOT(newConnectionReceived()));
} }

View File

@ -18,14 +18,14 @@
#ifndef ABSTRACTEXTITEM_H #ifndef ABSTRACTEXTITEM_H
#define ABSTRACTEXTITEM_H #define ABSTRACTEXTITEM_H
#include <QDialog>
#include <QVariant> #include <QVariant>
class QCronScheduler; class QCronScheduler;
class QLocalServer; class QLocalServer;
class QWidget;
class AbstractExtItem : public QObject class AbstractExtItem : public QDialog
{ {
Q_OBJECT Q_OBJECT
Q_PROPERTY(bool active READ isActive WRITE setActive) Q_PROPERTY(bool active READ isActive WRITE setActive)
@ -40,7 +40,7 @@ class AbstractExtItem : public QObject
Q_PROPERTY(QString uniq READ uniq) Q_PROPERTY(QString uniq READ uniq)
public: public:
explicit AbstractExtItem(QObject *_parent = nullptr, const QString &_filePath = ""); explicit AbstractExtItem(QWidget *_parent = nullptr, const QString &_filePath = "");
~AbstractExtItem() override; ~AbstractExtItem() override;
virtual void bumpApi(int _newVer); virtual void bumpApi(int _newVer);
virtual AbstractExtItem *copy(const QString &_fileName, int _number) = 0; virtual AbstractExtItem *copy(const QString &_fileName, int _number) = 0;
@ -78,7 +78,7 @@ public slots:
virtual void initSocket(); virtual void initSocket();
virtual void readConfiguration(); virtual void readConfiguration();
virtual QVariantHash run() = 0; virtual QVariantHash run() = 0;
virtual int showConfiguration(QWidget *_parent, const QVariant &_args) = 0; virtual int showConfiguration(const QVariant &_args) = 0;
[[nodiscard]] virtual bool tryDelete() const; [[nodiscard]] virtual bool tryDelete() const;
virtual void writeConfiguration() const; virtual void writeConfiguration() const;
@ -89,8 +89,7 @@ private:
QCronScheduler *m_scheduler = nullptr; QCronScheduler *m_scheduler = nullptr;
QString m_fileName = "/dev/null"; QString m_fileName = "/dev/null";
int m_times = 0; int m_times = 0;
// FIXME find a better way to do it virtual void translate() = 0;
virtual void translate(void *_ui) = 0;
// properties // properties
int m_apiVersion = 0; int m_apiVersion = 0;
bool m_active = true; bool m_active = true;

View File

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

View File

@ -18,6 +18,7 @@
#ifndef ABSTRACTEXTITEMAGGREGATOR_H #ifndef ABSTRACTEXTITEMAGGREGATOR_H
#define ABSTRACTEXTITEMAGGREGATOR_H #define ABSTRACTEXTITEMAGGREGATOR_H
#include <QDialog>
#include <QStandardPaths> #include <QStandardPaths>
#include "abstractextitem.h" #include "abstractextitem.h"
@ -25,45 +26,49 @@
class QAbstractButton; class QAbstractButton;
class QListWidget;
class QListWidgetItem; class QListWidgetItem;
namespace Ui
{
class AbstractExtItemAggregator;
}
class AbstractExtItemAggregator : public QObject class AbstractExtItemAggregator : public QDialog
{ {
Q_OBJECT Q_OBJECT
Q_PROPERTY(QVariant configArgs READ configArgs WRITE setConfigArgs) Q_PROPERTY(QVariant configArgs READ configArgs WRITE setConfigArgs)
Q_PROPERTY(QVariant type READ type) Q_PROPERTY(QVariant type READ type)
public: public:
explicit AbstractExtItemAggregator(QObject *_parent, QString _type); explicit AbstractExtItemAggregator(QWidget *_parent, QString _type);
~AbstractExtItemAggregator() override;
// methods // methods
void copyItem(QListWidget *_widget); void copyItem();
template <class T> void createItem(QListWidget *_widget) template <class T> void createItem()
{ {
auto fileName = getName(); QString fileName = getName();
auto number = uniqNumber(); int number = uniqNumber();
auto dir = QString("%1/awesomewidgets/%2") QString dir = QString("%1/awesomewidgets/%2")
.arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation), m_type); .arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation))
.arg(m_type);
if (fileName.isEmpty()) { if (fileName.isEmpty()) {
qCWarning(LOG_LIB) << "Nothing to create"; qCWarning(LOG_LIB) << "Nothing to create";
return; return;
} }
auto filePath = QString("%1/%2").arg(dir, fileName); QString filePath = QString("%1/%2").arg(dir).arg(fileName);
auto newItem = new T(this, filePath); T *newItem = new T(this, filePath);
newItem->setNumber(number); newItem->setNumber(number);
if (newItem->showConfiguration(nullptr, configArgs()) == 1) { if (newItem->showConfiguration(configArgs()) == 1) {
initItems(); initItems();
repaintList(_widget); repaintList();
} }
}; };
void deleteItem(QListWidget *_widget); void deleteItem();
void editItem(QListWidget *_widget); void editItem();
[[nodiscard]] int exec();
QString getName(); QString getName();
virtual void initItems() = 0; virtual void initItems() = 0;
[[nodiscard]] AbstractExtItem *itemFromWidget(QListWidget *_widget) const; [[nodiscard]] AbstractExtItem *itemFromWidget() const;
void repaintList(QListWidget *_widget) const; void repaintList() const;
[[nodiscard]] int uniqNumber() const; [[nodiscard]] int uniqNumber() const;
// get methods // get methods
[[nodiscard]] QVariant configArgs() const; [[nodiscard]] QVariant configArgs() const;
@ -73,12 +78,21 @@ public:
// set methods // set methods
void setConfigArgs(const QVariant &_configArgs); void setConfigArgs(const QVariant &_configArgs);
private slots:
void editItemActivated(QListWidgetItem *);
void editItemButtonPressed(QAbstractButton *_button);
private: private:
// ui
Ui::AbstractExtItemAggregator *ui = nullptr;
QPushButton *copyButton = nullptr;
QPushButton *createButton = nullptr;
QPushButton *deleteButton = nullptr;
// properties // properties
QVariant m_configArgs; QVariant m_configArgs;
QString m_type; QString m_type;
// ui methods // ui methods
virtual void doCreateItem(QListWidget *_widget) = 0; virtual void doCreateItem() = 0;
}; };

View File

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

View File

@ -32,8 +32,8 @@ class AWAbstractFormatter : public AbstractExtItem
public: public:
enum class FormatterClass { DateTime, Float, List, Script, String, NoFormat, Json }; enum class FormatterClass { DateTime, Float, List, Script, String, NoFormat, Json };
explicit AWAbstractFormatter(QObject *_parent = nullptr, const QString &_filePath = ""); explicit AWAbstractFormatter(QWidget *_parent = nullptr, const QString &_filePath = "");
~AWAbstractFormatter() override = default; ~AWAbstractFormatter() override;
[[nodiscard]] virtual QString convert(const QVariant &_value) const = 0; [[nodiscard]] virtual QString convert(const QVariant &_value) const = 0;
void copyDefaults(AbstractExtItem *_other) const override; void copyDefaults(AbstractExtItem *_other) const override;
[[nodiscard]] QString uniq() const override; [[nodiscard]] QString uniq() const override;

View File

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

View File

@ -23,6 +23,11 @@
#include "awabstractformatter.h" #include "awabstractformatter.h"
namespace Ui
{
class AWDateTimeFormatter;
}
class AWDateTimeFormatter : public AWAbstractFormatter class AWDateTimeFormatter : public AWAbstractFormatter
{ {
Q_OBJECT Q_OBJECT
@ -30,7 +35,8 @@ class AWDateTimeFormatter : public AWAbstractFormatter
Q_PROPERTY(bool translateString READ translateString WRITE setTranslateString) Q_PROPERTY(bool translateString READ translateString WRITE setTranslateString)
public: public:
explicit AWDateTimeFormatter(QObject *_parent = nullptr, const QString &_filePath = ""); explicit AWDateTimeFormatter(QWidget *_parent = nullptr, const QString &_filePath = "");
~AWDateTimeFormatter() override;
[[nodiscard]] QString convert(const QVariant &_value) const override; [[nodiscard]] QString convert(const QVariant &_value) const override;
AWDateTimeFormatter *copy(const QString &_fileName, int _number) override; AWDateTimeFormatter *copy(const QString &_fileName, int _number) override;
// properties // properties
@ -41,12 +47,13 @@ public:
public slots: public slots:
void readConfiguration() override; void readConfiguration() override;
int showConfiguration(QWidget *_parent, const QVariant &_args) override; int showConfiguration(const QVariant &_args) override;
void writeConfiguration() const override; void writeConfiguration() const override;
private: private:
Ui::AWDateTimeFormatter *ui = nullptr;
void initLocale(); void initLocale();
void translate(void *_ui) override; void translate() override;
// properties // properties
QLocale m_locale; QLocale m_locale;
QString m_format = ""; QString m_format = "";

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

View File

@ -15,6 +15,7 @@
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/ ***************************************************************************/
#include "awfloatformatter.h" #include "awfloatformatter.h"
#include "ui_awfloatformatter.h" #include "ui_awfloatformatter.h"
@ -25,13 +26,24 @@
#include "awdebug.h" #include "awdebug.h"
AWFloatFormatter::AWFloatFormatter(QObject *_parent, const QString &_filePath) AWFloatFormatter::AWFloatFormatter(QWidget *_parent, const QString &_filePath)
: AWAbstractFormatter(_parent, _filePath) : AWAbstractFormatter(_parent, _filePath)
, ui(new Ui::AWFloatFormatter)
{ {
qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; qCDebug(LOG_LIB) << __PRETTY_FUNCTION__;
if (!_filePath.isEmpty()) if (!_filePath.isEmpty())
AWFloatFormatter::readConfiguration(); AWFloatFormatter::readConfiguration();
ui->setupUi(this);
AWFloatFormatter::translate();
}
AWFloatFormatter::~AWFloatFormatter()
{
qCDebug(LOG_LIB) << __PRETTY_FUNCTION__;
delete ui;
} }
@ -39,7 +51,7 @@ QString AWFloatFormatter::convert(const QVariant &_value) const
{ {
qCDebug(LOG_LIB) << "Convert value" << _value; qCDebug(LOG_LIB) << "Convert value" << _value;
auto output QString output
= QString("%1").arg(_value.toDouble() * multiplier() + summand(), count(), format(), precision(), fillChar()); = QString("%1").arg(_value.toDouble() * multiplier() + summand(), count(), format(), precision(), fillChar());
if (forceWidth()) if (forceWidth())
output = output.left(count()); output = output.left(count());
@ -52,7 +64,7 @@ AWFloatFormatter *AWFloatFormatter::copy(const QString &_fileName, const int _nu
{ {
qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number; qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number;
auto item = new AWFloatFormatter(parent(), _fileName); auto *item = new AWFloatFormatter(dynamic_cast<QWidget *>(parent()), _fileName);
AWAbstractFormatter::copyDefaults(item); AWAbstractFormatter::copyDefaults(item);
item->setCount(count()); item->setCount(count());
item->setFormat(format()); item->setFormat(format());
@ -190,15 +202,10 @@ void AWFloatFormatter::readConfiguration()
} }
int AWFloatFormatter::showConfiguration(QWidget *_parent, const QVariant &_args) int AWFloatFormatter::showConfiguration(const QVariant &_args)
{ {
Q_UNUSED(_args) Q_UNUSED(_args)
auto dialog = new QDialog(_parent);
auto ui = new Ui::AWFloatFormatter();
ui->setupUi(dialog);
translate(ui);
ui->lineEdit_name->setText(name()); ui->lineEdit_name->setText(name());
ui->lineEdit_comment->setText(comment()); ui->lineEdit_comment->setText(comment());
ui->label_typeValue->setText("Float"); ui->label_typeValue->setText("Float");
@ -210,26 +217,22 @@ int AWFloatFormatter::showConfiguration(QWidget *_parent, const QVariant &_args)
ui->doubleSpinBox_multiplier->setValue(multiplier()); ui->doubleSpinBox_multiplier->setValue(multiplier());
ui->doubleSpinBox_summand->setValue(summand()); ui->doubleSpinBox_summand->setValue(summand());
auto ret = dialog->exec(); int ret = exec();
if (ret == 1) { if (ret != 1)
setName(ui->lineEdit_name->text()); return ret;
setComment(ui->lineEdit_comment->text()); setName(ui->lineEdit_name->text());
setApiVersion(AW_FORMATTER_API); setComment(ui->lineEdit_comment->text());
setStrType(ui->label_typeValue->text()); setApiVersion(AW_FORMATTER_API);
setFormat(ui->comboBox_format->currentText().at(0).toLatin1()); setStrType(ui->label_typeValue->text());
setPrecision(ui->spinBox_precision->value()); setFormat(ui->comboBox_format->currentText().at(0).toLatin1());
setCount(ui->spinBox_width->value()); setPrecision(ui->spinBox_precision->value());
setFillChar(ui->lineEdit_fill->text().at(0)); setCount(ui->spinBox_width->value());
setForceWidth(ui->checkBox_forceWidth->checkState() == Qt::Checked); setFillChar(ui->lineEdit_fill->text().at(0));
setMultiplier(ui->doubleSpinBox_multiplier->value()); setForceWidth(ui->checkBox_forceWidth->checkState() == Qt::Checked);
setSummand(ui->doubleSpinBox_summand->value()); setMultiplier(ui->doubleSpinBox_multiplier->value());
setSummand(ui->doubleSpinBox_summand->value());
writeConfiguration();
}
dialog->deleteLater();
delete ui;
writeConfiguration();
return ret; return ret;
} }
@ -255,10 +258,8 @@ void AWFloatFormatter::writeConfiguration() const
} }
void AWFloatFormatter::translate(void *_ui) void AWFloatFormatter::translate()
{ {
auto ui = reinterpret_cast<Ui::AWFloatFormatter *>(_ui);
ui->label_name->setText(i18n("Name")); ui->label_name->setText(i18n("Name"));
ui->label_comment->setText(i18n("Comment")); ui->label_comment->setText(i18n("Comment"));
ui->label_type->setText(i18n("Type")); ui->label_type->setText(i18n("Type"));

View File

@ -21,6 +21,11 @@
#include "awabstractformatter.h" #include "awabstractformatter.h"
namespace Ui
{
class AWFloatFormatter;
}
class AWFloatFormatter : public AWAbstractFormatter class AWFloatFormatter : public AWAbstractFormatter
{ {
Q_OBJECT Q_OBJECT
@ -33,7 +38,8 @@ class AWFloatFormatter : public AWAbstractFormatter
Q_PROPERTY(double summand READ summand WRITE setSummand) Q_PROPERTY(double summand READ summand WRITE setSummand)
public: public:
explicit AWFloatFormatter(QObject *_parent = nullptr, const QString &_filePath = ""); explicit AWFloatFormatter(QWidget *_parent = nullptr, const QString &_filePath = "");
~AWFloatFormatter() override;
[[nodiscard]] QString convert(const QVariant &_value) const override; [[nodiscard]] QString convert(const QVariant &_value) const override;
AWFloatFormatter *copy(const QString &_fileName, int _number) override; AWFloatFormatter *copy(const QString &_fileName, int _number) override;
// properties // properties
@ -54,11 +60,12 @@ public:
public slots: public slots:
void readConfiguration() override; void readConfiguration() override;
int showConfiguration(QWidget *_parent, const QVariant &_args) override; int showConfiguration(const QVariant &_args) override;
void writeConfiguration() const override; void writeConfiguration() const override;
private: private:
void translate(void *_ui) override; Ui::AWFloatFormatter *ui = nullptr;
void translate() override;
// properties // properties
int m_count = 0; int m_count = 0;
QChar m_fillChar = QChar(); QChar m_fillChar = QChar();

View File

@ -15,6 +15,7 @@
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/ ***************************************************************************/
#include "awjsonformatter.h" #include "awjsonformatter.h"
#include "ui_awjsonformatter.h" #include "ui_awjsonformatter.h"
@ -26,13 +27,24 @@
#include "awdebug.h" #include "awdebug.h"
AWJsonFormatter::AWJsonFormatter(QObject *_parent, const QString &_filePath) AWJsonFormatter::AWJsonFormatter(QWidget *_parent, const QString &_filePath)
: AWAbstractFormatter(_parent, _filePath) : AWAbstractFormatter(_parent, _filePath)
, ui(new Ui::AWJsonFormatter)
{ {
qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; qCDebug(LOG_LIB) << __PRETTY_FUNCTION__;
if (!_filePath.isEmpty()) if (!_filePath.isEmpty())
AWJsonFormatter::readConfiguration(); AWJsonFormatter::readConfiguration();
ui->setupUi(this);
AWJsonFormatter::translate();
}
AWJsonFormatter::~AWJsonFormatter()
{
qCDebug(LOG_LIB) << __PRETTY_FUNCTION__;
delete ui;
} }
@ -42,7 +54,7 @@ QString AWJsonFormatter::convert(const QVariant &_value) const
// check if _value is string and parse first if required // check if _value is string and parse first if required
QJsonDocument json = _value.userType() == QMetaType::QString ? QJsonDocument::fromJson(_value.toString().toUtf8()) QJsonDocument json = _value.userType() == QMetaType::QString ? QJsonDocument::fromJson(_value.toString().toUtf8())
: QJsonDocument::fromVariant(_value); : QJsonDocument::fromVariant(_value);
QVariant converted = json.toVariant(); QVariant converted = json.toVariant();
for (auto &element : m_splittedPath) for (auto &element : m_splittedPath)
converted = getFromJson(converted, element); converted = getFromJson(converted, element);
@ -55,7 +67,7 @@ AWJsonFormatter *AWJsonFormatter::copy(const QString &_fileName, const int _numb
{ {
qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number; qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number;
auto item = new AWJsonFormatter(parent(), _fileName); auto *item = new AWJsonFormatter(dynamic_cast<QWidget *>(parent()), _fileName);
AWAbstractFormatter::copyDefaults(item); AWAbstractFormatter::copyDefaults(item);
item->setNumber(_number); item->setNumber(_number);
item->setPath(path()); item->setPath(path());
@ -93,34 +105,25 @@ void AWJsonFormatter::readConfiguration()
} }
int AWJsonFormatter::showConfiguration(QWidget *_parent, const QVariant &args) int AWJsonFormatter::showConfiguration(const QVariant &args)
{ {
Q_UNUSED(args) Q_UNUSED(args)
auto dialog = new QDialog(_parent);
auto ui = new Ui::AWJsonFormatter();
ui->setupUi(dialog);
translate(ui);
ui->lineEdit_name->setText(name()); ui->lineEdit_name->setText(name());
ui->lineEdit_comment->setText(comment()); ui->lineEdit_comment->setText(comment());
ui->label_typeValue->setText("Json"); ui->label_typeValue->setText("Json");
ui->lineEdit_path->setText(path()); ui->lineEdit_path->setText(path());
auto ret = dialog->exec(); int ret = exec();
if (ret == 1) { if (ret != 1)
setName(ui->lineEdit_name->text()); return ret;
setComment(ui->lineEdit_comment->text()); setName(ui->lineEdit_name->text());
setApiVersion(AW_FORMATTER_API); setComment(ui->lineEdit_comment->text());
setStrType(ui->label_typeValue->text()); setApiVersion(AW_FORMATTER_API);
setPath(ui->lineEdit_path->text()); setStrType(ui->label_typeValue->text());
setPath(ui->lineEdit_path->text());
writeConfiguration();
}
dialog->deleteLater();
delete ui;
writeConfiguration();
return ret; return ret;
} }
@ -184,10 +187,8 @@ void AWJsonFormatter::initPath()
} }
void AWJsonFormatter::translate(void *_ui) void AWJsonFormatter::translate()
{ {
auto ui = reinterpret_cast<Ui::AWJsonFormatter *>(_ui);
ui->label_name->setText(i18n("Name")); ui->label_name->setText(i18n("Name"));
ui->label_comment->setText(i18n("Comment")); ui->label_comment->setText(i18n("Comment"));
ui->label_type->setText(i18n("Type")); ui->label_type->setText(i18n("Type"));

View File

@ -21,13 +21,19 @@
#include "awabstractformatter.h" #include "awabstractformatter.h"
namespace Ui
{
class AWJsonFormatter;
}
class AWJsonFormatter : public AWAbstractFormatter class AWJsonFormatter : public AWAbstractFormatter
{ {
Q_OBJECT Q_OBJECT
Q_PROPERTY(QString path READ path WRITE setPath) Q_PROPERTY(QString path READ path WRITE setPath)
public: public:
explicit AWJsonFormatter(QObject *_parent = nullptr, const QString &_filePath = ""); explicit AWJsonFormatter(QWidget *_parent = nullptr, const QString &_filePath = "");
~AWJsonFormatter() override;
[[nodiscard]] QString convert(const QVariant &_value) const override; [[nodiscard]] QString convert(const QVariant &_value) const override;
AWJsonFormatter *copy(const QString &_fileName, int _number) override; AWJsonFormatter *copy(const QString &_fileName, int _number) override;
// properties // properties
@ -36,15 +42,16 @@ public:
public slots: public slots:
void readConfiguration() override; void readConfiguration() override;
int showConfiguration(QWidget *_parent, const QVariant &_args) override; int showConfiguration(const QVariant &_args) override;
void writeConfiguration() const override; void writeConfiguration() const override;
private: private:
Ui::AWJsonFormatter *ui = nullptr;
static QVariant getFromJson(const QVariant &_value, const QVariant &_element); static QVariant getFromJson(const QVariant &_value, const QVariant &_element);
static QVariant getFromList(const QVariant &_value, int _index); static QVariant getFromList(const QVariant &_value, int _index);
static QVariant getFromMap(const QVariant &_value, const QString &_key); static QVariant getFromMap(const QVariant &_value, const QString &_key);
void initPath(); void initPath();
void translate(void *_ui) override; void translate() override;
// properties // properties
QString m_path; QString m_path;
QVariantList m_splittedPath; QVariantList m_splittedPath;

View File

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

View File

@ -21,6 +21,11 @@
#include "awabstractformatter.h" #include "awabstractformatter.h"
namespace Ui
{
class AWListFormatter;
}
class AWListFormatter : public AWAbstractFormatter class AWListFormatter : public AWAbstractFormatter
{ {
Q_OBJECT Q_OBJECT
@ -29,7 +34,8 @@ class AWListFormatter : public AWAbstractFormatter
Q_PROPERTY(bool sorted READ isSorted WRITE setSorted) Q_PROPERTY(bool sorted READ isSorted WRITE setSorted)
public: public:
explicit AWListFormatter(QObject *_parent = nullptr, const QString &_filePath = ""); explicit AWListFormatter(QWidget *_parent = nullptr, const QString &_filePath = "");
~AWListFormatter() override;
[[nodiscard]] QString convert(const QVariant &_value) const override; [[nodiscard]] QString convert(const QVariant &_value) const override;
AWListFormatter *copy(const QString &_fileName, int _number) override; AWListFormatter *copy(const QString &_fileName, int _number) override;
// properties // properties
@ -42,11 +48,12 @@ public:
public slots: public slots:
void readConfiguration() override; void readConfiguration() override;
int showConfiguration(QWidget *_parent, const QVariant &_args) override; int showConfiguration(const QVariant &_args) override;
void writeConfiguration() const override; void writeConfiguration() const override;
private: private:
void translate(void *_ui) override; Ui::AWListFormatter *ui = nullptr;
void translate() override;
// properties // properties
QString m_filter = ""; QString m_filter = "";
QString m_separator = ""; QString m_separator = "";

View File

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

View File

@ -21,20 +21,27 @@
#include "awabstractformatter.h" #include "awabstractformatter.h"
namespace Ui
{
class AWNoFormatter;
}
class AWNoFormatter : public AWAbstractFormatter class AWNoFormatter : public AWAbstractFormatter
{ {
Q_OBJECT Q_OBJECT
public: public:
explicit AWNoFormatter(QObject *_parent = nullptr, const QString &_filePath = ""); explicit AWNoFormatter(QWidget *_parent = nullptr, const QString &_filePath = "");
~AWNoFormatter() override;
[[nodiscard]] QString convert(const QVariant &_value) const override; [[nodiscard]] QString convert(const QVariant &_value) const override;
AWNoFormatter *copy(const QString &_fileName, int _number) override; AWNoFormatter *copy(const QString &_fileName, int _number) override;
public slots: public slots:
int showConfiguration(QWidget *_parent, const QVariant &_args) override; int showConfiguration(const QVariant &_args) override;
private: private:
void translate(void *_ui) override; Ui::AWNoFormatter *ui = nullptr;
void translate() override;
// properties // properties
}; };

View File

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

View File

@ -21,6 +21,11 @@
#include "awabstractformatter.h" #include "awabstractformatter.h"
namespace Ui
{
class AWScriptFormatter;
}
class AWScriptFormatter : public AWAbstractFormatter class AWScriptFormatter : public AWAbstractFormatter
{ {
Q_OBJECT Q_OBJECT
@ -30,7 +35,8 @@ class AWScriptFormatter : public AWAbstractFormatter
Q_PROPERTY(QString program READ program) Q_PROPERTY(QString program READ program)
public: public:
explicit AWScriptFormatter(QObject *_parent = nullptr, const QString &_filePath = ""); explicit AWScriptFormatter(QWidget *_parent = nullptr, const QString &_filePath = "");
~AWScriptFormatter() override;
[[nodiscard]] QString convert(const QVariant &_value) const override; [[nodiscard]] QString convert(const QVariant &_value) const override;
AWScriptFormatter *copy(const QString &_fileName, int _number) override; AWScriptFormatter *copy(const QString &_fileName, int _number) override;
// properties // properties
@ -44,12 +50,13 @@ public:
public slots: public slots:
void readConfiguration() override; void readConfiguration() override;
int showConfiguration(QWidget *_parent, const QVariant &_args) override; int showConfiguration(const QVariant &_args) override;
void writeConfiguration() const override; void writeConfiguration() const override;
private: private:
Ui::AWScriptFormatter *ui = nullptr;
void initProgram(); void initProgram();
void translate(void *_ui) override; void translate() override;
// properties // properties
bool m_appendCode = true; bool m_appendCode = true;
QString m_code = ""; QString m_code = "";

View File

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

View File

@ -21,6 +21,11 @@
#include "awabstractformatter.h" #include "awabstractformatter.h"
namespace Ui
{
class AWStringFormatter;
}
class AWStringFormatter : public AWAbstractFormatter class AWStringFormatter : public AWAbstractFormatter
{ {
Q_OBJECT Q_OBJECT
@ -29,7 +34,8 @@ class AWStringFormatter : public AWAbstractFormatter
Q_PROPERTY(bool forceWidth READ forceWidth WRITE setForceWidth) Q_PROPERTY(bool forceWidth READ forceWidth WRITE setForceWidth)
public: public:
explicit AWStringFormatter(QObject *_parent = nullptr, const QString &_filePath = ""); explicit AWStringFormatter(QWidget *_parent = nullptr, const QString &_filePath = "");
~AWStringFormatter() override;
[[nodiscard]] QString convert(const QVariant &_value) const override; [[nodiscard]] QString convert(const QVariant &_value) const override;
AWStringFormatter *copy(const QString &_fileName, int _number) override; AWStringFormatter *copy(const QString &_fileName, int _number) override;
// properties // properties
@ -42,11 +48,12 @@ public:
public slots: public slots:
void readConfiguration() override; void readConfiguration() override;
int showConfiguration(QWidget *_parent, const QVariant &_args) override; int showConfiguration(const QVariant &_args) override;
void writeConfiguration() const override; void writeConfiguration() const override;
private: private:
void translate(void *_ui) override; Ui::AWStringFormatter *ui = nullptr;
void translate() override;
// properties // properties
int m_count = 0; int m_count = 0;
QChar m_fillChar = QChar(); QChar m_fillChar = QChar();

View File

@ -31,7 +31,7 @@
template <class T> class ExtItemAggregator : public AbstractExtItemAggregator template <class T> class ExtItemAggregator : public AbstractExtItemAggregator
{ {
public: public:
explicit ExtItemAggregator(QObject *_parent, const QString &_type) explicit ExtItemAggregator(QWidget *_parent, const QString &_type)
: AbstractExtItemAggregator(_parent, _type) : AbstractExtItemAggregator(_parent, _type)
{ {
qSetMessagePattern(AWDebug::LOG_FORMAT); qSetMessagePattern(AWDebug::LOG_FORMAT);
@ -56,7 +56,8 @@ public:
void editItems() void editItems()
{ {
auto ret = exec(); repaintList();
int ret = exec();
qCInfo(LOG_LIB) << "Dialog returns" << ret; qCInfo(LOG_LIB) << "Dialog returns" << ret;
}; };
@ -122,7 +123,7 @@ private:
QList<AbstractExtItem *> m_items; QList<AbstractExtItem *> m_items;
QList<T *> m_activeItems; QList<T *> m_activeItems;
void doCreateItem(QListWidget *_widget) override { return createItem<T>(_widget); } void doCreateItem() override { return createItem<T>(); }
QList<AbstractExtItem *> getItems() QList<AbstractExtItem *> getItems()
{ {
@ -136,7 +137,7 @@ private:
if (!file.endsWith(".desktop")) if (!file.endsWith(".desktop"))
continue; continue;
qCInfo(LOG_LIB) << "Found file" << file << "in" << dir; qCInfo(LOG_LIB) << "Found file" << file << "in" << dir;
auto filePath = QString("%1/%2").arg(dir, file); QString filePath = QString("%1/%2").arg(dir).arg(file);
// check if already exists // check if already exists
if (std::any_of(items.cbegin(), items.cend(), if (std::any_of(items.cbegin(), items.cend(),
[&filePath](AbstractExtItem *item) { return (item->fileName() == filePath); })) [&filePath](AbstractExtItem *item) { return (item->fileName() == filePath); }))
@ -146,7 +147,8 @@ private:
} }
// sort items // sort items
std::sort(items.begin(), items.end(), [](auto *lhs, auto *rhs) { return lhs->number() < rhs->number(); }); std::sort(items.begin(), items.end(),
[](const AbstractExtItem *lhs, const AbstractExtItem *rhs) { return lhs->number() < rhs->number(); });
return items; return items;
}; };
}; };

View File

@ -27,13 +27,16 @@
#include "awdebug.h" #include "awdebug.h"
ExtNetworkRequest::ExtNetworkRequest(QObject *_parent, const QString &_filePath) ExtNetworkRequest::ExtNetworkRequest(QWidget *_parent, const QString &_filePath)
: AbstractExtItem(_parent, _filePath) : AbstractExtItem(_parent, _filePath)
, ui(new Ui::ExtNetworkRequest)
{ {
qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; qCDebug(LOG_LIB) << __PRETTY_FUNCTION__;
if (!_filePath.isEmpty()) if (!_filePath.isEmpty())
ExtNetworkRequest::readConfiguration(); ExtNetworkRequest::readConfiguration();
ui->setupUi(this);
ExtNetworkRequest::translate();
m_values[tag("response")] = ""; m_values[tag("response")] = "";
@ -54,6 +57,7 @@ ExtNetworkRequest::~ExtNetworkRequest()
disconnect(this, SIGNAL(requestDataUpdate()), this, SLOT(sendRequest())); disconnect(this, SIGNAL(requestDataUpdate()), this, SLOT(sendRequest()));
m_manager->deleteLater(); m_manager->deleteLater();
delete ui;
} }
@ -61,7 +65,7 @@ ExtNetworkRequest *ExtNetworkRequest::copy(const QString &_fileName, const int _
{ {
qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number; qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number;
auto item = new ExtNetworkRequest(parent(), _fileName); auto *item = new ExtNetworkRequest(dynamic_cast<QWidget *>(parent()), _fileName);
copyDefaults(item); copyDefaults(item);
item->setNumber(_number); item->setNumber(_number);
item->setStringUrl(stringUrl()); item->setStringUrl(stringUrl());
@ -115,15 +119,10 @@ QVariantHash ExtNetworkRequest::run()
} }
int ExtNetworkRequest::showConfiguration(QWidget *_parent, const QVariant &_args) int ExtNetworkRequest::showConfiguration(const QVariant &_args)
{ {
Q_UNUSED(_args) Q_UNUSED(_args)
auto dialog = new QDialog(_parent);
auto ui = new Ui::ExtNetworkRequest();
ui->setupUi(dialog);
translate(ui);
ui->lineEdit_name->setText(name()); ui->lineEdit_name->setText(name());
ui->lineEdit_comment->setText(comment()); ui->lineEdit_comment->setText(comment());
ui->label_numberValue->setText(QString("%1").arg(number())); ui->label_numberValue->setText(QString("%1").arg(number()));
@ -133,24 +132,20 @@ int ExtNetworkRequest::showConfiguration(QWidget *_parent, const QVariant &_args
ui->lineEdit_socket->setText(socket()); ui->lineEdit_socket->setText(socket());
ui->spinBox_interval->setValue(interval()); ui->spinBox_interval->setValue(interval());
auto ret = dialog->exec(); int ret = exec();
if (ret == 1) { if (ret != 1)
setName(ui->lineEdit_name->text()); return ret;
setComment(ui->lineEdit_comment->text()); setName(ui->lineEdit_name->text());
setNumber(ui->label_numberValue->text().toInt()); setComment(ui->lineEdit_comment->text());
setApiVersion(AW_EXTNETREQUEST_API); setNumber(ui->label_numberValue->text().toInt());
setStringUrl(ui->lineEdit_url->text()); setApiVersion(AW_EXTNETREQUEST_API);
setActive(ui->checkBox_active->checkState() == Qt::Checked); setStringUrl(ui->lineEdit_url->text());
setCron(ui->lineEdit_schedule->text()); setActive(ui->checkBox_active->checkState() == Qt::Checked);
setSocket(ui->lineEdit_socket->text()); setCron(ui->lineEdit_schedule->text());
setInterval(ui->spinBox_interval->value()); setSocket(ui->lineEdit_socket->text());
setInterval(ui->spinBox_interval->value());
writeConfiguration();
}
dialog->deleteLater();
delete ui;
writeConfiguration();
return ret; return ret;
} }
@ -186,7 +181,7 @@ void ExtNetworkRequest::networkReplyReceived(QNetworkReply *_reply)
void ExtNetworkRequest::sendRequest() void ExtNetworkRequest::sendRequest()
{ {
m_isRunning = true; m_isRunning = true;
auto reply = m_manager->get(QNetworkRequest(m_url)); QNetworkReply *reply = m_manager->get(QNetworkRequest(m_url));
new QReplyTimeout(reply, REQUEST_TIMEOUT); new QReplyTimeout(reply, REQUEST_TIMEOUT);
} }
@ -197,10 +192,8 @@ void ExtNetworkRequest::initUrl()
} }
void ExtNetworkRequest::translate(void *_ui) void ExtNetworkRequest::translate()
{ {
auto ui = reinterpret_cast<Ui::ExtNetworkRequest *>(_ui);
ui->label_name->setText(i18n("Name")); ui->label_name->setText(i18n("Name"));
ui->label_comment->setText(i18n("Comment")); ui->label_comment->setText(i18n("Comment"));
ui->label_number->setText(i18n("Tag")); ui->label_number->setText(i18n("Tag"));

View File

@ -23,13 +23,18 @@
#include "abstractextitem.h" #include "abstractextitem.h"
namespace Ui
{
class ExtNetworkRequest;
}
class ExtNetworkRequest : public AbstractExtItem class ExtNetworkRequest : public AbstractExtItem
{ {
Q_OBJECT Q_OBJECT
Q_PROPERTY(QString stringUrl READ stringUrl WRITE setStringUrl) Q_PROPERTY(QString stringUrl READ stringUrl WRITE setStringUrl)
public: public:
explicit ExtNetworkRequest(QObject *_parent = nullptr, const QString &_filePath = ""); explicit ExtNetworkRequest(QWidget *_parent = nullptr, const QString &_filePath = "");
~ExtNetworkRequest() override; ~ExtNetworkRequest() override;
ExtNetworkRequest *copy(const QString &_fileName, int _number) override; ExtNetworkRequest *copy(const QString &_fileName, int _number) override;
// get methods // get methods
@ -41,7 +46,7 @@ public:
public slots: public slots:
void readConfiguration() override; void readConfiguration() override;
QVariantHash run() override; QVariantHash run() override;
int showConfiguration(QWidget *_parent, const QVariant &_args) override; int showConfiguration(const QVariant &_args) override;
void writeConfiguration() const override; void writeConfiguration() const override;
private slots: private slots:
@ -52,8 +57,9 @@ private:
QNetworkAccessManager *m_manager = nullptr; QNetworkAccessManager *m_manager = nullptr;
QUrl m_url; QUrl m_url;
bool m_isRunning = false; bool m_isRunning = false;
Ui::ExtNetworkRequest *ui = nullptr;
void initUrl(); void initUrl();
void translate(void *_ui) override; void translate() override;
// properties // properties
QString m_stringUrl = "https://httpbin.org/get"; QString m_stringUrl = "https://httpbin.org/get";
// values // values

View File

@ -20,6 +20,7 @@
#include <KI18n/KLocalizedString> #include <KI18n/KLocalizedString>
#include <QDir>
#include <QSettings> #include <QSettings>
#include <qreplytimeout/qreplytimeout.h> #include <qreplytimeout/qreplytimeout.h>
@ -28,13 +29,16 @@
#include "stooqquotesprovider.h" #include "stooqquotesprovider.h"
ExtQuotes::ExtQuotes(QObject *_parent, const QString &_filePath) ExtQuotes::ExtQuotes(QWidget *_parent, const QString &_filePath)
: AbstractExtItem(_parent, _filePath) : AbstractExtItem(_parent, _filePath)
, ui(new Ui::ExtQuotes)
{ {
qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; qCDebug(LOG_LIB) << __PRETTY_FUNCTION__;
if (!_filePath.isEmpty()) if (!_filePath.isEmpty())
ExtQuotes::readConfiguration(); ExtQuotes::readConfiguration();
ui->setupUi(this);
ExtQuotes::translate();
m_values[tag("price")] = 0.0; m_values[tag("price")] = 0.0;
m_values[tag("pricechg")] = 0.0; m_values[tag("pricechg")] = 0.0;
@ -60,6 +64,7 @@ ExtQuotes::~ExtQuotes()
disconnect(this, SIGNAL(requestDataUpdate()), this, SLOT(sendRequest())); disconnect(this, SIGNAL(requestDataUpdate()), this, SLOT(sendRequest()));
m_manager->deleteLater(); m_manager->deleteLater();
delete ui;
} }
@ -67,7 +72,7 @@ ExtQuotes *ExtQuotes::copy(const QString &_fileName, const int _number)
{ {
qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number; qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number;
auto item = new ExtQuotes(parent(), _fileName); auto *item = new ExtQuotes(dynamic_cast<QWidget *>(parent()), _fileName);
copyDefaults(item); copyDefaults(item);
item->setNumber(_number); item->setNumber(_number);
item->setTicker(ticker()); item->setTicker(ticker());
@ -121,15 +126,10 @@ QVariantHash ExtQuotes::run()
} }
int ExtQuotes::showConfiguration(QWidget *_parent, const QVariant &_args) int ExtQuotes::showConfiguration(const QVariant &_args)
{ {
Q_UNUSED(_args) Q_UNUSED(_args)
auto dialog = new QDialog(_parent);
auto ui = new Ui::ExtQuotes();
ui->setupUi(dialog);
translate(ui);
ui->lineEdit_name->setText(name()); ui->lineEdit_name->setText(name());
ui->lineEdit_comment->setText(comment()); ui->lineEdit_comment->setText(comment());
ui->label_numberValue->setText(QString("%1").arg(number())); ui->label_numberValue->setText(QString("%1").arg(number()));
@ -139,24 +139,20 @@ int ExtQuotes::showConfiguration(QWidget *_parent, const QVariant &_args)
ui->lineEdit_socket->setText(socket()); ui->lineEdit_socket->setText(socket());
ui->spinBox_interval->setValue(interval()); ui->spinBox_interval->setValue(interval());
auto ret = dialog->exec(); int ret = exec();
if (ret == 1) { if (ret != 1)
setName(ui->lineEdit_name->text()); return ret;
setComment(ui->lineEdit_comment->text()); setName(ui->lineEdit_name->text());
setNumber(ui->label_numberValue->text().toInt()); setComment(ui->lineEdit_comment->text());
setApiVersion(AW_EXTQUOTES_API); setNumber(ui->label_numberValue->text().toInt());
setTicker(ui->lineEdit_ticker->text()); setApiVersion(AW_EXTQUOTES_API);
setActive(ui->checkBox_active->checkState() == Qt::Checked); setTicker(ui->lineEdit_ticker->text());
setCron(ui->lineEdit_schedule->text()); setActive(ui->checkBox_active->checkState() == Qt::Checked);
setSocket(ui->lineEdit_socket->text()); setCron(ui->lineEdit_schedule->text());
setInterval(ui->spinBox_interval->value()); setSocket(ui->lineEdit_socket->text());
setInterval(ui->spinBox_interval->value());
writeConfiguration();
}
dialog->deleteLater();
delete ui;
writeConfiguration();
return ret; return ret;
} }
@ -186,7 +182,7 @@ void ExtQuotes::quotesReplyReceived(QNetworkReply *_reply)
auto text = _reply->readAll(); auto text = _reply->readAll();
_reply->deleteLater(); _reply->deleteLater();
auto data = m_providerObject->parse(text, m_values); QVariantHash data = m_providerObject->parse(text, m_values);
if (data.isEmpty()) if (data.isEmpty())
return; return;
m_values = data; m_values = data;
@ -198,7 +194,7 @@ void ExtQuotes::quotesReplyReceived(QNetworkReply *_reply)
void ExtQuotes::sendRequest() void ExtQuotes::sendRequest()
{ {
m_isRunning = true; m_isRunning = true;
auto reply = m_manager->get(QNetworkRequest(m_providerObject->url())); QNetworkReply *reply = m_manager->get(QNetworkRequest(m_providerObject->url()));
new QReplyTimeout(reply, REQUEST_TIMEOUT); new QReplyTimeout(reply, REQUEST_TIMEOUT);
} }
@ -214,10 +210,8 @@ void ExtQuotes::initProvider()
} }
void ExtQuotes::translate(void *_ui) void ExtQuotes::translate()
{ {
auto ui = reinterpret_cast<Ui::ExtQuotes *>(_ui);
ui->label_name->setText(i18n("Name")); ui->label_name->setText(i18n("Name"));
ui->label_comment->setText(i18n("Comment")); ui->label_comment->setText(i18n("Comment"));
ui->label_number->setText(i18n("Tag")); ui->label_number->setText(i18n("Tag"));

View File

@ -24,6 +24,10 @@
class AbstractQuotesProvider; class AbstractQuotesProvider;
namespace Ui
{
class ExtQuotes;
}
class ExtQuotes : public AbstractExtItem class ExtQuotes : public AbstractExtItem
{ {
@ -31,7 +35,7 @@ class ExtQuotes : public AbstractExtItem
Q_PROPERTY(QString ticker READ ticker WRITE setTicker) Q_PROPERTY(QString ticker READ ticker WRITE setTicker)
public: public:
explicit ExtQuotes(QObject *_parent = nullptr, const QString &_filePath = ""); explicit ExtQuotes(QWidget *_parent = nullptr, const QString &_filePath = "");
~ExtQuotes() override; ~ExtQuotes() override;
ExtQuotes *copy(const QString &_fileName, int _number) override; ExtQuotes *copy(const QString &_fileName, int _number) override;
// get methods // get methods
@ -43,7 +47,7 @@ public:
public slots: public slots:
void readConfiguration() override; void readConfiguration() override;
QVariantHash run() override; QVariantHash run() override;
int showConfiguration(QWidget *_parent, const QVariant &_args) override; int showConfiguration(const QVariant &_args) override;
void writeConfiguration() const override; void writeConfiguration() const override;
private slots: private slots:
@ -54,8 +58,9 @@ private:
AbstractQuotesProvider *m_providerObject = nullptr; AbstractQuotesProvider *m_providerObject = nullptr;
QNetworkAccessManager *m_manager = nullptr; QNetworkAccessManager *m_manager = nullptr;
bool m_isRunning = false; bool m_isRunning = false;
Ui::ExtQuotes *ui = nullptr;
void initProvider(); void initProvider();
void translate(void *_ui) override; void translate() override;
// properties // properties
QString m_ticker = "EURUSD=X"; QString m_ticker = "EURUSD=X";
// values // values

View File

@ -28,14 +28,17 @@
#include "awdebug.h" #include "awdebug.h"
ExtScript::ExtScript(QObject *_parent, const QString &_filePath) ExtScript::ExtScript(QWidget *_parent, const QString &_filePath)
: AbstractExtItem(_parent, _filePath) : AbstractExtItem(_parent, _filePath)
, ui(new Ui::ExtScript)
{ {
qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; qCDebug(LOG_LIB) << __PRETTY_FUNCTION__;
if (!_filePath.isEmpty()) if (!_filePath.isEmpty())
ExtScript::readConfiguration(); ExtScript::readConfiguration();
readJsonFilters(); readJsonFilters();
ui->setupUi(this);
ExtScript::translate();
m_values[tag("custom")] = ""; m_values[tag("custom")] = "";
@ -55,6 +58,7 @@ ExtScript::~ExtScript()
m_process->kill(); m_process->kill();
m_process->deleteLater(); m_process->deleteLater();
disconnect(this, SIGNAL(requestDataUpdate()), this, SLOT(startProcess())); disconnect(this, SIGNAL(requestDataUpdate()), this, SLOT(startProcess()));
delete ui;
} }
@ -62,7 +66,7 @@ ExtScript *ExtScript::copy(const QString &_fileName, const int _number)
{ {
qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number; qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number;
auto item = new ExtScript(parent(), _fileName); auto *item = new ExtScript(dynamic_cast<QWidget *>(parent()), _fileName);
copyDefaults(item); copyDefaults(item);
item->setExecutable(executable()); item->setExecutable(executable());
item->setNumber(_number); item->setNumber(_number);
@ -175,7 +179,7 @@ QString ExtScript::applyFilters(QString _value) const
for (auto &filt : filters()) { for (auto &filt : filters()) {
qCInfo(LOG_LIB) << "Found filter" << filt; qCInfo(LOG_LIB) << "Found filter" << filt;
auto filter = m_jsonFilters[filt].toMap(); QVariantMap filter = m_jsonFilters[filt].toMap();
if (filter.isEmpty()) { if (filter.isEmpty()) {
qCWarning(LOG_LIB) << "Could not find filter" << _value << "in the json"; qCWarning(LOG_LIB) << "Could not find filter" << _value << "in the json";
continue; continue;
@ -221,7 +225,7 @@ void ExtScript::readConfiguration()
void ExtScript::readJsonFilters() void ExtScript::readJsonFilters()
{ {
auto fileName = jsonFiltersFile(); QString fileName = jsonFiltersFile();
QFile jsonFile(fileName); QFile jsonFile(fileName);
if (!jsonFile.open(QIODevice::ReadOnly | QIODevice::Text)) { if (!jsonFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
qCWarning(LOG_LIB) << "Could not open" << fileName; qCWarning(LOG_LIB) << "Could not open" << fileName;
@ -231,7 +235,7 @@ void ExtScript::readJsonFilters()
jsonFile.close(); jsonFile.close();
QJsonParseError error{}; QJsonParseError error{};
auto jsonDoc = QJsonDocument::fromJson(jsonText.toUtf8(), &error); QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonText.toUtf8(), &error);
if (error.error != QJsonParseError::NoError) { if (error.error != QJsonParseError::NoError) {
qCWarning(LOG_LIB) << "Parse error" << error.errorString(); qCWarning(LOG_LIB) << "Parse error" << error.errorString();
return; return;
@ -252,15 +256,10 @@ QVariantHash ExtScript::run()
} }
int ExtScript::showConfiguration(QWidget *_parent, const QVariant &_args) int ExtScript::showConfiguration(const QVariant &_args)
{ {
Q_UNUSED(_args) Q_UNUSED(_args)
auto dialog = new QDialog(_parent);
auto ui = new Ui::ExtScript();
ui->setupUi(dialog);
translate(ui);
ui->lineEdit_name->setText(name()); ui->lineEdit_name->setText(name());
ui->lineEdit_comment->setText(comment()); ui->lineEdit_comment->setText(comment());
ui->label_numberValue->setText(QString("%1").arg(number())); ui->label_numberValue->setText(QString("%1").arg(number()));
@ -275,29 +274,25 @@ int ExtScript::showConfiguration(QWidget *_parent, const QVariant &_args)
ui->checkBox_linesFilter->setCheckState(filters().contains("newline") ? Qt::Checked : Qt::Unchecked); ui->checkBox_linesFilter->setCheckState(filters().contains("newline") ? Qt::Checked : Qt::Unchecked);
ui->checkBox_spaceFilter->setCheckState(filters().contains("space") ? Qt::Checked : Qt::Unchecked); ui->checkBox_spaceFilter->setCheckState(filters().contains("space") ? Qt::Checked : Qt::Unchecked);
int ret = dialog->exec(); int ret = exec();
if (ret == 1) { if (ret != 1)
setName(ui->lineEdit_name->text()); return ret;
setComment(ui->lineEdit_comment->text()); setName(ui->lineEdit_name->text());
setNumber(ui->label_numberValue->text().toInt()); setComment(ui->lineEdit_comment->text());
setApiVersion(AW_EXTSCRIPT_API); setNumber(ui->label_numberValue->text().toInt());
setExecutable(ui->lineEdit_command->text()); setApiVersion(AW_EXTSCRIPT_API);
setActive(ui->checkBox_active->checkState() == Qt::Checked); setExecutable(ui->lineEdit_command->text());
setRedirect(static_cast<Redirect>(ui->comboBox_redirect->currentIndex())); setActive(ui->checkBox_active->checkState() == Qt::Checked);
setCron(ui->lineEdit_schedule->text()); setRedirect(static_cast<Redirect>(ui->comboBox_redirect->currentIndex()));
setSocket(ui->lineEdit_socket->text()); setCron(ui->lineEdit_schedule->text());
setInterval(ui->spinBox_interval->value()); setSocket(ui->lineEdit_socket->text());
// filters setInterval(ui->spinBox_interval->value());
updateFilter("color", ui->checkBox_colorFilter->checkState() == Qt::Checked); // filters
updateFilter("newline", ui->checkBox_linesFilter->checkState() == Qt::Checked); updateFilter("color", ui->checkBox_colorFilter->checkState() == Qt::Checked);
updateFilter("space", ui->checkBox_spaceFilter->checkState() == Qt::Checked); updateFilter("newline", ui->checkBox_linesFilter->checkState() == Qt::Checked);
updateFilter("space", ui->checkBox_spaceFilter->checkState() == Qt::Checked);
writeConfiguration();
}
dialog->deleteLater();
delete ui;
writeConfiguration();
return ret; return ret;
} }
@ -329,9 +324,9 @@ void ExtScript::startProcess()
void ExtScript::updateValue() void ExtScript::updateValue()
{ {
qCInfo(LOG_LIB) << "Cmd returns" << m_process->exitCode(); qCInfo(LOG_LIB) << "Cmd returns" << m_process->exitCode();
auto qdebug = QString::fromUtf8(m_process->readAllStandardError()).trimmed(); QString qdebug = QString::fromUtf8(m_process->readAllStandardError()).trimmed();
qCInfo(LOG_LIB) << "Error" << qdebug; qCInfo(LOG_LIB) << "Error" << qdebug;
auto qoutput = QString::fromUtf8(m_process->readAllStandardOutput()).trimmed(); QString qoutput = QString::fromUtf8(m_process->readAllStandardOutput()).trimmed();
qCInfo(LOG_LIB) << "Output" << qoutput; qCInfo(LOG_LIB) << "Output" << qoutput;
QString strValue; QString strValue;
@ -355,10 +350,8 @@ void ExtScript::updateValue()
} }
void ExtScript::translate(void *_ui) void ExtScript::translate()
{ {
auto ui = reinterpret_cast<Ui::ExtScript *>(_ui);
ui->label_name->setText(i18n("Name")); ui->label_name->setText(i18n("Name"));
ui->label_comment->setText(i18n("Comment")); ui->label_comment->setText(i18n("Comment"));
ui->label_number->setText(i18n("Tag")); ui->label_number->setText(i18n("Tag"));

View File

@ -23,6 +23,11 @@
#include "abstractextitem.h" #include "abstractextitem.h"
namespace Ui
{
class ExtScript;
}
class ExtScript : public AbstractExtItem class ExtScript : public AbstractExtItem
{ {
Q_OBJECT Q_OBJECT
@ -33,7 +38,7 @@ class ExtScript : public AbstractExtItem
public: public:
enum class Redirect { stdout2stderr = 0, nothing = 1, stderr2stdout = 2, swap = 3 }; enum class Redirect { stdout2stderr = 0, nothing = 1, stderr2stdout = 2, swap = 3 };
explicit ExtScript(QObject *_parent = nullptr, const QString &_filePath = ""); explicit ExtScript(QWidget *_parent = nullptr, const QString &_filePath = "");
~ExtScript() override; ~ExtScript() override;
ExtScript *copy(const QString &_fileName, int _number) override; ExtScript *copy(const QString &_fileName, int _number) override;
static QString jsonFiltersFile(); static QString jsonFiltersFile();
@ -57,7 +62,7 @@ public slots:
void readConfiguration() override; void readConfiguration() override;
void readJsonFilters(); void readJsonFilters();
QVariantHash run() override; QVariantHash run() override;
int showConfiguration(QWidget *_parent, const QVariant &_args) override; int showConfiguration(const QVariant &_args) override;
void writeConfiguration() const override; void writeConfiguration() const override;
private slots: private slots:
@ -66,7 +71,8 @@ private slots:
private: private:
QProcess *m_process = nullptr; QProcess *m_process = nullptr;
void translate(void *_ui) override; Ui::ExtScript *ui = nullptr;
void translate() override;
// properties // properties
QString m_executable = "/usr/bin/true"; QString m_executable = "/usr/bin/true";
QStringList m_filters = QStringList(); QStringList m_filters = QStringList();

View File

@ -25,13 +25,16 @@
#include "awdebug.h" #include "awdebug.h"
ExtUpgrade::ExtUpgrade(QObject *_parent, const QString &_filePath) ExtUpgrade::ExtUpgrade(QWidget *_parent, const QString &_filePath)
: AbstractExtItem(_parent, _filePath) : AbstractExtItem(_parent, _filePath)
, ui(new Ui::ExtUpgrade)
{ {
qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; qCDebug(LOG_LIB) << __PRETTY_FUNCTION__;
if (!_filePath.isEmpty()) if (!_filePath.isEmpty())
ExtUpgrade::readConfiguration(); ExtUpgrade::readConfiguration();
ui->setupUi(this);
ExtUpgrade::translate();
m_values[tag("pkgcount")] = 0; m_values[tag("pkgcount")] = 0;
@ -50,6 +53,7 @@ ExtUpgrade::~ExtUpgrade()
m_process->kill(); m_process->kill();
m_process->deleteLater(); m_process->deleteLater();
disconnect(this, SIGNAL(requestDataUpdate()), this, SLOT(startProcess())); disconnect(this, SIGNAL(requestDataUpdate()), this, SLOT(startProcess()));
delete ui;
} }
@ -57,7 +61,7 @@ ExtUpgrade *ExtUpgrade::copy(const QString &_fileName, const int _number)
{ {
qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number; qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number;
auto item = new ExtUpgrade(parent(), _fileName); auto *item = new ExtUpgrade(dynamic_cast<QWidget *>(parent()), _fileName);
copyDefaults(item); copyDefaults(item);
item->setExecutable(executable()); item->setExecutable(executable());
item->setFilter(filter()); item->setFilter(filter());
@ -145,15 +149,10 @@ QVariantHash ExtUpgrade::run()
} }
int ExtUpgrade::showConfiguration(QWidget *_parent, const QVariant &_args) int ExtUpgrade::showConfiguration(const QVariant &_args)
{ {
Q_UNUSED(_args) Q_UNUSED(_args)
auto dialog = new QDialog(_parent);
auto ui = new Ui::ExtUpgrade();
ui->setupUi(dialog);
translate(ui);
ui->lineEdit_name->setText(name()); ui->lineEdit_name->setText(name());
ui->lineEdit_comment->setText(comment()); ui->lineEdit_comment->setText(comment());
ui->label_numberValue->setText(QString("%1").arg(number())); ui->label_numberValue->setText(QString("%1").arg(number()));
@ -165,26 +164,22 @@ int ExtUpgrade::showConfiguration(QWidget *_parent, const QVariant &_args)
ui->lineEdit_socket->setText(socket()); ui->lineEdit_socket->setText(socket());
ui->spinBox_interval->setValue(interval()); ui->spinBox_interval->setValue(interval());
auto ret = dialog->exec(); int ret = exec();
if (ret == 1) { if (ret != 1)
setName(ui->lineEdit_name->text()); return ret;
setComment(ui->lineEdit_comment->text()); setName(ui->lineEdit_name->text());
setNumber(ui->label_numberValue->text().toInt()); setComment(ui->lineEdit_comment->text());
setApiVersion(AW_EXTUPGRADE_API); setNumber(ui->label_numberValue->text().toInt());
setExecutable(ui->lineEdit_command->text()); setApiVersion(AW_EXTUPGRADE_API);
setFilter(ui->lineEdit_filter->text()); setExecutable(ui->lineEdit_command->text());
setActive(ui->checkBox_active->checkState() == Qt::Checked); setFilter(ui->lineEdit_filter->text());
setNull(ui->spinBox_null->value()); setActive(ui->checkBox_active->checkState() == Qt::Checked);
setCron(ui->lineEdit_schedule->text()); setNull(ui->spinBox_null->value());
setSocket(ui->lineEdit_socket->text()); setCron(ui->lineEdit_schedule->text());
setInterval(ui->spinBox_interval->value()); setSocket(ui->lineEdit_socket->text());
setInterval(ui->spinBox_interval->value());
writeConfiguration();
}
dialog->deleteLater();
delete ui;
writeConfiguration();
return ret; return ret;
} }
@ -218,7 +213,7 @@ void ExtUpgrade::updateValue()
qCInfo(LOG_LIB) << "Cmd returns" << m_process->exitCode(); qCInfo(LOG_LIB) << "Cmd returns" << m_process->exitCode();
qCInfo(LOG_LIB) << "Error" << m_process->readAllStandardError(); qCInfo(LOG_LIB) << "Error" << m_process->readAllStandardError();
auto qoutput = QString::fromUtf8(m_process->readAllStandardOutput()).trimmed(); QString qoutput = QString::fromUtf8(m_process->readAllStandardOutput()).trimmed();
m_values[tag("pkgcount")] = [this](const QString &output) { m_values[tag("pkgcount")] = [this](const QString &output) {
return filter().isEmpty() ? output.split('\n', Qt::SkipEmptyParts).count() - null() return filter().isEmpty() ? output.split('\n', Qt::SkipEmptyParts).count() - null()
: output.split('\n', Qt::SkipEmptyParts).filter(QRegularExpression(filter())).count(); : output.split('\n', Qt::SkipEmptyParts).filter(QRegularExpression(filter())).count();
@ -228,10 +223,8 @@ void ExtUpgrade::updateValue()
} }
void ExtUpgrade::translate(void *_ui) void ExtUpgrade::translate()
{ {
auto ui = reinterpret_cast<Ui::ExtUpgrade *>(_ui);
ui->label_name->setText(i18n("Name")); ui->label_name->setText(i18n("Name"));
ui->label_comment->setText(i18n("Comment")); ui->label_comment->setText(i18n("Comment"));
ui->label_number->setText(i18n("Tag")); ui->label_number->setText(i18n("Tag"));

View File

@ -23,6 +23,11 @@
#include "abstractextitem.h" #include "abstractextitem.h"
namespace Ui
{
class ExtUpgrade;
}
class ExtUpgrade : public AbstractExtItem class ExtUpgrade : public AbstractExtItem
{ {
Q_OBJECT Q_OBJECT
@ -31,7 +36,7 @@ class ExtUpgrade : public AbstractExtItem
Q_PROPERTY(int null READ null WRITE setNull) Q_PROPERTY(int null READ null WRITE setNull)
public: public:
explicit ExtUpgrade(QObject *_parent = nullptr, const QString &_filePath = ""); explicit ExtUpgrade(QWidget *_parent = nullptr, const QString &_filePath = "");
~ExtUpgrade() override; ~ExtUpgrade() override;
ExtUpgrade *copy(const QString &_fileName, int _number) override; ExtUpgrade *copy(const QString &_fileName, int _number) override;
// get methods // get methods
@ -47,7 +52,7 @@ public:
public slots: public slots:
void readConfiguration() override; void readConfiguration() override;
QVariantHash run() override; QVariantHash run() override;
int showConfiguration(QWidget *_parent, const QVariant &_args) override; int showConfiguration(const QVariant &_args) override;
void writeConfiguration() const override; void writeConfiguration() const override;
private slots: private slots:
@ -56,7 +61,8 @@ private slots:
private: private:
QProcess *m_process = nullptr; QProcess *m_process = nullptr;
void translate(void *_ui) override; Ui::ExtUpgrade *ui = nullptr;
void translate() override;
// properties // properties
QString m_executable = "/usr/bin/true"; QString m_executable = "/usr/bin/true";
QString m_filter = ""; QString m_filter = "";

View File

@ -29,16 +29,20 @@
#include "awdebug.h" #include "awdebug.h"
#include "owmweatherprovider.h" #include "owmweatherprovider.h"
#include "yahooweatherprovider.h"
ExtWeather::ExtWeather(QObject *_parent, const QString &_filePath) ExtWeather::ExtWeather(QWidget *_parent, const QString &_filePath)
: AbstractExtItem(_parent, _filePath) : AbstractExtItem(_parent, _filePath)
, ui(new Ui::ExtWeather)
{ {
qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; qCDebug(LOG_LIB) << __PRETTY_FUNCTION__;
if (!_filePath.isEmpty()) if (!_filePath.isEmpty())
ExtWeather::readConfiguration(); ExtWeather::readConfiguration();
readJsonMap(); readJsonMap();
ui->setupUi(this);
ExtWeather::translate();
m_values[tag("weatherId")] = 0; m_values[tag("weatherId")] = 0;
m_values[tag("weather")] = ""; m_values[tag("weather")] = "";
@ -63,6 +67,7 @@ ExtWeather::~ExtWeather()
disconnect(this, SIGNAL(requestDataUpdate()), this, SLOT(sendRequest())); disconnect(this, SIGNAL(requestDataUpdate()), this, SLOT(sendRequest()));
m_manager->deleteLater(); m_manager->deleteLater();
delete ui;
} }
@ -70,7 +75,7 @@ ExtWeather *ExtWeather::copy(const QString &_fileName, const int _number)
{ {
qCDebug(LOG_LIB) << "File" << _fileName << "number" << _number; qCDebug(LOG_LIB) << "File" << _fileName << "number" << _number;
auto item = new ExtWeather(parent(), _fileName); auto *item = new ExtWeather(dynamic_cast<QWidget *>(parent()), _fileName);
copyDefaults(item); copyDefaults(item);
item->setCity(city()); item->setCity(city());
item->setCountry(country()); item->setCountry(country());
@ -97,7 +102,7 @@ QString ExtWeather::weatherFromInt(const int _id) const
{ {
qCDebug(LOG_LIB) << "Weather ID" << _id; qCDebug(LOG_LIB) << "Weather ID" << _id;
auto map = m_jsonMap[m_image ? "image" : "text"].toMap(); QVariantMap map = m_jsonMap[m_image ? "image" : "text"].toMap();
return map.value(QString::number(_id), map["default"]).toString(); return map.value(QString::number(_id), map["default"]).toString();
} }
@ -231,7 +236,7 @@ void ExtWeather::readConfiguration()
void ExtWeather::readJsonMap() void ExtWeather::readJsonMap()
{ {
auto fileName = jsonMapFile(); QString fileName = jsonMapFile();
QFile jsonFile(fileName); QFile jsonFile(fileName);
if (!jsonFile.open(QIODevice::ReadOnly | QIODevice::Text)) { if (!jsonFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
qCWarning(LOG_LIB) << "Could not open" << fileName; qCWarning(LOG_LIB) << "Could not open" << fileName;
@ -241,7 +246,7 @@ void ExtWeather::readJsonMap()
jsonFile.close(); jsonFile.close();
QJsonParseError error{}; QJsonParseError error{};
auto jsonDoc = QJsonDocument::fromJson(jsonText.toUtf8(), &error); QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonText.toUtf8(), &error);
if (error.error != QJsonParseError::NoError) { if (error.error != QJsonParseError::NoError) {
qCWarning(LOG_LIB) << "Parse error" << error.errorString(); qCWarning(LOG_LIB) << "Parse error" << error.errorString();
return; return;
@ -262,15 +267,10 @@ QVariantHash ExtWeather::run()
} }
int ExtWeather::showConfiguration(QWidget *_parent, const QVariant &_args) int ExtWeather::showConfiguration(const QVariant &_args)
{ {
Q_UNUSED(_args) Q_UNUSED(_args)
auto dialog = new QDialog(_parent);
auto ui = new Ui::ExtWeather();
ui->setupUi(dialog);
translate(ui);
ui->lineEdit_name->setText(name()); ui->lineEdit_name->setText(name());
ui->lineEdit_comment->setText(comment()); ui->lineEdit_comment->setText(comment());
ui->label_numberValue->setText(QString("%1").arg(number())); ui->label_numberValue->setText(QString("%1").arg(number()));
@ -284,28 +284,24 @@ int ExtWeather::showConfiguration(QWidget *_parent, const QVariant &_args)
ui->lineEdit_socket->setText(socket()); ui->lineEdit_socket->setText(socket());
ui->spinBox_interval->setValue(interval()); ui->spinBox_interval->setValue(interval());
int ret = dialog->exec(); int ret = exec();
if (ret == 1) { if (ret != 1)
setName(ui->lineEdit_name->text()); return ret;
setComment(ui->lineEdit_comment->text()); setName(ui->lineEdit_name->text());
setNumber(ui->label_numberValue->text().toInt()); setComment(ui->lineEdit_comment->text());
setApiVersion(AW_EXTWEATHER_API); setNumber(ui->label_numberValue->text().toInt());
setCity(ui->lineEdit_city->text()); setApiVersion(AW_EXTWEATHER_API);
setCountry(ui->lineEdit_country->text()); setCity(ui->lineEdit_city->text());
setProvider(static_cast<Provider>(ui->comboBox_provider->currentIndex())); setCountry(ui->lineEdit_country->text());
setTs(ui->spinBox_timestamp->value()); setProvider(static_cast<Provider>(ui->comboBox_provider->currentIndex()));
setImage(ui->checkBox_image->checkState() == Qt::Checked); setTs(ui->spinBox_timestamp->value());
setActive(ui->checkBox_active->checkState() == Qt::Checked); setImage(ui->checkBox_image->checkState() == Qt::Checked);
setCron(ui->lineEdit_schedule->text()); setActive(ui->checkBox_active->checkState() == Qt::Checked);
setSocket(ui->lineEdit_socket->text()); setCron(ui->lineEdit_schedule->text());
setInterval(ui->spinBox_interval->value()); setSocket(ui->lineEdit_socket->text());
setInterval(ui->spinBox_interval->value());
writeConfiguration();
}
dialog->deleteLater();
delete ui;
writeConfiguration();
return ret; return ret;
} }
@ -332,7 +328,7 @@ void ExtWeather::writeConfiguration() const
void ExtWeather::sendRequest() void ExtWeather::sendRequest()
{ {
m_isRunning = true; m_isRunning = true;
auto reply = m_manager->get(QNetworkRequest(m_providerObject->url())); QNetworkReply *reply = m_manager->get(QNetworkRequest(m_providerObject->url()));
new QReplyTimeout(reply, REQUEST_TIMEOUT); new QReplyTimeout(reply, REQUEST_TIMEOUT);
} }
@ -346,14 +342,14 @@ void ExtWeather::weatherReplyReceived(QNetworkReply *_reply)
m_isRunning = false; m_isRunning = false;
QJsonParseError error{}; QJsonParseError error{};
auto jsonDoc = QJsonDocument::fromJson(_reply->readAll(), &error); QJsonDocument jsonDoc = QJsonDocument::fromJson(_reply->readAll(), &error);
_reply->deleteLater(); _reply->deleteLater();
if (error.error != QJsonParseError::NoError) { if (error.error != QJsonParseError::NoError) {
qCWarning(LOG_LIB) << "Parse error" << error.errorString(); qCWarning(LOG_LIB) << "Parse error" << error.errorString();
return; return;
} }
auto data = m_providerObject->parse(jsonDoc.toVariant().toMap()); QVariantHash data = m_providerObject->parse(jsonDoc.toVariant().toMap());
if (data.isEmpty()) if (data.isEmpty())
return; return;
m_values = data; m_values = data;
@ -374,10 +370,8 @@ void ExtWeather::initProvider()
} }
void ExtWeather::translate(void *_ui) void ExtWeather::translate()
{ {
auto ui = reinterpret_cast<Ui::ExtWeather *>(_ui);
ui->label_name->setText(i18n("Name")); ui->label_name->setText(i18n("Name"));
ui->label_comment->setText(i18n("Comment")); ui->label_comment->setText(i18n("Comment"));
ui->label_number->setText(i18n("Tag")); ui->label_number->setText(i18n("Tag"));

View File

@ -42,7 +42,7 @@ class ExtWeather : public AbstractExtItem
public: public:
enum class Provider { OWM = 0, Yahoo = 1 }; enum class Provider { OWM = 0, Yahoo = 1 };
explicit ExtWeather(QObject *_parent = nullptr, const QString &_filePath = ""); explicit ExtWeather(QWidget *_parent = nullptr, const QString &_filePath = "");
~ExtWeather() override; ~ExtWeather() override;
ExtWeather *copy(const QString &_fileName, int _number) override; ExtWeather *copy(const QString &_fileName, int _number) override;
static QString jsonMapFile(); static QString jsonMapFile();
@ -67,7 +67,7 @@ public slots:
void readConfiguration() override; void readConfiguration() override;
void readJsonMap(); void readJsonMap();
QVariantHash run() override; QVariantHash run() override;
int showConfiguration(QWidget *_parent, const QVariant &_args) override; int showConfiguration(const QVariant &_args) override;
void writeConfiguration() const override; void writeConfiguration() const override;
private slots: private slots:
@ -78,8 +78,9 @@ private:
AbstractWeatherProvider *m_providerObject = nullptr; AbstractWeatherProvider *m_providerObject = nullptr;
QNetworkAccessManager *m_manager = nullptr; QNetworkAccessManager *m_manager = nullptr;
bool m_isRunning = false; bool m_isRunning = false;
Ui::ExtWeather *ui = nullptr;
void initProvider(); void initProvider();
void translate(void *_ui) override; void translate() override;
// properties // properties
QString m_city = "London"; QString m_city = "London";
QString m_country = "uk"; QString m_country = "uk";

View File

@ -32,8 +32,9 @@
#include "graphicalitemhelper.h" #include "graphicalitemhelper.h"
GraphicalItem::GraphicalItem(QObject *_parent, const QString &_filePath) GraphicalItem::GraphicalItem(QWidget *_parent, const QString &_filePath)
: AbstractExtItem(_parent, _filePath) : AbstractExtItem(_parent, _filePath)
, ui(new Ui::GraphicalItem)
{ {
qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; qCDebug(LOG_LIB) << __PRETTY_FUNCTION__;
@ -52,6 +53,21 @@ GraphicalItem::GraphicalItem(QObject *_parent, const QString &_filePath)
if (!_filePath.isEmpty()) if (!_filePath.isEmpty())
GraphicalItem::readConfiguration(); GraphicalItem::readConfiguration();
ui->setupUi(this);
GraphicalItem::translate();
connect(ui->checkBox_custom, SIGNAL(stateChanged(int)), this, SLOT(changeValue(int)));
connect(ui->comboBox_type, SIGNAL(currentIndexChanged(int)), this, SLOT(changeCountState(int)));
connect(ui->toolButton_activeColor, SIGNAL(clicked()), this, SLOT(changeColor()));
connect(ui->toolButton_inactiveColor, SIGNAL(clicked()), this, SLOT(changeColor()));
}
GraphicalItem::~GraphicalItem()
{
qCDebug(LOG_LIB) << __PRETTY_FUNCTION__;
delete ui;
} }
@ -59,7 +75,7 @@ GraphicalItem *GraphicalItem::copy(const QString &_fileName, const int _number)
{ {
qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number; qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number;
auto item = new GraphicalItem(parent(), _fileName); auto *item = new GraphicalItem(dynamic_cast<QWidget *>(parent()), _fileName);
copyDefaults(item); copyDefaults(item);
item->setActiveColor(activeColor()); item->setActiveColor(activeColor());
item->setBar(bar()); item->setBar(bar());
@ -84,7 +100,7 @@ QString GraphicalItem::image(const QVariant &value)
m_scene->clear(); m_scene->clear();
int scale[2] = {1, 1}; int scale[2] = {1, 1};
auto converted = GraphicalItemHelper::getPercents(value.toFloat(), minValue(), maxValue()); float converted = GraphicalItemHelper::getPercents(value.toFloat(), minValue(), maxValue());
// paint // paint
switch (m_type) { switch (m_type) {
@ -116,11 +132,11 @@ QString GraphicalItem::image(const QVariant &value)
} }
// convert // convert
auto pixmap = m_view->grab().transformed(QTransform().scale(scale[0], scale[1])); QPixmap pixmap = m_view->grab().transformed(QTransform().scale(scale[0], scale[1]));
QByteArray byteArray; QByteArray byteArray;
QBuffer buffer(&byteArray); QBuffer buffer(&byteArray);
pixmap.save(&buffer, "PNG"); pixmap.save(&buffer, "PNG");
auto url = QString("<img src=\"data:image/png;base64,%1\"/>").arg(QString(byteArray.toBase64())); QString url = QString("<img src=\"data:image/png;base64,%1\"/>").arg(QString(byteArray.toBase64()));
return url; return url;
} }
@ -422,21 +438,10 @@ void GraphicalItem::readConfiguration()
} }
int GraphicalItem::showConfiguration(QWidget *_parent, const QVariant &_args) int GraphicalItem::showConfiguration(const QVariant &_args)
{ {
qCDebug(LOG_LIB) << "Combobox arguments" << _args; qCDebug(LOG_LIB) << "Combobox arguments" << _args;
auto tags = _args.toStringList(); QStringList tags = _args.toStringList();
auto dialog = new QDialog(_parent);
auto ui = new Ui::GraphicalItem();
ui->setupUi(dialog);
translate(ui);
connect(ui->checkBox_custom, &QCheckBox::stateChanged, [this, ui](const int state) { changeValue(ui, state); });
connect(ui->comboBox_type, &QComboBox::currentIndexChanged,
[this, ui](const int state) { changeCountState(ui, state); });
connect(ui->toolButton_activeColor, &QToolButton::clicked, [this, ui]() { changeColor(ui); });
connect(ui->toolButton_inactiveColor, &QToolButton::clicked, [this, ui]() { changeColor(ui); });
ui->lineEdit_name->setText(name()); ui->lineEdit_name->setText(name());
ui->lineEdit_comment->setText(comment()); ui->lineEdit_comment->setText(comment());
@ -471,29 +476,25 @@ int GraphicalItem::showConfiguration(QWidget *_parent, const QVariant &_args)
emit(ui->comboBox_type->currentIndexChanged(ui->comboBox_type->currentIndex())); emit(ui->comboBox_type->currentIndexChanged(ui->comboBox_type->currentIndex()));
emit(ui->checkBox_custom->stateChanged(ui->checkBox_custom->checkState())); emit(ui->checkBox_custom->stateChanged(ui->checkBox_custom->checkState()));
int ret = dialog->exec(); int ret = exec();
if (ret == 1) { if (ret != 1)
setName(ui->lineEdit_name->text()); return ret;
setComment(ui->lineEdit_comment->text()); setName(ui->lineEdit_name->text());
setApiVersion(AW_GRAPHITEM_API); setComment(ui->lineEdit_comment->text());
setCount(ui->spinBox_count->value()); setApiVersion(AW_GRAPHITEM_API);
setCustom(ui->checkBox_custom->isChecked()); setCount(ui->spinBox_count->value());
setBar(m_custom ? ui->lineEdit_customValue->text() : ui->comboBox_value->currentText()); setCustom(ui->checkBox_custom->isChecked());
setMaxValue(static_cast<float>(ui->doubleSpinBox_max->value())); setBar(m_custom ? ui->lineEdit_customValue->text() : ui->comboBox_value->currentText());
setMinValue(static_cast<float>(ui->doubleSpinBox_min->value())); setMaxValue(static_cast<float>(ui->doubleSpinBox_max->value()));
setActiveColor(ui->lineEdit_activeColor->text()); setMinValue(static_cast<float>(ui->doubleSpinBox_min->value()));
setInactiveColor(ui->lineEdit_inactiveColor->text()); setActiveColor(ui->lineEdit_activeColor->text());
setType(static_cast<Type>(ui->comboBox_type->currentIndex())); setInactiveColor(ui->lineEdit_inactiveColor->text());
setDirection(static_cast<Direction>(ui->comboBox_direction->currentIndex())); setType(static_cast<Type>(ui->comboBox_type->currentIndex()));
setItemHeight(ui->spinBox_height->value()); setDirection(static_cast<Direction>(ui->comboBox_direction->currentIndex()));
setItemWidth(ui->spinBox_width->value()); setItemHeight(ui->spinBox_height->value());
setItemWidth(ui->spinBox_width->value());
writeConfiguration();
}
dialog->deleteLater();
delete ui;
writeConfiguration();
return ret; return ret;
} }
@ -523,23 +524,23 @@ void GraphicalItem::writeConfiguration() const
} }
void GraphicalItem::changeColor(Ui::GraphicalItem *_ui) void GraphicalItem::changeColor()
{ {
QLineEdit *lineEdit; QLineEdit *lineEdit;
int state; int state;
if (sender() == _ui->toolButton_activeColor) { if (sender() == ui->toolButton_activeColor) {
lineEdit = _ui->lineEdit_activeColor; lineEdit = ui->lineEdit_activeColor;
state = _ui->comboBox_activeImageType->currentIndex(); state = ui->comboBox_activeImageType->currentIndex();
} else { } else {
lineEdit = _ui->lineEdit_inactiveColor; lineEdit = ui->lineEdit_inactiveColor;
state = _ui->comboBox_inactiveImageType->currentIndex(); state = ui->comboBox_inactiveImageType->currentIndex();
} }
qCInfo(LOG_LIB) << "Using state" << state << "and lineEdit" << lineEdit; qCInfo(LOG_LIB) << "Using state" << state << "and lineEdit" << lineEdit;
QString outputColor; QString outputColor;
if (state == 0) { if (state == 0) {
auto color = GraphicalItemHelper::stringToColor(lineEdit->text()); QColor color = GraphicalItemHelper::stringToColor(lineEdit->text());
auto newColor = QColorDialog::getColor(color, nullptr, i18n("Select color"), QColorDialog::ShowAlphaChannel); QColor newColor = QColorDialog::getColor(color, this, i18n("Select color"), QColorDialog::ShowAlphaChannel);
if (!newColor.isValid()) if (!newColor.isValid())
return; return;
qCInfo(LOG_LIB) << "Selected color" << newColor; qCInfo(LOG_LIB) << "Selected color" << newColor;
@ -552,9 +553,9 @@ void GraphicalItem::changeColor(Ui::GraphicalItem *_ui)
outputColor = QString("color://%1").arg(colorText.join(',')); outputColor = QString("color://%1").arg(colorText.join(','));
} else if (state == 1) { } else if (state == 1) {
auto path = lineEdit->text(); QString path = lineEdit->text();
auto directory = QFileInfo(path).absolutePath(); QString directory = QFileInfo(path).absolutePath();
outputColor = QFileDialog::getOpenFileUrl(nullptr, i18n("Select path"), directory, outputColor = QFileDialog::getOpenFileUrl(this, i18n("Select path"), directory,
i18n("Images (*.png *.bpm *.jpg);;All files (*.*)")) i18n("Images (*.png *.bpm *.jpg);;All files (*.*)"))
.toString(); .toString();
@ -569,28 +570,26 @@ void GraphicalItem::changeColor(Ui::GraphicalItem *_ui)
} }
void GraphicalItem::changeCountState(Ui::GraphicalItem *_ui, const int _state) void GraphicalItem::changeCountState(const int _state)
{ {
qCDebug(LOG_LIB) << "Current state is" << _state; qCDebug(LOG_LIB) << "Current state is" << _state;
// 3 is magic number. Actually 3 is Graph mode // 3 is magic number. Actually 3 is Graph mode
_ui->widget_count->setHidden(_state != 3); ui->widget_count->setHidden(_state != 3);
} }
void GraphicalItem::changeValue(Ui::GraphicalItem *_ui, const int _state) void GraphicalItem::changeValue(const int _state)
{ {
qCDebug(LOG_LIB) << "Current state is" << _state; qCDebug(LOG_LIB) << "Current state is" << _state;
_ui->widget_value->setHidden(_state != Qt::Unchecked); ui->widget_value->setHidden(_state != Qt::Unchecked);
_ui->widget_customValue->setHidden(_state == Qt::Unchecked); ui->widget_customValue->setHidden(_state == Qt::Unchecked);
} }
void GraphicalItem::translate(void *_ui) void GraphicalItem::translate()
{ {
auto ui = reinterpret_cast<Ui::GraphicalItem *>(_ui);
ui->label_name->setText(i18n("Name")); ui->label_name->setText(i18n("Name"));
ui->label_comment->setText(i18n("Comment")); ui->label_comment->setText(i18n("Comment"));
ui->label_number->setText(i18n("Tag")); ui->label_number->setText(i18n("Tag"));

View File

@ -52,7 +52,8 @@ public:
enum class Direction { LeftToRight = 0, RightToLeft = 1 }; enum class Direction { LeftToRight = 0, RightToLeft = 1 };
enum class Type { Horizontal = 0, Vertical = 1, Circle = 2, Graph = 3, Bars = 4 }; enum class Type { Horizontal = 0, Vertical = 1, Circle = 2, Graph = 3, Bars = 4 };
explicit GraphicalItem(QObject *_parent = nullptr, const QString &_filePath = ""); explicit GraphicalItem(QWidget *_parent = nullptr, const QString &_filePath = "");
~GraphicalItem() override;
GraphicalItem *copy(const QString &_fileName, int _number) override; GraphicalItem *copy(const QString &_fileName, int _number) override;
QString image(const QVariant &value); QString image(const QVariant &value);
void initScene(); void initScene();
@ -91,19 +92,20 @@ public:
public slots: public slots:
void readConfiguration() override; void readConfiguration() override;
QVariantHash run() override { return {}; }; QVariantHash run() override { return {}; };
int showConfiguration(QWidget *_parent, const QVariant &_args) override; int showConfiguration(const QVariant &_args) override;
void writeConfiguration() const override; void writeConfiguration() const override;
private slots: private slots:
void changeColor(Ui::GraphicalItem *_ui); void changeColor();
void changeCountState(Ui::GraphicalItem *_ui, int _state); void changeCountState(int _state);
void changeValue(Ui::GraphicalItem *_ui, int _state); void changeValue(int _state);
private: private:
GraphicalItemHelper *m_helper = nullptr; GraphicalItemHelper *m_helper = nullptr;
QGraphicsScene *m_scene = nullptr; QGraphicsScene *m_scene = nullptr;
QGraphicsView *m_view = nullptr; QGraphicsView *m_view = nullptr;
void translate(void *_ui) override; Ui::GraphicalItem *ui = nullptr;
void translate() override;
// properties // properties
QString m_bar = "cpu"; QString m_bar = "cpu";
int m_count = 100; int m_count = 100;

View File

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

View File

@ -86,7 +86,7 @@ QVariantHash YahooWeatherProvider::parseCurrent(const QVariantMap &_json, const
values[tag("timestamp")] = condition["date"].toString(); values[tag("timestamp")] = condition["date"].toString();
values[tag("humidity")] = _atmosphere["humidity"].toInt(); values[tag("humidity")] = _atmosphere["humidity"].toInt();
// HACK temporary fix of invalid values on Yahoo! side // HACK temporary fix of invalid values on Yahoo! side
values[tag("pressure")] = static_cast<int>(_atmosphere["pressure"].toDouble() / 33.863753); values[tag("pressure")] = static_cast<int>(_atmosphere["pressure"].toFloat() / 33.863753);
return values; return values;
} }
@ -103,7 +103,7 @@ QVariantHash YahooWeatherProvider::parseForecast(const QVariantMap &_json) const
values[tag("weatherId")] = id; values[tag("weatherId")] = id;
values[tag("timestamp")] = weatherMap["date"].toString(); values[tag("timestamp")] = weatherMap["date"].toString();
// yahoo provides high and low temperatures. Lets calculate average one // yahoo provides high and low temperatures. Lets calculate average one
values[tag("temperature")] = (weatherMap["high"].toDouble() + weatherMap["low"].toDouble()) / 2.0; values[tag("temperature")] = (weatherMap["high"].toFloat() + weatherMap["low"].toFloat()) / 2.0;
// ... and no forecast data for humidity and pressure // ... and no forecast data for humidity and pressure
values[tag("humidity")] = 0; values[tag("humidity")] = 0;
values[tag("pressure")] = 0.0; values[tag("pressure")] = 0.0;

View File

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

View File

@ -0,0 +1,26 @@
[Desktop Entry]
Encoding=UTF-8
Name=Desktop Panel
Comment=A minimalistic Plasmoid
Comment[en]=A minimalistic Plasmoid
Comment[es]=Un plasmoide minimalista
Comment[es]=Un script Plasmoïde minimaliste
Comment[pt_BR]=Um script Plasmoid
Comment[ru]=Минималистичный плазмоид
Comment[uk]=Мінімалістичний плазмоїд
X-KDE-ServiceTypes=Plasma/Applet
Type=Service
Icon=utilities-system-monitor
X-KDE-ServiceTypes=Plasma/Applet
X-Plasma-API=declarativeappletscript
X-Plasma-MainScript=ui/main.qml
X-KDE-PluginInfo-Author=Evgeniy Alekseev aka arcanis
X-KDE-PluginInfo-Email=esalexeev@gmail.com
X-KDE-PluginInfo-Name=org.kde.plasma.desktoppanel
X-KDE-PluginInfo-Version=@PROJECT_VERSION@
X-KDE-PluginInfo-Website=https://arcanis.me/projects/awesome-widgets/
X-KDE-PluginInfo-Category=System Information
X-KDE-PluginInfo-License=GPLv3
X-KDE-PluginInfo-EnabledByDefault=true

View File

@ -1,5 +1,4 @@
{ {
"KPackageStructure": "Plasma/Applet",
"KPlugin": { "KPlugin": {
"Authors": [ "Authors": [
{ {
@ -19,8 +18,12 @@
"Id": "org.kde.plasma.desktoppanel", "Id": "org.kde.plasma.desktoppanel",
"License": "GPLv3", "License": "GPLv3",
"Name": "Desktop Panel", "Name": "Desktop Panel",
"ServiceTypes": [
"Plasma/Applet"
],
"Version": "@PROJECT_VERSION@", "Version": "@PROJECT_VERSION@",
"Website": "https://arcanis.me/projects/awesome-widgets/" "Website": "https://arcanis.me/projects/awesome-widgets/"
}, },
"X-Plasma-API-Minimum-Version": "6.0" "X-Plasma-API": "declarativeappletscript",
"X-Plasma-MainScript": "ui/main.qml"
} }

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.15 import QtQuick 2.0
import org.kde.plasma.configuration 2.0 import org.kde.plasma.configuration 2.0

View File

@ -7,88 +7,88 @@
<group name="Widget"> <group name="Widget">
<!-- widget --> <!-- widget -->
<entry name="text" type="String"> <entry name="text" type="string">
<default>[$mark$number/$total: $name]</default> <default>[$mark$number/$total: $name]</default>
</entry> </entry>
</group> </group>
<group name="Advanced"> <group name="Advanced">
<!-- advanced --> <!-- advanced -->
<entry name="background" type="Bool"> <entry name="background" type="bool">
<default>true</default> <default>true</default>
</entry> </entry>
<entry name="verticalLayout" type="Bool"> <entry name="verticalLayout" type="bool">
<default>false</default> <default>false</default>
</entry> </entry>
<entry name="height" type="Int"> <entry name="height" type="int">
<default>0</default> <default>0</default>
</entry> </entry>
<entry name="width" type="Int"> <entry name="width" type="int">
<default>0</default> <default>0</default>
</entry> </entry>
<entry name="mark" type="String"> <entry name="mark" type="string">
<default>¤</default> <default>¤</default>
</entry> </entry>
<entry name="tooltipType" type="String"> <entry name="tooltipType" type="string">
<default>contours</default> <default>contours</default>
</entry> </entry>
<entry name="tooltipWidth" type="Int"> <entry name="tooltipWidth" type="int">
<default>200</default> <default>200</default>
</entry> </entry>
<entry name="tooltipColor" type="String"> <entry name="tooltipColor" type="string">
<default>#ffffff</default> <default>#ffffff</default>
</entry> </entry>
</group> </group>
<group name="Appearance"> <group name="Appearance">
<!-- appearance --> <!-- appearance -->
<entry name="textAlign" type="String"> <entry name="textAlign" type="string">
<default>center</default> <default>center</default>
</entry> </entry>
<entry name="fontFamily" type="String"> <entry name="fontFamily" type="string">
<default>Terminus</default> <default>Terminus</default>
</entry> </entry>
<entry name="fontSize" type="Int"> <entry name="fontSize" type="int">
<default>12</default> <default>12</default>
</entry> </entry>
<entry name="fontColor" type="String"> <entry name="fontColor" type="string">
<default>#000000</default> <default>#000000</default>
</entry> </entry>
<entry name="fontWeight" type="String"> <entry name="fontWeight" type="string">
<default>normal</default> <default>normal</default>
</entry> </entry>
<entry name="fontStyle" type="String"> <entry name="fontStyle" type="string">
<default>normal</default> <default>normal</default>
</entry> </entry>
<entry name="textStyle" type="String"> <entry name="textStyle" type="string">
<default>normal</default> <default>normal</default>
</entry> </entry>
<entry name="textStyleColor" type="String"> <entry name="textStyleColor" type="string">
<default>#000000</default> <default>#000000</default>
</entry> </entry>
<!-- current --> <!-- current -->
<entry name="currentTextAlign" type="String"> <entry name="currentTextAlign" type="string">
<default>center</default> <default>center</default>
</entry> </entry>
<entry name="currentFontFamily" type="String"> <entry name="currentFontFamily" type="string">
<default>Terminus</default> <default>Terminus</default>
</entry> </entry>
<entry name="currentFontSize" type="Int"> <entry name="currentFontSize" type="int">
<default>12</default> <default>12</default>
</entry> </entry>
<entry name="currentFontColor" type="String"> <entry name="currentFontColor" type="string">
<default>#ff0000</default> <default>#ff0000</default>
</entry> </entry>
<entry name="currentFontWeight" type="String"> <entry name="currentFontWeight" type="string">
<default>normal</default> <default>normal</default>
</entry> </entry>
<entry name="currentFontStyle" type="String"> <entry name="currentFontStyle" type="string">
<default>normal</default> <default>normal</default>
</entry> </entry>
<entry name="currentTextStyle" type="String"> <entry name="currentTextStyle" type="string">
<default>normal</default> <default>normal</default>
</entry> </entry>
<entry name="currentTextStyleColor" type="String"> <entry name="currentTextStyleColor" type="string">
<default>#000000</default> <default>#000000</default>
</entry> </entry>
</group> </group>

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.15 import QtQuick 2.0
import org.kde.plasma.private.desktoppanel 1.0 import org.kde.plasma.private.desktoppanel 1.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.15 import QtQuick 2.0
import org.kde.plasma.private.desktoppanel 1.0 import org.kde.plasma.private.desktoppanel 1.0
import "." import "."

View File

@ -15,8 +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/ *
***************************************************************************/ ***************************************************************************/
import QtQuick 2.15 import QtQuick 2.0
import QtQuick.Controls import QtQuick.Controls 1.3 as QtControls
import org.kde.plasma.private.desktoppanel 1.0 import org.kde.plasma.private.desktoppanel 1.0
@ -131,7 +131,7 @@ Item {
onValueEdited: cfg_mark = newValue onValueEdited: cfg_mark = newValue
} }
GroupBox { QtControls.GroupBox {
height: implicitHeight height: implicitHeight
width: parent.width width: parent.width
title: i18n("Tooltip") title: i18n("Tooltip")

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.15 import QtQuick 2.0
import org.kde.plasma.private.desktoppanel 1.0 import org.kde.plasma.private.desktoppanel 1.0
import "." import "."

View File

@ -15,17 +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/ *
***************************************************************************/ ***************************************************************************/
import QtQuick 2.15 import QtQuick 2.4
import QtQuick.Controls import QtQuick.Controls 1.3 as QtControls
import QtQuick.Layouts import QtQuick.Layouts 1.1
import org.kde.plasma.core as PlasmaCore
import org.kde.plasma.plasmoid 2.0 import org.kde.plasma.plasmoid 2.0
import org.kde.plasma.core 2.0 as PlasmaCore
import org.kde.plasma.components 2.0 as PlasmaComponents
import org.kde.plasma.private.desktoppanel 1.0 import org.kde.plasma.private.desktoppanel 1.0
import "." import "."
PlasmoidItem { Item {
id: main id: main
// backend // backend
DPAdds { DPAdds {
@ -45,6 +46,9 @@ PlasmoidItem {
// init // init
Plasmoid.preferredRepresentation: Plasmoid.fullRepresentation
Plasmoid.compactRepresentation: Plasmoid.fullRepresentation
Layout.alignment: Qt.AlignVCenter | Qt.AlignHCenter Layout.alignment: Qt.AlignVCenter | Qt.AlignHCenter
Plasmoid.icon: "utilities-system-monitor" Plasmoid.icon: "utilities-system-monitor"

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.15 import QtQuick 2.0
import org.kde.plasma.private.desktoppanel 1.0 import org.kde.plasma.private.desktoppanel 1.0
import "." import "."

View File

@ -0,0 +1,26 @@
[Desktop Entry]
Encoding=UTF-8
Name=Desktop Panel
Comment=A minimalistic Plasmoid
Comment[en]=A minimalistic Plasmoid
Comment[es]=Un plasmoide minimalista
Comment[es]=Un script Plasmoïde minimaliste
Comment[pt_BR]=Um script Plasmoid
Comment[ru]=Минималистичный плазмоид
Comment[uk]=Мінімалістичний плазмоїд
X-KDE-ServiceTypes=Plasma/Applet
Type=Service
Icon=utilities-system-monitor
X-KDE-ServiceTypes=Plasma/Applet
X-Plasma-API=declarativeappletscript
X-Plasma-MainScript=ui/main.qml
X-KDE-PluginInfo-Author=Evgeniy Alekseev aka arcanis
X-KDE-PluginInfo-Email=esalexeev@gmail.com
X-KDE-PluginInfo-Name=org.kde.plasma.desktoppanel
X-KDE-PluginInfo-Version=3.5.1
X-KDE-PluginInfo-Website=https://arcanis.me/projects/awesome-widgets/
X-KDE-PluginInfo-Category=System Information
X-KDE-PluginInfo-License=GPLv3
X-KDE-PluginInfo-EnabledByDefault=true

View File

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

View File

@ -15,6 +15,6 @@ file(GLOB SUBPROJECT_NOTIFY *.notifyrc)
add_library(${PLUGIN_NAME} SHARED ${SUBPROJECT_SOURCE}) add_library(${PLUGIN_NAME} SHARED ${SUBPROJECT_SOURCE})
target_link_libraries(${PLUGIN_NAME} ${Qt_LIBRARIES} ${Kf6_LIBRARIES}) target_link_libraries(${PLUGIN_NAME} ${Qt_LIBRARIES} ${Kf6_LIBRARIES})
install(TARGETS ${PLUGIN_NAME} DESTINATION ${KDE_INSTALL_QMLDIR}/org/kde/plasma/private/desktoppanel) install(TARGETS ${PLUGIN_NAME} DESTINATION ${QML_INSTALL_DIR}/org/kde/plasma/private/desktoppanel)
install(FILES qmldir DESTINATION ${KDE_INSTALL_QMLDIR}/org/kde/plasma/private/desktoppanel) install(FILES qmldir DESTINATION ${QML_INSTALL_DIR}/org/kde/plasma/private/desktoppanel)
install(FILES ${SUBPROJECT_NOTIFY} DESTINATION ${KDE_INSTALL_KNOTIFYRCDIR}) install(FILES ${SUBPROJECT_NOTIFY} DESTINATION ${KDE_INSTALL_KNOTIFYRCDIR})

View File

@ -223,7 +223,7 @@ QString DPAdds::valueByKey(const QString &_key, int _desktop) const
QString currentMark = currentDesktop() == _desktop ? m_mark : ""; QString currentMark = currentDesktop() == _desktop ? m_mark : "";
if (_key == "mark") if (_key == "mark")
return QString("%1").arg(currentMark, m_mark.size(), QLatin1Char(' ')).replace(" ", "&nbsp;"); return QString("%1").arg(currentMark, m_mark.count(), QLatin1Char(' ')).replace(" ", "&nbsp;");
else if (_key == "name") { else if (_key == "name") {
auto name = m_vdi->desktopNames().at(_desktop); auto name = m_vdi->desktopNames().at(_desktop);
return name.replace(" ", "&nbsp;"); return name.replace(" ", "&nbsp;");

View File

@ -1,4 +1,4 @@
set(SUBPROJECT ksystemstats_plugin_extsysmon) set(SUBPROJECT plasma_dataengine_extsysmon)
message(STATUS "Subproject ${SUBPROJECT}") message(STATUS "Subproject ${SUBPROJECT}")
add_definitions(-DTRANSLATION_DOMAIN=\"plasma_applet_org.kde.plasma.awesomewidget\") add_definitions(-DTRANSLATION_DOMAIN=\"plasma_applet_org.kde.plasma.awesomewidget\")
@ -24,4 +24,4 @@ target_link_libraries(${SUBPROJECT}
# install # install
install(TARGETS ${SUBPROJECT} DESTINATION ${KDE_INSTALL_PLUGINDIR}/ksystemstats) install(TARGETS ${SUBPROJECT} DESTINATION ${KDE_INSTALL_PLUGINDIR}/ksystemstats)
install(FILES ${SUBPROJECT_CONF} DESTINATION /${KDE_INSTALL_CONFDIR}) install(FILES ${SUBPROJECT_CONF} DESTINATION ${KDE_INSTALL_CONFDIR})

View File

@ -18,8 +18,6 @@
#include "extsysmon.h" #include "extsysmon.h"
#include <KPluginFactory> #include <KPluginFactory>
#include <QDBusMetaType>
#include <QFile> #include <QFile>
#include <QRegularExpression> #include <QRegularExpression>
#include <QSettings> #include <QSettings>
@ -40,13 +38,27 @@ ExtendedSysMon::ExtendedSysMon(QObject *_parent, const QVariantList &_args)
qCDebug(LOG_ESM) << metadata; qCDebug(LOG_ESM) << metadata;
readConfiguration(); readConfiguration();
addContainer(new ExtSysMonAggregator("extsysmon", "Extended system monitor", this, m_configuration));
// init aggregator
m_aggregator = new ExtSysMonAggregator("extsysmon", "extsysmon", this, m_configuration);
}
ExtendedSysMon::~ExtendedSysMon()
{
qCDebug(LOG_ESM) << __PRETTY_FUNCTION__;
}
void ExtendedSysMon::update()
{
// m_aggregator->update();
} }
void ExtendedSysMon::readConfiguration() void ExtendedSysMon::readConfiguration()
{ {
auto fileName = QStandardPaths::locate(QStandardPaths::ConfigLocation, "plasma-dataengine-extsysmon.conf"); QString fileName = QStandardPaths::locate(QStandardPaths::ConfigLocation, "plasma-dataengine-extsysmon.conf");
qCInfo(LOG_ESM) << "Configuration file" << fileName; qCInfo(LOG_ESM) << "Configuration file" << fileName;
QSettings settings(fileName, QSettings::IniFormat); QSettings settings(fileName, QSettings::IniFormat);
QHash<QString, QString> rawConfig; QHash<QString, QString> rawConfig;
@ -79,13 +91,13 @@ QHash<QString, QString> ExtendedSysMon::updateConfiguration(QHash<QString, QStri
else if ((_rawConfig["GPUDEV"] != "ati") && (_rawConfig["GPUDEV"] != "nvidia")) else if ((_rawConfig["GPUDEV"] != "ati") && (_rawConfig["GPUDEV"] != "nvidia"))
_rawConfig["GPUDEV"] = GPULoadSource::autoGpu(); _rawConfig["GPUDEV"] = GPULoadSource::autoGpu();
// hdddev // hdddev
auto allHddDevices = HDDTemperatureSource::allHdd(); QStringList allHddDevices = HDDTemperatureSource::allHdd();
if (_rawConfig["HDDDEV"] == "all") { if (_rawConfig["HDDDEV"] == "all") {
_rawConfig["HDDDEV"] = allHddDevices.join(','); _rawConfig["HDDDEV"] = allHddDevices.join(',');
} else if (_rawConfig["HDDDEV"] == "disable") { } else if (_rawConfig["HDDDEV"] == "disable") {
_rawConfig["HDDDEV"] = ""; _rawConfig["HDDDEV"] = "";
} else { } else {
auto deviceList = _rawConfig["HDDDEV"].split(',', Qt::SkipEmptyParts); QStringList deviceList = _rawConfig["HDDDEV"].split(',', Qt::SkipEmptyParts);
QStringList devices; QStringList devices;
auto diskRegexp = QRegularExpression("^/dev/[hms]d[a-z]$"); auto diskRegexp = QRegularExpression("^/dev/[hms]d[a-z]$");
for (auto &device : deviceList) for (auto &device : deviceList)

View File

@ -21,16 +21,26 @@
#include <ksysguard/systemstats/SensorPlugin.h> #include <ksysguard/systemstats/SensorPlugin.h>
class ExtSysMonAggregator;
class ExtendedSysMon : public KSysGuard::SensorPlugin class ExtendedSysMon : public KSysGuard::SensorPlugin
{ {
Q_OBJECT Q_OBJECT
public: public:
explicit ExtendedSysMon(QObject *_parent, const QVariantList &_args); explicit ExtendedSysMon(QObject *_parent, const QVariantList &_args);
[[nodiscard]] QString providerName() const override { return QStringLiteral("extsysmon"); } ~ExtendedSysMon() override;
[[nodiscard]] QString providerName() const override
{
return QStringLiteral("extsysmon");
}
void update() override;
private: private:
// configuration // configuration
ExtSysMonAggregator *m_aggregator = nullptr;
QHash<QString, QString> m_configuration; QHash<QString, QString> m_configuration;
// methods // methods
void readConfiguration(); void readConfiguration();

View File

@ -21,7 +21,6 @@
#include "batterysource.h" #include "batterysource.h"
#include "customsource.h" #include "customsource.h"
#include "desktopsource.h" #include "desktopsource.h"
#include "extsysmonsensor.h"
#include "gpuloadsource.h" #include "gpuloadsource.h"
#include "gputempsource.h" #include "gputempsource.h"
#include "hddtempsource.h" #include "hddtempsource.h"
@ -32,14 +31,16 @@
#include "quotessource.h" #include "quotessource.h"
#include "requestsource.h" #include "requestsource.h"
#include "systeminfosource.h" #include "systeminfosource.h"
#include "timesource.h"
#include "upgradesource.h" #include "upgradesource.h"
#include "weathersource.h" #include "weathersource.h"
ExtSysMonAggregator::ExtSysMonAggregator(const QString &_id, const QString &_name, KSysGuard::SensorPlugin *_parent, ExtSysMonAggregator::ExtSysMonAggregator(
const QHash<QString, QString> &_config) const QString &_id,
: KSysGuard::SensorContainer(_id, _name, _parent) const QString &_name,
KSysGuard::SensorContainer *_parent,
const QHash<QString, QString> &_config)
: KSysGuard::SensorObject(_id, _name, _parent)
{ {
qCDebug(LOG_ESM) << __PRETTY_FUNCTION__; qCDebug(LOG_ESM) << __PRETTY_FUNCTION__;
@ -47,11 +48,41 @@ ExtSysMonAggregator::ExtSysMonAggregator(const QString &_id, const QString &_nam
} }
void ExtSysMonAggregator::createSensor(const QString &_id, const QString &_name, AbstractExtSysMonSource *_source) ExtSysMonAggregator::~ExtSysMonAggregator()
{ {
qCDebug(LOG_ESM) << "Register sensor" << _name << "with id" << _id; qCDebug(LOG_ESM) << __PRETTY_FUNCTION__;
addObject(new ExtSysMonSensor(this, _id, _name, _source)); m_map.clear();
}
QVariant ExtSysMonAggregator::data(const QString &_source) const
{
qCDebug(LOG_ESM) << "Source" << _source;
return m_map[_source]->data(_source);
}
bool ExtSysMonAggregator::hasSource(const QString &_source) const
{
qCDebug(LOG_ESM) << "Source" << _source;
return m_map.contains(_source);
}
QVariantMap ExtSysMonAggregator::initialData(const QString &_source) const
{
qCDebug(LOG_ESM) << "Source" << _source;
return hasSource(_source) ? m_map[_source]->initialData(_source) : QVariantMap();
}
QStringList ExtSysMonAggregator::sources() const
{
return m_map.keys();
} }
@ -60,40 +91,68 @@ void ExtSysMonAggregator::init(const QHash<QString, QString> &_config)
qCDebug(LOG_ESM) << "Configuration" << _config; qCDebug(LOG_ESM) << "Configuration" << _config;
// battery // battery
createSensor("battery", i18n("Battery"), new BatterySource(this, {_config["ACPIPATH"]})); AbstractExtSysMonSource *batteryItem = new BatterySource(this, QStringList() << _config["ACPIPATH"]);
for (auto &source : batteryItem->sources())
m_map[source] = batteryItem;
// custom // custom
createSensor("custom", i18n("Scripts"), new CustomSource(this, {})); AbstractExtSysMonSource *customItem = new CustomSource(this, QStringList());
for (auto &source : customItem->sources())
m_map[source] = customItem;
// desktop // desktop
createSensor("desktop", i18n("Desktop"), new DesktopSource(this, {})); AbstractExtSysMonSource *desktopItem = new DesktopSource(this, QStringList());
for (auto &source : desktopItem->sources())
m_map[source] = desktopItem;
// gpu load // gpu load
createSensor("gpuload", i18n("GPU load"), new GPULoadSource(this, {_config["GPUDEV"]})); AbstractExtSysMonSource *gpuLoadItem = new GPULoadSource(this, QStringList({_config["GPUDEV"]}));
for (auto &source : gpuLoadItem->sources())
m_map[source] = gpuLoadItem;
// gpu temperature // gpu temperature
createSensor("gputemp", i18n("GPU temperature"), new GPUTemperatureSource(this, {_config["GPUDEV"]})); AbstractExtSysMonSource *gpuTempItem = new GPUTemperatureSource(this, QStringList({_config["GPUDEV"]}));
for (auto &source : gpuTempItem->sources())
m_map[source] = gpuTempItem;
// hdd temperature // hdd temperature
createSensor("hdd", i18n("HDD temperature"), AbstractExtSysMonSource *hddTempItem
new HDDTemperatureSource(this, {_config["HDDDEV"], _config["HDDTEMPCMD"]})); = new HDDTemperatureSource(this, QStringList({_config["HDDDEV"], _config["HDDTEMPCMD"]}));
for (auto &source : hddTempItem->sources())
m_map[source] = hddTempItem;
// network // network
createSensor("network", i18n("Network"), new NetworkSource(this, {})); AbstractExtSysMonSource *networkItem = new NetworkSource(this, QStringList());
for (auto &source : networkItem->sources())
m_map[source] = networkItem;
// player // player
createSensor("player", i18n("Music player"), AbstractExtSysMonSource *playerItem
new PlayerSource(this, {_config["PLAYER"], _config["MPDADDRESS"], _config["MPDPORT"], _config["MPRIS"], = new PlayerSource(this, QStringList({_config["PLAYER"], _config["MPDADDRESS"], _config["MPDPORT"],
_config["PLAYERSYMBOLS"]})); _config["MPRIS"], _config["PLAYERSYMBOLS"]}));
for (auto &source : playerItem->sources())
m_map[source] = playerItem;
// processes // processes
createSensor("ps", i18n("Processes"), new ProcessesSource(this, {})); AbstractExtSysMonSource *processesItem = new ProcessesSource(this, QStringList());
for (auto &source : processesItem->sources())
m_map[source] = processesItem;
// network request // network request
createSensor("requests", i18n("Network requests"), new RequestSource(this, {})); AbstractExtSysMonSource *requestItem = new RequestSource(this, QStringList());
for (auto &source : requestItem->sources())
m_map[source] = requestItem;
// quotes // quotes
createSensor("quotes", i18n("Quotes"), new QuotesSource(this, {})); AbstractExtSysMonSource *quotesItem = new QuotesSource(this, QStringList());
for (auto &source : quotesItem->sources())
m_map[source] = quotesItem;
// system // system
createSensor("system", i18n("System"), new SystemInfoSource(this, {})); AbstractExtSysMonSource *systemItem = new SystemInfoSource(this, QStringList());
// current time for (auto &source : systemItem->sources())
createSensor("time", i18n("Time"), new TimeSource(this, {})); m_map[source] = systemItem;
// upgrade // upgrade
createSensor("upgrade", i18n("Upgrades"), new UpgradeSource(this, {})); AbstractExtSysMonSource *upgradeItem = new UpgradeSource(this, QStringList());
for (auto &source : upgradeItem->sources())
m_map[source] = upgradeItem;
// weather // weather
createSensor("weather", i18n("Weather"), new WeatherSource(this, {})); AbstractExtSysMonSource *weatherItem = new WeatherSource(this, QStringList());
for (auto &source : weatherItem->sources())
m_map[source] = weatherItem;
#ifdef BUILD_LOAD #ifdef BUILD_LOAD
// additional load source // additional load source
createSensor("load", i18n("Load"), new LoadSource(this, {})); AbstractExtSysMonSource *loadItem = new LoadSource(this, QStringList());
for (auto &source : loadItem->sources())
m_map[source] = loadItem;
#endif /* BUILD_LOAD */ #endif /* BUILD_LOAD */
} }

View File

@ -15,26 +15,30 @@
* 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 EXTSYSMONAGGREGATOR_H
#define EXTSYSMONAGGREGATOR_H
#include <QObject> #include <QObject>
#include <ksysguard/systemstats/SensorContainer.h> #include <ksysguard/systemstats/SensorObject.h>
#include "abstractextsysmonsource.h" #include "abstractextsysmonsource.h"
class ExtSysMonAggregator : public KSysGuard::SensorObject
class AbstractExtSysMonSource;
class ExtSysMonSensor;
class ExtSysMonAggregator : public KSysGuard::SensorContainer
{ {
Q_OBJECT Q_OBJECT
public: public:
explicit ExtSysMonAggregator(const QString &_id, const QString &_name, KSysGuard::SensorPlugin *_parent, explicit ExtSysMonAggregator(const QString &_id, const QString &_name, KSysGuard::SensorContainer *_parent, const QHash<QString, QString> &_config);
const QHash<QString, QString> &_config); ~ExtSysMonAggregator() override;
[[nodiscard]] QVariant data(const QString &_source) const;
[[nodiscard]] bool hasSource(const QString &_source) const;
[[nodiscard]] QVariantMap initialData(const QString &_source) const;
[[nodiscard]] QStringList sources() const;
private: private:
void createSensor(const QString &_id, const QString &_name, AbstractExtSysMonSource *_source);
void init(const QHash<QString, QString> &_config); void init(const QHash<QString, QString> &_config);
QHash<QString, AbstractExtSysMonSource *> m_map;
}; };
#endif /* EXTSYSMONAGGREGATOR_H */

View File

@ -23,11 +23,6 @@
#include <QVariant> #include <QVariant>
namespace KSysGuard
{
class SensorInfo;
}
class AbstractExtSysMonSource : public QObject class AbstractExtSysMonSource : public QObject
{ {
Q_OBJECT Q_OBJECT
@ -37,7 +32,7 @@ public:
: QObject(_parent){}; : QObject(_parent){};
~AbstractExtSysMonSource() override = default; ~AbstractExtSysMonSource() override = default;
virtual QVariant data(const QString &_source) = 0; virtual QVariant data(const QString &_source) = 0;
[[nodiscard]] virtual KSysGuard::SensorInfo *initialData(const QString &_source) const = 0; [[nodiscard]] virtual QVariantMap initialData(const QString &_source) const = 0;
virtual void run() = 0; virtual void run() = 0;
[[nodiscard]] virtual QStringList sources() const = 0; [[nodiscard]] virtual QStringList sources() const = 0;
// used by extensions // used by extensions

View File

@ -18,9 +18,6 @@
#include "batterysource.h" #include "batterysource.h"
#include <ksysguard/formatter/Unit.h>
#include <ksysguard/systemstats/SensorInfo.h>
#include <QDir> #include <QDir>
#include <cmath> #include <cmath>
@ -48,12 +45,12 @@ BatterySource::~BatterySource()
QStringList BatterySource::getSources() QStringList BatterySource::getSources()
{ {
QStringList sources; QStringList sources;
sources.append("ac"); sources.append("battery/ac");
sources.append("bat"); sources.append("battery/bat");
sources.append("batleft"); sources.append("battery/batleft");
sources.append("batnow"); sources.append("battery/batnow");
sources.append("batrate"); sources.append("battery/batrate");
sources.append("battotal"); sources.append("battery/battotal");
auto directory = QDir(m_acpiPath); auto directory = QDir(m_acpiPath);
@ -63,11 +60,11 @@ QStringList BatterySource::getSources()
qCInfo(LOG_ESS) << "Init batteries count as" << m_batteriesCount; qCInfo(LOG_ESS) << "Init batteries count as" << m_batteriesCount;
for (int i = 0; i < m_batteriesCount; i++) { for (int i = 0; i < m_batteriesCount; i++) {
sources.append(QString("bat%1").arg(i)); sources.append(QString("battery/bat%1").arg(i));
sources.append(QString("batleft%1").arg(i)); sources.append(QString("battery/batleft%1").arg(i));
sources.append(QString("batnow%1").arg(i)); sources.append(QString("battery/batnow%1").arg(i));
sources.append(QString("batrate%1").arg(i)); sources.append(QString("battery/batrate%1").arg(i));
sources.append(QString("battotal%1").arg(i)); sources.append(QString("battery/battotal%1").arg(i));
} }
} }
@ -82,79 +79,82 @@ QVariant BatterySource::data(const QString &_source)
if (!m_values.contains(_source)) if (!m_values.contains(_source))
run(); run();
return m_values.take(_source); QVariant value = m_values.take(_source);
return value;
} }
KSysGuard::SensorInfo *BatterySource::initialData(const QString &_source) const QVariantMap BatterySource::initialData(const QString &_source) const
{ {
qCDebug(LOG_ESS) << "Source" << _source; qCDebug(LOG_ESS) << "Source" << _source;
auto data = new KSysGuard::SensorInfo(); QVariantMap data;
if (_source == "ac") { if (_source == "battery/ac") {
data->name = "Is AC online or not"; data["min"] = false;
data->variantType = QVariant::Bool; data["max"] = true;
data->unit = KSysGuard::UnitNone; data["name"] = "Is AC online or not";
} else if (_source == "bat") { data["type"] = "bool";
data->min = 0; data["units"] = "";
data->max = 100; } else if (_source == "battery/bat") {
data->name = "Average battery usage"; data["min"] = 0;
data->variantType = QVariant::Int; data["max"] = 100;
data->unit = KSysGuard::UnitPercent; data["name"] = "Average battery usage";
} else if (_source == "batleft") { data["type"] = "integer";
data->min = 0; data["units"] = "%";
data->max = 0; } else if (_source == "battery/batleft") {
data->name = "Battery discharge time"; data["min"] = 0;
data->variantType = QVariant::Int; data["max"] = 0;
data->unit = KSysGuard::UnitSecond; data["name"] = "Battery discharge time";
} else if (_source == "batnow") { data["type"] = "integer";
data->min = 0; data["units"] = "s";
data->max = 0; } else if (_source == "battery/batnow") {
data->name = "Current battery capacity"; data["min"] = 0;
data->variantType = QVariant::Int; data["max"] = 0;
data->unit = KSysGuard::UnitNone; data["name"] = "Current battery capacity";
} else if (_source == "batrate") { data["type"] = "integer";
data->min = 0; data["units"] = "";
data->max = 0; } else if (_source == "battery/batrate") {
data->name = "Average battery discharge rate"; data["min"] = 0;
data->variantType = QVariant::Double; data["max"] = 0;
data->unit = KSysGuard::UnitRate; data["name"] = "Average battery discharge rate";
} else if (_source == "battotal") { data["type"] = "float";
data->min = 0; data["units"] = "1/s";
data->max = 0; } else if (_source == "battery/battotal") {
data->name = "Full battery capacity"; data["min"] = 0;
data->variantType = QVariant::Int; data["max"] = 0;
data->unit = KSysGuard::UnitNone; data["name"] = "Full battery capacity";
} else if (_source.startsWith("batleft")) { data["type"] = "integer";
data->min = 0; data["units"] = "";
data->max = 0; } else if (_source.startsWith("battery/batleft")) {
data->name = QString("Battery %1 discharge time").arg(index(_source)); data["min"] = 0;
data->variantType = QVariant::Int; data["max"] = 0;
data->unit = KSysGuard::UnitSecond; data["name"] = QString("Battery %1 discharge time").arg(index(_source));
} else if (_source.startsWith("batnow")) { data["type"] = "integer";
data->min = 0; data["units"] = "s";
data->max = 0; } else if (_source.startsWith("battery/batnow")) {
data->name = QString("Battery %1 capacity").arg(index(_source)); data["min"] = 0;
data->variantType = QVariant::Int; data["max"] = 0;
data->unit = KSysGuard::UnitNone; data["name"] = QString("Battery %1 capacity").arg(index(_source));
} else if (_source.startsWith("battotal")) { data["type"] = "integer";
data->min = 0; data["units"] = "";
data->max = 0; } else if (_source.startsWith("battery/battotal")) {
data->name = QString("Battery %1 full capacity").arg(index(_source)); data["min"] = 0;
data->variantType = QVariant::Int; data["max"] = 0;
data->unit = KSysGuard::UnitNone; data["name"] = QString("Battery %1 full capacity").arg(index(_source));
} else if (_source.startsWith("batrate")) { data["type"] = "integer";
data->min = 0; data["units"] = "";
data->max = 0; } else if (_source.startsWith("battery/batrate")) {
data->name = QString("Battery %1 discharge rate").arg(index(_source)); data["min"] = 0;
data->variantType = QVariant::Double; data["max"] = 0;
data->unit = KSysGuard::UnitRate; data["name"] = QString("Battery %1 discharge rate").arg(index(_source));
} else if (_source.startsWith("bat")) { data["type"] = "float";
data->min = 0; data["units"] = "1/s";
data->max = 100; } else if (_source.startsWith("battery/bat")) {
data->name = QString("Battery %1 usage").arg(index(_source)); data["min"] = 0;
data->variantType = QVariant::Int; data["max"] = 100;
data->unit = KSysGuard::UnitPercent; data["name"] = QString("Battery %1 usage").arg(index(_source));
data["type"] = "integer";
data["units"] = "%";
} }
return data; return data;
@ -166,7 +166,7 @@ void BatterySource::run()
// adaptor // adaptor
QFile acFile(QString("%1/AC/online").arg(m_acpiPath)); QFile acFile(QString("%1/AC/online").arg(m_acpiPath));
if (acFile.open(QIODevice::ReadOnly | QIODevice::Text)) if (acFile.open(QIODevice::ReadOnly | QIODevice::Text))
m_values["ac"] = (QString(acFile.readLine()).trimmed().toInt() == 1); m_values["battery/ac"] = (QString(acFile.readLine()).trimmed().toInt() == 1);
acFile.close(); acFile.close();
// batteries // batteries
@ -177,27 +177,28 @@ void BatterySource::run()
if (currentLevelFile.open(QIODevice::ReadOnly | QIODevice::Text)) { if (currentLevelFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
auto value = QString(currentLevelFile.readLine()).toInt(); auto value = QString(currentLevelFile.readLine()).toInt();
m_trend[i + 1].append(value); m_trend[i + 1].append(value);
m_values[QString("batnow%1").arg(i)] = value; m_values[QString("battery/batnow%1").arg(i)] = value;
} }
currentLevelFile.close(); currentLevelFile.close();
// total // total
QFile fullLevelFile(QString("%1/BAT%2/energy_full").arg(m_acpiPath).arg(i)); QFile fullLevelFile(QString("%1/BAT%2/energy_full").arg(m_acpiPath).arg(i));
if (fullLevelFile.open(QIODevice::ReadOnly | QIODevice::Text)) if (fullLevelFile.open(QIODevice::ReadOnly | QIODevice::Text))
m_values[QString("battotal%1").arg(i)] = QString(fullLevelFile.readLine()).toInt(); m_values[QString("battery/battotal%1").arg(i)] = QString(fullLevelFile.readLine()).toInt();
fullLevelFile.close(); fullLevelFile.close();
m_values[QString("bat%1").arg(i)] = static_cast<int>(100 * m_values[QString("batnow%1").arg(i)].toFloat() m_values[QString("battery/bat%1").arg(i)]
/ m_values[QString("battotal%1").arg(i)].toFloat()); = static_cast<int>(100 * m_values[QString("battery/batnow%1").arg(i)].toFloat()
/ m_values[QString("battery/battotal%1").arg(i)].toFloat());
// accumulate // accumulate
currentLevel += m_values[QString("batnow%1").arg(i)].toFloat(); currentLevel += m_values[QString("battery/batnow%1").arg(i)].toFloat();
fullLevel += m_values[QString("battotal%1").arg(i)].toFloat(); fullLevel += m_values[QString("battery/battotal%1").arg(i)].toFloat();
} }
// total // total
m_trend[0].append(static_cast<int>(currentLevel)); m_trend[0].append(static_cast<int>(currentLevel));
m_values["batnow"] = static_cast<int>(currentLevel); m_values["battery/batnow"] = static_cast<int>(currentLevel);
m_values["battotal"] = static_cast<int>(fullLevel); m_values["battery/battotal"] = static_cast<int>(fullLevel);
m_values["bat"] = static_cast<int>(100 * currentLevel / fullLevel); m_values["battery/bat"] = static_cast<int>(100 * currentLevel / fullLevel);
calculateRates(); calculateRates();
} }
@ -243,14 +244,15 @@ void BatterySource::calculateRates()
for (int i = 0; i < m_batteriesCount; i++) { for (int i = 0; i < m_batteriesCount; i++) {
auto approx = approximate(m_trend[i + 1]); auto approx = approximate(m_trend[i + 1]);
m_values[QString("batrate%1").arg(i)] = approx / interval; m_values[QString("battery/batrate%1").arg(i)] = approx / interval;
m_values[QString("batleft%1").arg(i)] = interval * m_values[QString("batnow%1").arg(i)].toFloat() / approx; m_values[QString("battery/batleft%1").arg(i)]
= interval * m_values[QString("battery/batnow%1").arg(i)].toFloat() / approx;
} }
// total // total
auto approx = approximate(m_trend[0]); auto approx = approximate(m_trend[0]);
m_values["batrate"] = approx / interval; m_values["battery/batrate"] = approx / interval;
m_values["batleft"] = interval * m_values["batnow"].toFloat() / approx; m_values["battery/batleft"] = interval * m_values["battery/batnow"].toFloat() / approx;
// old data cleanup // old data cleanup
for (auto &trend : m_trend.keys()) { for (auto &trend : m_trend.keys()) {

View File

@ -35,7 +35,7 @@ public:
~BatterySource() override; ~BatterySource() override;
QStringList getSources(); QStringList getSources();
QVariant data(const QString &_source) override; QVariant data(const QString &_source) override;
[[nodiscard]] KSysGuard::SensorInfo *initialData(const QString &_source) const override; [[nodiscard]] QVariantMap initialData(const QString &_source) const override;
void run() override; void run() override;
[[nodiscard]] QStringList sources() const override; [[nodiscard]] QStringList sources() const override;

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/ *
***************************************************************************/ ***************************************************************************/
#include "customsource.h"
#include <ksysguard/formatter/Unit.h> #include "customsource.h"
#include <ksysguard/systemstats/SensorInfo.h>
#include "awdebug.h" #include "awdebug.h"
#include "extscript.h" #include "extscript.h"
@ -51,14 +49,16 @@ QVariant CustomSource::data(const QString &_source)
} }
KSysGuard::SensorInfo *CustomSource::initialData(const QString &_source) const QVariantMap CustomSource::initialData(const QString &_source) const
{ {
qCDebug(LOG_ESS) << "Source" << _source; qCDebug(LOG_ESS) << "Source" << _source;
auto data = new KSysGuard::SensorInfo(); QVariantMap data;
data->name = QString("Custom command '%1' output").arg(m_extScripts->itemByTagNumber(index(_source))->uniq()); data["min"] = "";
data->variantType = QVariant::String; data["max"] = "";
data->unit = KSysGuard::UnitNone; data["name"] = QString("Custom command '%1' output").arg(m_extScripts->itemByTagNumber(index(_source))->uniq());
data["type"] = "QString";
data["units"] = "";
return data; return data;
} }
@ -74,7 +74,7 @@ QStringList CustomSource::getSources()
{ {
QStringList sources; QStringList sources;
for (auto &item : m_extScripts->activeItems()) for (auto &item : m_extScripts->activeItems())
sources.append(item->tag("custom")); sources.append(QString("custom/%1").arg(item->tag("custom")));
return sources; return sources;
} }

View File

@ -34,7 +34,7 @@ public:
explicit CustomSource(QObject *_parent, const QStringList &_args); explicit CustomSource(QObject *_parent, const QStringList &_args);
~CustomSource() override; ~CustomSource() override;
QVariant data(const QString &_source) override; QVariant data(const QString &_source) override;
[[nodiscard]] KSysGuard::SensorInfo *initialData(const QString &_source) const override; [[nodiscard]] QVariantMap initialData(const QString &_source) const override;
void run() override{}; void run() override{};
[[nodiscard]] QStringList sources() const override; [[nodiscard]] QStringList sources() const override;

View File

@ -15,11 +15,10 @@
* 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 "desktopsource.h" #include "desktopsource.h"
#include <KWindowSystem/KWindowSystem> #include <KWindowSystem/KWindowSystem>
#include <ksysguard/formatter/Unit.h>
#include <ksysguard/systemstats/SensorInfo.h>
#include <taskmanager/virtualdesktopinfo.h> #include <taskmanager/virtualdesktopinfo.h>
#include "awdebug.h" #include "awdebug.h"
@ -51,13 +50,13 @@ QVariant DesktopSource::data(const QString &_source)
auto decrement = KWindowSystem::isPlatformX11() ? 1 : 0; auto decrement = KWindowSystem::isPlatformX11() ? 1 : 0;
auto current = nativeIndex - decrement; auto current = nativeIndex - decrement;
if (_source == "name") { if (_source == "desktop/current/name") {
return m_vdi->desktopNames().at(current); return m_vdi->desktopNames().at(current);
} else if (_source == "number") { } else if (_source == "desktop/current/number") {
return current + 1; return current + 1;
} else if (_source == "names") { } else if (_source == "desktop/total/name") {
return m_vdi->desktopNames(); return m_vdi->desktopNames();
} else if (_source == "count") { } else if (_source == "desktop/total/number") {
return m_vdi->numberOfDesktops(); return m_vdi->numberOfDesktops();
} }
@ -65,29 +64,35 @@ QVariant DesktopSource::data(const QString &_source)
} }
KSysGuard::SensorInfo *DesktopSource::initialData(const QString &_source) const QVariantMap DesktopSource::initialData(const QString &_source) const
{ {
qCDebug(LOG_ESS) << "Source" << _source; qCDebug(LOG_ESS) << "Source" << _source;
auto data = new KSysGuard::SensorInfo(); QVariantMap data;
if (_source == "name") { if (_source == "desktop/current/name") {
data->name = "Current desktop name"; data["min"] = "";
data->variantType = QVariant::String; data["max"] = "";
data->unit = KSysGuard::UnitNone; data["name"] = "Current desktop name";
} else if (_source == "number") { data["type"] = "QString";
data->min = 0; data["units"] = "";
data->name = "Current desktop number"; } else if (_source == "desktop/current/number") {
data->variantType = QVariant::Int; data["min"] = 0;
data->unit = KSysGuard::UnitNone; data["max"] = 0;
} else if (_source == "names") { data["name"] = "Current desktop number";
data->name = "All desktops by name"; data["type"] = "integer";
data->variantType = QVariant::StringList; data["units"] = "";
data->unit = KSysGuard::UnitNone; } else if (_source == "desktop/total/name") {
} else if (_source == "count") { data["min"] = QStringList();
data->min = 0; data["max"] = QStringList();
data->name = "Desktops count"; data["name"] = "All desktops by name";
data->variantType = QVariant::Int; data["type"] = "QStringList";
data->unit = KSysGuard::UnitNone; data["units"] = "";
} else if (_source == "desktop/total/number") {
data["min"] = 0;
data["max"] = 0;
data["name"] = "Desktops count";
data["type"] = "integer";
data["units"] = "";
} }
return data; return data;
@ -97,10 +102,10 @@ KSysGuard::SensorInfo *DesktopSource::initialData(const QString &_source) const
QStringList DesktopSource::sources() const QStringList DesktopSource::sources() const
{ {
QStringList sources; QStringList sources;
sources.append("name"); sources.append("desktop/current/name");
sources.append("number"); sources.append("desktop/current/number");
sources.append("names"); sources.append("desktop/total/name");
sources.append("count"); sources.append("desktop/total/number");
return sources; return sources;
} }

View File

@ -35,7 +35,7 @@ public:
explicit DesktopSource(QObject *_parent, const QStringList &_args); explicit DesktopSource(QObject *_parent, const QStringList &_args);
~DesktopSource() override; ~DesktopSource() override;
QVariant data(const QString &_source) override; QVariant data(const QString &_source) override;
[[nodiscard]] KSysGuard::SensorInfo *initialData(const QString &_source) const override; [[nodiscard]] QVariantMap initialData(const QString &_source) const override;
void run() override{}; void run() override{};
[[nodiscard]] QStringList sources() const override; [[nodiscard]] QStringList sources() const override;

View File

@ -1,89 +0,0 @@
/***************************************************************************
* This file is part of awesome-widgets *
* *
* awesome-widgets is free software: you can redistribute it and/or *
* modify it under the terms of the GNU General Public License as *
* published by the Free Software Foundation, either version 3 of the *
* License, or (at your option) any later version. *
* *
* awesome-widgets is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/
#include "extsysmonsensor.h"
#include <QTimer>
#include "abstractextsysmonsource.h"
#include "awdebug.h"
ExtSysMonSensor::ExtSysMonSensor(KSysGuard::SensorContainer *_parent, const QString &_id, const QString &_name,
AbstractExtSysMonSource *_source)
: KSysGuard::SensorObject(_id, _name, _parent)
, m_source(_source)
, m_timer(new QTimer(this))
{
qCDebug(LOG_ESS) << __PRETTY_FUNCTION__;
loadProperties();
connect(this, &SensorObject::subscribedChanged, [this](bool _state) { changeSubscription(_state); });
connect(m_timer, &QTimer::timeout, [this]() { update(); });
}
ExtSysMonSensor::~ExtSysMonSensor()
{
qCDebug(LOG_ESS) << __PRETTY_FUNCTION__;
m_timer->stop();
m_timer->deleteLater();
}
void ExtSysMonSensor::changeSubscription(bool _subscribed)
{
qCDebug(LOG_ESS) << "Subscription changed to" << _subscribed;
if (_subscribed) {
m_timer->start(1000);
} else {
m_timer->stop();
}
}
void ExtSysMonSensor::update()
{
for (auto &source : m_source->sources()) {
auto property = sensor(source);
if (!property->isSubscribed())
continue; // skip properties which are not explicitly subscribed
auto value = m_source->data(source);
property->setValue(value);
}
}
void ExtSysMonSensor::loadProperties()
{
for (auto &source : m_source->sources()) {
auto info = m_source->initialData(source);
auto property = new KSysGuard::SensorProperty(source, info->name, this);
property->setUnit(info->unit);
property->setVariantType(info->variantType);
property->setMin(info->min);
property->setMax(info->max);
addProperty(property);
}
}

View File

@ -1,45 +0,0 @@
/***************************************************************************
* This file is part of awesome-widgets *
* *
* awesome-widgets is free software: you can redistribute it and/or *
* modify it under the terms of the GNU General Public License as *
* published by the Free Software Foundation, either version 3 of the *
* License, or (at your option) any later version. *
* *
* awesome-widgets is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/
#ifndef EXTSYSMONSENSOR_H
#define EXTSYSMONSENSOR_H
#include <ksysguard/systemstats/SensorObject.h>
class AbstractExtSysMonSource;
class QTimer;
class ExtSysMonSensor : public KSysGuard::SensorObject
{
Q_OBJECT
public:
explicit ExtSysMonSensor(KSysGuard::SensorContainer *_parent, const QString &_id, const QString &_name,
AbstractExtSysMonSource *_source);
~ExtSysMonSensor() override;
void changeSubscription(bool _subscribed);
void update();
private:
void loadProperties();
AbstractExtSysMonSource *m_source = nullptr;
QTimer *m_timer = nullptr;
};
#endif /* EXTSYSMONSENSOR_H */

View File

@ -14,10 +14,9 @@
* You should have received a copy of the GNU General Public License * * You should have received a copy of the GNU General Public License *
* 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 "gpuloadsource.h"
#include <ksysguard/formatter/Unit.h>
#include <ksysguard/systemstats/SensorInfo.h> #include "gpuloadsource.h"
#include <QFile> #include <QFile>
#include <QProcess> #include <QProcess>
@ -75,24 +74,24 @@ QVariant GPULoadSource::data(const QString &_source)
{ {
qCDebug(LOG_ESS) << "Source" << _source; qCDebug(LOG_ESS) << "Source" << _source;
if (_source == "load") if (_source == "gpu/load")
run(); run();
return m_values[_source]; return m_values[_source];
} }
KSysGuard::SensorInfo *GPULoadSource::initialData(const QString &_source) const QVariantMap GPULoadSource::initialData(const QString &_source) const
{ {
qCDebug(LOG_ESS) << "Source" << _source; qCDebug(LOG_ESS) << "Source" << _source;
auto data = new KSysGuard::SensorInfo(); QVariantMap data;
if (_source == "load") { if (_source == "gpu/load") {
data->min = 0.0; data["min"] = 0.0;
data->max = 100.0; data["max"] = 100.0;
data->name = "GPU usage"; data["name"] = "GPU usage";
data->variantType = QVariant::Double; data["type"] = "float";
data->unit = KSysGuard::UnitPercent; data["units"] = "%";
} }
return data; return data;
@ -115,7 +114,7 @@ void GPULoadSource::run()
QStringList GPULoadSource::sources() const QStringList GPULoadSource::sources() const
{ {
QStringList sources; QStringList sources;
sources.append("load"); sources.append("gpu/load");
return sources; return sources;
} }
@ -134,7 +133,7 @@ void GPULoadSource::updateValue()
if (!str.contains("<gpu_util>")) if (!str.contains("<gpu_util>"))
continue; continue;
auto load = str.remove("<gpu_util>").remove("</gpu_util>").remove('%'); auto load = str.remove("<gpu_util>").remove("</gpu_util>").remove('%');
m_values["load"] = load.toFloat(); m_values["gpu/load"] = load.toFloat();
break; break;
} }
} else if (m_device == "ati") { } else if (m_device == "ati") {
@ -142,7 +141,7 @@ void GPULoadSource::updateValue()
if (!str.contains("load")) if (!str.contains("load"))
continue; continue;
QString load = str.split(' ', Qt::SkipEmptyParts)[3].remove('%'); QString load = str.split(' ', Qt::SkipEmptyParts)[3].remove('%');
m_values["load"] = load.toFloat(); m_values["gpu/load"] = load.toFloat();
break; break;
} }
} }

View File

@ -34,7 +34,7 @@ public:
~GPULoadSource() override; ~GPULoadSource() override;
static QString autoGpu(); static QString autoGpu();
QVariant data(const QString &_source) override; QVariant data(const QString &_source) override;
[[nodiscard]] KSysGuard::SensorInfo *initialData(const QString &_source) const override; [[nodiscard]] QVariantMap initialData(const QString &_source) const override;
void run() override; void run() override;
[[nodiscard]] QStringList sources() const override; [[nodiscard]] QStringList sources() const override;

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/ *
***************************************************************************/ ***************************************************************************/
#include "gputempsource.h"
#include <ksysguard/formatter/Unit.h> #include "gputempsource.h"
#include <ksysguard/systemstats/SensorInfo.h>
#include <QFile> #include <QFile>
#include <QProcess> #include <QProcess>
@ -55,24 +53,24 @@ QVariant GPUTemperatureSource::data(const QString &_source)
{ {
qCDebug(LOG_ESS) << "Source" << _source; qCDebug(LOG_ESS) << "Source" << _source;
if (_source == "temperature") if (_source == "gpu/temperature")
run(); run();
return m_values[_source]; return m_values[_source];
} }
KSysGuard::SensorInfo *GPUTemperatureSource::initialData(const QString &_source) const QVariantMap GPUTemperatureSource::initialData(const QString &_source) const
{ {
qCDebug(LOG_ESS) << "Source" << _source; qCDebug(LOG_ESS) << "Source" << _source;
auto data = new KSysGuard::SensorInfo(); QVariantMap data;
if (_source == "temperature") { if (_source == "gpu/temperature") {
data->min = 0.0; data["min"] = 0.0;
data->max = 0.0; data["max"] = 0.0;
data->name = "GPU temperature"; data["name"] = "GPU temperature";
data->variantType = QVariant::Double; data["type"] = "float";
data->unit = KSysGuard::UnitCelsius; data["units"] = "°C";
} }
return data; return data;
@ -95,7 +93,7 @@ void GPUTemperatureSource::run()
QStringList GPUTemperatureSource::sources() const QStringList GPUTemperatureSource::sources() const
{ {
QStringList sources; QStringList sources;
sources.append("temperature"); sources.append("gpu/temperature");
return sources; return sources;
} }
@ -114,7 +112,7 @@ void GPUTemperatureSource::updateValue()
if (!str.contains("<gpu_temp>")) if (!str.contains("<gpu_temp>"))
continue; continue;
QString temp = str.remove("<gpu_temp>").remove("C</gpu_temp>"); QString temp = str.remove("<gpu_temp>").remove("C</gpu_temp>");
m_values["temperature"] = temp.toFloat(); m_values["gpu/temperature"] = temp.toFloat();
break; break;
} }
} else if (m_device == "ati") { } else if (m_device == "ati") {
@ -122,7 +120,7 @@ void GPUTemperatureSource::updateValue()
if (!str.contains("Temperature")) if (!str.contains("Temperature"))
continue; continue;
QString temp = str.split(' ', Qt::SkipEmptyParts).at(4); QString temp = str.split(' ', Qt::SkipEmptyParts).at(4);
m_values["temperature"] = temp.toFloat(); m_values["gpu/temperature"] = temp.toFloat();
break; break;
} }
} }

View File

@ -33,7 +33,7 @@ public:
explicit GPUTemperatureSource(QObject *_parent, const QStringList &_args); explicit GPUTemperatureSource(QObject *_parent, const QStringList &_args);
~GPUTemperatureSource() override; ~GPUTemperatureSource() override;
QVariant data(const QString &_source) override; QVariant data(const QString &_source) override;
[[nodiscard]] KSysGuard::SensorInfo *initialData(const QString &_source) const override; [[nodiscard]] QVariantMap initialData(const QString &_source) const override;
void run() override; void run() override;
[[nodiscard]] QStringList sources() const override; [[nodiscard]] QStringList sources() const override;

View File

@ -18,9 +18,6 @@
#include "hddtempsource.h" #include "hddtempsource.h"
#include <ksysguard/formatter/Unit.h>
#include <ksysguard/systemstats/SensorInfo.h>
#include <QDir> #include <QDir>
#include <QProcess> #include <QProcess>
@ -77,7 +74,7 @@ QVariant HDDTemperatureSource::data(const QString &_source)
qCDebug(LOG_ESS) << "Source" << _source; qCDebug(LOG_ESS) << "Source" << _source;
QString device = _source; QString device = _source;
device.remove("temperature"); device.remove("hdd/temperature");
// run cmd // run cmd
if (m_processes[device]->state() == QProcess::NotRunning) { if (m_processes[device]->state() == QProcess::NotRunning) {
auto cmd = m_cmd.first(); auto cmd = m_cmd.first();
@ -90,19 +87,18 @@ QVariant HDDTemperatureSource::data(const QString &_source)
} }
KSysGuard::SensorInfo *HDDTemperatureSource::initialData(const QString &_source) const QVariantMap HDDTemperatureSource::initialData(const QString &_source) const
{ {
qCDebug(LOG_ESS) << "Source" << _source; qCDebug(LOG_ESS) << "Source" << _source;
auto device = _source; QString device = _source;
device.remove("temperature"); device.remove("hdd/temperature");
QVariantMap data;
auto data = new KSysGuard::SensorInfo(); data["min"] = 0.0;
data->min = 0.0; data["max"] = 0.0;
data->max = 0.0; data["name"] = QString("HDD '%1' temperature").arg(device);
data->name = QString("HDD '%1' temperature").arg(device); data["type"] = "float";
data->variantType = QVariant::Double; data["units"] = "°C";
data->unit = KSysGuard::UnitCelsius;
return data; return data;
} }
@ -112,7 +108,7 @@ QStringList HDDTemperatureSource::sources() const
{ {
QStringList sources; QStringList sources;
for (auto &device : m_devices) for (auto &device : m_devices)
sources.append(QString("temperature%1").arg(device)); sources.append(QString("hdd/temperature%1").arg(device));
return sources; return sources;
} }

View File

@ -34,7 +34,7 @@ public:
~HDDTemperatureSource() override; ~HDDTemperatureSource() override;
static QStringList allHdd(); static QStringList allHdd();
QVariant data(const QString &_source) override; QVariant data(const QString &_source) override;
[[nodiscard]] KSysGuard::SensorInfo *initialData(const QString &_source) const override; [[nodiscard]] QVariantMap initialData(const QString &_source) const override;
void run() override{}; void run() override{};
[[nodiscard]] QStringList sources() const override; [[nodiscard]] QStringList sources() const override;

View File

@ -18,9 +18,6 @@
#include "loadsource.h" #include "loadsource.h"
#include <ksysguard/formatter/Unit.h>
#include <ksysguard/systemstats/SensorInfo.h>
#include <QRandomGenerator> #include <QRandomGenerator>
#include "awdebug.h" #include "awdebug.h"
@ -48,17 +45,17 @@ QVariant LoadSource::data(const QString &_source)
} }
KSysGuard::SensorInfo *LoadSource::initialData(const QString &_source) const QVariantMap LoadSource::initialData(const QString &_source) const
{ {
qCDebug(LOG_ESS) << "Source" << _source; qCDebug(LOG_ESS) << "Source" << _source;
auto data = new KSysGuard::SensorInfo(); QVariantMap data;
if (_source.startsWith("load")) { if (_source.startsWith("load/load")) {
data->min = 0; data["min"] = 0;
data->max = 0; data["max"] = 0;
data->name = "Simple sources for load tests"; data["name"] = "Simple sources for load tests";
data->variantType = QVariant::Int; data["type"] = "int";
data->unit = KSysGuard::UnitNone; data["units"] = "";
} }
return data; return data;
@ -69,7 +66,7 @@ QStringList LoadSource::sources() const
{ {
QStringList sources; QStringList sources;
for (int i = 0; i < 1000; i++) for (int i = 0; i < 1000; i++)
sources.append(QString("load%1").arg(i)); sources.append(QString("load/load%1").arg(i));
return sources; return sources;
} }

View File

@ -31,7 +31,7 @@ public:
explicit LoadSource(QObject *_parent, const QStringList &_args); explicit LoadSource(QObject *_parent, const QStringList &_args);
~LoadSource() override; ~LoadSource() override;
QVariant data(const QString &_source) override; QVariant data(const QString &_source) override;
[[nodiscard]] KSysGuard::SensorInfo *initialData(const QString &_source) const override; [[nodiscard]] QVariantMap initialData(const QString &_source) const override;
void run() override{}; void run() override{};
[[nodiscard]] QStringList sources() const override; [[nodiscard]] QStringList sources() const override;
}; };

View File

@ -18,9 +18,6 @@
#include "networksource.h" #include "networksource.h"
#include <ksysguard/formatter/Unit.h>
#include <ksysguard/systemstats/SensorInfo.h>
#include <QNetworkInterface> #include <QNetworkInterface>
#include <QProcess> #include <QProcess>
@ -60,19 +57,23 @@ QVariant NetworkSource::data(const QString &_source)
} }
KSysGuard::SensorInfo *NetworkSource::initialData(const QString &_source) const QVariantMap NetworkSource::initialData(const QString &_source) const
{ {
qCDebug(LOG_ESS) << "Source" << _source; qCDebug(LOG_ESS) << "Source" << _source;
auto data = new KSysGuard::SensorInfo(); QVariantMap data;
if (_source == "device") { if (_source == "network/current/name") {
data->name = "Current network device name"; data["min"] = "";
data->variantType = QVariant::String; data["max"] = "";
data->unit = KSysGuard::UnitNone; data["name"] = "Current network device name";
} else if (_source == "ssid") { data["type"] = "QString";
data->name = "Current SSID name"; data["units"] = "";
data->variantType = QVariant::String; } else if (_source == "network/current/ssid") {
data->unit = KSysGuard::UnitNone; data["min"] = "";
data["max"] = "";
data["name"] = "Current SSID name";
data["type"] = "QString";
data["units"] = "";
} }
return data; return data;
@ -81,18 +82,16 @@ KSysGuard::SensorInfo *NetworkSource::initialData(const QString &_source) const
void NetworkSource::run() void NetworkSource::run()
{ {
m_values["device"] = NetworkSource::getCurrentDevice(); m_values["network/current/name"] = NetworkSource::getCurrentDevice();
if (m_process->state() == QProcess::ProcessState::NotRunning) { m_process->start("iwgetid", QStringList() << "-r");
m_process->start("iwgetid", {"-r"});
}
} }
QStringList NetworkSource::sources() const QStringList NetworkSource::sources() const
{ {
QStringList sources; QStringList sources;
sources.append("device"); sources.append("network/current/name");
sources.append("ssid"); sources.append("network/current/ssid");
return sources; return sources;
} }
@ -106,7 +105,7 @@ void NetworkSource::updateSsid()
QString qoutput = QString::fromUtf8(m_process->readAllStandardOutput()).trimmed(); QString qoutput = QString::fromUtf8(m_process->readAllStandardOutput()).trimmed();
qCInfo(LOG_ESS) << "Output" << qoutput; qCInfo(LOG_ESS) << "Output" << qoutput;
m_values["ssid"] = qoutput; m_values["network/current/ssid"] = qoutput;
} }

View File

@ -33,7 +33,7 @@ public:
explicit NetworkSource(QObject *_parent, const QStringList &_args); explicit NetworkSource(QObject *_parent, const QStringList &_args);
~NetworkSource() override; ~NetworkSource() override;
QVariant data(const QString &_source) override; QVariant data(const QString &_source) override;
[[nodiscard]] KSysGuard::SensorInfo *initialData(const QString &_source) const override; [[nodiscard]] QVariantMap initialData(const QString &_source) const override;
void run() override; void run() override;
[[nodiscard]] QStringList sources() const override; [[nodiscard]] QStringList sources() const override;

View File

@ -18,9 +18,6 @@
#include "playersource.h" #include "playersource.h"
#include <ksysguard/formatter/Unit.h>
#include <ksysguard/systemstats/SensorInfo.h>
#include <QDBusArgument> #include <QDBusArgument>
#include <QDBusConnection> #include <QDBusConnection>
#include <QDBusConnectionInterface> #include <QDBusConnectionInterface>
@ -90,59 +87,77 @@ QString PlayerSource::getAutoMpris()
} }
KSysGuard::SensorInfo *PlayerSource::initialData(const QString &_source) const QVariantMap PlayerSource::initialData(const QString &_source) const
{ {
qCDebug(LOG_ESS) << "Source" << _source; qCDebug(LOG_ESS) << "Source" << _source;
auto data = new KSysGuard::SensorInfo(); QVariantMap data;
if (_source == "album") { if (_source == "player/album") {
data->name = "Current song album"; data["min"] = "";
data->variantType = QVariant::String; data["max"] = "";
data->unit = KSysGuard::UnitNone; data["name"] = "Current song album";
} else if (_source == "salbum") { data["type"] = "QString";
data->name = QString("Current song album (%1 symbols)").arg(m_symbols); data["units"] = "";
data->variantType = QVariant::String; } else if (_source == "player/salbum") {
data->unit = KSysGuard::UnitNone; data["min"] = "";
} else if (_source == "dalbum") { data["max"] = "";
data->name = QString("Current song album (%1 symbols, dynamic)").arg(m_symbols); data["name"] = QString("Current song album (%1 symbols)").arg(m_symbols);
data->variantType = QVariant::String; data["type"] = "QString";
data->unit = KSysGuard::UnitNone; data["units"] = "";
} else if (_source == "artist") { } else if (_source == "player/dalbum") {
data->name = "Current song artist"; data["min"] = "";
data->variantType = QVariant::String; data["max"] = "";
data->unit = KSysGuard::UnitNone; data["name"] = QString("Current song album (%1 symbols, dynamic)").arg(m_symbols);
} else if (_source == "sartist") { data["type"] = "QString";
data->name = QString("Current song artist (%1 symbols)").arg(m_symbols); data["units"] = "";
data->variantType = QVariant::String; } else if (_source == "player/artist") {
data->unit = KSysGuard::UnitNone; data["min"] = "";
} else if (_source == "dartist") { data["max"] = "";
data->name = QString("Current song artist (%1 symbols, dynamic)").arg(m_symbols); data["name"] = "Current song artist";
data->variantType = QVariant::String; data["type"] = "QString";
data->unit = KSysGuard::UnitNone; data["units"] = "";
} else if (_source == "duration") { } else if (_source == "player/sartist") {
data->min = 0; data["min"] = "";
data->max = 0; data["max"] = "";
data->name = "Current song duration"; data["name"] = QString("Current song artist (%1 symbols)").arg(m_symbols);
data->variantType = QVariant::Int; data["type"] = "QString";
data->unit = KSysGuard::UnitSecond; data["units"] = "";
} else if (_source == "progress") { } else if (_source == "player/dartist") {
data->min = 0; data["min"] = "";
data->max = 0; data["max"] = "";
data->name = "Current song progress"; data["name"] = QString("Current song artist (%1 symbols, dynamic)").arg(m_symbols);
data->variantType = QVariant::Int; data["type"] = "QString";
data->unit = KSysGuard::UnitSecond; data["units"] = "";
} else if (_source == "title") { } else if (_source == "player/duration") {
data->name = "Current song title"; data["min"] = 0;
data->variantType = QVariant::String; data["max"] = 0;
data->unit = KSysGuard::UnitNone; data["name"] = "Current song duration";
} else if (_source == "stitle") { data["type"] = "integer";
data->name = QString("Current song title (%1 symbols)").arg(m_symbols); data["units"] = "s";
data->variantType = QVariant::String; } else if (_source == "player/progress") {
data->unit = KSysGuard::UnitNone; data["min"] = 0;
} else if (_source == "dtitle") { data["max"] = 0;
data->name = QString("Current song title (%1 symbols, dynamic)").arg(m_symbols); data["name"] = "Current song progress";
data->variantType = QVariant::String; data["type"] = "integer";
data->unit = KSysGuard::UnitNone; data["units"] = "s";
} else if (_source == "player/title") {
data["min"] = "";
data["max"] = "";
data["name"] = "Current song title";
data["type"] = "QString";
data["units"] = "";
} else if (_source == "player/stitle") {
data["min"] = "";
data["max"] = "";
data["name"] = QString("Current song title (%1 symbols)").arg(m_symbols);
data["type"] = "QString";
data["units"] = "";
} else if (_source == "player/dtitle") {
data["min"] = "";
data["max"] = "";
data["name"] = QString("Current song title (%1 symbols, dynamic)").arg(m_symbols);
data["type"] = "QString";
data["units"] = "";
} }
return data; return data;
@ -166,30 +181,33 @@ void PlayerSource::run()
// dymanic properties // dymanic properties
// solid // solid
m_values["salbum"] = stripString(m_values["album"].toString(), m_symbols); m_values["player/salbum"] = stripString(m_values["player/album"].toString(), m_symbols);
m_values["sartist"] = stripString(m_values["artist"].toString(), m_symbols); m_values["player/sartist"] = stripString(m_values["player/artist"].toString(), m_symbols);
m_values["stitle"] = stripString(m_values["title"].toString(), m_symbols); m_values["player/stitle"] = stripString(m_values["player/title"].toString(), m_symbols);
// dynamic // dynamic
m_values["dalbum"] = buildString(m_values["dalbum"].toString(), m_values["album"].toString(), m_symbols); m_values["player/dalbum"]
m_values["dartist"] = buildString(m_values["dartist"].toString(), m_values["artist"].toString(), m_symbols); = buildString(m_values["player/dalbum"].toString(), m_values["player/album"].toString(), m_symbols);
m_values["dtitle"] = buildString(m_values["dtitle"].toString(), m_values["title"].toString(), m_symbols); m_values["player/dartist"]
= buildString(m_values["player/dartist"].toString(), m_values["player/artist"].toString(), m_symbols);
m_values["player/dtitle"]
= buildString(m_values["player/dtitle"].toString(), m_values["player/title"].toString(), m_symbols);
} }
QStringList PlayerSource::sources() const QStringList PlayerSource::sources() const
{ {
QStringList sources; QStringList sources;
sources.append("album"); sources.append("player/album");
sources.append("dalbum"); sources.append("player/dalbum");
sources.append("salbum"); sources.append("player/salbum");
sources.append("artist"); sources.append("player/artist");
sources.append("dartist"); sources.append("player/dartist");
sources.append("sartist"); sources.append("player/sartist");
sources.append("duration"); sources.append("player/duration");
sources.append("progress"); sources.append("player/progress");
sources.append("title"); sources.append("player/title");
sources.append("dtitle"); sources.append("player/dtitle");
sources.append("stitle"); sources.append("player/stitle");
return sources; return sources;
} }
@ -242,10 +260,10 @@ void PlayerSource::mpdSocketReadyRead()
// there are one more time... // there are one more time...
if ((metadata == "time") && (data.contains(':'))) { if ((metadata == "time") && (data.contains(':'))) {
QStringList times = data.split(':'); QStringList times = data.split(':');
m_mpdCached["duration"] = times.at(0).toInt(); m_mpdCached["player/duration"] = times.at(0).toInt();
m_mpdCached["progress"] = times.at(1).toInt(); m_mpdCached["player/progress"] = times.at(1).toInt();
} else if (m_metadata.contains(metadata)) { } else if (m_metadata.contains(metadata)) {
m_mpdCached[metadata] = data; m_mpdCached[QString("player/%1").arg(metadata)] = data;
} }
} }
} }
@ -263,11 +281,11 @@ void PlayerSource::mpdSocketWritten(const qint64 _bytes)
QVariantHash PlayerSource::defaultInfo() QVariantHash PlayerSource::defaultInfo()
{ {
QVariantHash info; QVariantHash info;
info["album"] = "unknown"; info["player/album"] = "unknown";
info["artist"] = "unknown"; info["player/artist"] = "unknown";
info["duration"] = 0; info["player/duration"] = 0;
info["progress"] = 0; info["player/progress"] = 0;
info["title"] = "unknown"; info["player/title"] = "unknown";
return info; return info;
} }
@ -318,11 +336,11 @@ QVariantHash PlayerSource::getPlayerMprisInfo(const QString &_mpris)
// another portion of dirty magic // another portion of dirty magic
auto map = qdbus_cast<QVariantHash>( auto map = qdbus_cast<QVariantHash>(
response.arguments().first().value<QDBusVariant>().variant().value<QDBusArgument>()); response.arguments().first().value<QDBusVariant>().variant().value<QDBusArgument>());
info["album"] = map.value("xesam:album", "unknown"); info["player/album"] = map.value("xesam:album", "unknown");
// artist is array // artist is array
info["artist"] = map.value("xesam:artist", "unknown").toString(); info["player/artist"] = map.value("xesam:artist", "unknown").toString();
info["duration"] = map.value("mpris:length", 0).toInt() / (1000 * 1000); info["player/duration"] = map.value("mpris:length", 0).toInt() / (1000 * 1000);
info["title"] = map.value("xesam:title", "unknown"); info["player/title"] = map.value("xesam:title", "unknown");
} }
// position // position
@ -333,7 +351,8 @@ QVariantHash PlayerSource::getPlayerMprisInfo(const QString &_mpris)
qCWarning(LOG_ESS) << "Error message" << response.errorMessage(); qCWarning(LOG_ESS) << "Error message" << response.errorMessage();
} else { } else {
// this cast is simpler than the previous one ;) // this cast is simpler than the previous one ;)
info["progress"] = response.arguments().first().value<QDBusVariant>().variant().toLongLong() / (1000 * 1000); info["player/progress"]
= response.arguments().first().value<QDBusVariant>().variant().toLongLong() / (1000 * 1000);
} }
return info; return info;

View File

@ -38,7 +38,7 @@ public:
~PlayerSource() override; ~PlayerSource() override;
QVariant data(const QString &_source) override; QVariant data(const QString &_source) override;
static QString getAutoMpris(); static QString getAutoMpris();
[[nodiscard]] KSysGuard::SensorInfo *initialData(const QString &_source) const override; [[nodiscard]] QVariantMap initialData(const QString &_source) const override;
void run() override; void run() override;
[[nodiscard]] QStringList sources() const override; [[nodiscard]] QStringList sources() const override;
// additional method to build dynamic tags // additional method to build dynamic tags

View File

@ -18,9 +18,6 @@
#include "processessource.h" #include "processessource.h"
#include <ksysguard/formatter/Unit.h>
#include <ksysguard/systemstats/SensorInfo.h>
#include <QDir> #include <QDir>
#include "awdebug.h" #include "awdebug.h"
@ -51,27 +48,29 @@ QVariant ProcessesSource::data(const QString &_source)
} }
KSysGuard::SensorInfo *ProcessesSource::initialData(const QString &_source) const QVariantMap ProcessesSource::initialData(const QString &_source) const
{ {
qCDebug(LOG_ESS) << "Source" << _source; qCDebug(LOG_ESS) << "Source" << _source;
auto data = new KSysGuard::SensorInfo(); QVariantMap data;
if (_source == "running") { if (_source == "ps/running/count") {
data->min = 0; data["min"] = 0;
data->max = 0; data["max"] = 0;
data->name = "Count of running processes"; data["name"] = "Count of running processes";
data->variantType = QVariant::Int; data["type"] = "integer";
data->unit = KSysGuard::UnitNone; data["units"] = "";
} else if (_source == "list") { } else if (_source == "ps/running/list") {
data->name = "All running processes list"; data["min"] = QStringList();
data->variantType = QVariant::StringList; data["max"] = QStringList();
data->unit = KSysGuard::UnitNone; data["name"] = "All running processes list";
} else if (_source == "count") { data["type"] = "QStringList";
data->min = 0; data["units"] = "";
data->max = 0; } else if (_source == "ps/total/count") {
data->name = "Total count of processes"; data["min"] = 0;
data->variantType = QVariant::Int; data["max"] = 0;
data->unit = KSysGuard::UnitNone; data["name"] = "Total count of processes";
data["type"] = "integer";
data["units"] = "";
} }
return data; return data;
@ -99,18 +98,18 @@ void ProcessesSource::run()
cmdFile.close(); cmdFile.close();
} }
m_values["running"] = running.count(); m_values["ps/running/count"] = running.count();
m_values["list"] = running; m_values["ps/running/list"] = running;
m_values["count"] = directories.count(); m_values["ps/total/count"] = directories.count();
} }
QStringList ProcessesSource::sources() const QStringList ProcessesSource::sources() const
{ {
QStringList sources; QStringList sources;
sources.append("running"); sources.append("ps/running/count");
sources.append("list"); sources.append("ps/running/list");
sources.append("count"); sources.append("ps/total/count");
return sources; return sources;
} }

View File

@ -31,7 +31,7 @@ public:
explicit ProcessesSource(QObject *_parent, const QStringList &_args); explicit ProcessesSource(QObject *_parent, const QStringList &_args);
~ProcessesSource() override; ~ProcessesSource() override;
QVariant data(const QString &_source) override; QVariant data(const QString &_source) override;
[[nodiscard]] KSysGuard::SensorInfo *initialData(const QString &_source) const override; [[nodiscard]] QVariantMap initialData(const QString &_source) const override;
void run() override; void run() override;
[[nodiscard]] QStringList sources() const override; [[nodiscard]] QStringList sources() const override;

View File

@ -18,9 +18,6 @@
#include "quotessource.h" #include "quotessource.h"
#include <ksysguard/formatter/Unit.h>
#include <ksysguard/systemstats/SensorInfo.h>
#include "awdebug.h" #include "awdebug.h"
#include "extquotes.h" #include "extquotes.h"
@ -48,58 +45,60 @@ QVariant QuotesSource::data(const QString &_source)
qCDebug(LOG_ESS) << "Source" << _source; qCDebug(LOG_ESS) << "Source" << _source;
int ind = index(_source); int ind = index(_source);
if (!m_values.contains(_source)) { auto service = _source;
service.remove("quotes/");
if (!m_values.contains(service)) {
QVariantHash data = m_extQuotes->itemByTagNumber(ind)->run(); QVariantHash data = m_extQuotes->itemByTagNumber(ind)->run();
for (auto &key : data.keys()) for (auto &key : data.keys())
m_values[key] = data[key]; m_values[key] = data[key];
} }
QVariant value = m_values.take(_source); QVariant value = m_values.take(service);
return value; return value;
} }
KSysGuard::SensorInfo *QuotesSource::initialData(const QString &_source) const QVariantMap QuotesSource::initialData(const QString &_source) const
{ {
qCDebug(LOG_ESS) << "Source" << _source; qCDebug(LOG_ESS) << "Source" << _source;
int ind = index(_source); int ind = index(_source);
auto data = new KSysGuard::SensorInfo; QVariantMap data;
if (_source.startsWith("pricechg")) { if (_source.startsWith("quotes/pricechg")) {
data->min = 0.0; data["min"] = 0.0;
data->max = 0.0; data["max"] = 0.0;
data->name = QString("Absolute price changes for '%1'").arg(m_extQuotes->itemByTagNumber(ind)->uniq()); data["name"] = QString("Absolute prie changes for '%1'").arg(m_extQuotes->itemByTagNumber(ind)->uniq());
data->variantType = QVariant::Double; data["type"] = "double";
data->unit = KSysGuard::UnitNone; data["units"] = "";
} else if (_source.startsWith("price")) { } else if (_source.startsWith("quotes/price")) {
data->min = 0.0; data["min"] = 0.0;
data->max = 0.0; data["max"] = 0.0;
data->name = QString("Price for '%1'").arg(m_extQuotes->itemByTagNumber(ind)->uniq()); data["name"] = QString("Price for '%1'").arg(m_extQuotes->itemByTagNumber(ind)->uniq());
data->variantType = QVariant::Double; data["type"] = "double";
data->unit = KSysGuard::UnitNone; data["units"] = "";
} else if (_source.startsWith("percpricechg")) { } else if (_source.startsWith("quotes/percpricechg")) {
data->min = -100.0; data["min"] = -100.0;
data->max = 100.0; data["max"] = 100.0;
data->name = QString("Price changes for '%1'").arg(m_extQuotes->itemByTagNumber(ind)->uniq()); data["name"] = QString("Price changes for '%1'").arg(m_extQuotes->itemByTagNumber(ind)->uniq());
data->variantType = QVariant::Double; data["type"] = "double";
data->unit = KSysGuard::UnitPercent; data["units"] = "";
} else if (_source.startsWith("volumechg")) { } else if (_source.startsWith("quotes/volumechg")) {
data->min = 0; data["min"] = 0;
data->max = 0; data["max"] = 0;
data->name = QString("Absolute volume changes for '%1'").arg(m_extQuotes->itemByTagNumber(ind)->uniq()); data["name"] = QString("Absolute volume changes for '%1'").arg(m_extQuotes->itemByTagNumber(ind)->uniq());
data->variantType = QVariant::Int; data["type"] = "int";
data->unit = KSysGuard::UnitNone; data["units"] = "";
} else if (_source.startsWith("volume")) { } else if (_source.startsWith("quotes/volume")) {
data->min = 0; data["min"] = 0;
data->max = 0; data["max"] = 0;
data->name = QString("Volume for '%1'").arg(m_extQuotes->itemByTagNumber(ind)->uniq()); data["name"] = QString("Volume for '%1'").arg(m_extQuotes->itemByTagNumber(ind)->uniq());
data->variantType = QVariant::Int; data["type"] = "int";
data->unit = KSysGuard::UnitNone; data["units"] = "";
} else if (_source.startsWith("percvolumechg")) { } else if (_source.startsWith("quotes/percvolumechg")) {
data->min = -100.0; data["min"] = -100.0;
data->max = 100.0; data["max"] = 100.0;
data->name = QString("Volume changes for '%1'").arg(m_extQuotes->itemByTagNumber(ind)->uniq()); data["name"] = QString("Volume changes for '%1'").arg(m_extQuotes->itemByTagNumber(ind)->uniq());
data->variantType = QVariant::Double; data["type"] = "double";
data->unit = KSysGuard::UnitPercent; data["units"] = "";
} }
return data; return data;
@ -116,12 +115,12 @@ QStringList QuotesSource::getSources()
{ {
QStringList sources; QStringList sources;
for (auto &item : m_extQuotes->activeItems()) { for (auto &item : m_extQuotes->activeItems()) {
sources.append(item->tag("price")); sources.append(QString("quotes/%1").arg(item->tag("price")));
sources.append(item->tag("pricechg")); sources.append(QString("quotes/%1").arg(item->tag("pricechg")));
sources.append(item->tag("percpricechg")); sources.append(QString("quotes/%1").arg(item->tag("percpricechg")));
sources.append(item->tag("volume")); sources.append(QString("quotes/%1").arg(item->tag("volume")));
sources.append(item->tag("volumechg")); sources.append(QString("quotes/%1").arg(item->tag("volumechg")));
sources.append(item->tag("percvolumechg")); sources.append(QString("quotes/%1").arg(item->tag("percvolumechg")));
} }
return sources; return sources;

View File

@ -34,7 +34,7 @@ public:
explicit QuotesSource(QObject *_parent, const QStringList &_args); explicit QuotesSource(QObject *_parent, const QStringList &_args);
~QuotesSource() override; ~QuotesSource() override;
QVariant data(const QString &_source) override; QVariant data(const QString &_source) override;
[[nodiscard]] KSysGuard::SensorInfo *initialData(const QString &_source) const override; [[nodiscard]] QVariantMap initialData(const QString &_source) const override;
void run() override{}; void run() override{};
[[nodiscard]] QStringList sources() const override; [[nodiscard]] QStringList sources() const override;

View File

@ -18,9 +18,6 @@
#include "requestsource.h" #include "requestsource.h"
#include <ksysguard/formatter/Unit.h>
#include <ksysguard/systemstats/SensorInfo.h>
#include "awdebug.h" #include "awdebug.h"
#include "extnetworkrequest.h" #include "extnetworkrequest.h"
@ -48,26 +45,30 @@ QVariant RequestSource::data(const QString &_source)
qCDebug(LOG_ESS) << "Source" << _source; qCDebug(LOG_ESS) << "Source" << _source;
int ind = index(_source); int ind = index(_source);
if (!m_values.contains(_source)) { auto service = _source;
service.remove("network/");
if (!m_values.contains(service)) {
QVariantHash data = m_extNetRequest->itemByTagNumber(ind)->run(); QVariantHash data = m_extNetRequest->itemByTagNumber(ind)->run();
for (auto &key : data.keys()) for (auto &key : data.keys())
m_values[key] = data[key]; m_values[key] = data[key];
} }
QVariant value = m_values.take(_source); QVariant value = m_values.take(service);
return value; return value;
} }
KSysGuard::SensorInfo *RequestSource::initialData(const QString &_source) const QVariantMap RequestSource::initialData(const QString &_source) const
{ {
qCDebug(LOG_ESS) << "Source" << _source; qCDebug(LOG_ESS) << "Source" << _source;
int ind = index(_source); int ind = index(_source);
auto data = new KSysGuard::SensorInfo(); QVariantMap data;
if (_source.startsWith("response")) { if (_source.startsWith("network/response")) {
data->name = QString("Network response for %1").arg(m_extNetRequest->itemByTagNumber(ind)->uniq()); data["min"] = "";
data->variantType = QVariant::String; data["max"] = "";
data->unit = KSysGuard::UnitNone; data["name"] = QString("Network response for %1").arg(m_extNetRequest->itemByTagNumber(ind)->uniq());
data["type"] = "QString";
data["units"] = "";
} }
return data; return data;
@ -84,7 +85,7 @@ QStringList RequestSource::getSources()
{ {
QStringList sources; QStringList sources;
for (auto &item : m_extNetRequest->activeItems()) for (auto &item : m_extNetRequest->activeItems())
sources.append(item->tag("response")); sources.append(QString("network/%1").arg(item->tag("response")));
return sources; return sources;
} }

View File

@ -34,7 +34,7 @@ public:
explicit RequestSource(QObject *_parent, const QStringList &_args); explicit RequestSource(QObject *_parent, const QStringList &_args);
~RequestSource() override; ~RequestSource() override;
QVariant data(const QString &_source) override; QVariant data(const QString &_source) override;
[[nodiscard]] KSysGuard::SensorInfo *initialData(const QString &_source) const override; [[nodiscard]] QVariantMap initialData(const QString &_source) const override;
void run() override{}; void run() override{};
[[nodiscard]] QStringList sources() const override; [[nodiscard]] QStringList sources() const override;

View File

@ -18,9 +18,6 @@
#include "systeminfosource.h" #include "systeminfosource.h"
#include <ksysguard/formatter/Unit.h>
#include <ksysguard/systemstats/SensorInfo.h>
#include <QDBusConnection> #include <QDBusConnection>
#include <QDBusMessage> #include <QDBusMessage>
#include <QDBusVariant> #include <QDBusVariant>
@ -54,23 +51,23 @@ QVariant SystemInfoSource::data(const QString &_source)
} }
KSysGuard::SensorInfo *SystemInfoSource::initialData(const QString &_source) const QVariantMap SystemInfoSource::initialData(const QString &_source) const
{ {
qCDebug(LOG_ESS) << "Source" << _source; qCDebug(LOG_ESS) << "Source" << _source;
auto data = new KSysGuard::SensorInfo(); QVariantMap data;
if (_source == "brightness") { if (_source == "system/brightness") {
data->min = 0.0; data["min"] = 0.0;
data->max = 100.0; data["max"] = 100.0;
data->name = "Screen brightness"; data["name"] = "Screen brightness";
data->variantType = QVariant::Double; data["type"] = "float";
data->unit = KSysGuard::UnitPercent; data["units"] = "%";
} else if (_source == "volume") { } else if (_source == "system/volume") {
data->min = 0.0; data["min"] = 0.0;
data->max = 100.0; data["max"] = 100.0;
data->name = "Master volume"; data["name"] = "Master volume";
data->variantType = QVariant::Double; data["type"] = "float";
data->unit = KSysGuard::UnitPercent; data["units"] = "%";
} }
return data; return data;
@ -79,16 +76,16 @@ KSysGuard::SensorInfo *SystemInfoSource::initialData(const QString &_source) con
void SystemInfoSource::run() void SystemInfoSource::run()
{ {
m_values["brightness"] = SystemInfoSource::getCurrentBrightness(); m_values["system/brightness"] = SystemInfoSource::getCurrentBrightness();
m_values["volume"] = SystemInfoSource::getCurrentVolume(); m_values["system/volume"] = SystemInfoSource::getCurrentVolume();
} }
QStringList SystemInfoSource::sources() const QStringList SystemInfoSource::sources() const
{ {
QStringList sources; QStringList sources;
sources.append("brightness"); sources.append("system/brightness");
sources.append("volume"); sources.append("system/volume");
return sources; return sources;
} }
@ -100,24 +97,24 @@ QVariant SystemInfoSource::fromDBusVariant(const QVariant &value)
} }
double SystemInfoSource::getCurrentBrightness() float SystemInfoSource::getCurrentBrightness()
{ {
qCDebug(LOG_ESS) << "Get current brightness"; qCDebug(LOG_ESS) << "Get current brightness";
auto maxBrightness auto maxBrightness
= sendDBusRequest("org.kde.Solid.PowerManagement", "/org/kde/Solid/PowerManagement/Actions/BrightnessControl", = sendDBusRequest("org.kde.Solid.PowerManagement", "/org/kde/Solid/PowerManagement/Actions/BrightnessControl",
"org.kde.Solid.PowerManagement.Actions.BrightnessControl", "brightnessMax") "org.kde.Solid.PowerManagement.Actions.BrightnessControl", "brightnessMax")
.toDouble(); .toFloat();
auto brightness auto brightness
= sendDBusRequest("org.kde.Solid.PowerManagement", "/org/kde/Solid/PowerManagement/Actions/BrightnessControl", = sendDBusRequest("org.kde.Solid.PowerManagement", "/org/kde/Solid/PowerManagement/Actions/BrightnessControl",
"org.kde.Solid.PowerManagement.Actions.BrightnessControl", "brightness") "org.kde.Solid.PowerManagement.Actions.BrightnessControl", "brightness")
.toDouble(); .toFloat();
return std::round(100.0 * brightness / maxBrightness); return std::round(100.0f * brightness / maxBrightness);
} }
double SystemInfoSource::getCurrentVolume() float SystemInfoSource::getCurrentVolume()
{ {
qCDebug(LOG_ESS) << "Get current volume"; qCDebug(LOG_ESS) << "Get current volume";
@ -129,7 +126,7 @@ double SystemInfoSource::getCurrentVolume()
if (currentMixer.isEmpty()) { if (currentMixer.isEmpty()) {
qCWarning(LOG_ESS) << "Mixer is empty"; qCWarning(LOG_ESS) << "Mixer is empty";
return std::numeric_limits<double>::quiet_NaN(); return std::numeric_limits<float>::quiet_NaN();
} }
currentMixer.replace(":", "_").replace(".", "_").replace("-", "_"); currentMixer.replace(":", "_").replace(".", "_").replace("-", "_");
@ -140,14 +137,14 @@ double SystemInfoSource::getCurrentVolume()
.toString(); .toString();
if (currentControl.isEmpty()) { if (currentControl.isEmpty()) {
qCWarning(LOG_ESS) << "Control is empty"; qCWarning(LOG_ESS) << "Control is empty";
return std::numeric_limits<double>::quiet_NaN(); return std::numeric_limits<float>::quiet_NaN();
} }
currentControl.replace(":", "_").replace(".", "_").replace("-", "_"); currentControl.replace(":", "_").replace(".", "_").replace("-", "_");
auto path = QString("/Mixers/%1/%2").arg(currentMixer).arg(currentControl); auto path = QString("/Mixers/%1/%2").arg(currentMixer).arg(currentControl);
return fromDBusVariant(sendDBusRequest("org.kde.kmix", path, "org.freedesktop.DBus.Properties", "Get", return fromDBusVariant(sendDBusRequest("org.kde.kmix", path, "org.freedesktop.DBus.Properties", "Get",
QVariantList({"org.kde.KMix.Control", "volume"}))) QVariantList({"org.kde.KMix.Control", "volume"})))
.toDouble(); .toFloat();
} }

View File

@ -31,7 +31,7 @@ public:
explicit SystemInfoSource(QObject *_parent, const QStringList &_args); explicit SystemInfoSource(QObject *_parent, const QStringList &_args);
~SystemInfoSource() override; ~SystemInfoSource() override;
QVariant data(const QString &_source) override; QVariant data(const QString &_source) override;
[[nodiscard]] KSysGuard::SensorInfo *initialData(const QString &_source) const override; [[nodiscard]] QVariantMap initialData(const QString &_source) const override;
void run() override; void run() override;
[[nodiscard]] QStringList sources() const override; [[nodiscard]] QStringList sources() const override;
@ -39,8 +39,8 @@ private:
// configuration and values // configuration and values
QVariantHash m_values; QVariantHash m_values;
static QVariant fromDBusVariant(const QVariant &value); static QVariant fromDBusVariant(const QVariant &value);
static double getCurrentBrightness(); static float getCurrentBrightness();
static double getCurrentVolume(); static float getCurrentVolume();
static QVariant sendDBusRequest(const QString &destination, const QString &path, const QString &interface, static QVariant sendDBusRequest(const QString &destination, const QString &path, const QString &interface,
const QString &method, const QVariantList &args = QVariantList()); const QString &method, const QVariantList &args = QVariantList());
}; };

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