ParameterEditorDialog.qml 8.33 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 52 53 54 55 56 57 58 59 60
        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)
61
            hideDialog();
62
        }
63
        else */ if (factCombo.visible) {
64
            fact.enumIndex = factCombo.currentIndex
Don Gagne's avatar
Don Gagne committed
65 66
            hideDialog()
        } else {
67
            var errorString = fact.validate(valueField.text, forceSave.checked)
68
            if (errorString === "") {
69 70 71 72 73 74 75
                fact.value = valueField.text
                fact.valueChanged(fact.value)
                hideDialog()
            } else {
                validationError.text = errorString
                forceSave.visible = true
            }
Don Gagne's avatar
Don Gagne committed
76 77 78 79 80 81 82 83
        }
    }

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

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

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

111 112
            Row {
                spacing: defaultTextWidth
Don Gagne's avatar
Don Gagne committed
113

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

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

                QGCButton {
                    anchors.baseline:   valueField.baseline
                    visible:            fact.defaultValueAvailable
127
                    text:               qsTr("Reset to default")
128 129 130 131 132 133 134 135

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

137 138 139 140 141
            QGCComboBox {
                id:             factCombo
                width:          valueField.width
                visible:        _showCombo
                model:          fact.enumStrings
142

143
                property bool _showCombo: fact.enumStrings.length != 0 && fact.bitmaskStrings.length == 0 && !validate
144

145 146 147 148 149 150
                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
                    }
151 152 153
                }
            }

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

161 162 163 164 165 166 167
                    delegate : QGCCheckBox {
                        text : modelData
                        checked : fact.value & fact.bitmaskValues[index]
                    }
                }
            }

168
            QGCLabel { text: fact.name }
Don Gagne's avatar
Don Gagne committed
169

170 171
            Row {
                spacing: defaultTextWidth
Don Gagne's avatar
Don Gagne committed
172

173 174
                QGCLabel { text: qsTr("Units:") }
                QGCLabel { text: fact.units ? fact.units : qsTr("none") }
175
            }
Don Gagne's avatar
Don Gagne committed
176

177 178 179
            Row {
                spacing: defaultTextWidth
                visible: !fact.minIsDefaultForType
Don Gagne's avatar
Don Gagne committed
180

181
                QGCLabel { text: qsTr("Minimum value:") }
182 183
                QGCLabel { text: fact.minString }
            }
Don Gagne's avatar
Don Gagne committed
184

185 186 187
            Row {
                spacing: defaultTextWidth
                visible: !fact.maxIsDefaultForType
Don Gagne's avatar
Don Gagne committed
188

189
                QGCLabel { text: qsTr("Maximum value:") }
190 191
                QGCLabel { text: fact.maxString }
            }
Don Gagne's avatar
Don Gagne committed
192

193 194
            Row {
                spacing: defaultTextWidth
Don Gagne's avatar
Don Gagne committed
195

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

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

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

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

220 221 222 223
            Row {
                width:      parent.width
                spacing:    ScreenTools.defaultFontPixelWidth / 2
                visible:    showRCToParam
Don Gagne's avatar
Don Gagne committed
224

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

232 233
                QGCCheckBox {
                    id:     _advanced
234
                    text:   qsTr("Advanced settings")
235
                }
Don Gagne's avatar
Don Gagne committed
236

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

            QGCButton {
246
                text:           qsTr("Set RC to Param...")
247 248 249 250
                visible:        _advanced.checked && !validate && showRCToParam
                onClicked:      controller.setRCToParam(fact.name)
            }
        } // Column
Don Gagne's avatar
Don Gagne committed
251 252
    }
} // QGCViewDialog