Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- diff --git a/applets/sensorchart/CMakeLists.txt b/applets/sensorchart/CMakeLists.txt
- index bdb5dc2b..001387a6 100644
- --- a/applets/sensorchart/CMakeLists.txt
- +++ b/applets/sensorchart/CMakeLists.txt
- @@ -10,12 +10,14 @@ kcoreaddons_desktop_to_json(plasma_applet_ksysguard_sensorchart package/metadata
- target_link_libraries(plasma_applet_ksysguard_sensorchart
- Qt5::Gui
- Qt5::Qml
- + Qt5::DBus
- KF5::Plasma
- KF5::Package
- KF5::I18n
- KF5::ConfigCore
- KF5::ConfigGui
- KF5::Declarative
- + KF5::SysGuard2
- )
- diff --git a/applets/sensorchart/package/contents/config/main.xml b/applets/sensorchart/package/contents/config/main.xml
- index fbe10d67..13ca0fc8 100644
- --- a/applets/sensorchart/package/contents/config/main.xml
- +++ b/applets/sensorchart/package/contents/config/main.xml
- @@ -20,14 +20,12 @@
- <group name="Sensors">
- <entry name="totalSensor" type="String">
- - <default>mem/physical/used</default>
- </entry>
- <entry name="sensorIds" type="StringList">
- - <default>mem/physical/application,mem/physical/buf,mem/physical/cached,mem/physical/free</default>
- </entry>
- <entry name="sensorColors" type="StringList"/>
- - <entry name="textOnlySensorsIds" type="StringList"/>
- + <entry name="textOnlySensorIds" type="StringList"/>
- </group>
- </kcfg>
- diff --git a/applets/sensorchart/package/contents/ui/components/ExtendedLegend.qml b/applets/sensorchart/package/contents/ui/components/ExtendedLegend.qml
- index cea59836..4ebc8647 100644
- --- a/applets/sensorchart/package/contents/ui/components/ExtendedLegend.qml
- +++ b/applets/sensorchart/package/contents/ui/components/ExtendedLegend.qml
- @@ -41,7 +41,7 @@ Legend {
- Repeater {
- id: textOnlySesnsorsRepeater
- //FIXME: don't bind to plasmoid here, but make this a top-level property for this component
- - model: plasmoid.configuration.textOnlySensorsIds
- + model: plasmoid.configuration.textOnlySensorIds
- delegate: LegendDelegate {
- sensorName: sensor.name
- color: "transparent"
- diff --git a/applets/sensorchart/package/contents/ui/config/ConfigAppearance.qml b/applets/sensorchart/package/contents/ui/config/ConfigAppearance.qml
- index 0b5b1aeb..813ae2bf 100644
- --- a/applets/sensorchart/package/contents/ui/config/ConfigAppearance.qml
- +++ b/applets/sensorchart/package/contents/ui/config/ConfigAppearance.qml
- @@ -39,117 +39,16 @@ Kirigami.FormLayout {
- property string cfg_chartFace
- // config keys of the selected preset to be applied on save
- - property var pendingPresetConfig
- -
- - function matchSensorIdsInModel(model, parent, regExp) {
- - var matches = [];
- -
- - var count = model.rowCount(parent);
- - for (var i = 0; i < count; ++i) {
- - var idx = model.index(i, 0, parent);
- - var sensorId = model.data(idx, KSGRD.SensorTreeModel.SensorId);
- -
- - if (regExp.test(sensorId)) {
- - matches.push(sensorId);
- - }
- -
- - if (model.rowCount(idx) > 0) {
- - Array.prototype.push.apply(matches, matchSensorIdsInModel(model, idx, regExp));
- - }
- - }
- -
- - return matches;
- - }
- -
- - function expandSensorWildcards(value) {
- - value = value.map(function (item) {
- - if (!item.includes("*")) {
- - return [item];
- - }
- -
- - // A RegExp that only allows wildcards * in the source string
- - var regExp = new RegExp("^" + item.split("*").map(function (str) {
- - return str.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1");
- - }).join(".*") + "$");
- -
- - var matches = [];
- - Array.prototype.push.apply(matches,
- - matchSensorIdsInModel(sensorTreeModel,
- - sensorTreeModel.index(-1, -1) /*invalid index (root) */,
- - regExp));
- - return matches;
- - });
- -
- - // Array.flat() is ES7 which Qt doesn't support :(
- - value = value.reduce(function (acc, cur) {
- - if (Array.isArray(cur)) {
- - Array.prototype.push.apply(acc, cur);
- - } else {
- - acc.push(cur);
- - }
- - return acc;
- - }, []);
- -
- - return value;
- - }
- -
- - function applyPresetConfigValue(presetConfig, targetConfig, key) {
- - var value = presetConfig[key];
- -
- - switch (typeof targetConfig[key]) {
- - case "undefined":
- - // there is no "hasOwnProperty" on QQmlPropertyMap
- - break;
- - case "boolean":
- - targetConfig[key] = (value === "true");
- - break;
- - case "number":
- - targetConfig[key] = Number(value);
- - break;
- - case "object":
- - // Check if it's an Array. Array.isArray doesn't work but .constructor == Array does...
- - if (targetConfig[key].constructor === Array) {
- - value = value.split(",")
- - .filter(item => !!item); // "SkipEmptyParts"
- -
- - if (key === "sensorIds" || key === "textOnlySensorsIds") {
- - value = expandSensorWildcards(value);
- - }
- - }
- -
- - targetConfig[key] = value;
- - break;
- - // Should we convert "number" and the like explicitly or will that implicitly cast on assignment?
- - default:
- - targetConfig[key] = value;
- - break;
- - }
- - }
- + property string pendingPreset
- function saveConfig() {
- - var config = pendingPresetConfig;
- - pendingPresetConfig = undefined;
- - if (config) {
- - // Reset the sensors and colors, too
- - plasmoid.configuration.sensorIds = [];
- - plasmoid.configuration.sensorColors = [];
- - // TODO what about if it doesn't specify rangeAuto and rangeFrom/rangeTo? Initialize with defaults?
- -
- - for (var key in config) {
- - var value = config[key];
- -
- - applyPresetConfigValue(config, plasmoid.configuration, key);
- - applyPresetConfigValue(config, plasmoid.nativeInterface.faceConfiguration, key);
- - }
- + var preset = pendingPreset;
- + pendingPreset = "";
- + if (preset != "") {
- + plasmoid.nativeInterface.loadPreset(preset);
- }
- }
- - // For preset wildcard support
- - // TODO create on demand?
- - KSGRD.SensorTreeModel {
- - id: sensorTreeModel
- - }
- -
- Controls.TextField {
- id: titleField
- Kirigami.FormData.label: i18n("Title:")
- @@ -210,7 +109,9 @@ Kirigami.FormLayout {
- cfg_title = presetsModel.data(idx, /* DisplayRole */) || "";
- - pendingPresetConfig = presetsModel.data(idx, Qt.UserRole + 2); // FIXME proper enum
- + var pendingPresetConfig = presetsModel.data(idx, Qt.UserRole + 2); // FIXME proper enum
- + print(presetsModel.data(idx, Qt.UserRole + 1))
- + pendingPreset = presetsModel.data(idx, Qt.UserRole + 1); // FIXME proper enum
- if (pendingPresetConfig.chartFace) {
- cfg_chartFace = pendingPresetConfig.chartFace;
- }
- diff --git a/applets/sensorchart/package/contents/ui/config/ConfigSensors.qml b/applets/sensorchart/package/contents/ui/config/ConfigSensors.qml
- index 80c32a81..b862ba50 100644
- --- a/applets/sensorchart/package/contents/ui/config/ConfigSensors.qml
- +++ b/applets/sensorchart/package/contents/ui/config/ConfigSensors.qml
- @@ -38,7 +38,7 @@ ColumnLayout {
- property alias cfg_sensorIds: usedSensorsView.sensorIds
- property alias cfg_sensorColors: usedSensorsView.sensorColors
- - property alias cfg_textOnlySensorsIds: textOnlySensorsView.sensorIds
- + property alias cfg_textOnlySensorIds: textOnlySensorsView.sensorIds
- KSGRD.Sensor {
- id: totalSensor
- diff --git a/applets/sensorchart/presets/IndividualCoreUsage.sensorchartpresetrc b/applets/sensorchart/presets/IndividualCoreUsage.sensorchartpresetrc
- index acc778b4..335fb5cb 100644
- --- a/applets/sensorchart/presets/IndividualCoreUsage.sensorchartpresetrc
- +++ b/applets/sensorchart/presets/IndividualCoreUsage.sensorchartpresetrc
- @@ -3,9 +3,12 @@ Name=Individual Core Usage
- Name[de]=Einzelne Prozessorkernbelastung
- [Config]
- +chartFace=org.kde.ksysguard.barchart
- sensorIds=cpu/cpu*/TotalLoad
- totalSensor=cpu/system/TotalLoad
- -textOnlySensorsIds=cpu/system/loadavg1,cpu/system/loadavg5
- +textOnlySensorIds=cpu/system/loadavg1,cpu/system/loadavg5
- +
- +[FaceConfig]
- rangeAuto=false
- rangeFrom=0
- rangeTo=100
- diff --git a/applets/sensorchart/presets/MemoryUsage.sensorchartpresetrc b/applets/sensorchart/presets/MemoryUsage.sensorchartpresetrc
- index cb7c4a77..1620322d 100644
- --- a/applets/sensorchart/presets/MemoryUsage.sensorchartpresetrc
- +++ b/applets/sensorchart/presets/MemoryUsage.sensorchartpresetrc
- @@ -3,9 +3,12 @@ Name=Memory Usage
- Name[de]=Speicherverwendung
- [Config]
- +chartFace=org.kde.ksysguard.piechart
- sensorIds=mem/physical/application,mem/physical/buf,mem/physical/cached,mem/physical/free
- totalSensor=mem/physical/used
- -textOnlySensorsIds=
- +textOnlySensorIds=
- +
- +[FaceConfig]
- rangeAuto=true
- rangeFrom=0
- rangeTo=100
- diff --git a/applets/sensorchart/presets/ProcessTable.sensorchartpresetrc b/applets/sensorchart/presets/ProcessTable.sensorchartpresetrc
- index 8529297d..ebbf0205 100644
- --- a/applets/sensorchart/presets/ProcessTable.sensorchartpresetrc
- +++ b/applets/sensorchart/presets/ProcessTable.sensorchartpresetrc
- @@ -4,11 +4,9 @@ Name[de]=Prozesstabelle
- [Config]
- chartFace=org.kde.ksysguard.table
- -showTableHeaders=true
- -
- sensorIds=process/name,process/pid,process/username,process/usage,process/vmShared,process/command
- totalSensor=
- -textOnlySensorsIds=
- -#rangeAuto=true
- -#rangeFrom=0
- -#rangeTo=100
- +textOnlySensorIds=
- +
- +[FaceConfig]
- +showTableHeaders=true
- diff --git a/applets/sensorchart/presets/TotalCpuUsage.sensorchartpresetrc b/applets/sensorchart/presets/TotalCpuUsage.sensorchartpresetrc
- index 9604505a..dcd23d0e 100644
- --- a/applets/sensorchart/presets/TotalCpuUsage.sensorchartpresetrc
- +++ b/applets/sensorchart/presets/TotalCpuUsage.sensorchartpresetrc
- @@ -3,9 +3,12 @@ Name=Total CPU Use
- Name[de]=Gesamte Prozessorauslastung
- [Config]
- +chartFace=org.kde.ksysguard.piechart
- sensorIds=cpu/system/TotalLoad
- totalSensor=cpu/system/TotalLoad
- -textOnlySensorsIds=
- +textOnlySensorIds=
- +
- +[FaceConfig]
- rangeAuto=false
- rangeFrom=0
- rangeTo=100
- diff --git a/applets/sensorchart/sensorchart.cpp b/applets/sensorchart/sensorchart.cpp
- index ec1f5842..6214a088 100644
- --- a/applets/sensorchart/sensorchart.cpp
- +++ b/applets/sensorchart/sensorchart.cpp
- @@ -24,6 +24,8 @@
- #include <QDebug>
- #include <QStandardPaths>
- +#include <ksgrd2/SensorManager.h>
- +
- #include <KConfigLoader>
- #include <KPackage/PackageLoader>
- #include <KDeclarative/ConfigPropertyMap>
- @@ -73,6 +75,17 @@ SensorChart::SensorChart(QObject *parent, const QVariantList &args)
- KPackage::PackageLoader::self()->addKnownPackageStructure("Plasma/SensorApplet", new SensorAppletPackage(this));
- m_facePackage = KPackage::PackageLoader::self()->loadPackage(QStringLiteral("Plasma/SensorApplet"));
- +
- + if (args.count() > 2 && args.mid(3).length() > 0) {
- + const QString preset = args.mid(3).first().toString();
- + if (preset.length() > 0) {
- + loadPreset(preset);
- + } else {
- + loadPreset(QStringLiteral("MemoryUsage"));
- + }
- + } else {
- + loadPreset(QStringLiteral("MemoryUsage"));
- + }
- }
- SensorChart::~SensorChart()
- @@ -113,14 +126,14 @@ void SensorChart::setFace(const QString &face)
- QFile file(xmlPath);
- KConfigGroup cg = config();
- cg = KConfigGroup(&cg, face);
- - if (m_configuration) {
- - m_configuration->deleteLater();
- + if (m_faceConfiguration) {
- + m_faceConfiguration->deleteLater();
- }
- - if (m_configLoader) {
- - m_configLoader->deleteLater();
- + if (m_faceConfigLoader) {
- + m_faceConfigLoader->deleteLater();
- }
- - m_configLoader = new KConfigLoader(cg, &file, this);
- - m_configuration = new KDeclarative::ConfigPropertyMap(m_configLoader, this);
- + m_faceConfigLoader = new KConfigLoader(cg, &file, this);
- + m_faceConfiguration = new KDeclarative::ConfigPropertyMap(m_faceConfigLoader, this);
- }
- emit faceChanged();
- @@ -147,6 +160,92 @@ QString SensorChart::faceIcon() const
- return m_faceMetadata->readIcon();
- }
- +void SensorChart::loadPreset(const QString &preset)
- +{
- + qWarning() << "AAAAAALOADING" << preset;
- + const auto presetDirs = QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, QStringLiteral("ksysguard/sensorchart-presets"), QStandardPaths::LocateDirectory);
- +
- + for (const QString &presetDirPath : presetDirs) {
- + const QString path = presetDirPath + QStringLiteral("/") + preset + QStringLiteral(".sensorchartpresetrc");
- + if (!QFile::exists(path)) {
- + continue;
- + }
- +
- + KDesktopFile df(path);
- + KConfigGroup configGroup(df.group("Config"));
- +
- + // Load the title
- + KConfigSkeletonItem *item = configScheme()->findItemByName(QStringLiteral("title"));
- + if (item) {
- + item->setProperty(df.readName());
- + configScheme()->save();
- + //why read? read will update KConfigSkeletonItem::mLoadedValue,
- + //allowing a write operation to be performed next time
- + configScheme()->read();
- + }
- +
- + // Load the global config keys
- + for (const QString &key : configGroup.keyList()) {
- + KConfigSkeletonItem *item = configScheme()->findItemByName(key);
- +
- + if (item) {
- + if (item->property().type() == QVariant::StringList) {
- + // Special case: sensor ids or textOnlySensorIds can have wildchars that need to be expanded
- + if (key == "sensorIds" || key == "textOnlySensorIds") {
- + const QStringList partialEntries = configGroup.readEntry(key, QStringList());
- + QStringList sensors;
- +
- + KSGRD2::SensorManager manager;
- + const QStringList allSensors = manager.availableSensors().keys();
- + for (const QString &id : partialEntries) {
- + if (id.contains(QLatin1Char('*'))) {
- + QString copy = id;
- + QRegularExpression regExp(copy.replace(QLatin1Char('*'), QStringLiteral(".+")));
- + for (const auto &sensor : manager.availableSensors().keys()) {
- + if (regExp.match(sensor).hasMatch()) {
- + sensors << sensor;
- + }
- + }
- + } else {
- + sensors << id;
- + }
- + }
- + item->setProperty(QVariant::fromValue(sensors));
- + } else {
- + item->setProperty(QVariant::fromValue(configGroup.readEntry(key, QStringList())));
- + }
- + } else {
- + const QString &value = configGroup.readEntry(key);
- + if (key == QStringLiteral("chartFace") && value.length() > 0) {
- + setFace(value);
- + }
- + qWarning()<<"scroto"<<key<<value;
- + item->setProperty(value);
- + }
- + configScheme()->save();
- + //why read? read will update KConfigSkeletonItem::mLoadedValue,
- + //allowing a write operation to be performed next time
- + configScheme()->read();
- + }
- + }
- +
- + configGroup = KConfigGroup(df.group("FaceConfig"));
- + for (const QString &key : configGroup.keyList()) {
- +qWarning()<<"EEE"<<key.toLatin1()<<configGroup.readEntry(key);
- + KConfigSkeletonItem *item = m_faceConfigLoader->findItemByName(key);
- + if (item) {
- + if (item->property().type() == QVariant::StringList) {
- + item->setProperty(configGroup.readEntry(key, QStringList()));
- + } else {
- + item->setProperty(configGroup.readEntry(key));
- + }
- + m_faceConfigLoader->save();
- + m_faceConfigLoader->read();
- + }
- + }
- + }
- +}
- +
- QString SensorChart::compactRepresentationPath() const
- {
- return m_facePackage.filePath("CompactRepresentation");
- @@ -242,6 +341,7 @@ QAbstractItemModel *SensorChart::availablePresetsModel()
- config.insert(key, configGroup.readEntry(key));
- }
- + item->setData(presetInfo.baseName(), PresetsModel::PluginIdRole);
- item->setData(config, PresetsModel::ConfigRole);
- m_availablePresetsModel->appendRow(item);
- @@ -253,7 +353,7 @@ QAbstractItemModel *SensorChart::availablePresetsModel()
- QObject *SensorChart::faceConfiguration() const
- {
- - return m_configuration;
- + return m_faceConfiguration;
- }
- K_EXPORT_PLASMA_APPLET_WITH_JSON(sensorchart, SensorChart, "metadata.json")
- diff --git a/applets/sensorchart/sensorchart.h b/applets/sensorchart/sensorchart.h
- index 812eefb6..b80521e9 100644
- --- a/applets/sensorchart/sensorchart.h
- +++ b/applets/sensorchart/sensorchart.h
- @@ -107,6 +107,8 @@ public:
- QString faceName() const;
- QString faceIcon() const;
- + Q_INVOKABLE void loadPreset(const QString &preset);
- +
- QString compactRepresentationPath() const;
- QString fullRepresentationPath() const;
- QString configPath() const;
- @@ -132,7 +134,7 @@ private:
- KDesktopFile *m_faceMetadata = nullptr;
- FacesModel *m_availableFacesModel = nullptr;
- PresetsModel *m_availablePresetsModel = nullptr;
- - KConfigLoader *m_configLoader = nullptr;
- - KDeclarative::ConfigPropertyMap *m_configuration = nullptr;
- + KConfigLoader *m_faceConfigLoader = nullptr;
- + KDeclarative::ConfigPropertyMap *m_faceConfiguration = nullptr;
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement