1/*
2    SPDX-FileCopyrightText: 2019 Marco Martin <mart@kde.org>
3    SPDX-FileCopyrightText: 2019 David Edmundson <davidedmundson@kde.org>
4    SPDX-FileCopyrightText: 2019 Arjen Hiemstra <ahiemstra@heimr.nl>
5    SPDX-FileCopyrightText: 2019 Kai Uwe Broulik <kde@broulik.de>
6
7    SPDX-License-Identifier: LGPL-2.0-or-later
8*/
9
10import QtQuick 2.9
11import QtQuick.Layouts 1.1
12
13import org.kde.kirigami 2.8 as Kirigami
14
15import org.kde.ksysguard.sensors 1.0 as Sensors
16import org.kde.ksysguard.faces 1.0 as Faces
17
18import org.kde.quickcharts 1.0 as Charts
19
20Charts.BarChart {
21    id: chart
22
23    readonly property int barCount: stacked ? 1 : instantiator.count
24
25    readonly property alias sensorsModel: sensorsModel
26
27    property int updateRateLimit
28
29    property var controller
30
31    stacked: controller.faceConfiguration.barChartStacked
32
33    spacing: Math.round(width / 20)
34
35    readonly property real rangeFromY: controller.faceConfiguration.rangeFrom *
36                                       controller.faceConfiguration.rangeFromMultiplier
37
38    readonly property real rangeToY: controller.faceConfiguration.rangeTo *
39                                     controller.faceConfiguration.rangeToMultiplier
40
41    yRange {
42        from: chart.rangeFromY
43        to: chart.rangeToY
44        automatic: controller.faceConfiguration.rangeAuto
45    }
46
47    Sensors.SensorDataModel {
48        id: sensorsModel
49        sensors: controller.highPrioritySensorIds
50        updateRateLimit: chart.updateRateLimit
51        sensorLabels: root.controller.sensorLabels
52
53        property int unit: sensorsModel.ready ? sensorsModel.headerData(0, Qt.Horizontal, Sensors.SensorDataModel.Unit) : Formatter.Formatter.UnitInvalid
54    }
55
56    Instantiator {
57        id: instantiator
58        model: sensorsModel.sensors
59        delegate: Charts.ModelSource {
60            model: sensorsModel
61            roleName: "Value"
62            column: index
63        }
64        onObjectAdded: {
65            chart.insertValueSource(index, object)
66        }
67        onObjectRemoved: {
68            chart.removeValueSource(object)
69        }
70    }
71
72    colorSource: root.colorSource
73    nameSource: Charts.ModelSource {
74        model: sensorsModel
75        roleName: "Name"
76        indexColumns: true
77    }
78    shortNameSource: Charts.ModelSource {
79        roleName: "ShortName";
80        model: sensorsModel
81        indexColumns: true
82    }
83}
84
85