diff --git a/qgroundcontrol.qrc b/qgroundcontrol.qrc
index c9b1729..a5ec028 100644
--- a/qgroundcontrol.qrc
+++ b/qgroundcontrol.qrc
@@ -120,16 +120,16 @@
src/ui/mapdisplay/MapDisplay.qml
src/ui/qmlcommon/QGCAltitudeWidget.qml
src/ui/qmlcommon/QGCArtificialHorizon.qml
- src/ui/qmlcommon/QGCAttitudeInstrument.qml
src/ui/qmlcommon/QGCAttitudeWidget.qml
- src/ui/qmlcommon/QGCCompass.qml
- src/ui/qmlcommon/QGCCompassInstrument.qml
+ src/ui/qmlcommon/QGCAttitudeHUD.qml
+ src/ui/qmlcommon/QGCCompassWidget.qml
+ src/ui/qmlcommon/QGCCompassHUD.qml
src/ui/qmlcommon/QGCCurrentAltitude.qml
src/ui/qmlcommon/QGCCurrentSpeed.qml
src/ui/qmlcommon/QGCHudMessage.qml
src/ui/qmlcommon/QGCMapBackground.qml
src/ui/qmlcommon/QGCMapToolButton.qml
- src/ui/qmlcommon/QGCPitchWidget.qml
+ src/ui/qmlcommon/QGCPitchIndicator.qml
src/ui/qmlcommon/QGCSlider.qml
src/ui/qmlcommon/QGCSpeedWidget.qml
src/ui/qmlcommon/QGCVideoBackground.qml
diff --git a/src/ui/flightdisplay/FlightDisplay.qml b/src/ui/flightdisplay/FlightDisplay.qml
index e075a52..0d4a7dd 100644
--- a/src/ui/flightdisplay/FlightDisplay.qml
+++ b/src/ui/flightdisplay/FlightDisplay.qml
@@ -47,8 +47,6 @@ Item {
property real pitch: isNaN(MavManager.pitch) ? 0 : MavManager.pitch
property bool showPitchIndicator: true
- property bool showAttitudeIndicator: true
- property bool showCompass: true
function getBool(value) {
return value === '0' ? false : true;
@@ -58,8 +56,11 @@ Item {
return value ? "1" : "0";
}
- function showHudInstruments() {
- return videoBackground.visible || mapBackground.visible;
+ function enforceExclusiveOption(setWidget, alternateWidget, defaultSetting, alternateSetting) {
+ setWidget.visible = !setWidget.visible;
+ flightDisplay.saveSetting(defaultSetting, setBool(setWidget.visible));
+ alternateWidget.visible = setWidget.visible ? false : alternateWidget.visible;
+ flightDisplay.saveSetting(alternateSetting, setBool(alternateWidget.visible));
}
Connections {
@@ -75,9 +76,11 @@ Item {
mapBackground.showWaypoints = getBool(flightDisplay.loadSetting("mapShowWaypoints", "0"));
mapBackground.alwaysNorth = getBool(flightDisplay.loadSetting("mapAlwaysPointsNorth", "0"));
videoBackground.visible = getBool(flightDisplay.loadSetting("showVideoBackground", "0"));
- showAttitudeIndicator = getBool(flightDisplay.loadSetting("showAttitudeIndicator", "1"));
showPitchIndicator = getBool(flightDisplay.loadSetting("showPitchIndicator", "1"));
- showCompass = getBool(flightDisplay.loadSetting("showCompass", "1"));
+ compassWidget.visible = getBool(flightDisplay.loadSetting("showCompassWidget", "0"));
+ compassHUD.visible = getBool(flightDisplay.loadSetting("showCompassHUD", "1"));
+ attitudeWidget.visible = getBool(flightDisplay.loadSetting("showAttitudeWidget", "0"));
+ attitudeHUD.visible = getBool(flightDisplay.loadSetting("showAttitudeHUD", "1"));
altitudeWidget.visible = getBool(flightDisplay.loadSetting("showAltitudeWidget", "1"));
speedWidget.visible = getBool(flightDisplay.loadSetting("showSpeedWidget", "1"));
currentSpeed.showAirSpeed = getBool(flightDisplay.loadSetting("showCurrentAirSpeed", "1"));
@@ -91,6 +94,16 @@ Item {
videoBackground.visible = false;
flightDisplay.saveSetting("showVideoBackground", setBool(videoBackground.visible));
}
+ // Compass HUD or Widget. Not both:
+ if(compassWidget.visible && compassHUD.visible) {
+ compassWidget.visible = false;
+ flightDisplay.saveSetting("showCompassWidget", setBool(compassWidget.visible));
+ }
+ // Attitude HUD or Widget. Not both:
+ if(attitudeWidget.visible && attitudeHUD.visible) {
+ attitudeWidget.visible = false;
+ flightDisplay.saveSetting("showAttitudeWidget", setBool(attitudeWidget.visible));
+ }
// Disable video if we don't have support for it
if(!flightDisplay.hasVideo) {
videoBackground.visible = false;
@@ -103,19 +116,13 @@ Item {
Menu {
id: contextMenu
- ExclusiveGroup { id: backgroundDisplay }
-
MenuItem {
text: "Map Background"
checkable: true
checked: mapBackground.visible
- exclusiveGroup: backgroundDisplay
onTriggered:
{
- mapBackground.visible = !mapBackground.visible;
- flightDisplay.saveSetting("showMapBackground", setBool(mapBackground.visible));
- videoBackground.visible = mapBackground.visible ? false : videoBackground.visible;
- flightDisplay.saveSetting("showVideoBackground", setBool(videoBackground.visible));
+ enforceExclusiveOption(mapBackground, videoBackground, "showMapBackground", "showVideoBackground");
}
}
@@ -152,22 +159,39 @@ Item {
text: "Video Background"
checkable: true
checked: videoBackground.visible
- exclusiveGroup: backgroundDisplay
onTriggered:
{
- videoBackground.visible = !videoBackground.visible;
- flightDisplay.saveSetting("showVideoBackground", setBool(videoBackground.visible));
- mapBackground.visible = videoBackground.visible ? false : mapBackground.visible;
- flightDisplay.saveSetting("showMapBackground", setBool(mapBackground.visible));
+ enforceExclusiveOption(videoBackground, mapBackground, "showVideoBackground", "showMapBackground");
}
}
MenuSeparator {}
MenuItem {
+ text: "Attitude Widget"
+ checkable: true
+ checked: attitudeWidget.visible
+ onTriggered:
+ {
+ enforceExclusiveOption(attitudeWidget, attitudeHUD, "showAttitudeWidget", "showAttitudeHUD");
+ }
+ }
+
+ MenuItem {
+ text: "Attitude HUD"
+ checkable: true
+ checked: attitudeHUD.visible
+ onTriggered:
+ {
+ enforceExclusiveOption(attitudeHUD, attitudeWidget, "showAttitudeHUD", "showAttitudeWidget");
+ }
+ }
+
+ MenuItem {
text: "Pitch Indicator"
checkable: true
checked: showPitchIndicator
+ enabled: attitudeHUD.visible || attitudeWidget.visible
onTriggered:
{
showPitchIndicator = !showPitchIndicator;
@@ -176,24 +200,22 @@ Item {
}
MenuItem {
- text: "Attitude Indicator"
- checkable: true
- checked: showAttitudeIndicator
+ text: "Compass Widget"
+ checkable: true
+ checked: compassWidget.visible
onTriggered:
{
- showAttitudeIndicator = !showAttitudeIndicator;
- flightDisplay.saveSetting("showAttitudeIndicator", setBool(showAttitudeIndicator));
+ enforceExclusiveOption(compassWidget, compassHUD, "showCompassWidget", "showCompassHUD");
}
}
MenuItem {
- text: "Compass"
+ text: "Compass HUD"
checkable: true
- checked: showCompass
+ checked: compassHUD.visible
onTriggered:
{
- showCompass = !showCompass;
- flightDisplay.saveSetting("showCompass", setBool(showCompass));
+ enforceExclusiveOption(compassHUD, compassWidget, "showCompassHUD", "showCompassWidget");
}
}
@@ -271,10 +293,14 @@ Item {
{
showPitchIndicator = true;
flightDisplay.saveSetting("showPitchIndicator", setBool(showPitchIndicator));
- showAttitudeIndicator = true;
- flightDisplay.saveSetting("showAttitudeIndicator", setBool(showAttitudeIndicator));
- showCompass = true;
- flightDisplay.saveSetting("showCompass", setBool(showCompass));
+ attitudeWidget.visible = false;
+ flightDisplay.saveSetting("showAttitudeWidget", setBool(attitudeWidget.visible));
+ attitudeHUD.visible = true;
+ flightDisplay.saveSetting("showAttitudeHUD", setBool(attitudeHUD.visible));
+ compassWidget.visible = false
+ flightDisplay.saveSetting("showCompassWidget", setBool(compassWidget.visible));
+ compassHUD.visible = true
+ flightDisplay.saveSetting("showCompassHUD", setBool(compassHUD.visible));
altitudeWidget.visible = true;
flightDisplay.saveSetting("showAltitudeWidget", setBool(altitudeWidget.visible));
currentAltitude.showAltitude = true;
@@ -300,6 +326,8 @@ Item {
}
+ // Video and Map backgrounds are exclusive. If one is enabled the other is disabled.
+
QGCVideoBackground {
id: videoBackground
anchors.fill: parent
@@ -329,13 +357,14 @@ Item {
z: mapBackground.z + 1
}
- QGCCompassInstrument {
- id: compassInstrument
+ // Floating (Top Left) Compass Widget
+
+ QGCCompassWidget {
+ id: compassWidget
y: ScreenTools.defaultFontPixelSize * (0.42)
x: ScreenTools.defaultFontPixelSize * (7.1)
size: ScreenTools.defaultFontPixelSize * (13.3)
heading: isNaN(MavManager.heading) ? 0 : MavManager.heading
- visible: showHudInstruments() && showCompass
z: mapBackground.z + 2
onResetRequested: {
y = ScreenTools.defaultFontPixelSize * (0.42)
@@ -346,14 +375,37 @@ Item {
}
}
- QGCAttitudeInstrument {
- id: attitudeInstrument
+ // HUD (lower middle) Compass
+
+ QGCCompassHUD {
+ id: compassHUD
+ y: root.height * 0.7
+ x: root.width * 0.5 - ScreenTools.defaultFontPixelSize * (5)
+ width: ScreenTools.defaultFontPixelSize * (10)
+ height: ScreenTools.defaultFontPixelSize * (10)
+ heading: isNaN(MavManager.heading) ? 0 : MavManager.heading
+ z: 70
+ }
+
+ // Sky/Ground background (visible when no Map or Video is enabled)
+
+ QGCArtificialHorizon {
+ id: artificialHoriz
+ anchors.fill: parent
+ rollAngle: roll
+ pitchAngle: pitch
+ visible: !videoBackground.visible && !mapBackground.visible
+ }
+
+ // Floating (Top Right) Attitude Widget
+
+ QGCAttitudeWidget {
+ id: attitudeWidget
y: ScreenTools.defaultFontPixelSize * (0.42)
size: ScreenTools.defaultFontPixelSize * (13.3)
rollAngle: roll
pitchAngle: pitch
showPitch: showPitchIndicator
- visible: showHudInstruments() && showAttitudeIndicator
anchors.right: root.right
anchors.rightMargin: ScreenTools.defaultFontPixelSize * (7.1)
z: mapBackground.z + 2
@@ -367,35 +419,18 @@ Item {
}
}
- QGCArtificialHorizon {
- id: artificialHoriz
- anchors.fill: parent
- rollAngle: roll
- pitchAngle: pitch
- visible: !showHudInstruments()
- }
+ // HUD (center) Attitude Indicator
- QGCAttitudeWidget {
- id: attitudeWidget
+ QGCAttitudeHUD {
+ id: attitudeHUD
rollAngle: roll
pitchAngle: pitch
- visible: !showHudInstruments() && showAttitudeIndicator
- width: ScreenTools.defaultFontPixelSize * (21.7)
- height: ScreenTools.defaultFontPixelSize * (21.7)
+ showPitch: showPitchIndicator
+ width: ScreenTools.defaultFontPixelSize * (30)
+ height: ScreenTools.defaultFontPixelSize * (30)
z: 20
}
- QGCPitchWidget {
- id: pitchWidget
- visible: showPitchIndicator && !showHudInstruments()
- anchors.verticalCenter: parent.verticalCenter
- pitchAngle: pitch
- rollAngle: roll
- color: Qt.rgba(0,0,0,0)
- size: ScreenTools.defaultFontPixelSize * (10)
- z: 30
- }
-
QGCAltitudeWidget {
id: altitudeWidget
anchors.right: parent.right
@@ -438,17 +473,6 @@ Item {
z: 60
}
- QGCCompass {
- id: compassIndicator
- y: root.height * 0.7
- x: root.width * 0.5 - ScreenTools.defaultFontPixelSize * (5)
- width: ScreenTools.defaultFontPixelSize * (10)
- height: ScreenTools.defaultFontPixelSize * (10)
- heading: isNaN(MavManager.heading) ? 0 : MavManager.heading
- visible: !showHudInstruments() && showCompass
- z: 70
- }
-
//- Context Menu
MouseArea {
anchors.fill: parent
diff --git a/src/ui/qmlcommon/QGCAttitudeInstrument.qml b/src/ui/qmlcommon/QGCAttitudeHUD.qml
similarity index 54%
rename from src/ui/qmlcommon/QGCAttitudeInstrument.qml
rename to src/ui/qmlcommon/QGCAttitudeHUD.qml
index df060bc..2456a47 100644
--- a/src/ui/qmlcommon/QGCAttitudeInstrument.qml
+++ b/src/ui/qmlcommon/QGCAttitudeHUD.qml
@@ -23,81 +23,59 @@ This file is part of the QGROUNDCONTROL project
/**
* @file
- * @brief QGC Attitude Instrument
+ * @brief QGC Attitude Widget
* @author Gus Grubba
*/
import QtQuick 2.4
-import QGroundControl.Controls 1.0
+import QGroundControl.ScreenTools 1.0
-QGCMovableItem {
+Item {
id: root
- property real rollAngle: 0
+ anchors.centerIn: parent
+ property real rollAngle : 0
property real pitchAngle: 0
property bool showPitch: true
- property real size
- width: size
- height: size
-
- //----------------------------------------------------
- //-- Artificial Horizon
- QGCArtificialHorizon {
- rollAngle: root.rollAngle
- pitchAngle: root.pitchAngle
- anchors.fill: parent
- }
- //----------------------------------------------------
- //-- Pointer
Image {
- id: pointer
- source: "/qmlimages/attitudePointer.svg"
+ id: rollDial
+ anchors { bottom: root.verticalCenter; horizontalCenter: parent.horizontalCenter}
+ source: "/qmlimages/rollDialWhite.svg"
mipmap: true
+ width: parent.width
fillMode: Image.PreserveAspectFit
- anchors.fill: parent
+ transform: Rotation {
+ origin.x: rollDial.width / 2
+ origin.y: rollDial.height
+ angle: -rollAngle
+ }
}
- //----------------------------------------------------
- //-- Instrument Dial
+
Image {
- id: instrumentDial
- source: "/qmlimages/attitudeDial.svg"
+ id: pointer
+ anchors { bottom: root.verticalCenter; horizontalCenter: parent.horizontalCenter}
+ source: "/qmlimages/rollPointerWhite.svg"
mipmap: true
+ width: rollDial.width
fillMode: Image.PreserveAspectFit
- anchors.fill: parent
- transform: Rotation {
- origin.x: root.width / 2
- origin.y: root.height / 2
- angle: -rollAngle
- }
}
- //----------------------------------------------------
- //-- Pitch
- QGCPitchWidget {
- id: pitchWidget
- visible: root.showPitch
- size: root.size * 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: "/qmlimages/crossHair.svg"
mipmap: true
- width: size * 0.75
+ width: parent.width
fillMode: Image.PreserveAspectFit
}
- //----------------------------------------------------
- //-- Instrument Pannel
- Image {
- id: pannel
- source: "/qmlimages/attitudeInstrument.svg"
- mipmap: true
- fillMode: Image.PreserveAspectFit
- anchors.fill: parent
+
+ QGCPitchIndicator {
+ id: pitchIndicator
+ anchors.verticalCenter: parent.verticalCenter
+ visible: root.showPitch
+ pitchAngle: root.pitchAngle
+ rollAngle: root.rollAngle
+ color: Qt.rgba(0,0,0,0)
+ size: ScreenTools.defaultFontPixelSize * (10)
}
}
diff --git a/src/ui/qmlcommon/QGCAttitudeWidget.qml b/src/ui/qmlcommon/QGCAttitudeWidget.qml
index 40e8062..f0095fd 100644
--- a/src/ui/qmlcommon/QGCAttitudeWidget.qml
+++ b/src/ui/qmlcommon/QGCAttitudeWidget.qml
@@ -23,48 +23,81 @@ This file is part of the QGROUNDCONTROL project
/**
* @file
- * @brief QGC Attitude Widget
+ * @brief QGC Attitude Instrument
* @author Gus Grubba
*/
import QtQuick 2.4
-import QGroundControl.ScreenTools 1.0
+import QGroundControl.Controls 1.0
-Item {
+QGCMovableItem {
id: root
- anchors.centerIn: parent
- property real rollAngle : 0
+ property real rollAngle: 0
property real pitchAngle: 0
+ property bool showPitch: true
+ property real size
+ width: size
+ height: size
+
+ //----------------------------------------------------
+ //-- Artificial Horizon
+ QGCArtificialHorizon {
+ rollAngle: root.rollAngle
+ pitchAngle: root.pitchAngle
+ anchors.fill: parent
+ }
+ //----------------------------------------------------
+ //-- Pointer
Image {
- id: rollDial
- anchors { bottom: root.verticalCenter; horizontalCenter: parent.horizontalCenter}
- source: "/qmlimages/rollDialWhite.svg"
+ id: pointer
+ source: "/qmlimages/attitudePointer.svg"
mipmap: true
- width: parent.width
fillMode: Image.PreserveAspectFit
- transform: Rotation {
- origin.x: rollDial.width / 2
- origin.y: rollDial.height
- angle: -rollAngle
- }
+ anchors.fill: parent
}
-
+ //----------------------------------------------------
+ //-- Instrument Dial
Image {
- id: pointer
- anchors { bottom: root.verticalCenter; horizontalCenter: parent.horizontalCenter}
- source: "/qmlimages/rollPointerWhite.svg"
+ id: instrumentDial
+ source: "/qmlimages/attitudeDial.svg"
mipmap: true
- width: rollDial.width
fillMode: Image.PreserveAspectFit
+ anchors.fill: parent
+ transform: Rotation {
+ origin.x: root.width / 2
+ origin.y: root.height / 2
+ angle: -rollAngle
+ }
}
-
+ //----------------------------------------------------
+ //-- Pitch
+ QGCPitchIndicator {
+ id: pitchWidget
+ visible: root.showPitch
+ size: root.size * 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: "/qmlimages/crossHair.svg"
mipmap: true
- width: parent.width
+ width: size * 0.75
fillMode: Image.PreserveAspectFit
}
+ //----------------------------------------------------
+ //-- Instrument Pannel
+ Image {
+ id: pannel
+ source: "/qmlimages/attitudeInstrument.svg"
+ mipmap: true
+ fillMode: Image.PreserveAspectFit
+ anchors.fill: parent
+ }
}
diff --git a/src/ui/qmlcommon/QGCCompass.qml b/src/ui/qmlcommon/QGCCompassHUD.qml
similarity index 98%
rename from src/ui/qmlcommon/QGCCompass.qml
rename to src/ui/qmlcommon/QGCCompassHUD.qml
index 2d8e2af..6a39a35 100644
--- a/src/ui/qmlcommon/QGCCompass.qml
+++ b/src/ui/qmlcommon/QGCCompassHUD.qml
@@ -23,7 +23,7 @@ This file is part of the QGROUNDCONTROL project
/**
* @file
- * @brief QGC Compass
+ * @brief QGC Compass HUD
* @author Gus Grubba
*/
@@ -70,5 +70,3 @@ Item {
}
}
}
-
-
diff --git a/src/ui/qmlcommon/QGCCompassInstrument.qml b/src/ui/qmlcommon/QGCCompassWidget.qml
similarity index 98%
rename from src/ui/qmlcommon/QGCCompassInstrument.qml
rename to src/ui/qmlcommon/QGCCompassWidget.qml
index adbde3b..d4ca061 100644
--- a/src/ui/qmlcommon/QGCCompassInstrument.qml
+++ b/src/ui/qmlcommon/QGCCompassWidget.qml
@@ -23,7 +23,7 @@ This file is part of the QGROUNDCONTROL project
/**
* @file
- * @brief QGC Compass
+ * @brief QGC Compass Widget
* @author Gus Grubba
*/
diff --git a/src/ui/qmlcommon/QGCPitchWidget.qml b/src/ui/qmlcommon/QGCPitchIndicator.qml
similarity index 100%
rename from src/ui/qmlcommon/QGCPitchWidget.qml
rename to src/ui/qmlcommon/QGCPitchIndicator.qml
diff --git a/src/ui/qmlcommon/qmldir b/src/ui/qmlcommon/qmldir
index dfaeec2..7bd0f90 100644
--- a/src/ui/qmlcommon/qmldir
+++ b/src/ui/qmlcommon/qmldir
@@ -1,19 +1,19 @@
Module QGroundControl.FlightControls
QGCAltitudeWidget 1.0 QGCAltitudeWidget.qml
+QGCArtificialHorizon 1.0 QGCArtificialHorizon.qml
+QGCAttitudeHUD 1.0 QGCAttitudeHUD.qml
QGCAttitudeWidget 1.0 QGCAttitudeWidget.qml
-QGCCompass 1.0 QGCCompass.qml
+QGCCompassHUD 1.0 QGCCompassHUD.qml
+QGCCompassWidget 1.0 QGCCompassWidget.qml
QGCCurrentAltitude 1.0 QGCCurrentAltitude.qml
QGCCurrentSpeed 1.0 QGCCurrentSpeed.qml
+QGCHudMessage 1.0 QGCHudMessage.qml
QGCMapBackground 1.0 QGCMapBackground.qml
-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
-QGCAttitudeInstrument 1.0 QGCAttitudeInstrument.qml
-QGCCompassInstrument 1.0 QGCCompassInstrument.qml
-QGCArtificialHorizon 1.0 QGCArtificialHorizon.qml
-QGCWaypoint 1.0 QGCWaypoint.qml
-QGCHudMessage 1.0 QGCHudMessage.qml
+QGCPitchIndicator 1.0 QGCPitchIndicator.qml
+QGCSlider 1.0 QGCSlider.qml
+QGCSpeedWidget 1.0 QGCSpeedWidget.qml
QGCVideoBackground 1.0 QGCVideoBackground.qml
+QGCWaypoint 1.0 QGCWaypoint.qml
+QGCWaypointEditor 1.0 QGCWaypointEditor.qml