NemoEditor.qml 5.78 KB
Newer Older
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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227
import QtQuick 2.0

import Qt.labs.settings 1.0
import QtQuick.Layouts 1.11
import QtQuick.Controls 1.4
import QGroundControl.Controls 1.0
import QGroundControl.FactControls 1.0
import QGroundControl.ScreenTools 1.0

import MeasurementComplexItem 1.0 as MCI

GridLayout {
    id: _root

    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
    property bool _holding

    columnSpacing: _margin
    rowSpacing: _margin
    columns: 2

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

    QGCLabel {
        text: _root.errorString
        wrapMode: Text.WordWrap
        horizontalAlignment: Text.AlignLeft
        color: "orange"
        Layout.columnSpan: parent.columns
        Layout.fillWidth: true
        visible: !_root.areasCorrect
    }

    QGCButton {
        text: running ? qsTr("Stop") : qsTr("Start")
        Layout.columnSpan: parent.columns
        Layout.fillWidth: true
        onPressed: {
            if (running) {
                _nemoInterface.stop()
            } else {
                _nemoInterface.start()
            }
        }
    }

    QGCLabel {
        text: qsTr("Status: ") + _nemoInterface.statusString
        wrapMode: Text.WordWrap
        horizontalAlignment: Text.AlignVCenter
        Layout.columnSpan: parent.columns
        Layout.fillWidth: true
    }

    SectionHeader {
        id: progressHeader
        Layout.fillWidth: true
        Layout.columnSpan: parent.columns
        text: qsTr("Progress")
    }

    GridLayout {
        columnSpacing: _margin
        rowSpacing: _margin
        columns: 2
        Layout.columnSpan: parent.columns
        Layout.fillWidth: true
        visible: progressHeader.checked

        QGCButton {
            text: !_holding ? qsTr("Hold") : qsTr("Stop Holding")
            Layout.fillWidth: true
            Layout.columnSpan: parent.columns
            onPressed: {
                if (_holding) {
                    _stopHolding()
                    _holding = false
                } else {
                    _holdProgress()
                    _holding = true
                }
            }
        }

        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()
            }
        }
    }

    // bussy indicator
    ColumnLayout {
        Layout.fillWidth: true
        spacing: _margin
        Layout.maximumWidth: parent.width

        BusyIndicator {
            id: indicator

            property bool calculating: missionItem.calculating

            running: calculating
            visible: calculating || timer.running

            onCalculatingChanged: {
                if (!calculating) {
                    // defer hiding
                    timer.restart()
                }
            }

            Timer {
                id: timer
                interval: 1000
                repeat: false
                running: false
            }
        }
    } // indicator column

    SectionHeader {
        id: hintHeader
        Layout.fillWidth: true
        Layout.columnSpan: parent.columns
        text: qsTr("Hints")
    }

    GridLayout {
        columnSpacing: _margin
        rowSpacing: _margin
        columns: 2
        Layout.columnSpan: 2
        Layout.fillWidth: true
        visible: hintHeader.checked

        QGCLabel {
            id: hintLabel
            wrapMode: Text.WordWrap
            horizontalAlignment: Text.AlignLeft
            text: qsTr("Use this tab to connect to a device implementing the Nemo Interface.
Use the Random button to simulate measurement progress.")
            Layout.fillWidth: true
            Layout.columnSpan: parent.columns
        }
    }

    Settings {
        property alias showHint: hintHeader.checked
    }

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

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

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