ParameterEditorDialog.qml 8.51 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
    property bool   validate:       false
    property string validateValue

dogmaphobic's avatar
dogmaphobic committed
45 46
    property real   _editFieldWidth:  ScreenTools.defaultFontPixelWidth * 20

Don Gagne's avatar
Don Gagne committed
47 48
    ParameterEditorController { id: controller; factPanel: parent }

49 50
    QGCPalette { id: qgcPal; colorGroupEnabled: true }

Don Gagne's avatar
Don Gagne committed
51
    function accept() {
52
        /*
53 54 55 56 57 58 59 60 61 62
        if (bitmaskEditor.visible) {
            var value = 0;
            for (var i = 0; i < fact.bitmaskValues.length; ++i) {
                var checkbox = bitmaskEditor.itemAt(i)
                if (checkbox.checked) {
                    value |= fact.bitmaskValues[i];
                }
            }
            fact.value = value;
            fact.valueChanged(fact.value)
63
            hideDialog();
64
        }
65
        else */ if (factCombo.visible) {
66
            fact.enumIndex = factCombo.currentIndex
Don Gagne's avatar
Don Gagne committed
67 68
            hideDialog()
        } else {
69
            var errorString = fact.validate(valueField.text, forceSave.checked)
70
            if (errorString === "") {
71 72 73 74 75 76 77
                fact.value = valueField.text
                fact.valueChanged(fact.value)
                hideDialog()
            } else {
                validationError.text = errorString
                forceSave.visible = true
            }
Don Gagne's avatar
Don Gagne committed
78 79 80 81 82 83 84 85
        }
    }

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

89 90 91 92 93 94 95 96 97 98 99 100 101 102
    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
103
                text:       fact.shortDescription ? fact.shortDescription : qsTr("Parameter Description (not defined)")
104
            }
Don Gagne's avatar
Don Gagne committed
105

106 107 108 109 110 111
            QGCLabel {
                width:      parent.width
                wrapMode:   Text.WordWrap
                visible:    fact.longDescription
                text:       fact.longDescription
            }
Don Gagne's avatar
Don Gagne committed
112

113 114
            Row {
                spacing: defaultTextWidth
Don Gagne's avatar
Don Gagne committed
115

116 117 118 119 120
                QGCTextField {
                    id:         valueField
                    text:       validate ? validateValue : fact.valueString
                    visible:    fact.enumStrings.length == 0 || validate
                    //focus:  true
121

122 123 124 125 126 127 128
                    // At this point all Facts are numeric
                    inputMethodHints:   Qt.ImhFormattedNumbersOnly
                }

                QGCButton {
                    anchors.baseline:   valueField.baseline
                    visible:            fact.defaultValueAvailable
dogmaphobic's avatar
dogmaphobic committed
129
                    width:              _editFieldWidth
130
                    text:               qsTr("Reset to default")
131 132 133 134 135 136 137 138

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

140 141 142 143 144
            QGCComboBox {
                id:             factCombo
                width:          valueField.width
                visible:        _showCombo
                model:          fact.enumStrings
145

146
                property bool _showCombo: fact.enumStrings.length != 0 && fact.bitmaskStrings.length == 0 && !validate
147

148 149 150 151 152 153
                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
                    }
154 155 156
                }
            }

157
            Column {
Tomaz Canabrava's avatar
Tomaz Canabrava committed
158
                spacing: ScreenTools.defaultFontPixelHeight / 2
159
                visible: fact.bitmaskStrings.length > 0 ? true : false;
160 161 162
                Repeater {
                    id: bitmaskEditor
                    model: fact.bitmaskStrings
163

164 165 166 167 168 169 170
                    delegate : QGCCheckBox {
                        text : modelData
                        checked : fact.value & fact.bitmaskValues[index]
                    }
                }
            }

171
            QGCLabel { text: fact.name }
Don Gagne's avatar
Don Gagne committed
172

173 174
            Row {
                spacing: defaultTextWidth
Don Gagne's avatar
Don Gagne committed
175

176 177
                QGCLabel { text: qsTr("Units:") }
                QGCLabel { text: fact.units ? fact.units : qsTr("none") }
178
            }
Don Gagne's avatar
Don Gagne committed
179

180 181 182
            Row {
                spacing: defaultTextWidth
                visible: !fact.minIsDefaultForType
Don Gagne's avatar
Don Gagne committed
183

184
                QGCLabel { text: qsTr("Minimum value:") }
185 186
                QGCLabel { text: fact.minString }
            }
Don Gagne's avatar
Don Gagne committed
187

188 189 190
            Row {
                spacing: defaultTextWidth
                visible: !fact.maxIsDefaultForType
Don Gagne's avatar
Don Gagne committed
191

192
                QGCLabel { text: qsTr("Maximum value:") }
193 194
                QGCLabel { text: fact.maxString }
            }
Don Gagne's avatar
Don Gagne committed
195

196 197
            Row {
                spacing: defaultTextWidth
Don Gagne's avatar
Don Gagne committed
198

199 200
                QGCLabel { text: qsTr("Default value:") }
                QGCLabel { text: fact.defaultValueAvailable ? fact.defaultValueString : qsTr("none") }
201
            }
Don Gagne's avatar
Don Gagne committed
202

203 204 205
            QGCLabel {
                width:      parent.width
                wrapMode:   Text.WordWrap
206 207
                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!")
208
            }
Don Gagne's avatar
Don Gagne committed
209

210 211 212 213
            QGCLabel {
                id:         validationError
                width:      parent.width
                wrapMode:   Text.WordWrap
214
                color:      qsTr("yellow")
215
            }
Don Gagne's avatar
Don Gagne committed
216

217 218 219
            QGCCheckBox {
                id:         forceSave
                visible:    false
220
                text:       qsTr("Force save (dangerous!)")
221
            }
Don Gagne's avatar
Don Gagne committed
222

223 224 225 226
            Row {
                width:      parent.width
                spacing:    ScreenTools.defaultFontPixelWidth / 2
                visible:    showRCToParam
Don Gagne's avatar
Don Gagne committed
227

228 229 230 231 232 233
                Rectangle {
                    height: 1
                    width:  ScreenTools.defaultFontPixelWidth * 5
                    color:  qgcPal.text
                    anchors.verticalCenter: _advanced.verticalCenter
                }
Don Gagne's avatar
Don Gagne committed
234

235 236
                QGCCheckBox {
                    id:     _advanced
237
                    text:   qsTr("Advanced settings")
238
                }
Don Gagne's avatar
Don Gagne committed
239

240 241 242 243 244 245 246 247 248
                Rectangle {
                    height: 1
                    width:  ScreenTools.defaultFontPixelWidth * 5
                    color:  qgcPal.text
                    anchors.verticalCenter: _advanced.verticalCenter
                }
            }

            QGCButton {
249
                text:           qsTr("Set RC to Param...")
dogmaphobic's avatar
dogmaphobic committed
250
                width:          _editFieldWidth
251 252 253 254
                visible:        _advanced.checked && !validate && showRCToParam
                onClicked:      controller.setRCToParam(fact.name)
            }
        } // Column
Don Gagne's avatar
Don Gagne committed
255 256
    }
} // QGCViewDialog