Commit 9075dbb3 authored by Don Gagne's avatar Don Gagne

Merge pull request #1462 from dogmaphobic/flightView

Finalizing Primary Flight Control
parents 81e22ad4 167813ba
......@@ -100,7 +100,9 @@
<file alias="QGroundControl/FlightControls/qmldir">src/ui/qmlcommon/qmldir</file>
<file alias="QGroundControl/FlightControls/QGCAltitudeWidget.qml">src/ui/qmlcommon/QGCAltitudeWidget.qml</file>
<file alias="QGroundControl/FlightControls/QGCAttitudeWidget.qml">src/ui/qmlcommon/QGCAttitudeWidget.qml</file>
<file alias="QGroundControl/FlightControls/QGCAttitudeInstrument.qml">src/ui/qmlcommon/QGCAttitudeInstrument.qml</file>
<file alias="QGroundControl/FlightControls/QGCCompass.qml">src/ui/qmlcommon/QGCCompass.qml</file>
<file alias="QGroundControl/FlightControls/QGCCompassInstrument.qml">src/ui/qmlcommon/QGCCompassInstrument.qml</file>
<file alias="QGroundControl/FlightControls/QGCCurrentAltitude.qml">src/ui/qmlcommon/QGCCurrentAltitude.qml</file>
<file alias="QGroundControl/FlightControls/QGCCurrentSpeed.qml">src/ui/qmlcommon/QGCCurrentSpeed.qml</file>
<file alias="QGroundControl/FlightControls/QGCMapBackground.qml">src/ui/qmlcommon/QGCMapBackground.qml</file>
......@@ -109,19 +111,24 @@
<file alias="QGroundControl/FlightControls/QGCSlider.qml">src/ui/qmlcommon/QGCSlider.qml</file>
<file alias="QGroundControl/FlightControls/QGCWaypointEditor.qml">src/ui/qmlcommon/QGCWaypointEditor.qml</file>
<file alias="QGroundControl/FlightControls/QGCMapToolButton.qml">src/ui/qmlcommon/QGCMapToolButton.qml</file>
<file alias="QGroundControl/FlightControls/QGCArtificialHorizon.qml">src/ui/qmlcommon/QGCArtificialHorizon.qml</file>
<!-- QML Main UI Resources -->
<file alias="compass.svg">src/ui/qmlcommon/compass.svg</file>
<file alias="compassNeedle.svg">src/ui/qmlcommon/compassNeedle.svg</file>
<file alias="crossHair.svg">src/ui/qmlcommon/crossHair.svg</file>
<file alias="rollDial.svg">src/ui/qmlcommon/rollDial.svg</file>
<file alias="rollDialWhite.svg">src/ui/qmlcommon/rollDialWhite.svg</file>
<file alias="rollPointer.svg">src/ui/qmlcommon/rollPointer.svg</file>
<file alias="rollPointerWhite.svg">src/ui/qmlcommon/rollPointerWhite.svg</file>
<file alias="scale.png">src/ui/qmlcommon/scale.png</file>
<file alias="scale_end.png">src/ui/qmlcommon/scale_end.png</file>
<file alias="buttonLeft.svg">src/ui/qmlcommon/buttonLeft.svg</file>
<file alias="buttonRight.svg">src/ui/qmlcommon/buttonRight.svg</file>
<file alias="buttonHome.svg">src/ui/qmlcommon/buttonHome.svg</file>
<file alias="buttonMore.svg">src/ui/qmlcommon/buttonMore.svg</file>
<file alias="attitudeInstrument.svg">src/ui/qmlcommon/attitudeInstrument.svg</file>
<file alias="attitudeDial.svg">src/ui/qmlcommon/attitudeDial.svg</file>
<file alias="attitudePointer.svg">src/ui/qmlcommon/attitudePointer.svg</file>
<file alias="compassInstrumentAirplane.svg">src/ui/qmlcommon/compassInstrumentAirplane.svg</file>
<file alias="compassInstrumentDial.svg">src/ui/qmlcommon/compassInstrumentDial.svg</file>
</qresource>
<qresource prefix="/AutoPilotPlugins/PX4">
......
......@@ -38,6 +38,8 @@ This file is part of the QGROUNDCONTROL project
#include <QNetworkReply>
#include <QMutex>
#define MAX_MAP_ZOOM (20.0)
namespace OpenPilot {
enum MapType
......
......@@ -53,9 +53,17 @@ QGeoMapReplyQGC::QGeoMapReplyQGC(QNetworkReply *reply, const QGeoTileSpec &spec,
: QGeoTiledMapReply(spec, parent)
, m_reply(reply)
{
connect(m_reply, SIGNAL(finished()), this, SLOT(networkReplyFinished()));
connect(m_reply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(networkReplyError(QNetworkReply::NetworkError)));
connect(m_reply, SIGNAL(destroyed()), this, SLOT(replyDestroyed()));
if(!reply)
{
setError(QGeoTiledMapReply::UnknownError, "Invalid tile request");
setFinished(true);
}
else
{
connect(m_reply, SIGNAL(finished()), this, SLOT(networkReplyFinished()));
connect(m_reply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(networkReplyError(QNetworkReply::NetworkError)));
connect(m_reply, SIGNAL(destroyed()), this, SLOT(replyDestroyed()));
}
}
QGeoMapReplyQGC::~QGeoMapReplyQGC()
......
......@@ -59,7 +59,7 @@ QGeoTiledMappingManagerEngineQGC::QGeoTiledMappingManagerEngineQGC(const QVarian
{
QGeoCameraCapabilities cameraCaps;
cameraCaps.setMinimumZoomLevel(2.0);
cameraCaps.setMaximumZoomLevel(20.0);
cameraCaps.setMaximumZoomLevel(MAX_MAP_ZOOM);
cameraCaps.setSupportsBearing(true);
setCameraCapabilities(cameraCaps);
......
This diff is collapsed.
......@@ -67,8 +67,8 @@ QGCFlightDisplay::QGCFlightDisplay(QWidget *parent)
if(pl) {
pl->setContentsMargins(0,0,0,0);
}
setMinimumWidth(270);
setMinimumHeight(300);
setMinimumWidth(380);
setMinimumHeight(360);
setContextPropertyObject("flightDisplay", this);
setSource(QUrl::fromUserInput("qrc:/qml/FlightDisplay.qml"));
setVisible(true);
......@@ -114,6 +114,7 @@ void QGCFlightDisplay::_forgetUAS(UASInterface* uas)
disconnect(_mav, &UASInterface::NavigationControllerDataChanged, this, &QGCFlightDisplay::_updateNavigationControllerData);
}
_mav = NULL;
emit mavPresentChanged();
}
void QGCFlightDisplay::_setActiveUAS(UASInterface* uas)
......@@ -136,6 +137,7 @@ void QGCFlightDisplay::_setActiveUAS(UASInterface* uas)
// Set new UAS
_mav = uas;
}
emit mavPresentChanged();
}
void QGCFlightDisplay::_updateAttitude(UASInterface*, double roll, double pitch, double yaw, quint64)
......
......@@ -53,6 +53,7 @@ public:
Q_PROPERTY(bool repaintRequested READ repaintRequested NOTIFY repaintRequestedChanged)
Q_PROPERTY(float latitude READ latitude NOTIFY latitudeChanged)
Q_PROPERTY(float longitude READ longitude NOTIFY longitudeChanged)
Q_PROPERTY(bool mavPresent READ mavPresent NOTIFY mavPresentChanged)
Q_INVOKABLE void saveSetting (const QString &key, const QString& value);
Q_INVOKABLE QString loadSetting (const QString &key, const QString& defaultValue);
......@@ -69,6 +70,7 @@ public:
float latitude () { return _latitude; }
float longitude () { return _longitude; }
bool repaintRequested () { return true; }
bool mavPresent () { return _mav != NULL; }
/** @brief Start updating widget */
void showEvent(QShowEvent* event);
......@@ -88,6 +90,7 @@ signals:
void repaintRequestedChanged();
void latitudeChanged ();
void longitudeChanged ();
void mavPresentChanged ();
private slots:
/** @brief Attitude from main autopilot / system state */
......
......@@ -33,6 +33,7 @@ import QtQuick.Controls.Styles 1.2
import QtQuick.Layouts 1.1
import QGroundControl.Palette 1.0
import QGroundControl.Controls 1.0
import QGroundControl.FlightControls 1.0
Rectangle {
......
......@@ -27,9 +27,8 @@ This file is part of the QGROUNDCONTROL project
* @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
import QGroundControl.Controls 1.0
Rectangle {
id: root
......@@ -63,9 +62,7 @@ Rectangle {
}
anchors.verticalCenter: parent.verticalCenter
height: parent.height * 0.75 > 280 ? 280 : parent.height * 0.75
clip: true
height: parent.height * 0.65 > 280 ? 280 : parent.height * 0.65
smooth: true
radius: 5
border.color: Qt.rgba(1,1,1,0.25)
......@@ -74,34 +71,42 @@ Rectangle {
GradientStop { position: 0.5; color: Qt.rgba(0,0,0,0.25) }
GradientStop { position: 1.0; color: Qt.rgba(0,0,0,0.65) }
}
Column{
id: col
width: parent.width
Rectangle {
id: clipRect
height: parent.height - 5
width: parent.width
clip: true
color: Qt.rgba(0,0,0,0);
anchors.verticalCenter: parent.verticalCenter
spacing: _reticleSpacing
Repeater {
model: _speedArray
anchors.left: parent.left
Rectangle {
property int _alt: modelData
width: (_alt % 10 === 0) ? 10 : 15
height: _reticleHeight
color: Qt.rgba(1,1,1,0.35)
Text {
visible: (_alt % 10 === 0)
x: 20
anchors.verticalCenter: parent.verticalCenter
antialiasing: true
font.weight: Font.DemiBold
text: _alt
color: _alt < 0 ? "#f8983a" : "white"
style: Text.Outline
styleColor: Qt.rgba(0,0,0,0.25)
Column{
id: col
width: parent.width
anchors.verticalCenter: parent.verticalCenter
spacing: _reticleSpacing
Repeater {
model: _speedArray
anchors.left: parent.left
Rectangle {
property int _alt: modelData
width: (_alt % 10 === 0) ? 10 : 15
height: _reticleHeight
color: Qt.rgba(1,1,1,0.35)
QGCLabel {
visible: (_alt % 10 === 0)
x: 20
anchors.verticalCenter: parent.verticalCenter
antialiasing: true
font.weight: Font.DemiBold
text: _alt
color: _alt < 0 ? "#f8983a" : "white"
style: Text.Outline
styleColor: Qt.rgba(0,0,0,0.25)
}
}
}
}
transform: Translate {
y: ((altitude - _currentCenter) * _reticleSlot / 5) - (_reticleSlot / 2)
transform: Translate {
y: ((altitude - _currentCenter) * _reticleSlot / 5) - (_reticleSlot / 2)
}
}
}
}
/*=====================================================================
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 Artificial Horizon
* @author Gus Grubba <mavlink@grubba.com>
*/
import QtQuick 2.4
Item {
id: root
property real rollAngle : 0
property real pitchAngle: 0
clip: true
anchors.fill: parent
Item {
id: artificialHorizon
width: root.width * 4
height: root.height * 4
anchors.centerIn: parent
Rectangle {
id: sky
anchors.fill: parent
smooth: true
antialiasing: true
gradient: Gradient {
GradientStop { position: 0.25; color: Qt.hsla(0.6, 1.0, 0.25) }
GradientStop { position: 0.5; color: Qt.hsla(0.6, 0.5, 0.55) }
}
}
Rectangle {
id: ground
height: sky.height / 2
anchors {
left: sky.left;
right: sky.right;
bottom: sky.bottom
}
smooth: true
antialiasing: true
gradient: Gradient {
GradientStop { position: 0.0; color: Qt.hsla(0.25, 0.5, 0.45) }
GradientStop { position: 0.25; color: Qt.hsla(0.25, 0.75, 0.25) }
}
}
transform: [
Translate {
y: root.visible ? pitchAngle * 4 : 0
},
Rotation {
origin.x: artificialHorizon.width / 2
origin.y: artificialHorizon.height / 2
angle: root.visible ? -rollAngle : 0
}]
}
}
/*=====================================================================
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 Attitude Instrument
* @author Gus Grubba <mavlink@grubba.com>
*/
import QtQuick 2.4
Item {
id: root
property real rollAngle : 0
property real pitchAngle: 0
property real size: 100
property bool showPitch: true
width: size
height: size
//----------------------------------------------------
//-- Artificial Horizon
QGCArtificialHorizon {
rollAngle: root.rollAngle
pitchAngle: root.pitchAngle
}
//----------------------------------------------------
//-- Pointer
Image {
id: pointer
source: "/qml/attitudePointer.svg"
width: root.width
mipmap: true
fillMode: Image.PreserveAspectFit
anchors.bottom: parent.bottom
anchors.horizontalCenter: parent.horizontalCenter
}
//----------------------------------------------------
//-- Instrument Dial
Image {
id: instrumentDial
source: "/qml/attitudeDial.svg"
mipmap: true
width: root.width
fillMode: Image.PreserveAspectFit
anchors.bottom: parent.bottom
anchors.horizontalCenter: parent.horizontalCenter
transform: Rotation {
origin.x: root.width / 2
origin.y: root.height / 2
angle: -rollAngle
}
}
//----------------------------------------------------
//-- Pitch
QGCPitchWidget {
id: pitchWidget
visible: root.showPitch
size: parent.width * 0.65
anchors.verticalCenter: parent.verticalCenter
pitchAngle: root.pitchAngle
rollAngle: root.rollAngle
color: Qt.rgba(0,0,0,0)
}
//----------------------------------------------------
//-- Cross Hair
Image {
id: crossHair
anchors.centerIn: parent
source: "/qml/crossHair.svg"
mipmap: true
width: parent.width * 0.75
fillMode: Image.PreserveAspectFit
}
//----------------------------------------------------
//-- Instrument Pannel
Image {
id: pannel
width: parent.width
source: "/qml/attitudeInstrument.svg"
mipmap: true
fillMode: Image.PreserveAspectFit
anchors.centerIn: parent
}
}
......@@ -23,7 +23,7 @@ This file is part of the QGROUNDCONTROL project
/**
* @file
* @brief QGC Main Flight Display
* @brief QGC Attitude Widget
* @author Gus Grubba <mavlink@grubba.com>
*/
......@@ -31,88 +31,49 @@ import QtQuick 2.4
Item {
id: root
property real rollAngle : 0
property real pitchAngle: 0
property real backgroundOpacity: 1
property bool displayBackground: true
property bool useWhite: true
property real rollAngle : 0
property real pitchAngle: 0
property bool showAttitude: true
anchors.fill: parent
Item {
id: background
width: parent.width * 4
height: parent.height * 4
anchors.centerIn: parent
Rectangle {
anchors.fill: parent
color: Qt.rgba(0,0,0,0)
visible: displayBackground
Rectangle {
id: sky
visible: displayBackground
anchors.fill: parent
smooth: true
antialiasing: true
gradient: Gradient {
GradientStop { position: 0.25; color: Qt.hsla(0.6, 1.0, 0.25, backgroundOpacity) }
GradientStop { position: 0.5; color: Qt.hsla(0.6, 0.5, 0.75, backgroundOpacity) }
}
}
Rectangle {
id: ground
visible: displayBackground
height: sky.height / 2
anchors {
left: sky.left;
right: sky.right;
bottom: sky.bottom
}
smooth: true
antialiasing: true
gradient: Gradient {
GradientStop { position: 0.0; color: Qt.hsla(0.25, 0.5, 0.45, backgroundOpacity) }
GradientStop { position: 0.25; color: Qt.hsla(0.25, 0.75, 0.25, backgroundOpacity) }
}
}
transform: [
Translate {
y: (root.visible && root.displayBackground) ? pitchAngle * 4 : 0
},
Rotation {
origin.x: background.width / 2
origin.y: background.height / 2
angle: (root.visible && root.displayBackground) ? -rollAngle : 0
}]
}
QGCArtificialHorizon {
rollAngle: root.rollAngle
pitchAngle: root.pitchAngle
}
Image {
id: rollDial
visible: root.showAttitude
anchors { bottom: root.verticalCenter; horizontalCenter: parent.horizontalCenter}
source: useWhite ? "/qml/rollDialWhite.svg" : "/qml/rollDial.svg"
source: "/qml/rollDialWhite.svg"
mipmap: true
width: 260
fillMode: Image.PreserveAspectFit
transform: Rotation {
origin.x: rollDial.width / 2
origin.y: rollDial.height
angle: -rollAngle
angle: -rollAngle
}
}
Image {
id: pointer
visible: root.showAttitude
anchors { bottom: root.verticalCenter; horizontalCenter: parent.horizontalCenter}
source: useWhite ? "/qml/rollPointerWhite.svg" : "/qml/rollPointer.svg"
smooth: true
width: rollDial.width
fillMode: Image.PreserveAspectFit
source: "/qml/rollPointerWhite.svg"
mipmap: true
width: rollDial.width
fillMode: Image.PreserveAspectFit
}
Image {
id: crossHair
visible: root.showAttitude
anchors.centerIn: parent
source: "/qml/crossHair.svg"
mipmap: true
width: 260
fillMode: Image.PreserveAspectFit
}
}
......@@ -28,11 +28,10 @@ This file is part of the QGROUNDCONTROL project
*/
import QtQuick 2.4
import QGroundControl.Controls 1.0
Item {
id: root
width: 120
height: width
property real heading : 0
Image {
id: compass
......@@ -62,7 +61,7 @@ Item {
height: 25
border.color: Qt.rgba(1,1,1,0.15)
color: Qt.rgba(0,0,0,0.25)
Text {
QGCLabel {
text: heading.toFixed(0)
font.weight: Font.DemiBold
color: "white"
......
/*=====================================================================
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 Compass
* @author Gus Grubba <mavlink@grubba.com>
*/
import QtQuick 2.4
import QGroundControl.Controls 1.0
import QGroundControl.ScreenTools 1.0
Item {
property ScreenTools screenTools: ScreenTools { }
id: root
property real heading: 0
property real size: 120
property real _fontSize: screenTools.dpiAdjustedPointSize(size * 12 / 120)
width: size
height: size
Rectangle {
id: compassBack
anchors.fill: parent
color: "#212121"
}
Image {
id: pointer
source: "/qml/compassInstrumentAirplane.svg"
mipmap: true
width: root.width * 0.75
fillMode: Image.PreserveAspectFit
anchors.centerIn: parent
transform: Rotation {
origin.x: pointer.width / 2
origin.y: pointer.height / 2
angle: -heading
}
}
Image {
id: compassDial
source: "/qml/compassInstrumentDial.svg"
mipmap: true
width: root.width
fillMode: Image.PreserveAspectFit
anchors.centerIn: parent
}
Rectangle {
anchors.centerIn: root
width: size * 0.35
height: size * 0.2
border.color: Qt.rgba(1,1,1,0.15)
color: Qt.rgba(0,0,0,0.65)
QGCLabel {
text: heading.toFixed(0)
font.weight: Font.DemiBold
font.pointSize: _fontSize < 1 ? 1 : _fontSize;
color: "white"
anchors.centerIn: parent
}
}
}
......@@ -28,6 +28,7 @@ This file is part of the QGROUNDCONTROL project
*/
import QtQuick 2.1
import QGroundControl.Controls 1.0
Rectangle {
id: root
......@@ -44,14 +45,14 @@ Rectangle {
Column{
anchors.centerIn: parent
spacing: 4
Text {
QGCLabel {
text: 'h: ' + altitude.toFixed(0)
font.weight: Font.DemiBold
color: "white"
anchors.right: parent.right
visible: showAltitude
}
Text {
QGCLabel {
text: 'vZ: ' + vertZ.toFixed(0)
color: "white"
font.weight: showAltitude ? Font.Normal : Font.DemiBold
......
......@@ -28,6 +28,7 @@ This file is part of the QGROUNDCONTROL project
*/
import QtQuick 2.1
import QGroundControl.Controls 1.0
Rectangle {
id: root
......@@ -44,14 +45,14 @@ Rectangle {
Column{
anchors.centerIn: parent
spacing: 4
Text {
QGCLabel {
text: 'GS: ' + groundspeed.toFixed(0)
font.weight: Font.DemiBold
color: "white"
anchors.right: parent.right
visible: showGroundSpeed
}
Text {
QGCLabel {
text: 'AS: ' + airspeed.toFixed(0)
color: "white"
anchors.right: parent.right
......
......@@ -31,15 +31,17 @@ import QtQuick 2.4
import QtPositioning 5.3
import QtLocation 5.3
import QGroundControl.Controls 1.0
import QGroundControl.FlightControls 1.0
Rectangle {
id: root
property real latitude: 37.803784
property real longitude : -122.462276
property real zoomLevel: 15
property real zoomLevel: 18
property real heading: 0
property bool alwaysNorth: true
property bool interactive: true
property alias mapItem: map
color: Qt.rgba(0,0,0,0)
......@@ -95,8 +97,11 @@ Rectangle {
height: 1
zoomLevel: root.zoomLevel
anchors.centerIn: parent
center: map.visible ? QtPositioning.coordinate(lat, lon) : QtPositioning.coordinate(0,0)
center: QtPositioning.coordinate(lat, lon)
/*
// There is a bug currently in Qt where it fails to render a map taller than 6 tiles high. Until
// that's fixed, we can't rotate the map as it would require a larger map, which can easely grow
// larger than 6 tiles high.
transform: Rotation {
origin.x: map.width / 2
origin.y: map.height / 2
......@@ -104,7 +109,7 @@ Rectangle {
}
*/
gesture.flickDeceleration: 3000
gesture.enabled: true
gesture.enabled: root.interactive
onWidthChanged: {
scaleTimer.restart()
......@@ -118,6 +123,10 @@ Rectangle {
scaleTimer.restart()
}
Component.onCompleted: {
map.zoomLevel = 18
}
function calculateScale() {
var coord1, coord2, dist, text, f
f = 0
......@@ -170,13 +179,14 @@ Rectangle {
Item {
id: scale
parent: zoomSlider.parent
visible: scaleText.text != "0 m"
visible: scaleText.text !== "0 m"
z: map.z + 2
opacity: 1
anchors {
bottom: zoomSlider.top;
bottomMargin: 8;
left: zoomSlider.left
leftMargin: 4
}
Image {
id: scaleImageLeft
......@@ -196,14 +206,14 @@ Rectangle {
anchors.bottom: parent.bottom
anchors.left: scaleImage.right
}
Text {
QGCLabel {
id: scaleText
color: "white"
font.weight: Font.DemiBold
horizontalAlignment: Text.AlignHCenter
anchors.bottom: parent.bottom
anchors.left: parent.left
anchors.bottomMargin: 8
anchors.bottomMargin: 10
text: "0 m"
}
Component.onCompleted: {
......
......@@ -28,15 +28,22 @@ This file is part of the QGROUNDCONTROL project
*/
import QtQuick 2.1
import QGroundControl.ScreenTools 1.0
import QGroundControl.Controls 1.0
Rectangle {
property real pitchAngle: 0
property real rollAngle: 0
property real _reticleHeight: 1
property real _reticleSpacing: 17
property real _reticleSlot: _reticleSpacing + _reticleHeight
height: 110
width: 120
property ScreenTools screenTools: ScreenTools { }
property real pitchAngle: 0
property real rollAngle: 0
property real size: 120
property real _reticleHeight: 1
property real _reticleSpacing: size * 0.15
property real _reticleSlot: _reticleSpacing + _reticleHeight
property real _longDash: size * 0.40
property real _shortDash: size * 0.25
property real _fontSize: screenTools.dpiAdjustedPointSize(size * 11 / 120);
height: size * 0.9
width: size
radius: 8
anchors.horizontalCenter: parent.horizontalCenter
anchors.verticalCenter: parent.verticalCenter
......@@ -53,27 +60,29 @@ Rectangle {
Rectangle {
property int _pitch: -(modelData * 5 - 90)
anchors.horizontalCenter: parent.horizontalCenter
width: (_pitch % 10) === 0 ? 50 : 30
width: (_pitch % 10) === 0 ? _longDash : _shortDash
height: _reticleHeight
color: "white"
antialiasing: true
smooth: true
Text {
QGCLabel {
anchors.horizontalCenter: parent.horizontalCenter
anchors.horizontalCenterOffset: -40
anchors.horizontalCenterOffset: -(_longDash * 0.8)
anchors.verticalCenter: parent.verticalCenter
smooth: true
font.weight: Font.DemiBold
font.pointSize: _fontSize < 1 ? 1 : _fontSize;
text: _pitch
color: "white"
visible: (_pitch != 0) && ((_pitch % 10) === 0)
}
Text {
QGCLabel {
anchors.horizontalCenter: parent.horizontalCenter
anchors.horizontalCenterOffset: 40
anchors.horizontalCenterOffset: (_longDash * 0.8)
anchors.verticalCenter: parent.verticalCenter
smooth: true
font.weight: Font.DemiBold
font.pointSize: _fontSize < 1 ? 1 : _fontSize;
text: _pitch
color: "white"
visible: (_pitch != 0) && ((_pitch % 10) === 0)
......@@ -87,7 +96,7 @@ Rectangle {
}
transform: [
Rotation {
origin.x: width / 2
origin.x: width / 2
origin.y: height / 2
angle: -rollAngle
}
......
......@@ -38,78 +38,76 @@
**
****************************************************************************/
import QtQuick 2.0
import QtQuick 2.1
import QGroundControl.Controls 1.0
Item {
id: slider;
height: 10
height: 12
property real value // value is read/write.
property real minimum: 0
property real maximum: 1
property int length: width - handle.width
Rectangle {
anchors.fill: parent
border.width: 1;
border.color: "lightgrey"
radius: 8
color: "white"
opacity: 1
anchors.fill: parent
radius: 6
color: Qt.rgba(0,0,0,0.65);
}
Rectangle {
anchors.left: parent.left
anchors.left: parent.left
anchors.leftMargin: 4
anchors.top: parent.top
anchors.topMargin: (parent.height - height)/2
height: 3
width: handle.x - x
color: "#1c94fc"
radius: 4
height: 4
width: handle.x - x
color: "#69bb17"
anchors.verticalCenter: parent.verticalCenter
}
Rectangle {
id: labelRect
width: label.width
height: label.height + 4
radius: 4
smooth: true
color: "white"
border.color: "lightgrey"
anchors.bottom: handle.top
id: labelRect
width: label.width
height: label.height + 4
radius: 4
smooth: true
color: Qt.rgba(1,1,1,0.75);
border.color: Qt.rgba(0,0,0,0.45);
anchors.bottom: handle.top
anchors.bottomMargin: 4
x: Math.max(Math.min(handle.x + (handle.width - width )/2, slider.width - width),0)
visible: mouseRegion.pressed
Text{
id: label
color: "darkgrey"
text: slider.value.toFixed(2)
width: font.pointSize * 3.5
anchors.horizontalCenter: labelRect.horizontalCenter
horizontalAlignment: Text.AlignHCenter
anchors.baseline: parent.bottom
anchors.baselineOffset: -6
font.pixelSize: 14
x: Math.max(Math.min(handle.x + (handle.width - width ) / 2, slider.width - width), 0)
QGCLabel{
id: label
color: "black"
text: slider.value.toFixed(2)
width: font.pointSize * 3.5
anchors.horizontalCenter: labelRect.horizontalCenter
horizontalAlignment: Text.AlignHCenter
anchors.verticalCenter: labelRect.verticalCenter
//anchors.baseline: parent.bottom
//anchors.baselineOffset: -6
}
}
Rectangle {
id: handle;
smooth: true
width: 26;
y: (slider.height - height)/2;
x: (slider.value - slider.minimum) * slider.length / (slider.maximum - slider.minimum)
id: handle;
smooth: true
width: 26;
y: (slider.height - height) / 2;
x: (slider.value - slider.minimum) * slider.length / (slider.maximum - slider.minimum)
height: width; radius: width/2
gradient: normalGradient
height: width
radius: width / 2
gradient: normalGradient
border.width: 2
border.color: "white"
Gradient {
id: normalGradient
GradientStop { position: 0.0; color: "#b0b0b0" }
GradientStop { position: 0.0; color: "#b0b0b0" }
GradientStop { position: 0.66; color: "#909090" }
GradientStop { position: 1.0; color: "#545454" }
GradientStop { position: 1.0; color: "#545454" }
}
MouseArea {
......
......@@ -29,6 +29,7 @@ This file is part of the QGROUNDCONTROL project
import QtQuick 2.4
import QGroundControl.ScreenTools 1.0
import QGroundControl.Controls 1.0
Rectangle {
id: root
......@@ -37,12 +38,9 @@ Rectangle {
property real _reticleSpacing: 10
property real _reticleHeight: 2
property real _reticleSlot: _reticleSpacing + _reticleHeight
anchors.verticalCenter: parent.verticalCenter
z:10
height: parent.height * 0.75 > 280 ? 280 : parent.height * 0.75
clip: true
height: parent.height * 0.65 > 280 ? 280 : parent.height * 0.65
smooth: true
radius: 5
border.color: Qt.rgba(1,1,1,0.25)
......@@ -51,35 +49,43 @@ Rectangle {
GradientStop { position: 0.5; color: Qt.rgba(0,0,0,0.25) }
GradientStop { position: 1.0; color: Qt.rgba(0,0,0,0.65) }
}
Column{
id: col
width: parent.width
Rectangle {
id: clipRect
height: parent.height - 5
width: parent.width
clip: true
color: Qt.rgba(0,0,0,0);
anchors.verticalCenter: parent.verticalCenter
spacing: _reticleSpacing
Repeater {
model: 40
Rectangle {
property int _speed: -(index - 20)
width: (_speed % 5 === 0) ? 10 : 15
anchors.right: parent.right
height: _reticleHeight
color: Qt.rgba(1,1,1,0.35)
Text {
visible: (_speed % 5 === 0)
anchors.horizontalCenter: parent.horizontalCenter
anchors.horizontalCenterOffset: -30
anchors.verticalCenter: parent.verticalCenter
antialiasing: true
font.weight: Font.DemiBold
text: _speed
color: _speed < 0 ? "#f8983a" : "white"
style: Text.Outline
styleColor: Qt.rgba(0,0,0,0.25)
Column{
id: col
width: parent.width
anchors.verticalCenter: parent.verticalCenter
spacing: _reticleSpacing
Repeater {
model: 40
Rectangle {
property int _speed: -(index - 20)
width: (_speed % 5 === 0) ? 10 : 15
anchors.right: parent.right
height: _reticleHeight
color: Qt.rgba(1,1,1,0.35)
QGCLabel {
visible: (_speed % 5 === 0)
anchors.horizontalCenter: parent.horizontalCenter
anchors.horizontalCenterOffset: -30
anchors.verticalCenter: parent.verticalCenter
antialiasing: true
font.weight: Font.DemiBold
text: _speed
color: _speed < 0 ? "#f8983a" : "white"
style: Text.Outline
styleColor: Qt.rgba(0,0,0,0.25)
}
}
}
}
transform: Translate {
y: (speed * _reticleSlot) - (_reticleSlot / 2)
transform: Translate {
y: (speed * _reticleSlot) - (_reticleSlot / 2)
}
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 288 288" enable-background="new 0 0 288 288" xml:space="preserve">
<line fill="none" stroke="#FFFFFF" stroke-width="4" x1="143.999" y1="36.793" x2="143.999" y2="18.793"/>
<line fill="none" stroke="#FFFFFF" stroke-width="4" x1="171.739" y1="40.458" x2="176.398" y2="23.072"/>
<line fill="none" stroke="#FFFFFF" stroke-width="4" x1="197.586" y1="51.179" x2="206.586" y2="35.591"/>
<line fill="none" stroke="#FFFFFF" stroke-width="4" x1="219.777" y1="68.224" x2="232.505" y2="55.496"/>
<line fill="none" stroke="#FFFFFF" stroke-width="4" x1="236.801" y1="90.432" x2="252.389" y2="81.432"/>
<line fill="none" stroke="#FFFFFF" stroke-width="4" x1="116.254" y1="40.431" x2="111.596" y2="23.045"/>
<line fill="none" stroke="#FFFFFF" stroke-width="4" x1="90.397" y1="51.127" x2="81.397" y2="35.539"/>
<line fill="none" stroke="#FFFFFF" stroke-width="4" x1="68.189" y1="68.151" x2="55.461" y2="55.423"/>
<line fill="none" stroke="#FFFFFF" stroke-width="4" x1="51.144" y1="90.342" x2="35.556" y2="81.342"/>
<rect x="135" y="270" fill="none" width="18" height="18"/>
</svg>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_4" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 288 288" enable-background="new 0 0 288 288" xml:space="preserve">
<path fill="#333333" d="M0-0.002v288h288v-288H0z M144,270c-69.588,0-126-56.412-126-126S74.412,18,144,18s126,56.412,126,126
S213.588,270,144,270z"/>
</svg>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_3" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 288 288" enable-background="new 0 0 288 288" xml:space="preserve">
<polygon fill="#ED1C24" points="144,46.2 133.2,17.4 154.8,17.4 "/>
<rect x="135" y="270" fill="none" width="18" height="18"/>
</svg>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 288 288" enable-background="new 0 0 288 288" xml:space="preserve">
<g id="Layer_1">
<g>
<path fill="#212121" d="M288,270c0,9.9-8.1,18-18,18H18c-9.9,0-18-8.1-18-18V18C0,8.1,8.1,0,18,0h252c9.9,0,18,8.1,18,18V270z"/>
</g>
</g>
<g id="Layer_2">
<line fill="none" stroke="#939598" stroke-width="24" stroke-miterlimit="10" x1="36" y1="77.79" x2="252" y2="77.79"/>
<line fill="none" stroke="#939598" stroke-width="24" stroke-miterlimit="10" x1="36" y1="144" x2="252" y2="144"/>
<line fill="none" stroke="#939598" stroke-width="24" stroke-miterlimit="10" x1="36" y1="210.21" x2="252" y2="210.21"/>
</g>
</svg>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_3" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 288 288" enable-background="new 0 0 288 288" xml:space="preserve">
<polyline fill="#231F20" stroke="#D23528" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" points="
143.993,240.123 96.979,252 96.979,240.123 132.116,209.225 126.901,148.952 54.153,175.072 54.153,152.091 126.901,100.885
126.901,75.203 143.993,36 144.007,36 161.099,75.203 161.099,100.885 233.847,152.091 233.847,175.072 161.099,148.952
155.884,209.225 191.021,240.123 191.021,252 144.007,240.123 "/>
</svg>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 288 288" enable-background="new 0 0 288 288" xml:space="preserve">
<circle opacity="0.15" fill="none" stroke="#FFFFFF" stroke-width="3" stroke-miterlimit="10" cx="144" cy="144" r="126"/>
<circle fill="none" cx="144" cy="144" r="124.342"/>
<line fill="none" stroke="#FFFFFF" stroke-width="2" stroke-linecap="round" stroke-miterlimit="10" x1="144" y1="21.684" x2="144" y2="41.579"/>
<line fill="none" stroke="#FFFFFF" stroke-width="2" stroke-linecap="round" stroke-miterlimit="10" x1="82.842" y1="38.071" x2="92.789" y2="55.301"/>
<line fill="none" stroke="#FFFFFF" stroke-width="2" stroke-linecap="round" stroke-miterlimit="10" x1="38.071" y1="82.842" x2="55.301" y2="92.789"/>
<line fill="none" stroke="#FFFFFF" stroke-width="2" stroke-linecap="round" stroke-miterlimit="10" x1="21.684" y1="144" x2="41.579" y2="144"/>
<line fill="none" stroke="#FFFFFF" stroke-width="2" stroke-linecap="round" stroke-miterlimit="10" x1="38.071" y1="205.158" x2="55.301" y2="195.211"/>
<line fill="none" stroke="#FFFFFF" stroke-width="2" stroke-linecap="round" stroke-miterlimit="10" x1="82.842" y1="249.929" x2="92.789" y2="232.699"/>
<line fill="none" stroke="#FFFFFF" stroke-width="2" stroke-linecap="round" stroke-miterlimit="10" x1="144" y1="266.316" x2="144" y2="246.421"/>
<line fill="none" stroke="#FFFFFF" stroke-width="2" stroke-linecap="round" stroke-miterlimit="10" x1="205.158" y1="249.929" x2="195.211" y2="232.699"/>
<line fill="none" stroke="#FFFFFF" stroke-width="2" stroke-linecap="round" stroke-miterlimit="10" x1="249.929" y1="205.158" x2="232.699" y2="195.211"/>
<line fill="none" stroke="#FFFFFF" stroke-width="2" stroke-linecap="round" stroke-miterlimit="10" x1="266.316" y1="144" x2="246.421" y2="144"/>
<line fill="none" stroke="#FFFFFF" stroke-width="2" stroke-linecap="round" stroke-miterlimit="10" x1="249.929" y1="82.842" x2="232.699" y2="92.789"/>
<line fill="none" stroke="#FFFFFF" stroke-width="2" stroke-linecap="round" stroke-miterlimit="10" x1="205.158" y1="38.071" x2="195.211" y2="55.301"/>
<line fill="none" stroke="#FFFFFF" stroke-linecap="round" stroke-miterlimit="10" x1="144" y1="21.684" x2="144" y2="34.496"/>
<line fill="none" stroke="#FFFFFF" stroke-linecap="round" stroke-miterlimit="10" x1="122.76" y1="23.542" x2="124.985" y2="36.159"/>
<line fill="none" stroke="#FFFFFF" stroke-linecap="round" stroke-miterlimit="10" x1="102.166" y1="29.061" x2="106.547" y2="41.1"/>
<line fill="none" stroke="#FFFFFF" stroke-linecap="round" stroke-miterlimit="10" x1="82.842" y1="38.071" x2="89.248" y2="49.167"/>
<line fill="none" stroke="#FFFFFF" stroke-linecap="round" stroke-miterlimit="10" x1="65.377" y1="50.301" x2="73.612" y2="60.115"/>
<line fill="none" stroke="#FFFFFF" stroke-linecap="round" stroke-miterlimit="10" x1="50.301" y1="65.377" x2="60.115" y2="73.612"/>
<line fill="none" stroke="#FFFFFF" stroke-linecap="round" stroke-miterlimit="10" x1="38.071" y1="82.842" x2="49.167" y2="89.248"/>
<line fill="none" stroke="#FFFFFF" stroke-linecap="round" stroke-miterlimit="10" x1="29.061" y1="102.166" x2="41.1" y2="106.547"/>
<line fill="none" stroke="#FFFFFF" stroke-linecap="round" stroke-miterlimit="10" x1="23.542" y1="122.76" x2="36.159" y2="124.985"/>
<line fill="none" stroke="#FFFFFF" stroke-linecap="round" stroke-miterlimit="10" x1="21.684" y1="144" x2="34.496" y2="144"/>
<line fill="none" stroke="#FFFFFF" stroke-linecap="round" stroke-miterlimit="10" x1="23.542" y1="165.24" x2="36.159" y2="163.015"/>
<line fill="none" stroke="#FFFFFF" stroke-linecap="round" stroke-miterlimit="10" x1="29.061" y1="185.834" x2="41.1" y2="181.453"/>
<line fill="none" stroke="#FFFFFF" stroke-linecap="round" stroke-miterlimit="10" x1="38.071" y1="205.158" x2="49.167" y2="198.752"/>
<line fill="none" stroke="#FFFFFF" stroke-linecap="round" stroke-miterlimit="10" x1="50.301" y1="222.623" x2="60.115" y2="214.388"/>
<line fill="none" stroke="#FFFFFF" stroke-linecap="round" stroke-miterlimit="10" x1="65.377" y1="237.699" x2="73.612" y2="227.885"/>
<line fill="none" stroke="#FFFFFF" stroke-linecap="round" stroke-miterlimit="10" x1="82.842" y1="249.929" x2="89.248" y2="238.833"/>
<line fill="none" stroke="#FFFFFF" stroke-linecap="round" stroke-miterlimit="10" x1="102.166" y1="258.939" x2="106.547" y2="246.9"/>
<line fill="none" stroke="#FFFFFF" stroke-linecap="round" stroke-miterlimit="10" x1="122.76" y1="264.458" x2="124.985" y2="251.841"/>
<line fill="none" stroke="#FFFFFF" stroke-linecap="round" stroke-miterlimit="10" x1="144" y1="266.316" x2="144" y2="253.504"/>
<line fill="none" stroke="#FFFFFF" stroke-linecap="round" stroke-miterlimit="10" x1="165.24" y1="264.458" x2="163.015" y2="251.841"/>
<line fill="none" stroke="#FFFFFF" stroke-linecap="round" stroke-miterlimit="10" x1="185.834" y1="258.939" x2="181.453" y2="246.9"/>
<line fill="none" stroke="#FFFFFF" stroke-linecap="round" stroke-miterlimit="10" x1="205.158" y1="249.929" x2="198.752" y2="238.833"/>
<line fill="none" stroke="#FFFFFF" stroke-linecap="round" stroke-miterlimit="10" x1="222.623" y1="237.699" x2="214.388" y2="227.885"/>
<line fill="none" stroke="#FFFFFF" stroke-linecap="round" stroke-miterlimit="10" x1="237.699" y1="222.623" x2="227.885" y2="214.388"/>
<line fill="none" stroke="#FFFFFF" stroke-linecap="round" stroke-miterlimit="10" x1="249.929" y1="205.158" x2="238.833" y2="198.752"/>
<line fill="none" stroke="#FFFFFF" stroke-linecap="round" stroke-miterlimit="10" x1="258.939" y1="185.834" x2="246.9" y2="181.453"/>
<line fill="none" stroke="#FFFFFF" stroke-linecap="round" stroke-miterlimit="10" x1="264.458" y1="165.24" x2="251.841" y2="163.015"/>
<line fill="none" stroke="#FFFFFF" stroke-linecap="round" stroke-miterlimit="10" x1="266.316" y1="144" x2="253.504" y2="144"/>
<line fill="none" stroke="#FFFFFF" stroke-linecap="round" stroke-miterlimit="10" x1="264.458" y1="122.76" x2="251.841" y2="124.985"/>
<line fill="none" stroke="#FFFFFF" stroke-linecap="round" stroke-miterlimit="10" x1="258.939" y1="102.166" x2="246.9" y2="106.547"/>
<line fill="none" stroke="#FFFFFF" stroke-linecap="round" stroke-miterlimit="10" x1="249.929" y1="82.842" x2="238.833" y2="89.248"/>
<line fill="none" stroke="#FFFFFF" stroke-linecap="round" stroke-miterlimit="10" x1="237.699" y1="65.377" x2="227.885" y2="73.612"/>
<line fill="none" stroke="#FFFFFF" stroke-linecap="round" stroke-miterlimit="10" x1="222.623" y1="50.301" x2="214.388" y2="60.115"/>
<line fill="none" stroke="#FFFFFF" stroke-linecap="round" stroke-miterlimit="10" x1="205.158" y1="38.071" x2="198.752" y2="49.167"/>
<line fill="none" stroke="#FFFFFF" stroke-linecap="round" stroke-miterlimit="10" x1="185.834" y1="29.061" x2="181.453" y2="41.1"/>
<line fill="none" stroke="#FFFFFF" stroke-linecap="round" stroke-miterlimit="10" x1="165.24" y1="23.542" x2="163.015" y2="36.159"/>
<g>
<path fill="#F1F2F2" d="M50.594,153.945l-5.279-19.895h2.701l3.026,13.042c0.326,1.366,0.606,2.723,0.841,4.071
c0.507-2.126,0.805-3.352,0.896-3.678l3.786-13.435h3.176l2.85,10.07c0.715,2.497,1.23,4.845,1.547,7.043
c0.253-1.258,0.584-2.701,0.991-4.329l3.121-12.784h2.646l-5.455,19.895h-2.538l-4.193-15.159
c-0.353-1.267-0.561-2.045-0.624-2.334c-0.208,0.914-0.403,1.692-0.584,2.334l-4.221,15.159H50.594z"/>
</g>
<g>
<path fill="#F1F2F2" d="M136.457,234.726l2.402-0.21c0.114,0.962,0.379,1.752,0.795,2.369c0.416,0.617,1.06,1.115,1.935,1.496
c0.875,0.381,1.859,0.571,2.953,0.571c0.971,0,1.828-0.144,2.572-0.433c0.744-0.289,1.298-0.685,1.661-1.188
c0.363-0.503,0.544-1.052,0.544-1.647c0-0.604-0.175-1.131-0.525-1.581c-0.35-0.451-0.927-0.829-1.732-1.135
c-0.516-0.201-1.658-0.514-3.425-0.938s-3.005-0.825-3.714-1.201c-0.919-0.481-1.602-1.078-2.053-1.791
c-0.451-0.713-0.677-1.511-0.677-2.395c0-0.971,0.276-1.879,0.827-2.723c0.551-0.844,1.356-1.485,2.415-1.923
s2.235-0.656,3.53-0.656c1.426,0,2.684,0.23,3.774,0.689c1.089,0.459,1.926,1.135,2.512,2.028c0.586,0.892,0.901,1.903,0.945,3.031
l-2.441,0.184c-0.131-1.216-0.575-2.135-1.331-2.756c-0.757-0.621-1.875-0.932-3.354-0.932c-1.54,0-2.661,0.282-3.365,0.846
c-0.704,0.564-1.057,1.245-1.057,2.041c0,0.691,0.249,1.26,0.748,1.706c0.49,0.446,1.77,0.903,3.839,1.371
c2.069,0.468,3.488,0.877,4.258,1.227c1.12,0.516,1.947,1.17,2.48,1.962s0.801,1.704,0.801,2.736c0,1.024-0.293,1.988-0.879,2.894
c-0.586,0.906-1.428,1.61-2.525,2.113c-1.098,0.503-2.334,0.755-3.708,0.755c-1.741,0-3.199-0.254-4.376-0.761
s-2.1-1.271-2.769-2.29C136.845,237.164,136.492,236.012,136.457,234.726z"/>
</g>
<g>
<path fill="#F1F2F2" d="M227.472,154.355v-19.895h14.385v2.348h-11.752v6.093h11.006v2.334h-11.006v6.772h12.213v2.348H227.472z"/>
</g>
<g>
<path fill="#F1F2F2" d="M136.071,67.065V47.17h2.701l10.45,15.62V47.17h2.524v19.895h-2.701l-10.45-15.634v15.634H136.071z"/>
</g>
<polygon fill="#F1F2F2" points="139.026,268.342 144,258.395 148.974,268.342 "/>
<polygon fill="#F1F2F2" points="268.342,148.974 258.395,144 268.342,139.026 "/>
<polygon fill="#F1F2F2" points="148.974,19.658 144,29.605 139.026,19.658 "/>
<polygon fill="#F1F2F2" points="19.658,139.026 29.605,144 19.658,148.974 "/>
</svg>
......@@ -10,4 +10,7 @@ QGCPitchWidget 1.0 QGCPitchWidget.qml
QGCSpeedWidget 1.0 QGCSpeedWidget.qml
QGCSlider 1.0 QGCSlider.qml
QGCWaypointEditor 1.0 QGCWaypointEditor.qml
QGCMapToolButton 1.0 QGCMapToolButton.qml
\ No newline at end of file
QGCMapToolButton 1.0 QGCMapToolButton.qml
QGCAttitudeInstrument 1.0 QGCAttitudeInstrument.qml
QGCCompassInstrument 1.0 QGCCompassInstrument.qml
QGCArtificialHorizon 1.0 QGCArtificialHorizon.qml
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 288 159.854" enable-background="new 0 0 288 159.854" xml:space="preserve">
<g id="Layer_1">
<text transform="matrix(1 0 0 1 136.0895 12.201)" font-family="'Arial-BoldMT'" font-size="14.2222">00</text>
<text transform="matrix(0.9659 -0.2588 0.2588 0.9659 98.1424 19.2784)" font-family="'Arial-BoldMT'" font-size="14.2218">15</text>
<text transform="matrix(0.866 -0.5 0.5 0.866 63.3229 35.9389)" font-family="'Arial-BoldMT'" font-size="14.2219">30</text>
<text transform="matrix(0.7071 -0.7071 0.7071 0.7071 33.9995 61.0398)" font-family="'Arial-BoldMT'" font-size="14.2221">45</text>
<text transform="matrix(0.5 -0.866 0.866 0.5 12.1723 92.8793)" font-family="'Arial-BoldMT'" font-size="14.2219">60</text>
<text transform="matrix(0.9659 0.2588 -0.2588 0.9659 174.5744 15.1842)" font-family="'Arial-BoldMT'" font-size="14.2218">15</text>
<text transform="matrix(0.866 0.5 -0.5 0.866 210.9767 28.0287)" font-family="'Arial-BoldMT'" font-size="14.2219">30</text>
<text transform="matrix(0.7071 0.7071 -0.7071 0.7071 242.8152 49.8557)" font-family="'Arial-BoldMT'" font-size="14.2221">45</text>
<text transform="matrix(0.5 0.866 -0.866 0.5 267.9185 79.1788)" font-family="'Arial-BoldMT'" font-size="14.2219">60</text>
</g>
<g id="Layer_3">
<rect id="rect5769" y="153.455" fill="none" width="288" height="6.4"/>
</g>
<g id="Layer_2">
<line fill="none" stroke="#000000" stroke-width="4" x1="144.1" y1="23.855" x2="144.1" y2="16.355"/>
<line fill="none" stroke="#000000" stroke-width="4" x1="108.9" y1="28.455" x2="107" y2="21.255"/>
<line fill="none" stroke="#000000" stroke-width="4" x1="76.1" y1="41.955" x2="72.4" y2="35.455"/>
<line fill="none" stroke="#000000" stroke-width="4" x1="47.9" y1="63.555" x2="42.7" y2="58.355"/>
<line fill="none" stroke="#000000" stroke-width="4" x1="26.3" y1="91.755" x2="19.8" y2="88.055"/>
<line fill="none" stroke="#000000" stroke-width="4" x1="179.3" y1="28.455" x2="181.2" y2="21.255"/>
<line fill="none" stroke="#000000" stroke-width="4" x1="212.1" y1="42.155" x2="215.8" y2="35.655"/>
<line fill="none" stroke="#000000" stroke-width="4" x1="240.3" y1="63.755" x2="245.5" y2="58.555"/>
<line fill="none" stroke="#000000" stroke-width="4" x1="261.9" y1="91.955" x2="268.4" y2="88.255"/>
<path fill="none" stroke="#000000" stroke-width="2" stroke-linecap="round" stroke-linejoin="bevel" d="M262.4,92.955
c-11.6-20.6-28.6-37.9-48.9-50s-44.1-19.1-69.5-19.1s-49.2,6.9-69.4,19s-37.2,29.3-48.9,50"/>
</g>
</svg>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 288 288 129.6" enable-background="new 0 288 288 129.6" xml:space="preserve">
<g id="svg5772" inkscape:version="0.48.2 r9819" sodipodi:docname="rollPointer.svg" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape">
<sodipodi:namedview id="base" inkscape:current-layer="layer5" inkscape:showpageshadow="false" inkscape:document-units="px" inkscape:window-width="1920" inkscape:window-y="22" inkscape:window-maximized="1" inkscape:guide-bbox="true" inkscape:window-height="1152" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:window-x="0" pagecolor="#ffffff" inkscape:zoom="3" inkscape:cx="74.271777" inkscape:cy="66.806039" bordercolor="#666666" showgrid="true" showguides="true" borderopacity="1.0">
<inkscape:grid type="xygrid" id="grid5780" snapvisiblegridlinesonly="true" empspacing="5" enabled="true" visible="true">
</inkscape:grid>
</sodipodi:namedview>
<rect id="rect5782" y="405.5" fill="none" width="288" height="12.1"/>
</g>
<g id="Layer_2">
<path id="path6692_1_" inkscape:connector-curvature="0" d="M135,313.2c9-25.2,9-25.2,9-25.2l9,25.2l0,0H135z"/>
</g>
</svg>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment