ParameterEditorDialog.qml 7.38 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 24 25 26
/*=====================================================================

 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>

27
import QtQuick          2.5
Don Gagne's avatar
Don Gagne committed
28 29
import QtQuick.Controls 1.3

30 31 32 33 34 35
import QGroundControl.Controls      1.0
import QGroundControl.Palette       1.0
import QGroundControl.Controllers   1.0
import QGroundControl.FactSystem    1.0
import QGroundControl.FactControls  1.0
import QGroundControl.ScreenTools   1.0
Don Gagne's avatar
Don Gagne committed
36 37

QGCViewDialog {
38 39
    id: root

Don Gagne's avatar
Don Gagne committed
40
    property Fact   fact
41
    property bool   showRCToParam:  false
Don Gagne's avatar
Don Gagne committed
42 43 44 45 46
    property bool   validate:       false
    property string validateValue

    ParameterEditorController { id: controller; factPanel: parent }

47 48
    QGCPalette { id: qgcPal; colorGroupEnabled: true }

Don Gagne's avatar
Don Gagne committed
49
    function accept() {
50 51
        if (factCombo.visible) {
            fact.enumIndex = factCombo.currentIndex
Don Gagne's avatar
Don Gagne committed
52 53
            hideDialog()
        } else {
54 55 56 57 58 59 60 61 62
            var errorString = fact.validate(valueField.text, forceSave.checked)
            if (errorString == "") {
                fact.value = valueField.text
                fact.valueChanged(fact.value)
                hideDialog()
            } else {
                validationError.text = errorString
                forceSave.visible = true
            }
Don Gagne's avatar
Don Gagne committed
63 64 65 66 67 68 69 70
        }
    }

    Component.onCompleted: {
        if (validate) {
            validationError.text = fact.validate(validateValue, false /* convertOnly */)
            forceSave.visible = true
        }
71
        //valueField.forceActiveFocus()
Don Gagne's avatar
Don Gagne committed
72 73
    }

74 75 76 77 78 79 80 81 82 83 84 85 86 87
    QGCFlickable {
        anchors.fill:       parent
        contentHeight:      _column.y + _column.height
        flickableDirection: Flickable.VerticalFlick

        Column {
            id:             _column
            spacing:        defaultTextHeight
            anchors.left:   parent.left
            anchors.right:  parent.right

            QGCLabel {
                width:      parent.width
                wrapMode:   Text.WordWrap
88
                text:       fact.shortDescription ? fact.shortDescription : qsTr("Description missing")
89
            }
Don Gagne's avatar
Don Gagne committed
90

91 92 93 94 95 96
            QGCLabel {
                width:      parent.width
                wrapMode:   Text.WordWrap
                visible:    fact.longDescription
                text:       fact.longDescription
            }
Don Gagne's avatar
Don Gagne committed
97

98 99
            Row {
                spacing: defaultTextWidth
Don Gagne's avatar
Don Gagne committed
100

101 102 103 104 105
                QGCTextField {
                    id:         valueField
                    text:       validate ? validateValue : fact.valueString
                    visible:    fact.enumStrings.length == 0 || validate
                    //focus:  true
106

107 108 109 110 111 112 113
                    // At this point all Facts are numeric
                    inputMethodHints:   Qt.ImhFormattedNumbersOnly
                }

                QGCButton {
                    anchors.baseline:   valueField.baseline
                    visible:            fact.defaultValueAvailable
114
                    text:               qsTr("Reset to default")
115 116 117 118 119 120 121 122

                    onClicked: {
                        fact.value = fact.defaultValue
                        fact.valueChanged(fact.value)
                        hideDialog()
                    }
                }
            }
Don Gagne's avatar
Don Gagne committed
123

124 125 126 127 128
            QGCComboBox {
                id:             factCombo
                width:          valueField.width
                visible:        _showCombo
                model:          fact.enumStrings
129

130
                property bool _showCombo: fact.enumStrings.length != 0 && !validate
131

132 133 134 135 136 137
                Component.onCompleted: {
                    // We can't bind directly to fact.enumIndex since that would add an unknown value
                    // if there are no enum strings.
                    if (_showCombo) {
                        currentIndex = fact.enumIndex
                    }
138 139 140
                }
            }

141
            QGCLabel { text: fact.name }
Don Gagne's avatar
Don Gagne committed
142

143 144
            Row {
                spacing: defaultTextWidth
Don Gagne's avatar
Don Gagne committed
145

146 147
                QGCLabel { text: qsTr("Units:") }
                QGCLabel { text: fact.units ? fact.units : qsTr("none") }
148
            }
Don Gagne's avatar
Don Gagne committed
149

150 151 152
            Row {
                spacing: defaultTextWidth
                visible: !fact.minIsDefaultForType
Don Gagne's avatar
Don Gagne committed
153

154
                QGCLabel { text: qsTr("Minimum value:") }
155 156
                QGCLabel { text: fact.minString }
            }
Don Gagne's avatar
Don Gagne committed
157

158 159 160
            Row {
                spacing: defaultTextWidth
                visible: !fact.maxIsDefaultForType
Don Gagne's avatar
Don Gagne committed
161

162
                QGCLabel { text: qsTr("Maximum value:") }
163 164
                QGCLabel { text: fact.maxString }
            }
Don Gagne's avatar
Don Gagne committed
165

166 167
            Row {
                spacing: defaultTextWidth
Don Gagne's avatar
Don Gagne committed
168

169 170
                QGCLabel { text: qsTr("Default value:") }
                QGCLabel { text: fact.defaultValueAvailable ? fact.defaultValueString : qsTr("none") }
171
            }
Don Gagne's avatar
Don Gagne committed
172

173 174 175
            QGCLabel {
                width:      parent.width
                wrapMode:   Text.WordWrap
176 177
                text:       qsTr("Warning: Modifying parameters while vehicle is in flight can lead to vehicle instability and possible vehicle loss. ") +
                            qsTr("Make sure you know what you are doing and double-check your values before Save!")
178
            }
Don Gagne's avatar
Don Gagne committed
179

180 181 182 183
            QGCLabel {
                id:         validationError
                width:      parent.width
                wrapMode:   Text.WordWrap
184
                color:      qsTr("yellow")
185
            }
Don Gagne's avatar
Don Gagne committed
186

187 188 189
            QGCCheckBox {
                id:         forceSave
                visible:    false
190
                text:       qsTr("Force save (dangerous!)")
191
            }
Don Gagne's avatar
Don Gagne committed
192

193 194 195 196
            Row {
                width:      parent.width
                spacing:    ScreenTools.defaultFontPixelWidth / 2
                visible:    showRCToParam
Don Gagne's avatar
Don Gagne committed
197

198 199 200 201 202 203
                Rectangle {
                    height: 1
                    width:  ScreenTools.defaultFontPixelWidth * 5
                    color:  qgcPal.text
                    anchors.verticalCenter: _advanced.verticalCenter
                }
Don Gagne's avatar
Don Gagne committed
204

205 206
                QGCCheckBox {
                    id:     _advanced
207
                    text:   qsTr("Advanced settings")
208
                }
Don Gagne's avatar
Don Gagne committed
209

210 211 212 213 214 215 216 217 218
                Rectangle {
                    height: 1
                    width:  ScreenTools.defaultFontPixelWidth * 5
                    color:  qgcPal.text
                    anchors.verticalCenter: _advanced.verticalCenter
                }
            }

            QGCButton {
219
                text:           qsTr("Set RC to Param...")
220 221 222 223
                visible:        _advanced.checked && !validate && showRCToParam
                onClicked:      controller.setRCToParam(fact.name)
            }
        } // Column
Don Gagne's avatar
Don Gagne committed
224 225
    }
} // QGCViewDialog