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 }