Warning, /plasma/libksysguard/faces/ConfigAppearance.qml is written in an unsupported language. File is not indexed.

0001 /*
0002     SPDX-FileCopyrightText: 2019 Marco Martin <mart@kde.org>
0003     SPDX-FileCopyrightText: 2019 David Edmundson <davidedmundson@kde.org>
0004     SPDX-FileCopyrightText: 2019 Arjen Hiemstra <ahiemstra@heimr.nl>
0005 
0006     SPDX-License-Identifier: LGPL-2.0-or-later
0007 */
0008 
0009 import QtQuick 2.9
0010 import QtQuick.Layouts 1.2
0011 import QtQuick.Controls 2.2 as QQC2
0012 
0013 import org.kde.kirigami 2.5 as Kirigami
0014 import org.kde.kquickcontrols 2.0
0015 import org.kde.kconfig 1.0 // for KAuthorized
0016 import org.kde.newstuff 1.62 as NewStuff
0017 
0018 import org.kde.quickcharts 1.0 as Charts
0019 import org.kde.ksysguard.sensors 1.0 as Sensors
0020 import org.kde.ksysguard.faces 1.0 as Faces
0021 
0022 Kirigami.FormLayout {
0023     id: root
0024 
0025     signal configurationChanged
0026 
0027     function saveConfig() {
0028         controller.title = cfg_title;
0029         controller.faceId = cfg_chartFace;
0030         controller.showTitle = cfg_showTitle
0031         controller.updateRateLimit = cfg_updateRateLimit
0032 
0033         var preset = pendingPreset;
0034         pendingPreset = "";
0035         if (preset != "") {
0036             controller.loadPreset(preset);
0037             root.controller.highPrioritySensorColors = automaticColorSource.colors
0038         }
0039     }
0040 
0041     property Faces.SensorFaceController controller
0042     property alias cfg_title: titleField.text
0043     property alias cfg_showTitle: showTitleCheckbox.checked
0044     property string cfg_chartFace
0045     property alias cfg_updateRateLimit: updateRateLimitSpinBox.value
0046 
0047     onCfg_titleChanged: configurationChanged();
0048     onCfg_showTitleChanged: configurationChanged()
0049     onCfg_chartFaceChanged: configurationChanged();
0050     onCfg_updateRateLimitChanged: configurationChanged();
0051 
0052     // config keys of the selected preset to be applied on save
0053     property string pendingPreset
0054 
0055     Component.onCompleted: {
0056         cfg_title = controller.title;
0057         cfg_chartFace = controller.faceId;
0058         cfg_showTitle = controller.showTitle
0059         cfg_updateRateLimit = controller.updateRateLimit
0060     }
0061 
0062     Charts.ColorGradientSource {
0063         id: automaticColorSource
0064         baseColor: Kirigami.Theme.highlightColor
0065         itemCount: root.controller.highPrioritySensorIds.length
0066     }
0067 
0068     Kirigami.OverlaySheet {
0069         id: presetSheet
0070         parent: root
0071         ListView {
0072             implicitWidth: Kirigami.Units.gridUnit * 15
0073             focus: true
0074             model: controller.availablePresetsModel
0075             delegate: Kirigami.SwipeListItem {
0076                 contentItem: QQC2.Label {
0077                     Layout.fillWidth: true
0078                     text: model.display
0079                 }
0080                 actions: Kirigami.Action {
0081                     icon.name: "delete"
0082                     visible: model.writable
0083                     onTriggered: controller.uninstallPreset(model.pluginId);
0084                 }
0085                 onClicked: {
0086                     cfg_title = model.display;
0087                     pendingPreset = model.pluginId;
0088                     if (model.config.chartFace) {
0089                         cfg_chartFace = model.config.chartFace;
0090                     }
0091 
0092                     root.configurationChanged();
0093                     presetSheet.close();
0094                 }
0095 
0096                 // shortcut overrides can only be on the item with focus
0097                 Keys.onShortcutOverride: {
0098                     if (event.key === Qt.Key_Escape) {
0099                         event.accepted = true;
0100                         root.close();
0101                     }
0102                 }
0103             }
0104         }
0105     }
0106     RowLayout {
0107         Kirigami.FormData.label: i18nd("KSysGuardSensorFaces", "Presets:")
0108 
0109         QQC2.Button {
0110             icon.name: "document-open"
0111             text: i18nd("KSysGuardSensorFaces", "Load Preset...")
0112             onClicked: presetSheet.open()
0113         }
0114 
0115         NewStuff.Button {
0116             Accessible.name: i18nd("KSysGuardSensorFaces", "Get new presets...")
0117             configFile: "systemmonitor-presets.knsrc"
0118             text: ""
0119             onChangedEntriesChanged: controller.availablePresetsModel.reload();
0120             QQC2.ToolTip {
0121                 text: parent.Accessible.name
0122             }
0123         }
0124 
0125         QQC2.Button {
0126             id: saveButton
0127             icon.name: "document-save"
0128             text: i18nd("KSysGuardSensorFaces", "Save Settings As Preset")
0129             onClicked: controller.savePreset();
0130         }
0131     }
0132 
0133     Kirigami.Separator {
0134         Kirigami.FormData.isSection: true
0135     }
0136 
0137     RowLayout {
0138         Kirigami.FormData.label: i18nd("KSysGuardSensorFaces", "Title:")
0139         QQC2.TextField {
0140             id: titleField
0141         }
0142         QQC2.CheckBox {
0143             id: showTitleCheckbox
0144             text: i18nd("KSysGuardSensorFaces", "Show Title")
0145         }
0146     }
0147 
0148     RowLayout {
0149         Kirigami.FormData.label: i18nd("KSysGuardSensorFaces", "Display Style:")
0150         QQC2.ComboBox {
0151             id: faceCombo
0152             model: controller.availableFacesModel
0153             textRole: "display"
0154             currentIndex: {
0155                 // TODO just make an indexOf invocable on the model?
0156                 for (var i = 0; i < count; ++i) {
0157                     if (model.pluginId(i) === cfg_chartFace) {
0158                         return i;
0159                     }
0160                 }
0161                 return -1;
0162             }
0163             onActivated: {
0164                 cfg_chartFace = model.pluginId(index);
0165             }
0166         }
0167 
0168         NewStuff.Button {
0169             text: i18nd("KSysGuardSensorFaces", "Get New Display Styles...")
0170             configFile: "systemmonitor-faces.knsrc"
0171             onChangedEntriesChanged: controller.availableFacesModel.reload();
0172         }
0173     }
0174 
0175     QQC2.SpinBox {
0176         id: updateRateLimitSpinBox
0177         Layout.preferredWidth: titleField.implicitWidth
0178 
0179         Kirigami.FormData.label: i18nd("KSysGuardSensorFaces", "Minimum Time Between Updates:")
0180 
0181         from: 0
0182         to: 600000
0183         stepSize: 500
0184         editable: true
0185 
0186         textFromValue: function(value, locale) {
0187             if (value <= 0) {
0188                 return i18nd("KSysGuardSensorFaces", "No Limit");
0189             } else {
0190                 var seconds = value / 1000;
0191                 if (seconds == 1) { // Manual plural handling because i18ndp doesn't handle floats :(
0192                     return i18nd("KSysGuardSensorFaces", "1 second");
0193                 } else {
0194                     return i18nd("KSysGuardSensorFaces", "%1 seconds", seconds);
0195                 }
0196             }
0197         }
0198         valueFromText: function(value, locale) {
0199             // Don't use fromLocaleString here since it will error out on extra
0200             // characters like the (potentially translated) seconds that gets
0201             // added above. Instead parseInt ignores non-numeric characters.
0202             var v = parseInt(value)
0203             if (isNaN(v)) {
0204                 return 0;
0205             } else {
0206                 return v * 1000;
0207             }
0208         }
0209     }
0210 }