NemoEditor.qml 5.74 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 25 26 27 28 29 30 31 32 33 34 35 36 37 38
    property bool checked: true
    property var missionItem: undefined
    property int availableWidth: 300
    property bool error: errorString.lenght >= 0
    readonly property bool running: _nemoInterface.running
    property string errorString: ""

    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 {
39 40 41
        id: mainGrid

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

46 47 48 49 50 51
        QGCLabel {
            text: _root.errorString
            wrapMode: Text.WordWrap
            horizontalAlignment: Text.AlignLeft
            color: "orange"
            Layout.columnSpan: parent.columns
52
            Layout.fillWidth: true
53 54 55 56 57
            visible: !_root.areasCorrect
        }

        QGCButton {
            text: running ? qsTr("Stop") : qsTr("Start")
58
            Layout.columnSpan: parent.columns
59
            Layout.fillWidth: true
60
            onPressed: {
61 62
                if (running) {
                    _nemoInterface.stop()
63
                } else {
64
                    _nemoInterface.start()
65 66 67 68
                }
            }
        }

69 70 71 72
        QGCLabel {
            text: qsTr("Status: ") + _nemoInterface.statusString
            wrapMode: Text.WordWrap
            horizontalAlignment: Text.AlignVCenter
73 74 75 76
            Layout.columnSpan: parent.columns
            Layout.fillWidth: true
        }

77 78 79 80 81 82 83 84 85 86 87
        SectionHeader {
            id: progressHeader
            Layout.fillWidth: true
            Layout.columnSpan: parent.columns
            text: qsTr("Progress")
        }

        GridLayout {
            columnSpacing: _margin
            rowSpacing: _margin
            columns: 2
88 89
            Layout.columnSpan: parent.columns
            Layout.fillWidth: true
90 91 92
            visible: progressHeader.checked

            QGCButton {
93
                text: !missionItem.holdProgress ? qsTr("Hold") : qsTr("Stop Holding")
94 95 96
                Layout.fillWidth: true
                Layout.columnSpan: parent.columns
                onPressed: {
97 98
                    if (missionItem.holdProgress) {
                        missionItem.holdProgress = false
99
                    } else {
100
                        missionItem.holdProgress = true
101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
                    }
                }
            }

            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()
                }
121 122 123
            }
        }

124 125 126 127 128
        // bussy indicator
        ColumnLayout {
            Layout.fillWidth: true
            spacing: _margin
            Layout.maximumWidth: parent.width
129

130 131
            BusyIndicator {
                id: indicator
132

133
                property bool calculating: missionItem.calculating
134

135 136
                running: calculating
                visible: calculating || timer.running
137

138 139 140 141 142
                onCalculatingChanged: {
                    if (!calculating) {
                        // defer hiding
                        timer.restart()
                    }
143 144
                }

145 146 147 148 149 150
                Timer {
                    id: timer
                    interval: 1000
                    repeat: false
                    running: false
                }
151
            }
152
        } // indicator column
153

154 155 156 157 158 159
        SectionHeader {
            id: hintHeader
            Layout.fillWidth: true
            Layout.columnSpan: parent.columns
            text: qsTr("Hints")
        }
160

161 162 163 164 165 166 167
        GridLayout {
            columnSpacing: _margin
            rowSpacing: _margin
            columns: 2
            Layout.columnSpan: 2
            Layout.fillWidth: true
            visible: hintHeader.checked
168

169 170 171 172 173
            QGCLabel {
                id: hintLabel
                wrapMode: Text.WordWrap
                horizontalAlignment: Text.AlignLeft
                text: qsTr("Use this tab to connect to a device implementing the Nemo Interface.
174
Use the Random button to simulate measurement progress.")
175 176 177
                Layout.fillWidth: true
                Layout.columnSpan: parent.columns
            }
178 179
        }

180 181 182 183
        Settings {
            property alias showHint: hintHeader.checked
        }
    } // GridLayout
184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207

    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!")
            }
        }
    }
208
} // Rectangle