ParameterEditor.qml 9.02 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 28 29 30 31 32 33 34 35 36 37 38
import QtQuick 2.3
import QtQuick.Controls 1.2
import QtQuick.Controls.Styles 1.2

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 {
39 40 41 42 43 44 45
	/// 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: __charWidth; text: "X"; visible: false }
Don Gagne's avatar
Don Gagne committed
46

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

51
    color: __qgcPal.window
Don Gagne's avatar
Don Gagne committed
52 53 54

    // We use an ExclusiveGroup to maintain the visibility of a single editing control at a time
    ExclusiveGroup {
55
        id: __exclusiveEditorGroup
Don Gagne's avatar
Don Gagne committed
56 57 58 59 60 61 62 63 64 65 66
    }

    Column {
        anchors.fill:parent

        Row {
            spacing:            10
            layoutDirection:    Qt.RightToLeft
            width:              parent.width

            QGCButton {
67 68
                text:		"Clear RC to Param"
                onClicked:	__controller.clearRCToParam()
Don Gagne's avatar
Don Gagne committed
69 70
            }
            QGCButton {
71 72 73
                text:		"Save to file"
				visible:	fullMode
                onClicked:	__controller.saveToFile()
Don Gagne's avatar
Don Gagne committed
74 75
            }
            QGCButton {
76 77 78
                text:		"Load from file"
				visible:	fullMode
                onClicked:	__controller.loadFromFile()
Don Gagne's avatar
Don Gagne committed
79 80
            }
            QGCButton {
81 82 83
                id:			firstButton
                text:		"Refresh"
                onClicked:	__controller.refresh()
Don Gagne's avatar
Don Gagne committed
84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
            }
        }

        Item {
            id:		lastSpacer
            height: 10
            width:	5
        }

        ScrollView {
            id :	scrollView
            width:	parent.width
            height: parent.height - (lastSpacer.y + lastSpacer.height)

            Column {
                Repeater {
100
                    model: __controller.componentIds
Don Gagne's avatar
Don Gagne committed
101 102 103 104 105 106 107 108

                    Column {
						id: componentColumn

						property int componentId: parseInt(modelData)

						QGCLabel {
							text: "Component #: " + componentId.toString()
109
							font.pointSize: __screenTools.dpiAdjustedPointSize(__qgcPal.defaultFontPointSize + 4);
Don Gagne's avatar
Don Gagne committed
110 111 112 113 114 115 116 117
						}

                        Item {
                            height: 10
                            width:	10
                        }

                        Repeater {
118
                            model: __controller.getGroupsForComponent(componentColumn.componentId)
Don Gagne's avatar
Don Gagne committed
119 120 121 122

                            Column {
                                Rectangle {
                                    id: groupRect
123
                                    color:	__qgcPal.windowShade
Don Gagne's avatar
Don Gagne committed
124
                                    height: groupBlock.height
125
                                    width:	scrollView.viewport.width - __rightMargin
Don Gagne's avatar
Don Gagne committed
126 127 128 129 130

                                    Column {
                                        id: groupBlock

                                        Rectangle {
131
                                            color:	__qgcPal.windowShadeDark
Don Gagne's avatar
Don Gagne committed
132 133 134 135 136 137
                                            height: groupLabel.height
                                            width:	groupRect.width

                                            QGCLabel {
                                                id:					groupLabel
                                                height:				contentHeight + 5
138
                                                x:					__leftMargin
Don Gagne's avatar
Don Gagne committed
139 140
                                                text:				modelData
                                                verticalAlignment:	Text.AlignVCenter
141
                                                font.pointSize:		__screenTools.dpiAdjustedPointSize(__qgcPal.defaultFontPointSize + 2);
Don Gagne's avatar
Don Gagne committed
142 143 144 145
                                            }
                                        }

                                        Repeater {
146
                                            model: __controller.getFactsForGroup(componentColumn.componentId, modelData)
Don Gagne's avatar
Don Gagne committed
147 148 149

                                            Row {
                                                spacing:	10
150
                                                x:			__leftMargin
Don Gagne's avatar
Don Gagne committed
151 152 153 154 155

												Fact { id: modelFact; name: modelData + ":" + componentColumn.componentId }

                                                QGCLabel {
                                                    text:	modelFact.name
156
                                                    width:	__charWidth.contentWidth * (__maxParamChars + 2)
Don Gagne's avatar
Don Gagne committed
157 158 159 160 161
                                                }

                                                QGCLabel {

                                                    text:   modelFact.valueString + " " + modelFact.units
162
                                                    width:  __charWidth.contentWidth * 20
Don Gagne's avatar
Don Gagne committed
163 164 165 166 167 168 169 170 171 172 173
                                                    height: contentHeight

                                                    MouseArea {
                                                        anchors.fill:		parent
														acceptedButtons:	Qt.LeftButton | Qt.RightButton

                                                        onClicked: {
															if (mouse.button == Qt.LeftButton) {
																editor.checked = true
																editor.focus = true
															} else if (mouse.button == Qt.RightButton) {
174
																__controller.setRCToParam(modelData)
Don Gagne's avatar
Don Gagne committed
175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190
															}
                                                        }
                                                    }

                                                    FactTextField {
                                                        id:                 editor
                                                        y:                  (parent.height - height) / 2
                                                        width:              parent.width
                                                        visible:            checked
                                                        focus:              true
                                                        fact:               modelFact
                                                        showUnits:          true
                                                        onEditingFinished:  checked = false

                                                        // We use an ExclusiveGroup to manage visibility
                                                        property bool checked: false
191
                                                        property ExclusiveGroup exclusiveGroup: __exclusiveEditorGroup
Don Gagne's avatar
Don Gagne committed
192 193 194 195 196 197 198 199 200
                                                        onExclusiveGroupChanged: {
                                                            if (exclusiveGroup)
                                                                exclusiveGroup.bindCheckable(editor)
                                                        }
                                                    }
                                                }

                                                QGCLabel {
                                                    text: modelFact.shortDescription
201
													visible: fullMode
Don Gagne's avatar
Don Gagne committed
202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224
                                                }
                                            } // Row - Fact value
                                        } // Repeater - Facts
                                    } // Column - Fact rows
                                } // Rectangle - Group

                                Item {
                                    height: 10
                                    width:	10
                                }
                            } // Column - Group
                        } // Repeater - Groups

                        Item {
                            height: 10
                            width:	10
                        }
                    } // Column - Component
                } // Repeater - Components
            } // Column - Component
        } // ScrollView
    } // Column - Outer
}