VehicleSummary.qml 6.67 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
/*=====================================================================

 QGroundControl Open Source Ground Control Station

 (c) 2009 - 2015 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>

 This file is part of the QGROUNDCONTROL project

 QGROUNDCONTROL is free software: you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation, either version 3 of the License, or
 (at your option) any later version.

 QGROUNDCONTROL is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with QGROUNDCONTROL. If not, see <http://www.gnu.org/licenses/>.

 ======================================================================*/

24 25 26
import QtQuick                  2.2
import QtQuick.Controls         1.2
import QtQuick.Controls.Styles  1.2
27

28
import QGroundControl                       1.0
29 30 31 32
import QGroundControl.FactSystem            1.0
import QGroundControl.Controls              1.0
import QGroundControl.ScreenTools           1.0
import QGroundControl.MultiVehicleManager   1.0
33
import QGroundControl.Palette               1.0
34 35

Rectangle {
dogmaphobic's avatar
dogmaphobic committed
36 37
    id:             _summaryRoot
    anchors.fill:   parent
38 39
    anchors.rightMargin: ScreenTools.defaultFontPixelWidth
    anchors.leftMargin:  ScreenTools.defaultFontPixelWidth
dogmaphobic's avatar
dogmaphobic committed
40 41
    color:          qgcPal.window

42
    property real _minSummaryW:     ScreenTools.defaultFontPixelWidth * 42
43
    property real _summaryBoxWidth: _minSummaryW
44
    property real _summaryBoxSpace: ScreenTools.defaultFontPixelWidth * 2
45 46 47 48 49 50 51 52 53 54 55

    function computeSummaryBoxSize() {
        var sw  = 0
        var rw  = 0
        var idx = Math.floor(_summaryRoot.width / (_minSummaryW + ScreenTools.defaultFontPixelWidth))
        if(idx < 1) {
            _summaryBoxWidth = _summaryRoot.width
            _summaryBoxSpace = 0
        } else {
            _summaryBoxSpace = 0
            if(idx > 1) {
56
                _summaryBoxSpace = ScreenTools.defaultFontPixelWidth * 2
57 58 59 60 61 62
                sw = _summaryBoxSpace * (idx - 1)
            }
            rw = _summaryRoot.width - sw
            _summaryBoxWidth = rw / idx
        }
    }
dogmaphobic's avatar
dogmaphobic committed
63 64 65 66

    function capitalizeWords(sentence) {
        return sentence.replace(/(?:^|\s)\S/g, function(a) { return a.toUpperCase(); });
    }
67

68 69 70 71 72 73 74 75 76 77 78 79
    QGCPalette {
        id:                 qgcPal
        colorGroupEnabled:  enabled
    }

    Component.onCompleted: {
        computeSummaryBoxSize()
    }

    onWidthChanged: {
        computeSummaryBoxSize()
    }
80

Don Gagne's avatar
Don Gagne committed
81
    QGCFlickable {
dogmaphobic's avatar
dogmaphobic committed
82 83
        clip:               true
        anchors.fill:       parent
84 85
        contentHeight:      summaryColumn.height
        contentWidth:       _summaryRoot.width
dogmaphobic's avatar
dogmaphobic committed
86
        flickableDirection: Flickable.VerticalFlick
87 88 89 90 91 92 93 94 95 96

        Column {
            id:             summaryColumn
            width:          _summaryRoot.width
            spacing:        ScreenTools.defaultFontPixelHeight

            QGCLabel {
                width:			parent.width
                wrapMode:		Text.WordWrap
                color:			setupComplete ? qgcPal.text : qgcPal.warningText
97
                font.family:    ScreenTools.demiboldFontFamily
dogmaphobic's avatar
dogmaphobic committed
98
                horizontalAlignment: Text.AlignHCenter
99
                text:           setupComplete ?
100 101
                    qsTr("Below you will find a summary of the settings for your vehicle. To the left are the setup menus for each component.") :
                    qsTr("WARNING: Your vehicle requires setup prior to flight. Please resolve the items marked in red using the menu on the left.")
102
                property bool setupComplete: QGroundControl.multiVehicleManager.activeVehicle ? QGroundControl.multiVehicleManager.activeVehicle.autopilot.setupComplete : false
103
            }
104

105 106 107 108
            Flow {
                id:         _flowCtl
                width:      _summaryRoot.width
                spacing:    _summaryBoxSpace
Don Gagne's avatar
Don Gagne committed
109

110
                Repeater {
111
                    model: QGroundControl.multiVehicleManager.activeVehicle ? QGroundControl.multiVehicleManager.activeVehicle.autopilot.vehicleComponents : undefined
112

113
                    // Outer summary item rectangle
Don Gagne's avatar
Don Gagne committed
114
                    Rectangle {
115
                        width:      _summaryBoxWidth
116
                        height:     ScreenTools.defaultFontPixelHeight * 13
117
                        color:      qgcPal.windowShade
dogmaphobic's avatar
dogmaphobic committed
118
                        visible:    modelData.summaryQmlSource.toString() !== ""
119 120 121 122 123
                        border.width: 1
                        border.color: qgcPal.text
                        Component.onCompleted: {
                            border.color = Qt.rgba(border.color.r, border.color.g, border.color.b, 0.1)
                        }
124

125
                        readonly property real titleHeight: ScreenTools.defaultFontPixelHeight * 2
126 127

                        // Title bar
128
                        QGCButton {
129 130 131
                            id:     titleBar
                            width:  parent.width
                            height: titleHeight
dogmaphobic's avatar
dogmaphobic committed
132
                            text:   capitalizeWords(modelData.name)
133 134 135

                            // Setup indicator
                            Rectangle {
136
                                anchors.rightMargin:    ScreenTools.defaultFontPixelWidth
137 138
                                anchors.right:          parent.right
                                anchors.verticalCenter: parent.verticalCenter
139
                                width:                  ScreenTools.defaultFontPixelWidth * 1.75
140 141 142 143 144
                                height:                 width
                                radius:                 width / 2
                                color:                  modelData.setupComplete ? "#00d932" : "red"
                                visible:                modelData.requiresSetup
                            }
145 146 147
                            onClicked : {
                                setupView.showVehicleComponentPanel(modelData)
                            }
148 149 150 151 152 153
                        }
                        // Summary Qml
                        Rectangle {
                            anchors.top:    titleBar.bottom
                            width:          parent.width
                            Loader {
154 155 156
                                anchors.fill:       parent
                                anchors.margins:    ScreenTools.defaultFontPixelWidth
                                source:             modelData.summaryQmlSource
157
                            }
158 159 160 161 162 163 164
                        }
                    }
                }
            }
        }
    }
}