ParameterEditor.qml 9.88 KB
Newer Older
Don Gagne's avatar
Don Gagne committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
/*=====================================================================

 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/>.

 ======================================================================*/

24 25 26
/// @file
///     @author Don Gagne <don@thegagnes.com>

Don Gagne's avatar
Don Gagne committed
27
import QtQuick 2.3
28
import QtQuick.Controls 1.3
Don Gagne's avatar
Don Gagne committed
29
import QtQuick.Controls.Styles 1.2
Don Gagne's avatar
Don Gagne committed
30
import QtQuick.Dialogs 1.2
Don Gagne's avatar
Don Gagne committed
31 32 33 34 35 36 37 38

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

Don Gagne's avatar
Don Gagne committed
39
QGCView {
40
    viewPanel: panel
Don Gagne's avatar
Don Gagne committed
41

Don Gagne's avatar
Don Gagne committed
42 43
    /// true: show full information, false: for use in smaller widgets
    property bool fullMode: true
Don Gagne's avatar
Don Gagne committed
44

Don Gagne's avatar
Don Gagne committed
45 46
    QGCPalette { id: __qgcPal; colorGroupEnabled: true }
    property Fact __editorDialogFact: Fact { }
Don Gagne's avatar
Don Gagne committed
47

Don Gagne's avatar
Don Gagne committed
48 49 50
    readonly property real __leftMargin: 10
    readonly property real __rightMargin: 20
    readonly property int __maxParamChars: 16
Don Gagne's avatar
Don Gagne committed
51

52
    ParameterEditorController { id: controller; factPanel: panel }
Don Gagne's avatar
Don Gagne committed
53

Don Gagne's avatar
Don Gagne committed
54 55
    Component {
        id: editorDialogComponent
Don Gagne's avatar
Don Gagne committed
56

Don Gagne's avatar
Don Gagne committed
57 58
        ParameterEditorDialog { fact: __editorDialogFact }
    } // Component - Editor Dialog
Don Gagne's avatar
Don Gagne committed
59

Don Gagne's avatar
Don Gagne committed
60 61
    Component {
        id: factRowsComponent
Don Gagne's avatar
Don Gagne committed
62

Don Gagne's avatar
Don Gagne committed
63 64 65
        Column {
            id:     factColumn
            x:      __leftMargin
Don Gagne's avatar
Don Gagne committed
66

Don Gagne's avatar
Don Gagne committed
67 68 69 70 71
            QGCLabel {
                text:               group
                verticalAlignment:	Text.AlignVCenter
                font.pixelSize:     ScreenTools.mediumFontPixelSize
            }
Don Gagne's avatar
Don Gagne committed
72

Don Gagne's avatar
Don Gagne committed
73 74 75 76 77
            Rectangle {
                width:  parent.width
                height: 1
                color:  __qgcPal.text
            }
Don Gagne's avatar
Don Gagne committed
78

Don Gagne's avatar
Don Gagne committed
79 80
            Repeater {
                model: controller.getFactsForGroup(componentId, group)
Don Gagne's avatar
Don Gagne committed
81

Don Gagne's avatar
Don Gagne committed
82 83
                Column {
                    property Fact modelFact: controller.getParameterFact(componentId, modelData)
Don Gagne's avatar
Don Gagne committed
84

Don Gagne's avatar
Don Gagne committed
85 86 87 88
                    Item {
                        x:			__leftMargin
                        width:      parent.width
                        height:		ScreenTools.defaultFontPixelSize * 1.75
Don Gagne's avatar
Don Gagne committed
89

Don Gagne's avatar
Don Gagne committed
90 91 92 93 94 95 96
                        QGCLabel {
                            id:                 nameLabel
                            width:              defaultTextWidth * (__maxParamChars + 1)
                            height:             parent.height
                            verticalAlignment:	Text.AlignVCenter
                            text:               modelFact.name
                        }
Don Gagne's avatar
Don Gagne committed
97

Don Gagne's avatar
Don Gagne committed
98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113
                        QGCLabel {
                            id:                 valueLabel
                            width:              defaultTextWidth * 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
114
                        }
Don Gagne's avatar
Don Gagne committed
115

Don Gagne's avatar
Don Gagne committed
116 117 118 119 120 121 122 123
                        MouseArea {
                            anchors.fill:       parent
                             acceptedButtons:   Qt.LeftButton

                            onClicked: {
                                __editorDialogFact = modelFact
                                showDialog(editorDialogComponent, "Parameter Editor", fullMode ? 50 : -1, StandardButton.Cancel | StandardButton.Save)
                            }
124
                        }
Don Gagne's avatar
Don Gagne committed
125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
                    }

                    Rectangle {
                        x:      __leftMargin
                        width:  factColumn.width - __leftMargin - __rightMargin
                        height: 1
                        color:  __qgcPal.windowShade
                    }
                } // Column - Fact
            } // Repeater - Facts
        } // Column - Facts
    } // Component - factRowsComponent

    QGCViewPanel {
        id:             panel
        anchors.fill:   parent

Don Gagne's avatar
Don Gagne committed
142

143 144
        Column {
            anchors.fill: parent
Don Gagne's avatar
Don Gagne committed
145

146 147 148
            Item {
                width:  parent.width
                height: firstButton.height
Don Gagne's avatar
Don Gagne committed
149

150
                QGCLabel {
Don Gagne's avatar
Don Gagne committed
151
                    font.pixelSize: ScreenTools.largeFontPixelSize
152 153 154
                    visible:        fullMode
                    text:           "PARAMETER EDITOR"
                }
Don Gagne's avatar
Don Gagne committed
155

156 157 158 159
                Row {
                    spacing:            10
                    layoutDirection:    Qt.RightToLeft
                    width:              parent.width
160

161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178
                    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()
179
                    }
Don Gagne's avatar
Don Gagne committed
180
                }
181
            }
182

183 184 185 186 187
            Item {
                id:		lastSpacer
                height: 10
                width:	5
            }
188

189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207
            Item {
                width:  parent.width
                height: parent.height - (lastSpacer.y + lastSpacer.height)

                ScrollView {
                    id :	groupScroll
                    width:	defaultTextWidth * 25
                    height: parent.height

                    Column {
                        Repeater {
                            model: controller.componentIds

                            Column {
                                id: componentColumn

                                readonly property int componentId: parseInt(modelData)

                                QGCLabel {
Don Gagne's avatar
Don Gagne committed
208
                                    height:				contentHeight + (ScreenTools.defaultFontPixelHeight * 0.5)
209 210
                                    text:               "Component #: " + componentId.toString()
                                    verticalAlignment:	Text.AlignVCenter
Don Gagne's avatar
Don Gagne committed
211
                                    font.pixelSize:     ScreenTools.mediumFontPixelSize
212 213 214 215 216 217 218 219 220 221
                                }

                                Repeater {
                                    model: controller.getGroupsForComponent(componentColumn.componentId)

                                    Column {
                                        QGCButton {
                                            x:		__leftMargin
                                            width: groupScroll.width - __leftMargin - __rightMargin
                                            text:	modelData
Don Gagne's avatar
Don Gagne committed
222

223 224 225 226 227
                                            onClicked: {
                                                factRowsLoader.sourceComponent = null
                                                factRowsLoader.componentId = componentId
                                                factRowsLoader.group = modelData
                                                factRowsLoader.sourceComponent = factRowsComponent
Don Gagne's avatar
Don Gagne committed
228
                                            }
229 230 231 232
                                        }

                                        Item {
                                            width:  1
Don Gagne's avatar
Don Gagne committed
233
                                            height: ScreenTools.defaultFontPixelSize * 0.25
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
                                        }
                                    } // 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
        } // Column - Outer
Don Gagne's avatar
Don Gagne committed
264
    } // QGCViewPanel
265
} // QGCView