PreFlightCheckList.qml 6.2 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
/****************************************************************************
 *
 *   (c) 2009-2016 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
 *
 * QGroundControl is licensed according to the terms in the file
 * COPYING.md in the root of the source code directory.
 *
 ****************************************************************************/

import QtQuick                      2.11
import QtQuick.Controls             2.4
import QtQml.Models                 2.1

import QGroundControl               1.0
import QGroundControl.ScreenTools   1.0
import QGroundControl.Controls      1.0
import QGroundControl.FlightDisplay 1.0
import QGroundControl.Vehicle       1.0

Rectangle {
    width:      mainColumn.width  + ScreenTools.defaultFontPixelWidth * 3
    height:     Math.min(mainWindow.height - (_verticalMargin * 2), mainColumn.height + ScreenTools.defaultFontPixelHeight)
    color:      qgcPal.windowShade
    radius:     3

    property real _verticalMargin: ScreenTools.defaultFontPixelHeight / 2

    Loader {
        id:     modelContainer
        source: "/checklists/DefaultChecklist.qml"
    }

    property bool allChecksPassed:  false
    property var  vehicleCopy:       globals.activeVehicle

    onVehicleCopyChanged: {
        checkListRepeater.model.reset()
    }

    onAllChecksPassedChanged: {
        if (allChecksPassed) {
            globals.activeVehicle.checkListState = Vehicle.CheckListPassed
        } else {
            globals.activeVehicle.checkListState = Vehicle.CheckListFailed
        }
    }

    function _handleGroupPassedChanged(index, passed) {
        if (passed) {
            // Collapse current group
            var group = checkListRepeater.itemAt(index)
            group._checked = false
            // Expand next group
            if (index + 1 < checkListRepeater.count) {
                group = checkListRepeater.itemAt(index + 1)
                group.enabled = true
                group._checked = true
            }
        }

        // Walk the list and check if any group is failing
        var allPassed = true
        for (var i=0; i < checkListRepeater.count; i++) {
            if (!checkListRepeater.itemAt(i).passed) {
                allPassed = false
                break
            }
        }
        allChecksPassed = allPassed;
    }

    //-- Pick a checklist model that matches the current airframe type (if any)
    function _updateModel() {
        var vehicle = globals.activeVehicle
        if (!vehicle) {
           vehicle = QGroundControl.multiVehicleManager.offlineEditingVehicle
        }

        if(vehicle.multiRotor) {
            modelContainer.source = "/checklists/MultiRotorChecklist.qml"
        } else if(vehicle.vtol) {
            modelContainer.source = "/checklists/VTOLChecklist.qml"
        } else if(vehicle.rover) {
            modelContainer.source = "/checklists/RoverChecklist.qml"
        } else if(vehicle.sub) {
            modelContainer.source = "/checklists/SubChecklist.qml"
        } else if(vehicle.fixedWing) {
            modelContainer.source = "/checklists/FixedWingChecklist.qml"
        } else {
            modelContainer.source = "/checklists/DefaultChecklist.qml"
        }
        return
    }

    Component.onCompleted: {
        _updateModel()
    }

    onVisibleChanged: {
        if(globals.activeVehicle) {
            if(visible) {
                _updateModel()
            }
        }
    }

    // We delay the updates when a group passes so the user can see all items green for a moment prior to hiding
    Timer {
        id:         delayedGroupPassed
        interval:   750

        property int index

        onTriggered: _handleGroupPassedChanged(index, true /* passed */)
    }

    QGCFlickable {
        id:                     flickable
        anchors.topMargin:      _verticalMargin
        anchors.bottomMargin:   _verticalMargin
        anchors.leftMargin:     _horizontalMargin
        anchors.rightMargin:    _horizontalMargin
        anchors.fill:           parent
        flickableDirection:     Flickable.VerticalFlick
        contentWidth:           mainColumn.width
        contentHeight:          mainColumn.height

        property real _horizontalMargin:    1.5 * ScreenTools.defaultFontPixelWidth
        property real _verticalMargin:      0.6 * ScreenTools.defaultFontPixelWidth

        Column {
            id:         mainColumn
            width:      40  * ScreenTools.defaultFontPixelWidth
            spacing:    0.8 * ScreenTools.defaultFontPixelWidth

            function groupPassedChanged(index, passed) {
                if (passed) {
                    delayedGroupPassed.index = index
                    delayedGroupPassed.restart()
                } else {
                    _handleGroupPassedChanged(index, passed)
                }
            }

            // Header/title of checklist
            Item {
                width:      parent.width
                height:     1.75 * ScreenTools.defaultFontPixelHeight

                QGCLabel {
                    text:                   qsTr("Pre-Flight Checklist %1").arg(allChecksPassed ? qsTr("(passed)") : "")
                    anchors.left:           parent.left
                    anchors.verticalCenter: parent.verticalCenter
                    font.pointSize:         ScreenTools.mediumFontPointSize
                }
                QGCButton {
                    width:                  1.2 * ScreenTools.defaultFontPixelHeight
                    height:                 1.2 * ScreenTools.defaultFontPixelHeight
                    anchors.right:          parent.right
                    anchors.verticalCenter: parent.verticalCenter
                    tooltip:                qsTr("Reset the checklist (e.g. after a vehicle reboot)")

                    onClicked:              checkListRepeater.model.reset()

                    QGCColoredImage {
                        source:         "/qmlimages/MapSyncBlack.svg"
                        color:          qgcPal.buttonText
                        anchors.fill:   parent
                    }
                }
            }

            // All check list items
            Repeater {
                id:     checkListRepeater
                model:  modelContainer.item.model
            }
        }
    }
}