139 lines
4.7 KiB
QML
139 lines
4.7 KiB
QML
/****************************************************************************
|
|
*
|
|
* (c) 2009-2019 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.
|
|
*
|
|
* @file
|
|
* @author Gus Grubba <gus@auterion.com>
|
|
*/
|
|
|
|
import QtQuick 2.11
|
|
import QtGraphicalEffects 1.0
|
|
|
|
import QGroundControl 1.0
|
|
import QGroundControl.Controls 1.0
|
|
import QGroundControl.ScreenTools 1.0
|
|
import QGroundControl.Palette 1.0
|
|
import QGroundControl.FlightMap 1.0
|
|
|
|
Item {
|
|
id: root
|
|
|
|
property bool showPitch: true
|
|
property var vehicle: null
|
|
property real size
|
|
property bool showHeading: false
|
|
|
|
property real _rollAngle: vehicle ? vehicle.roll.rawValue : 0
|
|
property real _pitchAngle: vehicle ? vehicle.pitch.rawValue : 0
|
|
|
|
width: size
|
|
height: size
|
|
|
|
Item {
|
|
id: instrument
|
|
anchors.fill: parent
|
|
visible: false
|
|
|
|
//----------------------------------------------------
|
|
//-- Artificial Horizon
|
|
CustomArtificialHorizon {
|
|
rollAngle: _rollAngle
|
|
pitchAngle: _pitchAngle
|
|
skyColor1: "#0a2e50"
|
|
skyColor2: "#2f85d4"
|
|
groundColor1: "#897459"
|
|
groundColor2: "#4b3820"
|
|
anchors.fill: parent
|
|
}
|
|
//----------------------------------------------------
|
|
//-- Instrument Dial
|
|
Image {
|
|
id: instrumentDial
|
|
source: "/custom/img/attitude_dial.svg"
|
|
mipmap: true
|
|
fillMode: Image.PreserveAspectFit
|
|
anchors.fill: parent
|
|
sourceSize.height: parent.height
|
|
transform: Rotation {
|
|
origin.x: root.width / 2
|
|
origin.y: root.height / 2
|
|
angle: -_rollAngle
|
|
}
|
|
}
|
|
//----------------------------------------------------
|
|
//-- Pointer
|
|
Image {
|
|
id: pointer
|
|
height: size * 0.0625
|
|
width: height
|
|
source: "/custom/img/attitude_pointer.svg"
|
|
antialiasing: true
|
|
fillMode: Image.PreserveAspectFit
|
|
sourceSize.height: height
|
|
anchors.top: parent.top
|
|
anchors.horizontalCenter: parent.horizontalCenter
|
|
}
|
|
//----------------------------------------------------
|
|
//-- Pitch
|
|
QGCPitchIndicator {
|
|
id: pitchWidget
|
|
visible: root.showPitch
|
|
size: root.size * 0.5
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
pitchAngle: _pitchAngle
|
|
rollAngle: _rollAngle
|
|
color: Qt.rgba(0,0,0,0)
|
|
}
|
|
//----------------------------------------------------
|
|
//-- Cross Hair
|
|
Image {
|
|
id: crossHair
|
|
anchors.centerIn: parent
|
|
source: "/custom/img/attitude_crosshair.svg"
|
|
mipmap: true
|
|
width: size * 0.75
|
|
sourceSize.width: width
|
|
fillMode: Image.PreserveAspectFit
|
|
}
|
|
}
|
|
|
|
Rectangle {
|
|
id: mask
|
|
anchors.fill: instrument
|
|
radius: width / 2
|
|
color: "black"
|
|
visible: false
|
|
}
|
|
|
|
OpacityMask {
|
|
anchors.fill: instrument
|
|
source: instrument
|
|
maskSource: mask
|
|
}
|
|
|
|
Rectangle {
|
|
id: borderRect
|
|
anchors.fill: parent
|
|
radius: width / 2
|
|
color: Qt.rgba(0,0,0,0)
|
|
border.color: "#000"
|
|
border.width: 1
|
|
}
|
|
|
|
QGCLabel {
|
|
anchors.bottomMargin: Math.round(ScreenTools.defaultFontPixelHeight * 0.5)
|
|
anchors.bottom: parent.bottom
|
|
anchors.horizontalCenter: parent.horizontalCenter
|
|
text: _headingString3
|
|
color: "white"
|
|
visible: showHeading
|
|
font.pointSize: ScreenTools.smallFontPointSize
|
|
property string _headingString: vehicle ? vehicle.heading.rawValue.toFixed(0) : "OFF"
|
|
property string _headingString2: _headingString.length === 1 ? "0" + _headingString : _headingString
|
|
property string _headingString3: _headingString2.length === 2 ? "0" + _headingString2 : _headingString2
|
|
}
|
|
}
|