9import QGroundControl.Controls
13 headerComponent: headerComponent
14 pageComponent: pageComponent
17 property var curSystem: controller ? controller.activeSystem : null
18 property var curMessage: curSystem && curSystem.messages.count ? curSystem.messages.get(curSystem.selected) : null
19 property int curCompID: 0
20 property real maxButtonWidth: 0
22 MAVLinkInspectorController {
26 function updateEnabledStatus(repeater, message, chart) {
31 for (let i = 0; i < repeater.count; i++) {
32 let checkBox = repeater.itemAt(i)
36 const messageField = message.fields.get(i)
37 checkBox.enabled = isCheckboxEnabled(checkBox, messageField, chart)
41 function isCheckboxEnabled(checkBox, messageField, chart) {
42 if(checkBox.checkState === Qt.Checked) {
45 if(!messageField.selectable) {
48 if(messageField.series !== null) {
51 return chart.roomForNewDimension()
59 anchors.left: parent.left
60 anchors.right: parent.right
62 text: qsTr("Inspect real time MAVLink messages.")
65 Layout.alignment: Qt.AlignRight
66 visible: curSystem ? controller.systemNames.length > 1 || curSystem.compIDsStr.length > 2 : false
69 model: controller.systemNames
71 visible: controller.systemNames.length > 1
72 onActivated: (index) => { controller.setActiveSystem(controller.systems.get(index).id) }
76 function onActiveSystemChanged() {
77 for (var systemIndex=0; systemIndex<controller.systems.count; systemIndex++) {
78 if (controller.systems.get(systemIndex) == curSystem) {
79 systemCombo.currentIndex = systemIndex
81 cidCombo.currentIndex = 0
90 model: curSystem ? curSystem.compIDsStr : []
92 visible: curSystem ? curSystem.compIDsStr.length > 2 : false
93 onActivated: (index) => {
94 if(curSystem && curSystem.compIDsStr.length > 1) {
98 curCompID = curSystem.compIDs[index - 1]
109 width: availableWidth
110 height: availableHeight
111 spacing: ScreenTools.defaultFontPixelWidth
112 //-- Messages (Buttons)
115 flickableDirection: Flickable.VerticalFlick
116 width: maxButtonWidth
117 height: parent.height
119 contentHeight: buttonCol.height
122 anchors.left: parent.left
123 anchors.right: parent.right
124 spacing: ScreenTools.defaultFontPixelHeight * 0.25
126 model: curSystem ? curSystem.messages : []
127 delegate: MAVLinkMessageButton {
128 text: object.name + (object.fieldSelected ? " *" : "")
129 compID: object.compId
130 checked: curSystem ? (curSystem.selected === index) : false
131 messageHz: object.actualRateHz
132 visible: curCompID === 0 || curCompID === compID
134 curSystem.selected = index
136 Layout.fillWidth: true
144 visible: curMessage !== null && (curCompID === 0 || curCompID === curMessage.compId)
145 flickableDirection: Flickable.VerticalFlick
146 width: parent.width - buttonGrid.width - ScreenTools.defaultFontPixelWidth
147 height: parent.height
149 contentHeight: messageCol.height
153 spacing: ScreenTools.defaultFontPixelHeight * 0.25
156 columnSpacing: ScreenTools.defaultFontPixelWidth
157 rowSpacing: ScreenTools.defaultFontPixelHeight * 0.25
159 text: qsTr("Message:")
160 Layout.minimumWidth: ScreenTools.defaultFontPixelWidth * 20
163 color: qgcPal.buttonHighlight
164 text: curMessage ? curMessage.name + ' (' + curMessage.id + ')' : ""
167 QGCLabel { text: qsTr("Component:") }
168 QGCLabel { text: curMessage ? curMessage.compId : "" }
170 QGCLabel { text: qsTr("Count:") }
171 QGCLabel { text: curMessage ? curMessage.count : "" }
173 QGCLabel { text: qsTr("Actual Rate:") }
174 QGCLabel { text: curMessage ? curMessage.actualRateHz.toFixed(1) + qsTr("Hz") : "" }
176 QGCLabel { text: qsTr("Set Rate:") }
182 { value: -1, text: qsTr("Disabled") },
183 { value: 0, text: qsTr("Default") },
184 { value: 1, text: qsTr("1Hz") },
185 { value: 2, text: qsTr("2Hz") },
186 { value: 3, text: qsTr("3Hz") },
187 { value: 4, text: qsTr("4Hz") },
188 { value: 5, text: qsTr("5Hz") },
189 { value: 6, text: qsTr("6Hz") },
190 { value: 7, text: qsTr("7Hz") },
191 { value: 8, text: qsTr("8Hz") },
192 { value: 9, text: qsTr("9Hz") },
193 { value: 10, text: qsTr("10Hz") },
194 { value: 25, text: qsTr("25Hz") },
195 { value: 50, text: qsTr("50Hz") },
196 { value: 100, text: qsTr("100Hz") }
198 Layout.alignment: Qt.AlignLeft
200 Component.onCompleted: reset()
201 onActivated: (index) => controller.setMessageInterval(currentValue)
202 function reset() { currentIndex = indexOfValue(0) }
205 function onCurMessageChanged() { msgRateCombo.reset() }
209 function onTargetRateHzChanged() {
210 const target_index = indexOfValue(curMessage.targetRateHz)
211 if(target_index != -1) {
212 currentIndex = target_index
218 Item { height: ScreenTools.defaultFontPixelHeight; width: 1 }
219 //---------------------------------------------------------
223 columnSpacing: ScreenTools.defaultFontPixelWidth * 0.25
224 rowSpacing: ScreenTools.defaultFontPixelHeight * 0.25
242 //---------------------------------------------------------
245 Layout.fillWidth: true
249 //---------------------------------------------------------
252 model: curMessage ? curMessage.fields : []
254 Layout.row: index + 2
256 Layout.minimumWidth: ScreenTools.defaultFontPixelWidth * 20
261 model: curMessage ? curMessage.fields : []
263 Layout.row: index + 2
265 Layout.minimumWidth: msgInfoGrid.width * 0.25
266 Layout.maximumWidth: msgInfoGrid.width * 0.25
268 elide: Text.ElideRight
272 model: curMessage ? curMessage.fields : []
274 Layout.row: index + 2
276 Layout.minimumWidth: ScreenTools.defaultFontPixelWidth * 10
278 elide: Text.ElideRight
283 model: curMessage ? curMessage.fields : []
284 delegate: QGCCheckBox {
285 Layout.row: index + 2
287 Layout.alignment: Qt.AlignHCenter
288 checked: object.series !== null && object.chartIndex === 0
291 chart1.addDimension(object)
293 chart1.delDimension(object)
295 updateEnabledStatus(chart1Repeater, curMessage, chart1)
296 updateEnabledStatus(chart2Repeater, curMessage, chart2)
298 Component.onCompleted: updateEnabledStatus(chart1Repeater, curMessage, chart1)
303 model: curMessage ? curMessage.fields : []
304 delegate: QGCCheckBox {
305 Layout.row: index + 2
307 Layout.alignment: Qt.AlignHCenter
308 checked: object.series !== null && object.chartIndex === 1
311 chart2.addDimension(object)
313 chart2.delDimension(object)
315 updateEnabledStatus(chart2Repeater, curMessage, chart2)
316 updateEnabledStatus(chart1Repeater, curMessage, chart1)
318 Component.onCompleted: updateEnabledStatus(chart2Repeater, curMessage, chart2)
322 Item { height: ScreenTools.defaultFontPixelHeight * 0.25; width: 1 }
325 height: ScreenTools.defaultFontPixelHeight * 20
327 inspectorController: controller
332 height: ScreenTools.defaultFontPixelHeight * 20
334 inspectorController: controller