QGCCheckListItem.qml 4.38 KB
Newer Older
DonLakeFlyer's avatar
DonLakeFlyer committed
1 2 3 4 5 6 7 8
/****************************************************************************
 *
 *   (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.
 *
 ****************************************************************************/
9

DonLakeFlyer's avatar
DonLakeFlyer committed
10 11 12 13 14 15 16
import QtQuick                  2.3
import QtQuick.Controls         1.2
import QtQuick.Controls.Styles  1.4

import QGroundControl               1.0
import QGroundControl.Palette       1.0
import QGroundControl.ScreenTools   1.0
17 18

QGCButton {
19 20
    property string name:           ""
    property int    group:          0
DonLakeFlyer's avatar
DonLakeFlyer committed
21
    property string defaulttext:    qsTr("Not checked yet")
22
    property string pendingtext:    ""
DonLakeFlyer's avatar
DonLakeFlyer committed
23 24 25 26 27 28 29 30 31
    property string failuretext:    qsTr("Failure. Check console.")
    property int    state:         stateNotChecked

    readonly property int stateNotChecked:  0
    readonly property int statePending:     1
    readonly property int stateMinorIssue:  2
    readonly property int stateMajorIssue:  3
    readonly property int statePassed:      4

32 33
    property var    _color:         qgcPal.button
    property int    _nrClicked:     0
DonLakeFlyer's avatar
DonLakeFlyer committed
34 35 36 37 38 39
    property string _text:          name + ": " + defaulttext
    property var    _activeVehicle: QGroundControl.multiVehicleManager.activeVehicle

    enabled:    (!_activeVehicle || _activeVehicle.connectionLost) ? false : checklist._checkState >= group
    opacity:    (!_activeVehicle || _activeVehicle.connectionLost) ? 0.4 : 0.2 + (0.8 * (checklist._checkState >= group))
    width:      40 * ScreenTools.defaultFontPixelWidth
40 41 42 43

    style: ButtonStyle {
        background: Rectangle {color:_color; border.color: qgcPal.button; radius:3}
        label: Label {
DonLakeFlyer's avatar
DonLakeFlyer committed
44 45 46 47
            text:                   _text
            wrapMode:               Text.WordWrap
            horizontalAlignment:    Text.AlignHCenter
            color:                  state > 0 ? qgcPal.mapWidgetBorderLight : qgcPal.buttonText
48 49 50
        }
    }

DonLakeFlyer's avatar
DonLakeFlyer committed
51 52 53
    onPendingtextChanged: { if (state === statePending) { getTextFromState(); getColorFromState(); } }
    onFailuretextChanged: { if (state === stateMajorIssue) { getTextFromState(); getColorFromState(); } }
    onStateChanged: { getTextFromState(); getColorFromState(); }
54
    onClicked: {
DonLakeFlyer's avatar
DonLakeFlyer committed
55 56 57 58
        if (state <= statePending) {
            _nrClicked = _nrClicked + 1 //Only allow click-counter to increase when not failed yet
        }
        updateItem()
59 60 61 62 63 64
    }

    function updateItem() {
        // This is the default updateFunction. It assumes the item is a MANUAL check list item, i.e. one that
        // only requires user clicks (one click if pendingtext="", two clicks otherwise) for completion.

DonLakeFlyer's avatar
DonLakeFlyer committed
65 66 67 68 69 70 71 72 73 74 75
        if (_nrClicked === 0) {
            state = stateNotChecked
        } else if (_nrClicked === 1) {
            if (pendingtext.length === 0) {
                state = statePassed
            } else {
                state = statePending
            }
        } else {
            state = statePassed
        }
76 77 78 79

        getTextFromState();
        getColorFromState();
    }
DonLakeFlyer's avatar
DonLakeFlyer committed
80

81
    function getTextFromState() {
DonLakeFlyer's avatar
DonLakeFlyer committed
82 83 84 85 86 87 88 89 90 91 92 93 94
        if (state === stateNotChecked) {
            _text = qsTr(name) + ": " + qsTr(defaulttext)
        } else if (state === statePending) {
            _text = "<b>"+qsTr(name)+"</b>" +": " + pendingtext
        } else if (state === stateMinorIssue) {
            _text = "<b>"+qsTr(name)+"</b>" +": " + qsTr("Minor problem")
        } else if (state === stateMajorIssue) {
            _text = "<b>"+qsTr(name)+"</b>" +": " + failuretext
        } else if (state === statePassed) {
            _text = "<b>"+qsTr(name)+"</b>" +": " + qsTr("OK")
        } else {
            console.warn("Internal Error: invalid state", state)
        }
95
    }
DonLakeFlyer's avatar
DonLakeFlyer committed
96

97
    function getColorFromState() {
DonLakeFlyer's avatar
DonLakeFlyer committed
98 99 100 101 102 103 104 105 106 107 108 109 110
        if (state === stateNotChecked) {
            _color = qgcPal.button
        } else if (state === statePending) {
            _color = Qt.rgba(0.9,0.47,0.2,1)
        } else if (state === stateMinorIssue) {
            _color = Qt.rgba(1.0,0.6,0.2,1)
        } else if (state === stateMajorIssue) {
            _color = Qt.rgba(0.92,0.22,0.22,1)
        } else if (state === statePassed ) {
            _color = Qt.rgba(0.27,0.67,0.42,1)
        } else {
            console.warn("Internal Error: invalid state", state)
        }
111
    }
DonLakeFlyer's avatar
DonLakeFlyer committed
112

113 114 115 116
    function resetNrClicks() {
        _nrClicked=0;
        updateItem();
    }
117
}