ParameterEditorDialog.qml 8.2 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 61
        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)
        }
        else if (factCombo.visible) {
62
            fact.enumIndex = factCombo.currentIndex
Don Gagne's avatar
Don Gagne committed
63 64
            hideDialog()
        } else {
65 66 67 68 69 70 71 72 73
            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
74 75 76 77 78 79 80 81
        }
    }

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

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

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

109 110
            Row {
                spacing: defaultTextWidth
Don Gagne's avatar
Don Gagne committed
111

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

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

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

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

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

141
                property bool _showCombo: fact.enumStrings.length != 0 && fact.bitmaskStrings.length == 0 && !validate
142

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

152
            Column {
Tomaz Canabrava's avatar
Tomaz Canabrava committed
153 154
                spacing: ScreenTools.defaultFontPixelHeight / 2

155 156 157 158 159 160 161 162 163 164
                Repeater {
                    id: bitmaskEditor
                    model: fact.bitmaskStrings
                    delegate : QGCCheckBox {
                        text : modelData
                        checked : fact.value & fact.bitmaskValues[index]
                    }
                }
            }

165
            QGCLabel { text: fact.name }
Don Gagne's avatar
Don Gagne committed
166

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

170 171
                QGCLabel { text: qsTr("Units:") }
                QGCLabel { text: fact.units ? fact.units : qsTr("none") }
172
            }
Don Gagne's avatar
Don Gagne committed
173

174 175 176
            Row {
                spacing: defaultTextWidth
                visible: !fact.minIsDefaultForType
Don Gagne's avatar
Don Gagne committed
177

178
                QGCLabel { text: qsTr("Minimum value:") }
179 180
                QGCLabel { text: fact.minString }
            }
Don Gagne's avatar
Don Gagne committed
181

182 183 184
            Row {
                spacing: defaultTextWidth
                visible: !fact.maxIsDefaultForType
Don Gagne's avatar
Don Gagne committed
185

186
                QGCLabel { text: qsTr("Maximum value:") }
187 188
                QGCLabel { text: fact.maxString }
            }
Don Gagne's avatar
Don Gagne committed
189

190 191
            Row {
                spacing: defaultTextWidth
Don Gagne's avatar
Don Gagne committed
192

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

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

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

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

217 218 219 220
            Row {
                width:      parent.width
                spacing:    ScreenTools.defaultFontPixelWidth / 2
                visible:    showRCToParam
Don Gagne's avatar
Don Gagne committed
221

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

229 230
                QGCCheckBox {
                    id:     _advanced
231
                    text:   qsTr("Advanced settings")
232
                }
Don Gagne's avatar
Don Gagne committed
233

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

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