QGCAltitudeWidget.qml 3.4 KB
Newer Older
dogmaphobic's avatar
dogmaphobic committed
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
/*=====================================================================

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/>.

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

/**
 * @file
 *   @brief QGC Altitude Indicator
 *   @author Gus Grubba <mavlink@grubba.com>
 */

// TODO: This is temporary until I find a better way to display a large range of numbers

import QtQuick 2.4

Rectangle {
    id: root
    property real altitude:         50
dogmaphobic's avatar
dogmaphobic committed
37 38
    property real _reticleSpacing:  16
    property real _reticleHeight:   2
dogmaphobic's avatar
dogmaphobic committed
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
    property real _reticleSlot:     _reticleSpacing + _reticleHeight
    property var  _speedArray:      []
    property int  _currentCenter:   0
    property int  _currentStart:    -100

    function updateArray() {
        var tmpArray = [];
        _currentCenter = Math.floor(altitude / 5) * 5;
        _currentStart = _currentCenter + 100;
        for(var i = 0; i < 40; i++) {
            tmpArray[i] = _currentStart - (i * 5);
        }
        _speedArray = tmpArray;
    }

    Component.onCompleted:
    {
        updateArray() ;
    }

    onAltitudeChanged: {
        if(Math.abs(_currentCenter - altitude) > 50) {
            updateArray() ;
        }
    }

    anchors.verticalCenter: parent.verticalCenter

    height: parent.height * 0.75 > 280 ? 280 : parent.height * 0.75
    clip:   true
    smooth: true
70
    radius: 5
dogmaphobic's avatar
dogmaphobic committed
71 72
    border.color: Qt.rgba(1,1,1,0.25)
    gradient: Gradient {
73 74 75
        GradientStop { position: 0.0; color: Qt.rgba(0,0,0,0.65) }
        GradientStop { position: 0.5; color: Qt.rgba(0,0,0,0.25) }
        GradientStop { position: 1.0; color: Qt.rgba(0,0,0,0.65) }
dogmaphobic's avatar
dogmaphobic committed
76 77
    }
    Column{
dogmaphobic's avatar
dogmaphobic committed
78
        id: col
79 80
        width: parent.width
        anchors.verticalCenter: parent.verticalCenter
dogmaphobic's avatar
dogmaphobic committed
81 82 83
        spacing: _reticleSpacing
        Repeater {
            model: _speedArray
dogmaphobic's avatar
dogmaphobic committed
84
            anchors.left: parent.left
dogmaphobic's avatar
dogmaphobic committed
85
            Rectangle {
86
                property int _alt: modelData
dogmaphobic's avatar
dogmaphobic committed
87
                width:  (_alt % 10 === 0) ? 10 : 15
dogmaphobic's avatar
dogmaphobic committed
88
                height: _reticleHeight
89
                color:  Qt.rgba(1,1,1,0.35)
dogmaphobic's avatar
dogmaphobic committed
90 91
                Text {
                    visible: (_alt % 10 === 0)
dogmaphobic's avatar
dogmaphobic committed
92
                    x: 20
dogmaphobic's avatar
dogmaphobic committed
93 94
                    anchors.verticalCenter:   parent.verticalCenter
                    antialiasing: true
dogmaphobic's avatar
dogmaphobic committed
95 96 97
                    font.weight: Font.DemiBold
                    text:  _alt
                    color: _alt < 0 ? "#f8983a" : "white"
dogmaphobic's avatar
dogmaphobic committed
98 99 100 101 102 103 104 105 106 107
                    style: Text.Outline
                    styleColor: Qt.rgba(0,0,0,0.25)
                }
            }
        }
        transform: Translate {
            y: ((altitude - _currentCenter) * _reticleSlot / 5) - (_reticleSlot / 2)
        }
    }
}