MAVLinkInspectorPage.qml 13.8 KB
Newer Older
1 2
/****************************************************************************
 *
Gus Grubba's avatar
Gus Grubba committed
3
 * (c) 2009-2020 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
4 5 6 7 8 9 10 11 12 13
 *
 * QGroundControl is licensed according to the terms in the file
 * COPYING.md in the root of the source code directory.
 *
 ****************************************************************************/

import QtQuick                      2.11
import QtQuick.Controls             2.4
import QtQuick.Layouts              1.11
import QtQuick.Dialogs              1.3
14
import QtQuick.Window               2.2
15
import QtCharts                     2.3
16 17 18 19 20 21 22

import QGroundControl               1.0
import QGroundControl.Palette       1.0
import QGroundControl.Controls      1.0
import QGroundControl.Controllers   1.0
import QGroundControl.ScreenTools   1.0

23 24 25
AnalyzePage {
    headerComponent:    headerComponent
    pageComponent:      pageComponent
26

27 28
    property var    curSystem:          controller ? controller.activeSystem : null
    property var    curMessage:         curSystem && curSystem.messages.count ? curSystem.messages.get(curSystem.selected) : null
29 30
    property int    curCompID:          0
    property real   maxButtonWidth:     0
31 32 33 34 35

    MAVLinkInspectorController {
        id: controller
    }

36 37 38
    Component {
        id:  headerComponent
        //-- Header
39
        RowLayout {
40 41 42
            id:                 header
            anchors.left:       parent.left
            anchors.right:      parent.right
43
            QGCLabel {
44
                text:           qsTr("Inspect real time MAVLink messages.")
45
            }
46 47
            RowLayout {
                Layout.alignment:   Qt.AlignRight
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
                visible:            curSystem ? controller.systemNames.length > 1 || curSystem.compIDsStr.length > 2 : false
                QGCComboBox {
                    id:             systemCombo
                    model:          controller.systemNames
                    sizeToContents: true
                    visible:        controller.systemNames.length > 1
                    onActivated:    controller.setActiveSystem(controller.systems.get(index).id);

                    Connections {
                        target: controller
                        onActiveSystemChanged: {
                            for (var systemIndex=0; systemIndex<controller.systems.count; systemIndex++) {
                                if (controller.systems.get(systemIndex) == curSystem) {
                                    systemCombo.currentIndex = systemIndex
                                    curCompID = 0
                                    cidCombo.currentIndex = 0
                                    break
                                }
                            }
                        }
                    }
69 70 71
                }
                QGCComboBox {
                    id:             cidCombo
72 73 74
                    model:          curSystem ? curSystem.compIDsStr : []
                    sizeToContents: true
                    visible:        curSystem ? curSystem.compIDsStr.length > 2 : false
75
                    onActivated: {
76
                        if(curSystem && curSystem.compIDsStr.length > 1) {
77 78 79
                            if(index < 1)
                                curCompID = 0
                            else
80
                                curCompID = curSystem.compIDs[index - 1]
81
                        }
82 83 84 85
                    }
                }
            }
        }
86
    }
Gus Grubba's avatar
Gus Grubba committed
87

88 89
    Component {
        id:                         pageComponent
Gus Grubba's avatar
Gus Grubba committed
90
        Row {
91 92
            width:                  availableWidth
            height:                 availableHeight
93
            spacing:                ScreenTools.defaultFontPixelWidth
94 95 96
            //-- Messages (Buttons)
            QGCFlickable {
                id:                 buttonGrid
Gus Grubba's avatar
Gus Grubba committed
97
                flickableDirection: Flickable.VerticalFlick
98
                width:              maxButtonWidth
Gus Grubba's avatar
Gus Grubba committed
99
                height:             parent.height
100 101 102 103 104 105 106 107
                contentWidth:       width
                contentHeight:      buttonCol.height
                ColumnLayout {
                    id:             buttonCol
                    anchors.left:   parent.left
                    anchors.right:  parent.right
                    spacing:        ScreenTools.defaultFontPixelHeight * 0.25
                    Repeater {
108
                        model:      curSystem ? curSystem.messages : []
109
                        delegate:   MAVLinkMessageButton {
Gus Grubba's avatar
Gus Grubba committed
110
                            text:       object.name + (object.fieldSelected ?  " *" : "")
111
                            compID:     object.cid
112
                            checked:    curSystem ? (curSystem.selected === index) : false
113 114 115
                            messageHz:  object.messageHz
                            visible:    curCompID === 0 || curCompID === compID
                            onClicked: {
116
                                curSystem.selected = index
117 118 119
                            }
                            Layout.fillWidth: true
                        }
120
                    }
121 122
                }
            }
123 124 125
            //-- Message Data
            QGCFlickable {
                id:                 messageGrid
Gus Grubba's avatar
Gus Grubba committed
126
                visible:            curMessage !== null && (curCompID === 0 || curCompID === curMessage.cid)
Gus Grubba's avatar
Gus Grubba committed
127 128 129 130
                flickableDirection: Flickable.VerticalFlick
                width:              parent.width - buttonGrid.width - ScreenTools.defaultFontPixelWidth
                height:             parent.height
                contentWidth:       width
131
                contentHeight:      messageCol.height
Gus Grubba's avatar
Gus Grubba committed
132
                Column {
133
                    id:                 messageCol
Gus Grubba's avatar
Gus Grubba committed
134
                    width:              parent.width
135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159
                    spacing:            ScreenTools.defaultFontPixelHeight * 0.25
                    GridLayout {
                        columns:        2
                        columnSpacing:  ScreenTools.defaultFontPixelWidth
                        rowSpacing:     ScreenTools.defaultFontPixelHeight * 0.25
                        QGCLabel {
                            text:       qsTr("Message:")
                            Layout.minimumWidth: ScreenTools.defaultFontPixelWidth * 20
                        }
                        QGCLabel {
                            color:      qgcPal.buttonHighlight
                            text:       curMessage ? curMessage.name + ' (' + curMessage.id + ') ' + curMessage.messageHz.toFixed(1) + 'Hz' : ""
                        }
                        QGCLabel {
                            text:       qsTr("Component:")
                        }
                        QGCLabel {
                            text:       curMessage ? curMessage.cid : ""
                        }
                        QGCLabel {
                            text:       qsTr("Count:")
                        }
                        QGCLabel {
                            text:       curMessage ? curMessage.count : ""
                        }
160
                    }
161
                    Item { height: ScreenTools.defaultFontPixelHeight; width: 1 }
162
                    //---------------------------------------------------------
163
                    GridLayout {
Gus Grubba's avatar
Gus Grubba committed
164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193
                        id:                 msgInfoGrid
                        columns:            5
                        columnSpacing:      ScreenTools.defaultFontPixelWidth  * 0.25
                        rowSpacing:         ScreenTools.defaultFontPixelHeight * 0.25
                        width:              parent.width
                        QGCLabel {
                            text:       qsTr("Name")
                        }
                        QGCLabel {
                            text:       qsTr("Value")
                        }
                        QGCLabel {
                            text:       qsTr("Type")
                        }
                        QGCLabel {
                            text:       qsTr("Plot 1")
                        }
                        QGCLabel {
                            text:       qsTr("Plot 2")
                        }

                        //---------------------------------------------------------
                        Rectangle {
                            Layout.columnSpan:  5
                            Layout.fillWidth:   true
                            height:             1
                            color:              qgcPal.text
                        }
                        //---------------------------------------------------------

194 195 196
                        Repeater {
                            model:      curMessage ? curMessage.fields : []
                            delegate:   QGCLabel {
Gus Grubba's avatar
Gus Grubba committed
197
                                Layout.row:         index + 2
198 199 200 201 202 203 204 205
                                Layout.column:      0
                                Layout.minimumWidth: ScreenTools.defaultFontPixelWidth * 20
                                text:               object.name
                            }
                        }
                        Repeater {
                            model:      curMessage ? curMessage.fields : []
                            delegate:   QGCLabel {
Gus Grubba's avatar
Gus Grubba committed
206
                                Layout.row:         index + 2
207
                                Layout.column:      1
Gus Grubba's avatar
Gus Grubba committed
208 209
                                Layout.minimumWidth: msgInfoGrid.width * 0.25
                                Layout.maximumWidth: msgInfoGrid.width * 0.25
210
                                text:               object.value
Gus Grubba's avatar
Gus Grubba committed
211
                                elide:              Text.ElideRight
212 213 214 215 216
                            }
                        }
                        Repeater {
                            model:      curMessage ? curMessage.fields : []
                            delegate:   QGCLabel {
Gus Grubba's avatar
Gus Grubba committed
217
                                Layout.row:         index + 2
218
                                Layout.column:      2
Gus Grubba's avatar
Gus Grubba committed
219
                                Layout.minimumWidth: ScreenTools.defaultFontPixelWidth * 10
220
                                text:               object.type
Gus Grubba's avatar
Gus Grubba committed
221
                                elide:              Text.ElideRight
222 223
                            }
                        }
224 225 226
                        Repeater {
                            model:      curMessage ? curMessage.fields : []
                            delegate:   QGCCheckBox {
Gus Grubba's avatar
Gus Grubba committed
227
                                Layout.row:         index + 2
228
                                Layout.column:      3
Gus Grubba's avatar
Gus Grubba committed
229
                                Layout.alignment:   Qt.AlignHCenter
Gus Grubba's avatar
Gus Grubba committed
230 231 232 233 234 235 236 237 238 239 240 241 242
                                enabled: {
                                    if(checked)
                                        return true
                                    if(!object.selectable)
                                        return false
                                    if(object.series !== null)
                                        return false
                                    if(chart1.chartController !== null) {
                                        if(chart1.chartController.chartFields.length >= chart1.seriesColors.length)
                                            return false
                                    }
                                    return true;
                                }
243
                                checked:            object.series !== null && object.chartIndex === 0
244
                                onClicked: {
Gus Grubba's avatar
Gus Grubba committed
245 246 247 248
                                    if(checked) {
                                        chart1.addDimension(object)
                                    } else {
                                        chart1.delDimension(object)
249 250 251 252 253 254 255
                                    }
                                }
                            }
                        }
                        Repeater {
                            model:      curMessage ? curMessage.fields : []
                            delegate:   QGCCheckBox {
Gus Grubba's avatar
Gus Grubba committed
256
                                Layout.row:         index + 2
257
                                Layout.column:      4
Gus Grubba's avatar
Gus Grubba committed
258
                                Layout.alignment:   Qt.AlignHCenter
Gus Grubba's avatar
Gus Grubba committed
259 260 261 262 263 264 265 266 267 268 269 270 271
                                enabled: {
                                    if(checked)
                                        return true
                                    if(!object.selectable)
                                        return false
                                    if(object.series !== null)
                                        return false
                                    if(chart2.chartController !== null) {
                                        if(chart2.chartController.chartFields.length >= chart2.seriesColors.length)
                                            return false
                                    }
                                    return true;
                                }
272
                                checked:            object.series !== null && object.chartIndex === 1
273
                                onClicked: {
Gus Grubba's avatar
Gus Grubba committed
274 275 276 277
                                    if(checked) {
                                        chart2.addDimension(object)
                                    } else {
                                        chart2.delDimension(object)
278 279
                                    }
                                }
280 281
                            }
                        }
282
                    }
283
                    Item { height: ScreenTools.defaultFontPixelHeight * 0.25; width: 1 }
Gus Grubba's avatar
Gus Grubba committed
284 285 286
                    MAVLinkChart {
                        id:         chart1
                        height:     ScreenTools.defaultFontPixelHeight * 20
Gus Grubba's avatar
Gus Grubba committed
287
                        width:      parent.width
Gus Grubba's avatar
Gus Grubba committed
288 289 290 291
                    }
                    MAVLinkChart {
                        id:         chart2
                        height:     ScreenTools.defaultFontPixelHeight * 20
Gus Grubba's avatar
Gus Grubba committed
292
                        width:      parent.width
293
                    }
294 295 296 297 298
                }
            }
        }
    }
}