Newer
Older
/*=====================================================================
QGroundControl Open Source Ground Control Station
(c) 2009 - 2015 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
This file is part of the QGROUNDCONTROL project
QGROUNDCONTROL is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
QGROUNDCONTROL is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with QGROUNDCONTROL. If not, see <http://www.gnu.org/licenses/>.
======================================================================*/
/// @file
/// @author Don Gagne <don@thegagnes.com>
import QGroundControl.Controls 1.0
import QGroundControl.Palette 1.0
import QGroundControl.ScreenTools 1.0
import QGroundControl.Controllers 1.0
import QGroundControl.FactSystem 1.0
import QGroundControl.FactControls 1.0
Rectangle {
/// true: show full information, false: for use in smaller widgets
property bool fullMode: true
QGCPalette { id: __qgcPal; colorGroupEnabled: true }
ScreenTools { id: __screenTools }
ParameterEditorController { id: __controller }
QGCLabel { id: __textControl; text: "X"; visible: false }
readonly property real __leftMargin: 10
readonly property real __rightMargin: 20
readonly property int __maxParamChars: 16
// We use an ExclusiveGroup to maintain the visibility of a single editing control at a time
ExclusiveGroup {
property Fact __editorOverlayFact: Fact { }
property real __textHeight: __textControl.contentHeight
property real __textWidth: __textControl.contentWidth
Rectangle {
width: __textWidth * 75
height: parent.height
anchors.left: parent.left
anchors.right: editorDialog.left
opacity: 0.80
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
}
Rectangle {
id: editorDialog
width: fullMode ? __textWidth * 50 : parent.width
height: parent.height
anchors.right: parent.right
color: __qgcPal.windowShadeDark
Column {
spacing: __textHeight
anchors.fill: parent
Rectangle {
width: parent.width
height: saveButton.height
color: __qgcPal.windowShade
QGCLabel {
x: __textWidth
height: parent.height
verticalAlignment: Text.AlignVCenter
text: "Edit Parameter"
}
QGCButton {
anchors.right: saveButton.left
anchors.bottom: parent.bottom
text: "Cancel"
onClicked: {
editorOverlay.visible = false
}
}
QGCButton {
id: saveButton
anchors.right: parent.right
primary: true
text: "Save"
onClicked: {
__editorOverlayFact.value = valueField.text
editorOverlay.visible = false
}
}
124
125
126
127
128
129
130
131
132
133
134
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
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
Column {
spacing: __textHeight
anchors.leftMargin: __textWidth * 2
anchors.rightMargin: __textWidth
anchors.left: parent.left
anchors.right: parent.right
QGCLabel {
width: parent.width
wrapMode: Text.WordWrap
text: __editorOverlayFact.shortDescription ? __editorOverlayFact.shortDescription : "Description missing"
}
QGCLabel {
width: parent.width
wrapMode: Text.WordWrap
visible: __editorOverlayFact.longDescription
text: __editorOverlayFact.longDescription
}
QGCTextField {
id: valueField
text: __editorOverlayFact.valueString
}
QGCLabel { text: __editorOverlayFact.name }
Row {
spacing: __textWidth
QGCLabel { text: "Units:" }
QGCLabel { text: __editorOverlayFact.units ? __editorOverlayFact.units : "none" }
}
Row {
spacing: __textWidth
QGCLabel { text: "Minimum value:" }
QGCLabel { text: __editorOverlayFact.min }
}
Row {
spacing: __textWidth
QGCLabel { text: "Maxmimum value:" }
QGCLabel { text: __editorOverlayFact.max }
}
Row {
spacing: __textWidth
QGCLabel { text: "Default value:" }
QGCLabel { text: __editorOverlayFact.defaultValueAvailable ? __editorOverlayFact.defaultValue : "none" }
}
QGCLabel {
height: __textHeight + (__screenTools.pixelSizeFactor * (9))
text: group
verticalAlignment: Text.AlignVCenter
font.pointSize: __screenTools.fontPointFactor * (16);
Rectangle {
width: parent.width
height: 1
color: __qgcPal.text
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
Repeater {
model: __controller.getFactsForGroup(componentId, group)
Column {
Item {
x: __leftMargin
width: parent.width
height: __textHeight + (__screenTools.pixelSizeFactor * (9))
Fact { id: modelFact; name: modelData + ":" + componentId }
QGCLabel {
id: nameLabel
width: __textWidth * (__maxParamChars + 1)
height: parent.height
verticalAlignment: Text.AlignVCenter
text: modelFact.name
}
QGCLabel {
id: valueLabel
width: __textWidth * 20
height: parent.height
anchors.left: nameLabel.right
verticalAlignment: Text.AlignVCenter
color: modelFact.valueEqualsDefault ? __qgcPal.text : "orange"
text: modelFact.valueString + " " + modelFact.units
}
QGCLabel {
height: parent.height
anchors.left: valueLabel.right
verticalAlignment: Text.AlignVCenter
visible: fullMode
text: modelFact.shortDescription
}
MouseArea {
anchors.fill: parent
acceptedButtons: Qt.LeftButton
onClicked: {
__editorOverlayFact = modelFact
editorOverlay.visible = true
}
}
}
Rectangle {
x: __leftMargin
width: factColumn.width - __leftMargin - __rightMargin
height: 1
color: __qgcPal.windowShade
}
} // Column - Fact
} // Repeater - Facts
} // Column - Facts
} // Component - factRowsComponent
Column {
anchors.fill: parent
Item {
width: parent.width
height: firstButton.height
QGCLabel {
font.pointSize: __screenTools.fontPointFactor * (20)
visible: fullMode
text: "PARAMETER EDITOR"
Row {
spacing: 10
layoutDirection: Qt.RightToLeft
width: parent.width
QGCButton {
text: "Clear RC to Param"
onClicked: __controller.clearRCToParam()
}
QGCButton {
text: "Save to file"
visible: fullMode
onClicked: __controller.saveToFile()
}
QGCButton {
text: "Load from file"
visible: fullMode
onClicked: __controller.loadFromFile()
}
QGCButton {
id: firstButton
text: "Refresh"
onClicked: __controller.refresh()
}
}
}
Item {
id: lastSpacer
height: 10
width: 5
}
height: parent.height - (lastSpacer.y + lastSpacer.height)
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
ScrollView {
id : groupScroll
width: __textWidth * 25
height: parent.height
Column {
Repeater {
model: __controller.componentIds
Column {
id: componentColumn
readonly property int componentId: parseInt(modelData)
QGCLabel {
height: contentHeight + (__screenTools.pixelSizeFactor * (9))
text: "Component #: " + componentId.toString()
verticalAlignment: Text.AlignVCenter
font.pointSize: __screenTools.fontPointFactor * (16);
}
Repeater {
model: __controller.getGroupsForComponent(componentColumn.componentId)
Column {
QGCButton {
x: __leftMargin
width: groupScroll.width - __leftMargin - __rightMargin
text: modelData
onClicked: {
factRowsLoader.sourceComponent = null
factRowsLoader.componentId = componentId
factRowsLoader.group = modelData
factRowsLoader.sourceComponent = factRowsComponent
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
}
Item {
width: 1
height: __screenTools.pixelSizeFactor * (3)
}
} // Column - Group
} // Repeater - Groups
Item {
height: 10
width: 10
}
} // Column - Component
} // Repeater - Components
} // Column - Component
} // ScrollView - Groups
ScrollView {
id: factScrollView
anchors.left: groupScroll.right
anchors.right: parent.right
height: parent.height
Loader {
id: factRowsLoader
width: factScrollView.width
property int componentId: __controller.componentIds[0]
property string group: __controller.getGroupsForComponent(__controller.componentIds[0])[0]
sourceComponent: factRowsComponent
}
} // ScrollView - Facts
} // Item - Group ScrollView + Facts