QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
MAVLinkChart.qml
Go to the documentation of this file.
1import QtQuick
2import QtQuick.Controls
3import QtQuick.Layouts
4import QtCharts
5
6import QGroundControl
7import QGroundControl.Controls
8
9ChartView {
10 id: chartView
11 theme: ChartView.ChartThemeDark
12 antialiasing: true
13 animationOptions: ChartView.NoAnimation
14 legend.visible: false
15 backgroundColor: qgcPal.window
16 backgroundRoundness: 0
17 margins.bottom: ScreenTools.defaultFontPixelHeight * 1.5
18 margins.top: chartHeader.height + (ScreenTools.defaultFontPixelHeight * 2)
19 visible: chartController.chartFields.length > 0
20
21 required property var inspectorController
22 required property int chartIndex
23
24 property var _seriesColors: ["#00E04B","#DE8500","#F32836","#BFBFBF","#536DFF","#EECC44"]
25
26 function addDimension(field) {
27 var color = _seriesColors[chartView.count]
28 var serie = createSeries(ChartView.SeriesTypeLine, field.label)
29 serie.axisX = axisX
30 serie.axisY = axisY
31 serie.useOpenGL = QGroundControl.videoManager.gstreamerEnabled // Details on why here: https://github.com/mavlink/qgroundcontrol/issues/13068
32 serie.color = color
33 serie.width = 1
34 chartController.addSeries(field, serie)
35 }
36
37 function delDimension(field) {
38 if(chartController) {
39 chartView.removeSeries(field.series)
40 chartController.delSeries(field)
41 }
42 }
43
44 function roomForNewDimension() {
45 return chartController.chartFields.length < _seriesColors.length
46 }
47
48 MAVLinkChartController {
49 id: chartController
50 inspectorController: chartView.inspectorController
51 chartIndex: chartView.chartIndex
52 }
53
54 DateTimeAxis {
55 id: axisX
56 min: chartController ? chartController.rangeXMin : new Date()
57 max: chartController ? chartController.rangeXMax : new Date()
58 visible: chartController !== null
59 format: "<br/>mm:ss.zzz"
60 tickCount: 5
61 gridVisible: true
62 labelsFont.family: ScreenTools.fixedFontFamily
63 labelsFont.pointSize: ScreenTools.smallFontPointSize
64 labelsColor: qgcPal.text
65 }
66
67 ValueAxis {
68 id: axisY
69 min: chartController ? chartController.rangeYMin : 0
70 max: chartController ? chartController.rangeYMax : 0
71 visible: chartController !== null
72 lineVisible: false
73 labelsFont.family: ScreenTools.fixedFontFamily
74 labelsFont.pointSize: ScreenTools.smallFontPointSize
75 labelsColor: qgcPal.text
76 }
77
78 Row {
79 id: chartHeader
80 anchors.left: parent.left
81 anchors.leftMargin: ScreenTools.defaultFontPixelWidth * 4
82 anchors.right: parent.right
83 anchors.rightMargin: ScreenTools.defaultFontPixelWidth * 4
84 anchors.top: parent.top
85 anchors.topMargin: ScreenTools.defaultFontPixelHeight * 1.5
86 spacing: ScreenTools.defaultFontPixelWidth * 2
87 visible: chartController !== null
88 GridLayout {
89 columns: 2
90 columnSpacing: ScreenTools.defaultFontPixelWidth
91 rowSpacing: ScreenTools.defaultFontPixelHeight * 0.25
92 anchors.verticalCenter: parent.verticalCenter
93 QGCLabel {
94 text: qsTr("Scale:");
95 Layout.alignment: Qt.AlignVCenter
96 }
97 QGCComboBox {
98 Layout.minimumWidth: ScreenTools.defaultFontPixelWidth * 10
99 Layout.maximumWidth: ScreenTools.defaultFontPixelWidth * 10
100 height: ScreenTools.defaultFontPixelHeight
101 model: controller.timeScales
102 currentIndex: chartController ? chartController.rangeXIndex : 0
103 onActivated: (index) => { if(chartController) chartController.rangeXIndex = index; }
104 Layout.alignment: Qt.AlignVCenter
105 }
106 QGCLabel {
107 text: qsTr("Range:");
108 Layout.alignment: Qt.AlignVCenter
109 }
110 QGCComboBox {
111 Layout.minimumWidth: ScreenTools.defaultFontPixelWidth * 10
112 Layout.maximumWidth: ScreenTools.defaultFontPixelWidth * 10
113 height: ScreenTools.defaultFontPixelHeight
114 model: controller.rangeList
115 currentIndex: chartController ? chartController.rangeYIndex : 0
116 onActivated: (index) => { if(chartController) chartController.rangeYIndex = index; }
117 Layout.alignment: Qt.AlignVCenter
118 }
119 }
120 ColumnLayout {
121 anchors.verticalCenter: parent.verticalCenter
122 Repeater {
123 model: chartController ? chartController.chartFields : []
124 QGCLabel {
125 text: modelData.label
126 color: chartView.series(index).color
127 font.pointSize: ScreenTools.smallFontPointSize
128 }
129 }
130 }
131 }
132}