Warning, /plasma/libksysguard/faces/ConfigSensors.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 0010 import QtQuick.Layouts 0011 import QtQuick.Controls as QQC2 0012 import QtQml.Models 0013 0014 import Qt.labs.platform as Platform 0015 0016 import org.kde.kirigami as Kirigami 0017 import org.kde.kquickcontrols 0018 0019 import org.kde.kitemmodels as KItemModels 0020 0021 import org.kde.quickcharts as Charts 0022 import org.kde.ksysguard.sensors as Sensors 0023 import org.kde.ksysguard.faces as Faces 0024 0025 import "./" as Local 0026 0027 ColumnLayout { 0028 id: root 0029 0030 signal configurationChanged 0031 0032 property var cfg_totalSensors: [] 0033 property var cfg_highPrioritySensorIds: [] 0034 property var cfg_sensorColors: new Object() 0035 property var cfg_lowPrioritySensorIds: [] 0036 property var cfg_sensorLabels: new Object() 0037 0038 onCfg_totalSensorsChanged: configurationChanged(); 0039 onCfg_highPrioritySensorIdsChanged: configurationChanged(); 0040 onCfg_sensorColorsChanged: configurationChanged(); 0041 onCfg_lowPrioritySensorIdsChanged: configurationChanged(); 0042 onCfg_sensorLabelsChanged: configurationChanged(); 0043 0044 property Faces.SensorFaceController controller 0045 0046 // In QML someArray = someOtherArray will always trigger a changed signal 0047 // even if the two arrays are the same 0048 // to avoid that we implement an explicit check 0049 function arrayCompare(array1, array2) { 0050 if (array1.length !== array2.length) { 0051 return false; 0052 } 0053 return array1.every(function(value, index) { return value === array2[index]}); 0054 } 0055 0056 function saveConfig() { 0057 controller.totalSensors = cfg_totalSensors; 0058 controller.highPrioritySensorIds = cfg_highPrioritySensorIds; 0059 controller.sensorColors = cfg_sensorColors; 0060 controller.lowPrioritySensorIds = cfg_lowPrioritySensorIds; 0061 controller.sensorLabels = cfg_sensorLabels; 0062 } 0063 0064 function loadConfig() { 0065 if (!arrayCompare(cfg_totalSensors, controller.totalSensors)) { 0066 cfg_totalSensors = controller.totalSensors; 0067 totalChoice.selected = controller.totalSensors; 0068 } 0069 0070 if (!arrayCompare(cfg_highPrioritySensorIds, controller.highPrioritySensorIds)) { 0071 cfg_highPrioritySensorIds = controller.highPrioritySensorIds; 0072 highPriorityChoice.selected = controller.highPrioritySensorIds; 0073 } 0074 0075 if(JSON.stringify(cfg_sensorColors) != JSON.stringify(controller.sensorColors)) { 0076 cfg_sensorColors = controller.sensorColors; 0077 } 0078 0079 if (!arrayCompare(cfg_lowPrioritySensorIds, controller.lowPrioritySensorIds)) { 0080 cfg_lowPrioritySensorIds = controller.lowPrioritySensorIds; 0081 lowPriorityChoice.selected = controller.lowPrioritySensorIds; 0082 } 0083 if(JSON.stringify(cfg_sensorLabels) != JSON.stringify(controller.sensorLabels)) { 0084 cfg_sensorLabels = controller.sensorLabels; 0085 } 0086 } 0087 0088 // When the ui is open in systemsettings and the page is switched around, 0089 // it gets reparented to null. use this to reload its config every time the 0090 // page is current again. So any non saved change to the sensor list gets forgotten. 0091 onParentChanged: { 0092 if (parent) { 0093 loadConfig() 0094 } 0095 } 0096 0097 Component.onCompleted: loadConfig() 0098 0099 Connections { 0100 target: controller 0101 function onTotalSensorsChanged() { 0102 Qt.callLater(root.loadConfig); 0103 } 0104 function onHighPrioritySensorIdsChanged() { 0105 Qt.callLater(root.loadConfig); 0106 } 0107 function onSensorColorsChanged() { 0108 Qt.callLater(root.loadConfig); 0109 } 0110 function onLowPrioritySensorIdsChanged() { 0111 Qt.callLater(root.loadConfig); 0112 } 0113 function onSensorLabelsChanged() { 0114 Qt.callLater(root.loadConfig); 0115 } 0116 } 0117 0118 Platform.ColorDialog { 0119 id: colorDialog 0120 property string destinationSensor 0121 0122 currentColor: destinationSensor != "" ? controller.sensorColors[destinationSensor] : "" 0123 onAccepted: { 0124 cfg_sensorColors[destinationSensor] = Qt.rgba(color.r, color.g, color.b, color.a); 0125 root.cfg_sensorColorsChanged(); 0126 } 0127 } 0128 0129 0130 QQC2.Label { 0131 text: i18ndp("KSysGuardSensorFaces", "Total Sensor", "Total Sensors", controller.maxTotalSensors) 0132 visible: controller.supportsTotalSensors 0133 } 0134 Faces.Choices { 0135 id: totalChoice 0136 Layout.fillWidth: true 0137 visible: controller.supportsTotalSensors 0138 supportsColors: false 0139 maxAllowedSensors: controller.maxTotalSensors 0140 labels: root.cfg_sensorLabels 0141 0142 onSelectedChanged: root.cfg_totalSensors = selected 0143 onSensorLabelChanged: (sensorId, label) => { 0144 cfg_sensorLabels[sensorId] = label 0145 root.cfg_sensorLabelsChanged() 0146 } 0147 } 0148 0149 QQC2.Label { 0150 text: i18nd("KSysGuardSensorFaces", "Sensors") 0151 } 0152 Faces.Choices { 0153 id: highPriorityChoice 0154 Layout.fillWidth: true 0155 supportsColors: controller.supportsSensorsColors 0156 labels: root.cfg_sensorLabels 0157 0158 onSelectedChanged: root.cfg_highPrioritySensorIds = selected 0159 0160 colors: root.cfg_sensorColors 0161 onSelectColor: sensorId => { 0162 colorDialog.destinationSensor = sensorId 0163 colorDialog.open() 0164 } 0165 onColorForSensorGenerated: (sensorId, color) => { 0166 cfg_sensorColors[sensorId] = color 0167 root.cfg_sensorColorsChanged(); 0168 } 0169 onSensorLabelChanged: (sensorId, label) => { 0170 cfg_sensorLabels[sensorId] = label 0171 root.cfg_sensorLabelsChanged() 0172 } 0173 } 0174 0175 QQC2.Label { 0176 text: i18nd("KSysGuardSensorFaces", "Text-Only Sensors") 0177 visible: controller.supportsLowPrioritySensors 0178 } 0179 Faces.Choices { 0180 id: lowPriorityChoice 0181 Layout.fillWidth: true 0182 visible: controller.supportsLowPrioritySensors 0183 supportsColors: false 0184 labels: root.cfg_sensorLabels 0185 0186 onSelectedChanged: root.cfg_lowPrioritySensorIds = selected 0187 onSensorLabelChanged: (sensorId, label) => { 0188 cfg_sensorLabels[sensorId] = label 0189 root.cfg_sensorLabelsChanged() 0190 } 0191 } 0192 0193 Item { 0194 Layout.fillHeight: true 0195 } 0196 }