diff --git a/Animation.cpp b/Animation.cpp index f4a7a28..25474b2 100644 --- a/Animation.cpp +++ b/Animation.cpp @@ -1,5 +1,5 @@ #include "Animation.h" - +#include /* sin & cos */ #include Animation::Animation(QObject *parent) @@ -38,6 +38,16 @@ void Animation::update() mPfd->setDmeDistance(99.0 * sin(mPlayTime / 100.0)); mPfd->setAirspeedBug(-50.0 * cos(mPlayTime / 10.0) + 50.0); mPfd->setAltitudeBug(-1000.0 * cos(mPlayTime / 40.0) + 1000.0); + + mPfd->setLeftTankFuel(15 - 15 * cos(mPlayTime / 10.0)); + mPfd->setRightTankFuel(15 - 15 * cos(mPlayTime / 20.0)); + mPfd->setEgt(1300 - 600 * cos(mPlayTime / 10.0)); + mPfd->setFuelFlow(10 - 10 * cos(mPlayTime / 10.0)); + mPfd->setEngineTemperature(160 - 85 * cos(mPlayTime / 10.0)); + mPfd->setEnginePressure(57.5 - 57.5 * cos(mPlayTime / 10.0)); + mPfd->setVac(5 - 2 * cos(mPlayTime / 5.0)); + mPfd->setAmp(60 * sin(mPlayTime / 10.0)); + mPfd->setRpm(1750 - 1750 * cos(mPlayTime / 10.0)); } void Animation::init() diff --git a/ExampleBasicSix.qml b/ExampleBasicSix.qml index 257ac1c..84863c1 100644 --- a/ExampleBasicSix.qml +++ b/ExampleBasicSix.qml @@ -10,78 +10,51 @@ Window { minimumHeight: 600 visibility: Window.Maximized title: "Basic Six Example" - color: "#ffffff" + color: "#000000" - GridLayout { + Grid { columns: 3 anchors { - fill: parent + centerIn: parent margins: 16 } - Item { - Layout.fillWidth: true - Layout.fillHeight: true - - AirspeedIndicator { - radius: 0.5 * Math.min(parent.width, parent.height) - airspeed: pfd.airspeed - } + AirspeedIndicator { + radius: 250 + airspeed: pfd.airspeed } - Item { - Layout.fillWidth: true - Layout.fillHeight: true - - AttitudeIndicator { - radius: 0.5 * Math.min(parent.width, parent.height) - roll: pfd.roll - pitch: pfd.pitch - } + AttitudeIndicator { + radius: 250 + roll: pfd.roll + pitch: pfd.pitch } - Item { - Layout.fillWidth: true - Layout.fillHeight: true - Altimeter { - radius: 0.5 * Math.min(parent.width, parent.height) - altitude: pfd.altitude - pressure: pfd.pressure - } + Altimeter { + radius: 250 + altitude: pfd.altitude + pressure: pfd.pressure } - Item { - Layout.fillWidth: true - Layout.fillHeight: true - - TurnCoordinator { - radius: 0.5 * Math.min(parent.width, parent.height) - turnRate: pfd.turnRate - slipSkid: pfd.slipSkid - } + TurnCoordinator { + radius: 250 + turnRate: pfd.turnRate + slipSkid: pfd.slipSkid } - Item { - Layout.fillWidth: true - Layout.fillHeight: true - - HeadingIndicator { - radius: 0.5 * Math.min(parent.width, parent.height) - heading: pfd.heading - } + HeadingIndicator { + radius: 250 + heading: pfd.heading } - Item { - Layout.fillWidth: true - Layout.fillHeight: true - VerticalSpeedIndicator { - radius: 0.5 * Math.min(parent.width, parent.height) - climbRate: pfd.climbRate - } + VerticalSpeedIndicator { + radius: 250 + climbRate: pfd.climbRate } + } } diff --git a/ExampleEFIS.qml b/ExampleEFIS.qml index 280930c..8b3a6eb 100644 --- a/ExampleEFIS.qml +++ b/ExampleEFIS.qml @@ -13,7 +13,7 @@ Window { minimumHeight: 600 visibility: Window.Maximized title: "EFIS Example" - color: "#ffffff" + color: "#000000" Item { id: container diff --git a/ExampleMiscellaneousGauges.qml b/ExampleMiscellaneousGauges.qml index 879b0d6..93bd755 100644 --- a/ExampleMiscellaneousGauges.qml +++ b/ExampleMiscellaneousGauges.qml @@ -1,5 +1,8 @@ import "Misc/PropellerGauge" import "Misc/TankGauge" +import "Misc/TemperaturePressureGauge" +import "Misc/VacAmpGauge" +import "Misc/EgtFuelFlowGauge" import QtQuick 2.15 import QtQuick.Window 2.15 @@ -11,24 +14,48 @@ Window { minimumHeight: 600 visibility: Window.Maximized title: "Miscellaneous Gauges Example" - color: "#ffffff" + color: "#000000" - // Test - GridLayout { - columns: 2 + FontLoader { source: "Resources/Fonts/CenturyGothic.ttf" } + + + Grid { + columns: 3 anchors { - fill: parent + centerIn: parent margins: 16 } TankGauge { - radius: 300 + radius: 250 + leftTankFuel: pfd.leftTankFuel + rightTankFuel: pfd.rightTankFuel + } + + EgtFuelFlowGauge { + radius: 250 + egt: pfd.egt + fuelFlow: pfd.fuelFlow } PropellerGauge { - radius: 300 + radius: 250 + rpm: pfd.rpm + } + + + VacAmpGauge { + radius: 250 + vac: pfd.vac + amp: pfd.amp + } + + TemperaturePressureGauge { + radius: 250 + engineTemperature: pfd.engineTemperature + enginePressure: pfd.enginePressure } } } diff --git a/Misc/EgtFuelFlowGauge/EgtFuelFlowGauge.qml b/Misc/EgtFuelFlowGauge/EgtFuelFlowGauge.qml new file mode 100644 index 0000000..703c907 --- /dev/null +++ b/Misc/EgtFuelFlowGauge/EgtFuelFlowGauge.qml @@ -0,0 +1,94 @@ +import "../../Misc" + +import QtQuick 2.0 + +Item { + property double radius: 300 + + width: 2 * radius + height: 2 * radius + + property double egt: 0 + property double fuelFlow: 0 + + Rectangle { + width: 2 * radius + height: 2 * radius + radius: parent.radius + clip: true + color: "#181818" + scale: 0.775 + + EgtGauge { + x: -0.525 * width + y: 0 + width: parent.width + height: parent.height + value: egt + } + + FuelFlowGauge { + x: 0.525 * width + y: 0 + width: parent.width + height: parent.height + value: fuelFlow + } + + GaugeMask {} + + CustomText { + x: 30 / 300 * parent.radius + width: 40 / 300 * parent.radius + height: 195 / 300 * parent.radius + color: "#ffffff" + text: "EGT" + anchors.verticalCenter: parent.verticalCenter + font.pixelSize: Math.max(6, 0.075 * parent.width) + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + lineHeight: 1 + wrapMode: Text.Wrap + } + + CustomText { + x: 530 / 300 * parent.radius + width: 20 / 300 * parent.radius + height: 230 / 300 * parent.radius + color: "#ffffff" + text: "FUEL" + anchors.verticalCenter: parent.verticalCenter + font.pixelSize: Math.max(6, 0.05 * parent.width) + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + lineHeight: 1 + wrapMode: Text.Wrap + } + + CustomText { + x: 560 / 300 * parent.radius + width: 30 / 300 * parent.radius + height: 230 / 300 * parent.radius + color: "#ffffff" + text: "F LOW" + anchors.verticalCenter: parent.verticalCenter + font.pixelSize: Math.max(6, 0.05 * parent.width) + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + lineHeight: 1 + wrapMode: Text.Wrap + } + } + + CustomImage { + anchors.fill: parent + source: "../../Resources/misc/case.svg" + } +} + + +/*##^## +Designer { + D{i:0;formeditorColor:"#000000"}D{i:2}D{i:3}D{i:4}D{i:5}D{i:6}D{i:7}D{i:1}D{i:8} +} +##^##*/ diff --git a/Misc/EgtFuelFlowGauge/EgtGauge.qml b/Misc/EgtFuelFlowGauge/EgtGauge.qml new file mode 100644 index 0000000..2bbaaaa --- /dev/null +++ b/Misc/EgtFuelFlowGauge/EgtGauge.qml @@ -0,0 +1,73 @@ +import "../../Misc" + +import QtQuick 2.15 +import QtGraphicalEffects 1.0 +import QtQuick.Extras 1.4 +import QtQuick.Controls.Styles 1.4 + +CircularGauge { + id: root + minimumValue: 700 + maximumValue: 1900 + stepSize: 1 + value: 0 + + property double minimumValueAngle: 125 + property double maximumValueAngle: 55 + + style: CircularGaugeStyle { + id: style + minimumValueAngle: root.minimumValueAngle + maximumValueAngle: root.maximumValueAngle + tickmarkStepSize: 75 + labelStepSize: 1000 + minorTickmarkCount: 0 + + labelInset: 0.25 * outerRadius + tickmarkInset: 0.02 * outerRadius + + tickmark: Rectangle { + color: "#ffffff" + width: 0.02 * outerRadius + height: 0.115 * outerRadius + radius: 0.01 * outerRadius + antialiasing: true + } + + tickmarkLabel: Item {} + + foreground: Item {} + + needle: CustomNeedle { + width: 0.075 * outerRadius + height: 0.95 * outerRadius + } + + background: Item { + id: background + width: 2 * outerRadius + height: 2 * outerRadius + + CustomText { + color: "#ffffff" + x: 1.6 * outerRadius + y: 1.6 * outerRadius + text: "25 °C" + font.pixelSize: Math.max(6, 0.05 * parent.width) + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + } + + CustomText { + color: "#ffffff" + x: 1.63 * outerRadius + y: 1.725 * outerRadius + text: "DIV" + font.pixelSize: Math.max(6, 0.05 * parent.width) + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + } + } + } +} + diff --git a/Misc/EgtFuelFlowGauge/FuelFlowGauge.qml b/Misc/EgtFuelFlowGauge/FuelFlowGauge.qml new file mode 100644 index 0000000..4aa4aab --- /dev/null +++ b/Misc/EgtFuelFlowGauge/FuelFlowGauge.qml @@ -0,0 +1,98 @@ +import "../../Misc" + +import QtQuick 2.15 +import QtGraphicalEffects 1.0 +import QtQuick.Extras 1.4 +import QtQuick.Controls.Styles 1.4 + +CircularGauge { + id: root + minimumValue: -0 + maximumValue: 20 + stepSize: 0.001 + value: 0 + + property double minimumValueAngle: -125 + property double maximumValueAngle: -55 + + style: CircularGaugeStyle { + id: style + minimumValueAngle: root.minimumValueAngle + maximumValueAngle: root.maximumValueAngle + tickmarkStepSize: 2.5 + labelStepSize: 5 + minorTickmarkCount: 0 + + labelInset: 0.275 * outerRadius + tickmarkInset: 0.02 * outerRadius + + tickmark: Rectangle { + color: "#ffffff" + width: 0.02 * outerRadius + height: 0.115 * outerRadius + radius: 0.01 * outerRadius + antialiasing: true + } + + tickmarkLabel: Text { + text: styleData.value + color: "#ffffff" + font.family: "Century Gothic" + font.pixelSize: Math.max(6, 0.1 * outerRadius) + font.weight: Font.Black + antialiasing: true + } + + foreground: Item {} + + needle: CustomNeedle { + width: 0.075 * outerRadius + height: 0.95 * outerRadius + } + + background: Item { + id: background + width: 2 * outerRadius + height: 2 * outerRadius + + CustomCanvas { + anchors.fill: parent + onPaint: { + if(context) + { + context.reset() + context.lineWidth = 7 / 90 * outerRadius + context.beginPath() + context.arc(outerRadius, + outerRadius, + outerRadius - tickmarkInset - context.lineWidth / 2, + (valueToAngle(0) - 90) * Math.PI / 180.0, + (valueToAngle(11) - 90) * Math.PI / 180.0) + context.strokeStyle = "#00c300" + context.stroke() + } + } + } + + CustomText { + color: "#ffffff" + x: 0.1 * outerRadius + y: 1.6 * outerRadius + text: "GAL" + font.pixelSize: Math.max(6, 0.05 * parent.width) + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + } + + CustomText { + color: "#ffffff" + x: 0.145 * outerRadius + y: 1.725 * outerRadius + text: "HR" + font.pixelSize: Math.max(6, 0.05 * parent.width) + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + } + } + } +} diff --git a/Misc/PropellerGauge/PropellerGauge.qml b/Misc/PropellerGauge/PropellerGauge.qml index d386c09..5d24870 100644 --- a/Misc/PropellerGauge/PropellerGauge.qml +++ b/Misc/PropellerGauge/PropellerGauge.qml @@ -5,6 +5,7 @@ import QtQuick.Extras 1.4 Item { property double radius: 300 + property double rpm: 0 width: 2 * radius height: 2 * radius @@ -17,7 +18,7 @@ Item { minimumValue: 0 maximumValue: 3500 stepSize: 1 - value: 0 + value: rpm style: PropellerGaugeStyle {} } diff --git a/Misc/PropellerGauge/PropellerGaugeStyle.qml b/Misc/PropellerGauge/PropellerGaugeStyle.qml index 4780a84..6fb5e8d 100644 --- a/Misc/PropellerGauge/PropellerGaugeStyle.qml +++ b/Misc/PropellerGauge/PropellerGaugeStyle.qml @@ -71,9 +71,7 @@ CircularGaugeStyle { if(context) { context.reset() - context.lineWidth = 7 / 90 * outerRadius - context.beginPath() context.arc(outerRadius, outerRadius, diff --git a/Misc/TankGauge/BaseTankGauge.qml b/Misc/TankGauge/BaseTankGauge.qml index 1221926..9de6fd6 100644 --- a/Misc/TankGauge/BaseTankGauge.qml +++ b/Misc/TankGauge/BaseTankGauge.qml @@ -9,10 +9,9 @@ CircularGauge { id: root minimumValue: 0 maximumValue: 30 - stepSize: 0.1 + stepSize: 0.001 value: 0 - property double minimumValueAngle: 135 property double maximumValueAngle: 45 property bool positiveDirectionIsClockwise: false @@ -66,9 +65,7 @@ CircularGauge { if(context) { context.reset() - context.lineWidth = 0.045 * outerRadius - context.beginPath() context.arc(outerRadius, outerRadius, diff --git a/Misc/TankGauge/LeftTankGauge.qml b/Misc/TankGauge/LeftTankGauge.qml index 1412b3c..df31b68 100644 --- a/Misc/TankGauge/LeftTankGauge.qml +++ b/Misc/TankGauge/LeftTankGauge.qml @@ -3,7 +3,6 @@ import QtQuick 2.0 BaseTankGauge { minimumValue: 0 maximumValue: 30 - stepSize: 0.1 value: 0 minimumValueAngle: 135 maximumValueAngle: 45 diff --git a/Misc/TankGauge/RightTankGauge.qml b/Misc/TankGauge/RightTankGauge.qml index 7f34d3e..c309fe4 100644 --- a/Misc/TankGauge/RightTankGauge.qml +++ b/Misc/TankGauge/RightTankGauge.qml @@ -3,7 +3,6 @@ import QtQuick 2.0 BaseTankGauge { minimumValue: 0 maximumValue: 30 - stepSize: 0.1 value: 0 minimumValueAngle: -135 maximumValueAngle: -45 diff --git a/Misc/TankGauge/TankGauge.qml b/Misc/TankGauge/TankGauge.qml index 50efccf..dbaf5a8 100644 --- a/Misc/TankGauge/TankGauge.qml +++ b/Misc/TankGauge/TankGauge.qml @@ -8,8 +8,10 @@ Item { width: 2 * radius height: 2 * radius + property double leftTankFuel: 0 + property double rightTankFuel: 0 + Rectangle { - id: rectangle width: 2 * radius height: 2 * radius radius: parent.radius @@ -18,19 +20,19 @@ Item { scale: 0.775 LeftTankGauge { - id: leftGauge x: -0.55 * width y: 0 width: parent.width height: parent.height + value: leftTankFuel } RightTankGauge { - id: rightGauge x: 0.55 * width - y: 2 + y: 0 width: parent.width height: parent.height + value: rightTankFuel } CustomText { @@ -40,7 +42,6 @@ Item { anchors.horizontalCenter: parent.horizontalCenter } - CustomText { y: 450 / 300 * parent.radius height: 20 / 300 * parent.radius @@ -52,7 +53,6 @@ Item { horizontalAlignment: Text.AlignHCenter } - CustomText { id: qtyText y: 510 / 300 * parent.radius @@ -89,7 +89,6 @@ Item { lineHeight: 0.8 wrapMode: Text.Wrap } - } CustomImage { diff --git a/Misc/TemperaturePressureGauge/PressureGauge.qml b/Misc/TemperaturePressureGauge/PressureGauge.qml new file mode 100644 index 0000000..01246c1 --- /dev/null +++ b/Misc/TemperaturePressureGauge/PressureGauge.qml @@ -0,0 +1,93 @@ +import "../../Misc" + +import QtQuick 2.15 +import QtGraphicalEffects 1.0 +import QtQuick.Extras 1.4 +import QtQuick.Controls.Styles 1.4 + +CircularGauge { + id: root + minimumValue: 0 + maximumValue: 115 + stepSize: 0.1 + value: 0 + + property double minimumValueAngle: -135 + property double maximumValueAngle: -45 + + style: CircularGaugeStyle { + id: style + + property double tickmarkHeight: 0.115 * outerRadius + + minimumValueAngle: root.minimumValueAngle + maximumValueAngle: root.maximumValueAngle + tickmarkStepSize: 5 + labelStepSize: 5 + minorTickmarkCount: 0 + + labelInset: 0.275 * outerRadius + tickmarkInset: 0.02 * outerRadius + + tickmark: Rectangle { + color: styleData.value === 115 || styleData.value === 20 ? "#e30000" : "#ffffff" + width: 0.02 * outerRadius + height: style.tickmarkHeight + radius: 0.01 * outerRadius + antialiasing: true + visible: styleData.value === 0 || + styleData.value === 20 || + styleData.value === 40 || + styleData.value === 60 || + styleData.value === 80 || + styleData.value === 100 || + styleData.value === 115 + } + + tickmarkLabel: Text { + text: styleData.value + color: "#ffffff" + font.family: "Century Gothic" + font.pixelSize: Math.max(6, 0.1 * outerRadius) + font.weight: Font.Black + antialiasing: true + visible: styleData.value === 0 || + styleData.value === 20 || + styleData.value === 60 || + styleData.value === 100 || + styleData.value === 115 + } + + foreground: Item {} + + needle: CustomNeedle { + width: 0.075 * outerRadius + height: 0.95 * outerRadius + } + + background: Item { + id: background + width: 2 * outerRadius + height: 2 * outerRadius + + CustomCanvas { + anchors.fill: parent + onPaint: { + if(context) + { + context.reset() + context.lineWidth = 0.075 * outerRadius + context.beginPath() + context.arc(outerRadius, + outerRadius, + outerRadius - tickmarkInset - context.lineWidth / 2, + (valueToAngle(90) - 90) * Math.PI / 180.0, + (valueToAngle(50) - 90) * Math.PI / 180.0, true) + context.strokeStyle = "#00c300" + context.stroke() + } + } + } + } + } +} diff --git a/Misc/TemperaturePressureGauge/TemperatureGauge.qml b/Misc/TemperaturePressureGauge/TemperatureGauge.qml new file mode 100644 index 0000000..c2a8e84 --- /dev/null +++ b/Misc/TemperaturePressureGauge/TemperatureGauge.qml @@ -0,0 +1,83 @@ +import "../../Misc" + +import QtQuick 2.15 +import QtGraphicalEffects 1.0 +import QtQuick.Extras 1.4 +import QtQuick.Controls.Styles 1.4 + +CircularGauge { + id: root + minimumValue: 75 + maximumValue: 245 + stepSize: 0.1 + value: 0 + + property double minimumValueAngle: 135 + property double maximumValueAngle: 45 + + style: CircularGaugeStyle { + id: style + + property double tickmarkHeight: 0.115 * outerRadius + + minimumValueAngle: root.minimumValueAngle + maximumValueAngle: root.maximumValueAngle + tickmarkStepSize: 5 + labelStepSize: 5 + minorTickmarkCount: 0 + + labelInset: 0.275 * outerRadius + tickmarkInset: 0.02 * outerRadius + + tickmark: Rectangle { + color: styleData.value === 245 ? "#e30000" : "#ffffff" + width: 0.02 * outerRadius + height: style.tickmarkHeight + radius: 0.01 * outerRadius + antialiasing: true + visible: styleData.value === 75 || styleData.value === 100 || styleData.value === 150 || styleData.value === 200 || styleData.value === 245 + } + + tickmarkLabel: Text { + text: styleData.value + color: "#ffffff" + font.family: "Century Gothic" + font.pixelSize: Math.max(6, 0.1 * outerRadius) + font.weight: Font.Black + antialiasing: true + visible: styleData.value === 75 || styleData.value === 100 || styleData.value === 150 || styleData.value === 200 || styleData.value === 245 + } + + foreground: Item {} + + needle: CustomNeedle { + width: 0.075 * outerRadius + height: 0.95 * outerRadius + } + + background: Item { + id: background + width: 2 * outerRadius + height: 2 * outerRadius + + CustomCanvas { + anchors.fill: parent + onPaint: { + if(context) + { + context.reset() + context.lineWidth = 0.075 * outerRadius + context.beginPath() + context.arc(outerRadius, + outerRadius, + outerRadius - tickmarkInset - context.lineWidth / 2, + (valueToAngle(245) - 90) * Math.PI / 180.0, + (valueToAngle(100) - 90) * Math.PI / 180.0) + context.strokeStyle = "#00c300" + context.stroke() + } + } + } + } + } +} diff --git a/Misc/TemperaturePressureGauge/TemperaturePressureGauge.qml b/Misc/TemperaturePressureGauge/TemperaturePressureGauge.qml new file mode 100644 index 0000000..7702a6e --- /dev/null +++ b/Misc/TemperaturePressureGauge/TemperaturePressureGauge.qml @@ -0,0 +1,81 @@ +import "../../Misc" + +import QtQuick 2.0 + +Item { + property double radius: 300 + property double engineTemperature: 0 + property double enginePressure: 0 + + width: 2 * radius + height: 2 * radius + + Rectangle { + width: 2 * radius + height: 2 * radius + radius: parent.radius + clip: true + color: "#181818" + scale: 0.775 + + TemperatureGauge { + x: -0.525 * width + y: 0 + width: parent.width + height: parent.height + value: engineTemperature + } + + PressureGauge { + x: 0.525 * width + y: 0 + width: parent.width + height: parent.height + value: enginePressure + } + + GaugeMask {} + + CustomText { + x: 110 / 300 * parent.radius + color: "#ffffff" + text: "°F" + anchors.verticalCenter: parent.verticalCenter + font.pixelSize: Math.max(6, 0.05 * parent.width) + horizontalAlignment: Text.AlignHCenter + lineHeight: 0.8 + wrapMode: Text.Wrap + } + + CustomText { + x: 30 / 300 * parent.radius + width: 40 / 300 * parent.radius + height: 195 / 300 * parent.radius + color: "#ffffff" + text: "TEMP" + anchors.verticalCenter: parent.verticalCenter + font.pixelSize: Math.max(6, 0.075 * parent.width) + horizontalAlignment: Text.AlignHCenter + lineHeight: 0.8 + wrapMode: Text.Wrap + } + + CustomText { + x: 530 / 300 * parent.radius + width: 40 / 300 * parent.radius + height: 230 / 300 * parent.radius + color: "#ffffff" + text: "PRESS" + anchors.verticalCenter: parent.verticalCenter + font.pixelSize: Math.max(6, 0.075 * parent.width) + horizontalAlignment: Text.AlignHCenter + lineHeight: 0.8 + wrapMode: Text.Wrap + } + } + + CustomImage { + anchors.fill: parent + source: "../../Resources/misc/case.svg" + } +} diff --git a/Misc/VacAmpGauge/AmpGauge.qml b/Misc/VacAmpGauge/AmpGauge.qml new file mode 100644 index 0000000..5bceb7e --- /dev/null +++ b/Misc/VacAmpGauge/AmpGauge.qml @@ -0,0 +1,63 @@ +import "../../Misc" + +import QtQuick 2.15 +import QtGraphicalEffects 1.0 +import QtQuick.Extras 1.4 +import QtQuick.Controls.Styles 1.4 + +CircularGauge { + id: root + minimumValue: -60 + maximumValue: 60 + stepSize: 0.01 + value: 0 + + property double minimumValueAngle: -135 + property double maximumValueAngle: -45 + + style: CircularGaugeStyle { + id: style + minimumValueAngle: root.minimumValueAngle + maximumValueAngle: root.maximumValueAngle + tickmarkStepSize: 30 + labelStepSize: 30 + minorTickmarkCount: 1 + + labelInset: 0.275 * outerRadius + tickmarkInset: 0.02 * outerRadius + + tickmark: Rectangle { + color: "#ffffff" + width: 0.02 * outerRadius + height: 0.115 * outerRadius + radius: 0.01 * outerRadius + antialiasing: true + } + + minorTickmark: Rectangle { + color: "#ffffff" + width: 0.02 * outerRadius + height: 0.075 * outerRadius + radius: 0.01 * outerRadius + antialiasing: true + } + + tickmarkLabel: Text { + text: styleData.value > 0 ? "+" + styleData.value : styleData.value + color: "#ffffff" + font.family: "Century Gothic" + font.pixelSize: Math.max(6, 0.1 * outerRadius) + font.weight: Font.Black + antialiasing: true + } + + foreground: Item {} + + needle: CustomNeedle { + width: 0.075 * outerRadius + height: 0.95 * outerRadius + } + + background: Item {} + } +} diff --git a/Misc/VacAmpGauge/VacAmpGauge.qml b/Misc/VacAmpGauge/VacAmpGauge.qml new file mode 100644 index 0000000..de4d4e4 --- /dev/null +++ b/Misc/VacAmpGauge/VacAmpGauge.qml @@ -0,0 +1,94 @@ +import "../../Misc" + +import QtQuick 2.0 + +Item { + property double radius: 300 + property double vac: 0 + property double amp: 0 + + width: 2 * radius + height: 2 * radius + + Rectangle { + id: rectangle + width: 2 * radius + height: 2 * radius + radius: parent.radius + clip: true + color: "#181818" + scale: 0.775 + + VacGauge { + x: -0.525 * width + y: 0 + width: parent.width + height: parent.height + value: vac + } + + AmpGauge { + x: 0.525 * width + y: 0 + width: parent.width + height: parent.height + value: amp + } + + GaugeMask {} + + CustomText { + x: 110 / 300 * parent.radius + width: 70 / 300 * parent.radius + height: 90 / 300 * parent.radius + color: "#ffffff" + text: "IN. Hg." + anchors.verticalCenter: parent.verticalCenter + font.pixelSize: Math.max(6, 0.05 * parent.width) + horizontalAlignment: Text.AlignLeft + verticalAlignment: Text.AlignVCenter + lineHeight: 0.8 + wrapMode: Text.Wrap + } + + CustomText { + x: 30 / 300 * parent.radius + width: 40 / 300 * parent.radius + height: 195 / 300 * parent.radius + color: "#ffffff" + text: "VAC" + anchors.verticalCenter: parent.verticalCenter + font.pixelSize: Math.max(6, 0.075 * parent.width) + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + lineHeight: 1 + wrapMode: Text.Wrap + } + + CustomText { + x: 530 / 300 * parent.radius + width: 40 / 300 * parent.radius + height: 230 / 300 * parent.radius + color: "#ffffff" + text: "AMP" + anchors.verticalCenter: parent.verticalCenter + font.pixelSize: Math.max(6, 0.075 * parent.width) + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + lineHeight: 1 + wrapMode: Text.Wrap + } + } + + CustomImage { + anchors.fill: parent + source: "../../Resources/misc/case.svg" + } +} + + +/*##^## +Designer { + D{i:0;formeditorColor:"#000000"}D{i:2}D{i:3}D{i:4}D{i:5}D{i:6}D{i:7}D{i:1}D{i:8} +} +##^##*/ diff --git a/Misc/VacAmpGauge/VacGauge.qml b/Misc/VacAmpGauge/VacGauge.qml new file mode 100644 index 0000000..7c6f359 --- /dev/null +++ b/Misc/VacAmpGauge/VacGauge.qml @@ -0,0 +1,78 @@ +import "../../Misc" + +import QtQuick 2.15 +import QtGraphicalEffects 1.0 +import QtQuick.Extras 1.4 +import QtQuick.Controls.Styles 1.4 + +CircularGauge { + id: root + minimumValue: 3 + maximumValue: 7 + stepSize: 0.0001 + value: 0 + + property double minimumValueAngle: 135 + property double maximumValueAngle: 45 + + style: CircularGaugeStyle { + id: style + minimumValueAngle: root.minimumValueAngle + maximumValueAngle: root.maximumValueAngle + tickmarkStepSize: 1 + labelStepSize: 1 + minorTickmarkCount: 0 + + labelInset: 0.25 * outerRadius + tickmarkInset: 0.02 * outerRadius + + tickmark: Rectangle { + color: "#ffffff" + width: 0.02 * outerRadius + height: 0.115 * outerRadius + radius: 0.01 * outerRadius + antialiasing: true + } + + tickmarkLabel: Text { + text: styleData.value + color: "#ffffff" + font.family: "Century Gothic" + font.pixelSize: Math.max(6, 0.1 * outerRadius) + font.weight: Font.Black + antialiasing: true + } + + foreground: Item {} + + needle: CustomNeedle { + width: 0.075 * outerRadius + height: 0.95 * outerRadius + } + + background: Item { + id: background + width: 2 * outerRadius + height: 2 * outerRadius + + CustomCanvas { + anchors.fill: parent + onPaint: { + if(context) + { + context.reset() + context.lineWidth = 0.075 * outerRadius + context.beginPath() + context.arc(outerRadius, + outerRadius, + outerRadius - tickmarkInset - context.lineWidth / 2 - 0.015 * outerRadius, + (valueToAngle(5.5) - 90) * Math.PI / 180.0, + (valueToAngle(4.5) - 90) * Math.PI / 180.0, false) + context.strokeStyle = "#00c300" + context.stroke() + } + } + } + } + } +} diff --git a/PrimaryFlightData.cpp b/PrimaryFlightData.cpp index 7141b0f..3ab106c 100644 --- a/PrimaryFlightData.cpp +++ b/PrimaryFlightData.cpp @@ -1,4 +1,5 @@ #include "PrimaryFlightData.h" +#include PrimaryFlightData::PrimaryFlightData(QObject *parent) : QObject(parent) @@ -44,7 +45,7 @@ double PrimaryFlightData::angleOfAttack() const void PrimaryFlightData::setAngleOfAttack(double newAngleOfAttack) { - if (isnan(newAngleOfAttack) || qFuzzyCompare(mAngleOfAttack, newAngleOfAttack)) + if (std::isnan(newAngleOfAttack) || qFuzzyCompare(mAngleOfAttack, newAngleOfAttack)) return; if (newAngleOfAttack < -20) @@ -63,7 +64,7 @@ double PrimaryFlightData::angleOfSideSlip() const void PrimaryFlightData::setAngleOfSideSlip(double newAngleOfSideSlip) { - if (isnan(newAngleOfSideSlip) || qFuzzyCompare(mAngleOfSideSlip, newAngleOfSideSlip)) + if (std::isnan(newAngleOfSideSlip) || qFuzzyCompare(mAngleOfSideSlip, newAngleOfSideSlip)) return; if (newAngleOfSideSlip < -15) @@ -82,7 +83,7 @@ double PrimaryFlightData::roll() const void PrimaryFlightData::setRoll(double newRoll) { - if (isnan(newRoll) || qFuzzyCompare(mRoll, newRoll)) + if (std::isnan(newRoll) || qFuzzyCompare(mRoll, newRoll)) return; if (newRoll < -180) @@ -101,7 +102,7 @@ double PrimaryFlightData::pitch() const void PrimaryFlightData::setPitch(double newPitch) { - if (isnan(newPitch) || qFuzzyCompare(mPitch, newPitch)) + if (std::isnan(newPitch) || qFuzzyCompare(mPitch, newPitch)) return; if (newPitch < -90) @@ -120,7 +121,7 @@ double PrimaryFlightData::heading() const void PrimaryFlightData::setHeading(double newHeading) { - if (isnan(newHeading) || qFuzzyCompare(mHeading, newHeading)) + if (std::isnan(newHeading) || qFuzzyCompare(mHeading, newHeading)) return; while (newHeading < 0.0) @@ -139,7 +140,7 @@ double PrimaryFlightData::slipSkid() const void PrimaryFlightData::setSlipSkid(double newSlipSkid) { - if (isnan(newSlipSkid) || qFuzzyCompare(mSlipSkid, newSlipSkid)) + if (std::isnan(newSlipSkid) || qFuzzyCompare(mSlipSkid, newSlipSkid)) return; if (newSlipSkid < -1) @@ -158,7 +159,7 @@ double PrimaryFlightData::turnRate() const void PrimaryFlightData::setTurnRate(double newTurnRate) { - if (isnan(newTurnRate) || qFuzzyCompare(mTurnRate, newTurnRate)) + if (std::isnan(newTurnRate) || qFuzzyCompare(mTurnRate, newTurnRate)) return; if (newTurnRate < -1) @@ -177,7 +178,7 @@ double PrimaryFlightData::airspeed() const void PrimaryFlightData::setAirspeed(double newAirspeed) { - if (isnan(newAirspeed) || qFuzzyCompare(mAirspeed, newAirspeed)) + if (std::isnan(newAirspeed) || qFuzzyCompare(mAirspeed, newAirspeed)) return; if (newAirspeed < 0) @@ -196,7 +197,7 @@ double PrimaryFlightData::machNumber() const void PrimaryFlightData::setMachNumber(double newMachNumber) { - if (isnan(newMachNumber) || qFuzzyCompare(mMachNumber, newMachNumber)) + if (std::isnan(newMachNumber) || qFuzzyCompare(mMachNumber, newMachNumber)) return; if (newMachNumber < 0) @@ -215,7 +216,7 @@ double PrimaryFlightData::altitude() const void PrimaryFlightData::setAltitude(double newAltitude) { - if (isnan(newAltitude) || qFuzzyCompare(mAltitude, newAltitude)) + if (std::isnan(newAltitude) || qFuzzyCompare(mAltitude, newAltitude)) return; if (newAltitude < 0) @@ -234,7 +235,7 @@ double PrimaryFlightData::pressure() const void PrimaryFlightData::setPressure(double newPressure) { - if (isnan(newPressure) || qFuzzyCompare(mPressure, newPressure)) + if (std::isnan(newPressure) || qFuzzyCompare(mPressure, newPressure)) return; if (newPressure < 0) @@ -253,7 +254,7 @@ double PrimaryFlightData::climbRate() const void PrimaryFlightData::setClimbRate(double newClimbRate) { - if (isnan(newClimbRate) || qFuzzyCompare(mClimbRate, newClimbRate)) + if (std::isnan(newClimbRate) || qFuzzyCompare(mClimbRate, newClimbRate)) return; if (newClimbRate > 6.8) @@ -272,7 +273,7 @@ double PrimaryFlightData::ilsLOC() const void PrimaryFlightData::setIlsLOC(double newIlsLOC) { - if (isnan(newIlsLOC) || qFuzzyCompare(mIlsLOC, newIlsLOC)) + if (std::isnan(newIlsLOC) || qFuzzyCompare(mIlsLOC, newIlsLOC)) return; if (newIlsLOC < -1) @@ -291,7 +292,7 @@ double PrimaryFlightData::ilsGS() const void PrimaryFlightData::setIlsGS(double newIlsGS) { - if (isnan(newIlsGS) || qFuzzyCompare(mIlsGS, newIlsGS)) + if (std::isnan(newIlsGS) || qFuzzyCompare(mIlsGS, newIlsGS)) return; if (newIlsGS < -1) @@ -310,7 +311,7 @@ double PrimaryFlightData::fdRoll() const void PrimaryFlightData::setFdRoll(double newFdRoll) { - if (isnan(newFdRoll) || qFuzzyCompare(mFdRoll, newFdRoll)) + if (std::isnan(newFdRoll) || qFuzzyCompare(mFdRoll, newFdRoll)) return; if (newFdRoll < -180) @@ -329,7 +330,7 @@ double PrimaryFlightData::fdPitch() const void PrimaryFlightData::setFdPitch(double newFdPitch) { - if (isnan(newFdPitch) || qFuzzyCompare(mFdPitch, newFdPitch)) + if (std::isnan(newFdPitch) || qFuzzyCompare(mFdPitch, newFdPitch)) return; if (newFdPitch < -90) @@ -348,7 +349,7 @@ double PrimaryFlightData::altitudeBug() const void PrimaryFlightData::setAltitudeBug(double newAltitudeBug) { - if (isnan(newAltitudeBug) || qFuzzyCompare(mAltitudeBug, newAltitudeBug)) + if (std::isnan(newAltitudeBug) || qFuzzyCompare(mAltitudeBug, newAltitudeBug)) return; if (newAltitudeBug < 0) @@ -367,7 +368,7 @@ double PrimaryFlightData::airspeedBug() const void PrimaryFlightData::setAirspeedBug(double newAirspeedBug) { - if (isnan(newAirspeedBug) || qFuzzyCompare(mAirspeedBug, newAirspeedBug)) + if (std::isnan(newAirspeedBug) || qFuzzyCompare(mAirspeedBug, newAirspeedBug)) return; if (newAirspeedBug < 0) @@ -386,7 +387,7 @@ double PrimaryFlightData::headingBug() const void PrimaryFlightData::setHeadingBug(double newHeadingBug) { - if (isnan(newHeadingBug) || qFuzzyCompare(mHeadingBug, newHeadingBug)) + if (std::isnan(newHeadingBug) || qFuzzyCompare(mHeadingBug, newHeadingBug)) return; while (newHeadingBug < 0.0) @@ -405,7 +406,7 @@ double PrimaryFlightData::course() const void PrimaryFlightData::setCourse(double newCourse) { - if (isnan(newCourse) || qFuzzyCompare(mCourse, newCourse)) + if (std::isnan(newCourse) || qFuzzyCompare(mCourse, newCourse)) return; while (newCourse < 0.0) @@ -424,7 +425,7 @@ double PrimaryFlightData::vorDeviation() const void PrimaryFlightData::setVorDeviation(double newVorDeviation) { - if (isnan(newVorDeviation) || qFuzzyCompare(mVorDeviation, newVorDeviation)) + if (std::isnan(newVorDeviation) || qFuzzyCompare(mVorDeviation, newVorDeviation)) return; if (newVorDeviation < -1.0) @@ -443,7 +444,7 @@ double PrimaryFlightData::bearing() const void PrimaryFlightData::setBearing(double newBearing) { - if (isnan(newBearing) || qFuzzyCompare(mBearing, newBearing)) + if (std::isnan(newBearing) || qFuzzyCompare(mBearing, newBearing)) return; while (newBearing < 0.0) @@ -462,7 +463,7 @@ double PrimaryFlightData::dmeDistance() const void PrimaryFlightData::setDmeDistance(double newDmeDistance) { - if (isnan(newDmeDistance) || qFuzzyCompare(mDmeDistance, newDmeDistance)) + if (std::isnan(newDmeDistance) || qFuzzyCompare(mDmeDistance, newDmeDistance)) return; mDmeDistance = abs(newDmeDistance); @@ -598,3 +599,120 @@ void PrimaryFlightData::setStall(bool newStall) mStall = newStall; emit stallChanged(); } + +double PrimaryFlightData::leftTankFuel() const +{ + return mLeftTankFuel; +} + +void PrimaryFlightData::setLeftTankFuel(double newLeftTankFuel) +{ + if (std::isnan(newLeftTankFuel) || qFuzzyCompare(mLeftTankFuel, newLeftTankFuel)) + return; + mLeftTankFuel = newLeftTankFuel; + emit leftTankFuelChanged(); +} + +double PrimaryFlightData::rightTankFuel() const +{ + return mRightTankFuel; +} + +void PrimaryFlightData::setRightTankFuel(double newRightTankFuel) +{ + if (std::isnan(newRightTankFuel) || qFuzzyCompare(mRightTankFuel, newRightTankFuel)) + return; + mRightTankFuel = newRightTankFuel; + emit rightTankFuelChanged(); +} + +double PrimaryFlightData::egt() const +{ + return mEgt; +} + +void PrimaryFlightData::setEgt(double newEgt) +{ + if (std::isnan(newEgt) || qFuzzyCompare(mEgt, newEgt)) + return; + mEgt = newEgt; + emit egtChanged(); +} + +double PrimaryFlightData::fuelFlow() const +{ + return mFuelFlow; +} + +void PrimaryFlightData::setFuelFlow(double newFuelFlow) +{ + if (std::isnan(newFuelFlow) || qFuzzyCompare(mFuelFlow, newFuelFlow)) + return; + mFuelFlow = newFuelFlow; + emit fuelFlowChanged(); +} + +double PrimaryFlightData::engineTemperature() const +{ + return mEngineTemperature; +} + +void PrimaryFlightData::setEngineTemperature(double newEngineTemperature) +{ + if (std::isnan(newEngineTemperature) || qFuzzyCompare(mEngineTemperature, newEngineTemperature)) + return; + mEngineTemperature = newEngineTemperature; + emit engineTemperatureChanged(); +} + +double PrimaryFlightData::enginePressure() const +{ + return mEnginePressure; +} + +void PrimaryFlightData::setEnginePressure(double newEnginePressure) +{ + if (std::isnan(newEnginePressure) || qFuzzyCompare(mEnginePressure, newEnginePressure)) + return; + mEnginePressure = newEnginePressure; + emit enginePressureChanged(); +} + +double PrimaryFlightData::vac() const +{ + return mVac; +} + +void PrimaryFlightData::setVac(double newVac) +{ + if (std::isnan(newVac) || qFuzzyCompare(mVac, newVac)) + return; + mVac = newVac; + emit vacChanged(); +} + +double PrimaryFlightData::amp() const +{ + return mAmp; +} + +void PrimaryFlightData::setAmp(double newAmp) +{ + if (std::isnan(newAmp) || qFuzzyCompare(mAmp, newAmp)) + return; + mAmp = newAmp; + emit ampChanged(); +} + +double PrimaryFlightData::rpm() const +{ + return mRpm; +} + +void PrimaryFlightData::setRpm(double newRpm) +{ + if (std::isnan(newRpm) || qFuzzyCompare(mRpm, newRpm)) + return; + mRpm = newRpm; + emit rpmChanged(); +} diff --git a/PrimaryFlightData.h b/PrimaryFlightData.h index 1baaee4..ab776ca 100644 --- a/PrimaryFlightData.h +++ b/PrimaryFlightData.h @@ -158,6 +158,33 @@ class PrimaryFlightData : public QObject bool stall() const; void setStall(bool newStall); + double leftTankFuel() const; + void setLeftTankFuel(double newLeftTankFuel); + + double rightTankFuel() const; + void setRightTankFuel(double newRightTankFuel); + + double egt() const; + void setEgt(double newEgt); + + double fuelFlow() const; + void setFuelFlow(double newFuelFlow); + + double engineTemperature() const; + void setEngineTemperature(double newEngineTemperature); + + double enginePressure() const; + void setEnginePressure(double newEnginePressure); + + double vac() const; + void setVac(double newVac); + + double amp() const; + void setAmp(double newAmp); + + double rpm() const; + void setRpm(double newRpm); + signals: void angleOfAttackChanged(); void angleOfSideSlipChanged(); @@ -196,6 +223,24 @@ class PrimaryFlightData : public QObject void ilsLOCVisibleChanged(); void ilsGSVisibleChanged(); + void leftTankFuelChanged(); + + void rightTankFuelChanged(); + + void egtChanged(); + + void fuelFlowChanged(); + + void engineTemperatureChanged(); + + void enginePressureChanged(); + + void vacChanged(); + + void ampChanged(); + + void rpmChanged(); + private: double mAngleOfAttack; double mAngleOfSideSlip; @@ -234,6 +279,17 @@ class PrimaryFlightData : public QObject bool mFdVisible; bool mStall; + // Misc + double mLeftTankFuel; + double mRightTankFuel; + double mEgt; + double mFuelFlow; + double mEngineTemperature; + double mEnginePressure; + double mVac; + double mAmp; + double mRpm; + Q_PROPERTY(double angleOfAttack READ angleOfAttack NOTIFY angleOfAttackChanged) Q_PROPERTY(double angleOfSideSlip READ angleOfSideSlip NOTIFY angleOfSideSlipChanged) Q_PROPERTY(double roll READ roll NOTIFY rollChanged) @@ -270,6 +326,16 @@ class PrimaryFlightData : public QObject Q_PROPERTY(bool ilsGSVisible READ ilsGSVisible NOTIFY ilsGSVisibleChanged) Q_PROPERTY(bool stall READ stall NOTIFY stallChanged) Q_PROPERTY(bool fdVisible READ fdVisible NOTIFY fdVisibleChanged) + + Q_PROPERTY(double leftTankFuel READ leftTankFuel WRITE setLeftTankFuel NOTIFY leftTankFuelChanged) + Q_PROPERTY(double rightTankFuel READ rightTankFuel WRITE setRightTankFuel NOTIFY rightTankFuelChanged) + Q_PROPERTY(double egt READ egt WRITE setEgt NOTIFY egtChanged) + Q_PROPERTY(double fuelFlow READ fuelFlow WRITE setFuelFlow NOTIFY fuelFlowChanged) + Q_PROPERTY(double engineTemperature READ engineTemperature WRITE setEngineTemperature NOTIFY engineTemperatureChanged) + Q_PROPERTY(double enginePressure READ enginePressure WRITE setEnginePressure NOTIFY enginePressureChanged) + Q_PROPERTY(double vac READ vac WRITE setVac NOTIFY vacChanged) + Q_PROPERTY(double amp READ amp WRITE setAmp NOTIFY ampChanged) + Q_PROPERTY(double rpm READ rpm WRITE setRpm NOTIFY rpmChanged) }; #endif // PRIMARYFLIGHTDATA_H diff --git a/README.md b/README.md index 3db5b5b..42182a6 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,6 @@ # QmlFlightInstruments -This project is a QML port of [Marek M. Cel](http://marekcel.pl/)'s work [QFlightinstruments](https://github.com/marek-cel/QFlightinstruments). +This project is a QML port of [Marek M. Cel](http://marekcel.pl/)'s work [QFlightinstruments](https://github.com/marek-cel/QFlightinstruments) +and includes my implementation of miscellaneous gauges. All SVG files are taken from Marek's repository. Copyright notice is under `Resources` folder. For the details, please visit his repository. @@ -14,5 +15,8 @@ The project contains a QML application in which you can get an insight on how to ### Electronic Flight Instrument System ![EFIS](Screenshots/EFIS.png) +### Miscellaneous +![Misv](Screenshots/Misc.png) + ## Keywords QML, GUI, Flight Simulator, Flight Instruments, Airspeed Indicator (ASI), Attitude Indicator (AI), Altimeter (ALT), Turn Coordinator (TC), Heading Indicator (HI), Vertical Speed Indicator (VSI), Electronic Attitude Direction Indicator (EADI), Electronic Horizontal Situation Indicator (EHSI) diff --git a/Resources/Fonts/CenturyGothic.ttf b/Resources/Fonts/CenturyGothic.ttf new file mode 100644 index 0000000..879704e Binary files /dev/null and b/Resources/Fonts/CenturyGothic.ttf differ diff --git a/Screenshots/Misc.png b/Screenshots/Misc.png new file mode 100644 index 0000000..63a20a0 Binary files /dev/null and b/Screenshots/Misc.png differ diff --git a/main.cpp b/main.cpp index 72abc80..a6e0726 100644 --- a/main.cpp +++ b/main.cpp @@ -52,8 +52,8 @@ int main(int argc, char *argv[]) animation->setPfd(pfd); engine.rootContext()->setContextProperty("pfd", pfd); - // engine.load(url1); - // engine.load(url2); + engine.load(url1); + engine.load(url2); engine.load(url3); animation->init(); diff --git a/qml.qrc b/qml.qrc index 7b30007..2d076b7 100644 --- a/qml.qrc +++ b/qml.qrc @@ -114,5 +114,15 @@ Misc/CustomText.qml Misc/CustomCanvas.qml Misc/GaugeMask.qml + Misc/TemperaturePressureGauge/PressureGauge.qml + Misc/TemperaturePressureGauge/TemperatureGauge.qml + Misc/TemperaturePressureGauge/TemperaturePressureGauge.qml + Misc/VacAmpGauge/AmpGauge.qml + Misc/VacAmpGauge/VacAmpGauge.qml + Misc/VacAmpGauge/VacGauge.qml + Misc/EgtFuelFlowGauge/EgtFuelFlowGauge.qml + Misc/EgtFuelFlowGauge/EgtGauge.qml + Misc/EgtFuelFlowGauge/FuelFlowGauge.qml + Resources/Fonts/CenturyGothic.ttf