/**************************************************************************** * * (c) 2009-2016 QGROUNDCONTROL PROJECT * * 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 import QGroundControl 1.0 import QGroundControl.Palette 1.0 import QGroundControl.Controls 1.0 import QGroundControl.Controllers 1.0 import QGroundControl.ScreenTools 1.0 Item { anchors.fill: parent anchors.margins: ScreenTools.defaultFontPixelWidth readonly property real _butttonWidth: ScreenTools.defaultFontPixelWidth * 30 property int curVehicleIndex: 0 property var curVehicle: controller.vehicles.count > 0 ? controller.vehicles.get(curVehicleIndex) : null property int curMessageIndex: 0 property var curMessage: curVehicle && curVehicle.messages.count ? curVehicle.messages.get(curMessageIndex) : null MAVLinkInspectorController { id: controller } DeadMouseArea { anchors.fill: parent } //-- Header ColumnLayout { id: header width: parent.width spacing: ScreenTools.defaultFontPixelHeight QGCLabel { text: qsTr("Analyze real time MAVLink messages.") } RowLayout { Layout.fillWidth: true spacing: ScreenTools.defaultFontPixelWidth QGCLabel { text: qsTr("Vehicle:") } QGCComboBox { id: vehicleSelector model: controller.vehicleNames enabled: controller.vehicles.count > 0 onActivated: curVehicleIndex = index Layout.minimumWidth: ScreenTools.defaultFontPixelWidth * 16 } } Item { height: ScreenTools.defaultFontPixelHeight width: 1 } } //-- Messages QGCFlickable { id: buttonGrid anchors.top: header.bottom anchors.bottom: parent.bottom anchors.left: parent.left width: ScreenTools.defaultFontPixelWidth * 32 contentWidth: buttonCol.width contentHeight: buttonCol.height ColumnLayout { id: buttonCol spacing: ScreenTools.defaultFontPixelHeight * 0.25 Repeater { model: curVehicle ? curVehicle.messages : [] delegate: QGCButton { text: object.name onClicked: curMessageIndex = index Layout.minimumWidth: _butttonWidth } } } } //-- Message Data QGCFlickable { id: messageGrid anchors.top: header.bottom anchors.bottom: parent.bottom anchors.left: buttonGrid.right anchors.leftMargin: ScreenTools.defaultFontPixelWidth * 2 anchors.right: parent.right contentWidth: messageCol.width contentHeight: messageCol.height Column { id: messageCol spacing: ScreenTools.defaultFontPixelHeight 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 : "" } QGCLabel { text: qsTr("Count:") } QGCLabel { text: curMessage ? curMessage.count : "" } QGCLabel { text: qsTr("Frequency:") } QGCLabel { text: curMessage ? curMessage.messageHz + 'Hz' : "" } } GridLayout { columns: 3 columnSpacing: ScreenTools.defaultFontPixelWidth rowSpacing: ScreenTools.defaultFontPixelHeight * 0.25 Repeater { model: curMessage ? curMessage.fields : [] delegate: QGCLabel { Layout.row: index Layout.column: 0 Layout.minimumWidth: ScreenTools.defaultFontPixelWidth * 20 text: object.name } } Repeater { model: curMessage ? curMessage.fields : [] delegate: QGCLabel { Layout.row: index Layout.column: 1 Layout.minimumWidth: ScreenTools.defaultFontPixelWidth * 30 Layout.maximumWidth: ScreenTools.defaultFontPixelWidth * 30 wrapMode: Text.WordWrap text: object.value } } Repeater { model: curMessage ? curMessage.fields : [] delegate: QGCLabel { Layout.row: index Layout.column: 2 text: object.type } } } } } }