Warning, /plasma/libksysguard/faces/facepackages/textonly/contents/ui/GroupedText.qml is written in an unsupported language. File is not indexed.
0001 /* 0002 SPDX-FileCopyrightText: 2020 Arjen Hiemstra <ahiemstra@heimr.nl> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 import QtQuick 0008 import QtQuick.Layouts 0009 0010 import org.kde.kirigami as Kirigami 0011 import org.kde.quickcharts as Charts 0012 import org.kde.quickcharts.controls as ChartsControls 0013 import org.kde.ksysguard.sensors as Sensors 0014 import org.kde.ksysguard.formatter as Formatter 0015 0016 ColumnLayout { 0017 id: root 0018 0019 property var totalSensorIds 0020 property var highPrioritySensorIds 0021 property var lowPrioritySensorIds 0022 property bool showGroups: false 0023 property var colorSource 0024 property real totalHeight 0025 property int updateRateLimit 0026 property var sensorLabels 0027 0028 readonly property real contentWidth: { 0029 let w = 0 0030 for (let i in children) { 0031 let child = children[i] 0032 if (child.hasOwnProperty("preferredWidth")) { 0033 w = Math.max(w, child.preferredWidth) 0034 } 0035 } 0036 return w 0037 } 0038 0039 readonly property bool hasGroups: showGroups && root.totalSensorIds.length > 0 0040 0041 Layout.minimumHeight: hasGroups ? Kirigami.Units.gridUnit * 3 : Kirigami.Units.gridUnit 0042 0043 Repeater { 0044 model: root.hasGroups ? root.totalSensorIds : 1 0045 0046 ColumnLayout { 0047 property string title 0048 property var sensors: [] 0049 property bool useFullName: true 0050 property var colorSource 0051 0052 readonly property alias preferredWidth: legend.preferredWidth 0053 0054 Kirigami.Heading { 0055 Layout.fillWidth: true 0056 text: groupSensor.formattedValue 0057 level: 3 0058 horizontalAlignment: Text.AlignLeft 0059 opacity: (root.y + parent.y + y + height) < root.totalHeight ? 1 : 0 0060 visible: text.length > 0 0061 elide: Text.ElideRight 0062 } 0063 0064 ChartsControls.Legend { 0065 id: legend 0066 0067 Layout.fillWidth: true 0068 Layout.fillHeight: true 0069 Layout.maximumHeight: implicitHeight 0070 Layout.alignment: Qt.AlignVCenter | Qt.AlignHCenter 0071 0072 horizontalSpacing: Kirigami.Units.gridUnit 0073 verticalSpacing: Kirigami.Units.smallSpacing 0074 0075 model: { 0076 if (!root.hasGroups) { 0077 return root.highPrioritySensors.concat(root.lowPrioritySensors) 0078 } 0079 0080 let result = [] 0081 for (let i = 0; i < root.highPrioritySensors.length; ++i) { 0082 if (root.highPrioritySensors[i].name.startsWith(groupSensor.value)) { 0083 result.push(root.highPrioritySensors[i]) 0084 } 0085 } 0086 for (let i = 0; i < root.lowPrioritySensors.length; ++i) { 0087 if (root.lowPrioritySensors[i].name.startsWith(groupSensor.value)) { 0088 result.push(root.lowPrioritySensors[i]) 0089 } 0090 } 0091 return result 0092 } 0093 0094 delegate: ChartsControls.LegendDelegate { 0095 name: root.sensorLabels[modelData.sensorId] || (root.showGroups ? modelData.shortName : modelData.name) 0096 shortName: root.sensorLabels[modelData.sensorId] || modelData.shortName 0097 value: modelData.formattedValue 0098 color: root.colorSource.map[modelData.sensorId] 0099 0100 maximumValueWidth: { 0101 var unit = modelData.unit 0102 return Formatter.Formatter.maximumLength(unit, legend.font) 0103 } 0104 0105 ChartsControls.LegendLayout.minimumWidth: minimumWidth 0106 ChartsControls.LegendLayout.preferredWidth: preferredWidth 0107 ChartsControls.LegendLayout.maximumWidth: Math.max(preferredWidth, Kirigami.Units.gridUnit * 17) 0108 } 0109 } 0110 0111 Sensors.Sensor { 0112 id: groupSensor 0113 sensorId: root.hasGroups ? modelData : "" 0114 updateRateLimit: root.updateRateLimit 0115 } 0116 } 0117 } 0118 0119 property var highPrioritySensors: [] 0120 property var lowPrioritySensors: [] 0121 0122 Instantiator { 0123 model: root.highPrioritySensorIds 0124 0125 Sensors.Sensor { sensorId: modelData; updateRateLimit: root.updateRateLimit } 0126 0127 onObjectAdded: (index, object) => { 0128 root.highPrioritySensors.push(object) 0129 root.highPrioritySensors = root.highPrioritySensors 0130 } 0131 onObjectRemoved: (index, object) => { 0132 root.highPrioritySensors.splice(root.highPrioritySensors.indexOf(object), 1) 0133 root.highPrioritySensors = root.highPrioritySensors 0134 } 0135 } 0136 0137 Instantiator { 0138 model: root.lowPrioritySensorIds 0139 0140 Sensors.Sensor { sensorId: modelData; updateRateLimit: root.updateRateLimit } 0141 0142 onObjectAdded: (index, object) => { 0143 root.lowPrioritySensors.push(object) 0144 root.lowPrioritySensors = root.lowPrioritySensors 0145 } 0146 onObjectRemoved: (index, object) => { 0147 root.lowPrioritySensors.splice(root.lowPrioritySensors.indexOf(object), 1) 0148 root.lowPrioritySensors = root.lowPrioritySensors 0149 } 0150 } 0151 }