NemoEditor.qml 6.03 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
    property bool checked: true
    property var missionItem: undefined
    property int availableWidth: 300
    readonly property bool running: _nemoInterface.running
24 25
    property string warningString: _nemoInterface.warningString
    property string infoString: _nemoInterface.infoString
26 27 28 29 30 31 32 33 34 35 36 37 38

    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

        QGCButton {
            text: running ? qsTr("Stop") : qsTr("Start")
49
            Layout.columnSpan: parent.columns
50
            Layout.fillWidth: true
51
            onPressed: {
52 53
                if (running) {
                    _nemoInterface.stop()
54
                } else {
55
                    _nemoInterface.start()
56 57 58 59
                }
            }
        }

60 61 62 63
        QGCLabel {
            text: qsTr("Status: ") + _nemoInterface.statusString
            wrapMode: Text.WordWrap
            horizontalAlignment: Text.AlignVCenter
64 65 66 67
            Layout.columnSpan: parent.columns
            Layout.fillWidth: true
        }

Valentin Platzgummer's avatar
Valentin Platzgummer committed
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
        QGCLabel {
            text: _root.warningString
            visible: text.length > 0
            wrapMode: Text.WordWrap
            horizontalAlignment: Text.AlignLeft
            color: "orange"
            Layout.columnSpan: parent.columns
            Layout.fillWidth: true
        }
        QGCLabel {
            text: _root.infoString
            visible: text.length > 0
            wrapMode: Text.WordWrap
            horizontalAlignment: Text.AlignLeft
            Layout.columnSpan: parent.columns
            Layout.fillWidth: true
        }

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

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

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

            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()
                }
130 131 132
            }
        }

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

139 140
            BusyIndicator {
                id: indicator
141

142
                property bool calculating: missionItem.calculating
143

144 145
                running: calculating
                visible: calculating || timer.running
146

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

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

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

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

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

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

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