Warning, /plasma/libksysguard/faces/import/ExtendedLegend.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     SPDX-FileCopyrightText: 2019 Kai Uwe Broulik <kde@broulik.de>
0006 
0007     SPDX-License-Identifier: LGPL-2.0-or-later
0008 */
0009 
0010 import QtQuick
0011 import QtQuick.Layouts
0012 
0013 import org.kde.kirigami as Kirigami
0014 
0015 import org.kde.ksysguard.faces.private
0016 import org.kde.ksysguard.formatter
0017 import org.kde.ksysguard.sensors
0018 
0019 import org.kde.quickcharts as Charts
0020 import org.kde.quickcharts.controls as ChartsControls
0021 
0022 /**
0023  * A legend control to be used in faces based on org.kde.quickcharts.Controls.Legend.
0024  * It handles
0025  * layouting and display of information depending on the available space. By default the current
0026  * value of a sensor and its name are displayed, if it is shrunk the shortName is displayed instead.
0027  *
0028  * @since 5.19
0029  */
0030 ChartsControls.Legend {
0031     id: legend
0032 
0033     /**
0034      * A list of sensor ids that should be displayed in addition to those from sourceModel. Typically
0035      * set to lowPrioritySensorIds from FaceController
0036      */
0037     property alias sensorIds: sensorsRepeater.model
0038     /**
0039      * The SensorDataModel that should be used to retrieve data about the sensors.
0040      */
0041     property SensorDataModel sourceModel
0042     /**
0043      * @deprecated since 5.21
0044      * Has no effect
0045      */
0046     property var colorSource
0047 
0048     property int updateRateLimit
0049 
0050     Layout.maximumHeight: implicitHeight
0051     Layout.maximumWidth: parent.width
0052 
0053     horizontalSpacing: Kirigami.Units.gridUnit
0054     verticalSpacing: Kirigami.Units.smallSpacing
0055 
0056     maximumDelegateWidth: Kirigami.Units.gridUnit * 15
0057 
0058     formatValue: function(input, index) {
0059         if (!sourceModel) {
0060             return input
0061         }
0062 
0063         return Formatter.formatValueShowNull(input, sourceModel.headerData(index, Qt.Horiztonal, SensorDataModel.Unit))
0064     }
0065 
0066     Binding on model {
0067         when: !chart
0068         value: QTransposeProxyModel {
0069             sourceModel: legend.sourceModel
0070         }
0071     }
0072     Binding on valueRole {
0073         when: !chart
0074         value: "Value"
0075     }
0076     Binding on nameRole {
0077         when: !chart
0078         value: "Name"
0079     }
0080     Binding on shortNameRole {
0081         when: !chart
0082         value: "ShortName"
0083     }
0084     Binding on colorRole {
0085         when: !chart
0086         value: "Color"
0087     }
0088 
0089     maximumValueWidth: function(input, index) {
0090         if (!sourceModel) {
0091             return -1
0092         }
0093 
0094         var unit = sourceModel.headerData(index, Qt.Horiztonal, SensorDataModel.Unit)
0095         return Formatter.maximumLength(unit, legend.font)
0096     }
0097 
0098     Repeater {
0099         id: sensorsRepeater
0100         delegate: ChartsControls.LegendDelegate {
0101             name: legend.sourceModel.sensorLabels[sensor.sensorId] || sensor.name
0102             shortName: legend.sourceModel.sensorLabels[sensor.sensorId] || sensor.shortName
0103             value: sensor.formattedValue || ""
0104 
0105             indicator: Item { }
0106 
0107             maximumValueWidth: legend.maximumValueWidth(sensor.value, index)
0108 
0109             ChartsControls.LegendLayout.minimumWidth: minimumWidth
0110             ChartsControls.LegendLayout.preferredWidth: preferredWidth
0111             ChartsControls.LegendLayout.maximumWidth: Math.max(legend.maximumDelegateWidth, preferredWidth)
0112 
0113             Sensor {
0114                 id: sensor
0115                 sensorId: modelData
0116                 updateRateLimit: legend.updateRateLimit
0117             }
0118         }
0119     }
0120 }