NemoEditor.qml 6.01 KB
Newer Older
1 2 3 4
import QtQuick 2.0
import Qt.labs.settings 1.0
import QtQuick.Layouts 1.11
import QtQuick.Controls 1.4
5

6 7 8
import QGroundControl.Controls 1.0
import QGroundControl.FactControls 1.0
import QGroundControl.ScreenTools 1.0
9
import QGroundControl.Palette 1.0
10 11 12

import MeasurementComplexItem 1.0 as MCI

13
Rectangle {
14 15
    id: _root

16 17 18 19
    width: mainGrid.width
    height: mainGrid.height
    color: qgcPal.windowShadeDark

20 21 22 23 24
    property bool checked: true
    property var missionItem: undefined
    property int availableWidth: 300
    property bool error: errorString.lenght >= 0
    readonly property bool running: _nemoInterface.running
25 26
    property string warningString: _nemoInterface.warningString
    property string infoString: _nemoInterface.infoString
27 28 29 30 31 32 33 34 35 36 37 38 39

    signal abort

    property var _areaData: missionItem.areaData
    property real _margin: ScreenTools.defaultFontPixelWidth / 2
    property var _nemoInterface: MCI.NemoInterface

    Component.onCompleted: {
        console.assert(missionItem !== undefined,
                       "please set the missionItem property")
    }

    GridLayout {
40 41 42
        id: mainGrid

        width: availableWidth
43 44 45 46
        columnSpacing: _margin
        rowSpacing: _margin
        columns: 2

47 48 49 50 51 52
        QGCLabel {
            text: _root.errorString
            wrapMode: Text.WordWrap
            horizontalAlignment: Text.AlignLeft
            color: "orange"
            Layout.columnSpan: parent.columns
53
            Layout.fillWidth: true
54 55 56 57 58 59 60
        }
        QGCLabel {
            text: _root.infoString
            wrapMode: Text.WordWrap
            horizontalAlignment: Text.AlignLeft
            Layout.columnSpan: parent.columns
            Layout.fillWidth: true
61 62 63 64
        }

        QGCButton {
            text: running ? qsTr("Stop") : qsTr("Start")
65
            Layout.columnSpan: parent.columns
66
            Layout.fillWidth: true
67
            onPressed: {
68 69
                if (running) {
                    _nemoInterface.stop()
70
                } else {
71
                    _nemoInterface.start()
72 73 74 75
                }
            }
        }

76 77 78 79
        QGCLabel {
            text: qsTr("Status: ") + _nemoInterface.statusString
            wrapMode: Text.WordWrap
            horizontalAlignment: Text.AlignVCenter
80 81 82 83
            Layout.columnSpan: parent.columns
            Layout.fillWidth: true
        }

84 85 86 87 88 89 90 91 92 93 94
        SectionHeader {
            id: progressHeader
            Layout.fillWidth: true
            Layout.columnSpan: parent.columns
            text: qsTr("Progress")
        }

        GridLayout {
            columnSpacing: _margin
            rowSpacing: _margin
            columns: 2
95 96
            Layout.columnSpan: parent.columns
            Layout.fillWidth: true
97 98 99
            visible: progressHeader.checked

            QGCButton {
100
                text: !missionItem.holdProgress ? qsTr("Hold") : qsTr("Stop Holding")
101 102 103
                Layout.fillWidth: true
                Layout.columnSpan: parent.columns
                onPressed: {
104 105
                    if (missionItem.holdProgress) {
                        missionItem.holdProgress = false
106
                    } else {
107
                        missionItem.holdProgress = true
108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
                    }
                }
            }

            QGCButton {
                text: qsTr("Random")
                Layout.columnSpan: parent.columns
                Layout.fillWidth: true
                onPressed: {
                    _randomProgress()
                }
            }

            QGCButton {
                text: qsTr("Reset")
                Layout.columnSpan: parent.columns
                Layout.fillWidth: true
                onPressed: {
                    _resetProgress()
                }
128 129 130
            }
        }

131 132 133 134 135
        // bussy indicator
        ColumnLayout {
            Layout.fillWidth: true
            spacing: _margin
            Layout.maximumWidth: parent.width
136

137 138
            BusyIndicator {
                id: indicator
139

140
                property bool calculating: missionItem.calculating
141

142 143
                running: calculating
                visible: calculating || timer.running
144

145 146 147 148 149
                onCalculatingChanged: {
                    if (!calculating) {
                        // defer hiding
                        timer.restart()
                    }
150 151
                }

152 153 154 155 156 157
                Timer {
                    id: timer
                    interval: 1000
                    repeat: false
                    running: false
                }
158
            }
159
        } // indicator column
160

161 162 163 164 165 166
        SectionHeader {
            id: hintHeader
            Layout.fillWidth: true
            Layout.columnSpan: parent.columns
            text: qsTr("Hints")
        }
167

168 169 170 171 172 173 174
        GridLayout {
            columnSpacing: _margin
            rowSpacing: _margin
            columns: 2
            Layout.columnSpan: 2
            Layout.fillWidth: true
            visible: hintHeader.checked
175

176 177 178 179 180
            QGCLabel {
                id: hintLabel
                wrapMode: Text.WordWrap
                horizontalAlignment: Text.AlignLeft
                text: qsTr("Use this tab to connect to a device implementing the Nemo Interface.
181
Use the Random button to simulate measurement progress.")
182 183 184
                Layout.fillWidth: true
                Layout.columnSpan: parent.columns
            }
185 186
        }

187 188 189 190
        Settings {
            property alias showHint: hintHeader.checked
        }
    } // GridLayout
191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214

    function _randomProgress() {
        var areaArray = _areaData.measurementAreaList
        for (var i = 0; i < areaArray.count; ++i) {
            var area = areaArray.get(i)
            if (area) {
                area.randomProgress()
            } else {
                console.log("empty area!")
            }
        }
    }

    function _resetProgress() {
        var areaArray = _areaData.measurementAreaList
        for (var i = 0; i < areaArray.count; ++i) {
            var area = areaArray.get(i)
            if (area) {
                area.resetProgress()
            } else {
                console.log("empty area!")
            }
        }
    }
215
} // Rectangle