QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
ParameterDiffDialog.qml
Go to the documentation of this file.
1import QtQuick
2import QtQuick.Layouts
3import QtQuick.Controls
4import QtQuick.Dialogs
5
6import QGroundControl
7import QGroundControl.Controls
8import QGroundControl.FactControls
9
10QGCPopupDialog {
11 title: qsTr("Load Parameters")
12 buttons: Dialog.Cancel | (_sendableCount > 0 ? Dialog.Ok : 0)
13 acceptButtonEnabled: paramController.diffSelectedCount > 0
14
15 required property var paramController
16
17 property int _sendableCount: paramController.diffSendableCount
18
19 onAccepted: paramController.sendDiff()
20
21 Component.onDestruction: paramController.clearDiff();
22
23 ColumnLayout {
24 spacing: ScreenTools.defaultDialogControlSpacing
25
26 QGCLabel {
27 id: summaryLabel
28 objectName: "diffSummaryLabel"
29 Layout.preferredWidth: mainGrid.visible ? mainGrid.width : ScreenTools.defaultFontPixelWidth * 40
30 wrapMode: Text.WordWrap
31 text: {
32 var clauses = []
33 if (_sendableCount > 0) {
34 if (paramController.diffNoVehicleCount > 0) {
35 clauses.push(qsTr("%1 will be changed (including %2 not currently on the Vehicle)").arg(_sendableCount).arg(paramController.diffNoVehicleCount))
36 } else {
37 clauses.push(qsTr("%1 will be changed").arg(_sendableCount))
38 }
39 }
40 if (paramController.diffUnchangedCount === 1) {
41 clauses.push(qsTr("1 already matches the Vehicle"))
42 } else if (paramController.diffUnchangedCount > 1) {
43 clauses.push(qsTr("%1 already match the Vehicle").arg(paramController.diffUnchangedCount))
44 }
45 if (paramController.diffReadOnlyCount === 1) {
46 clauses.push(qsTr("1 read-only parameter will not be sent"))
47 } else if (paramController.diffReadOnlyCount > 1) {
48 clauses.push(qsTr("%1 read-only parameters will not be sent").arg(paramController.diffReadOnlyCount))
49 }
50 if (paramController.diffMissingParams.length > 0) {
51 clauses.push(qsTr("%1 not found on the Vehicle and cannot be sent").arg(paramController.diffMissingParams.length))
52 }
53 if (paramController.diffParsedCount === 1) {
54 return clauses.length === 0 ? qsTr("Loaded 1 parameter from file.")
55 : qsTr("Loaded 1 parameter from file: %1.").arg(clauses.join(", "))
56 }
57 return clauses.length === 0 ? qsTr("Loaded %1 parameters from file.").arg(paramController.diffParsedCount)
58 : qsTr("Loaded %1 parameters from file: %2.").arg(paramController.diffParsedCount).arg(clauses.join(", "))
59 }
60 }
61
62 QGCLabel {
63 objectName: "diffOkHintLabel"
64 Layout.preferredWidth: summaryLabel.Layout.preferredWidth
65 wrapMode: Text.WordWrap
66 visible: _sendableCount > 0
67 text: qsTr("Click 'Ok' to update the parameters below on the Vehicle.")
68 }
69
70 GridLayout {
71 id: mainGrid
72 objectName: "diffGrid"
73 rows: paramController.diffList.count + 1
74 columns: paramController.diffMultipleComponents ? 5 : 4
75 flow: GridLayout.TopToBottom
76 rowSpacing: 0
77 columnSpacing: ScreenTools.defaultFontPixelWidth
78 visible: paramController.diffList.count
79
80 QGCCheckBox {
81 objectName: "diffCheckAllCheckbox"
82 checked: true
83 onClicked: {
84 for (var i=0; i<paramController.diffList.count; i++) {
85 var paramDiff = paramController.diffList.get(i)
86 if (!paramDiff.cannotSend) {
87 paramDiff.load = checked
88 }
89 }
90 }
91 }
92 Repeater {
93 model: paramController.diffList
94 QGCCheckBox {
95 objectName: "diffRowCheckbox_" + (paramController.diffMultipleComponents ? object.componentId + "_" : "") + object.name
96 enabled: !object.cannotSend
97 checked: object.load
98 onClicked: object.load = checked
99 }
100 }
101
102 Repeater {
103 model: paramController.diffMultipleComponents ? 1 : 0
104 QGCLabel { text: qsTr("Comp ID") }
105 }
106 Repeater {
107 model: paramController.diffMultipleComponents ? paramController.diffList : 0
108 QGCLabel { text: object.componentId }
109 }
110
111 QGCLabel { text: qsTr("Name") }
112 Repeater {
113 model: paramController.diffList
114 QGCLabel { text: object.name }
115 }
116
117 QGCLabel { text: qsTr("File") }
118 Repeater {
119 model: paramController.diffList
120 QGCLabel { text: object.fileValue + " " + object.units }
121 }
122
123 QGCLabel { text: qsTr("Vehicle") }
124 Repeater {
125 model: paramController.diffList
126 QGCLabel {
127 text: object.cannotSend ? qsTr("N/A — not on Vehicle") :
128 object.noVehicleValue ? qsTr("N/A — new to Vehicle") :
129 object.vehicleValue + " " + object.units
130 }
131 }
132 }
133
134 QGCLabel {
135 objectName: "diffNoVehicleHintLabel"
136 Layout.preferredWidth: summaryLabel.Layout.preferredWidth
137 wrapMode: Text.WordWrap
138 visible: paramController.diffNoVehicleCount > 0
139 text: qsTr("Parameters marked 'new to Vehicle' have not been reported by the Vehicle. They may only become visible after they are sent and the Vehicle is rebooted.")
140 }
141
142 QGCLabel {
143 objectName: "diffCannotSendHintLabel"
144 Layout.preferredWidth: summaryLabel.Layout.preferredWidth
145 wrapMode: Text.WordWrap
146 visible: paramController.diffMissingParams.length > 0
147 text: qsTr("Parameters marked 'not on Vehicle' cannot be sent since the file does not include type information. They may only exist after another parameter is changed and the Vehicle is rebooted, after which you can load this file again.")
148 }
149 }
150}