1
0
mirror of https://bitbucket.org/librepilot/librepilot.git synced 2024-12-13 20:48:42 +01:00
LibrePilot/ground/gcs/src/share/pfd/default/Panels.qml
James Duley c14cacb043 LP-1 rebranding: move ground/{openpilotgcs => gcs}
and associated pro file.

Change-Id: Icc200217f2db27635c7aa2e5b182f9b273925647
2015-08-02 19:20:02 +01:00

1245 lines
40 KiB
QML

import QtQuick 2.0
Item {
id: panels
property variant sceneSize
property real est_flight_time: Math.round(FlightBatteryState.EstimatedFlightTime)
property real est_time_h: (est_flight_time > 0 ? Math.floor(est_flight_time / 3600) : 0 )
property real est_time_m: (est_flight_time > 0 ? Math.floor((est_flight_time - est_time_h*3600)/60) : 0)
property real est_time_s: (est_flight_time > 0 ? Math.floor(est_flight_time - est_time_h*3600 - est_time_m*60) : 0)
function formatTime(time) {
if (time === 0)
return "00"
if (time < 10)
return "0" + time;
else
return time.toString();
}
//
// Panel functions
//
property bool show_panels: false
property bool display_rc: false
property bool display_bat: false
property bool display_oplm: false
property bool display_sys: false
function close_panels(){
if (show_panels == true)
show_panels = false;
else
show_panels = true;
}
function hide_display_rcinput(){
show_panels = true;
display_oplm = false
display_bat = false
rc_input_bg.z = 10
battery_bg.z = -1
oplm_bg.z = -1
system_bg.z = -1
}
function hide_display_battery(){
show_panels = true;
display_oplm = false
display_bat = true
rc_input_bg.z = 10
battery_bg.z = 20
oplm_bg.z = -1
system_bg.z = -1
}
function hide_display_oplink(){
show_panels = true;
display_oplm = true
display_bat = false
rc_input_bg.z = 10
battery_bg.z = 20
oplm_bg.z = 30
system_bg.z = -1
}
function hide_display_system(){
show_panels = true;
display_oplm = false
display_bat = false
rc_input_bg.z = 10
battery_bg.z = 20
oplm_bg.z = 30
system_bg.z = 40
}
// Uninitialised, Ok, Warning, Critical, Error
property variant batColors : ["#2c2929", "green", "orange", "red", "red"]
property real smeter_angle
property real memory_free : SystemStats.HeapRemaining > 1024 ? SystemStats.HeapRemaining / 1024 : SystemStats.HeapRemaining
// Needed to get correctly int8 value
property int cpuTemp : SystemStats.CPUTemp
// Needed to get correctly int8 value, reset value (-127) on disconnect
property int oplm0_db: telemetry_link == 1 ? OPLinkStatus.PairSignalStrengths_0 : -127
property int oplm1_db: telemetry_link == 1 ? OPLinkStatus.PairSignalStrengths_1 : -127
property int oplm2_db: telemetry_link == 1 ? OPLinkStatus.PairSignalStrengths_2 : -127
property int oplm3_db: telemetry_link == 1 ? OPLinkStatus.PairSignalStrengths_3 : -127
property real telemetry_sum
property real telemetry_sum_old
property bool telemetry_link
// Hack : check if telemetry is active. Works with real link and log replay
function telemetry_check() {
telemetry_sum = OPLinkStatus.RXRate + OPLinkStatus.RXRate
if (telemetry_sum != telemetry_sum_old || OPLinkStatus.LinkState == 4) {
telemetry_link = 1
} else {
telemetry_link = 0
}
telemetry_sum_old = telemetry_sum
}
Timer {
id: telemetry_activity
interval: 1200; running: true; repeat: true
onTriggered: telemetry_check()
}
// Filtering for S-meter. Smeter range -127dB <--> -13dB = S9+60dB
Timer {
id: smeter_filter0
interval: 100; running: true; repeat: true
onTriggered: smeter_angle = (0.90 * smeter_angle) + (0.1 * (oplm0_db + 13))
}
Timer {
id: smeter_filter1
interval: 100; repeat: true
onTriggered: smeter_angle = (0.90 * smeter_angle) + (0.1 * (oplm1_db + 13))
}
Timer {
id: smeter_filter2
interval: 100; repeat: true
onTriggered: smeter_angle = (0.90 * smeter_angle) + (0.1 * (oplm2_db + 13))
}
Timer {
id: smeter_filter3
interval: 100; repeat: true
onTriggered: smeter_angle = (0.90 * smeter_angle) + (0.1 * (oplm3_db + 13))
}
property int smeter_filter
property variant oplm_pair_id : OPLinkStatus.PairIDs_0
function select_oplm(index){
smeter_filter0.running = false;
smeter_filter1.running = false;
smeter_filter2.running = false;
smeter_filter3.running = false;
switch(index) {
case 0:
smeter_filter0.running = true;
smeter_filter = 0;
oplm_pair_id = OPLinkStatus.PairIDs_0
break;
case 1:
smeter_filter1.running = true;
smeter_filter = 1;
oplm_pair_id = OPLinkStatus.PairIDs_1
break;
case 2:
smeter_filter2.running = true;
smeter_filter = 2;
oplm_pair_id = OPLinkStatus.PairIDs_2
break;
case 3:
smeter_filter3.running = true;
smeter_filter = 3;
oplm_pair_id = OPLinkStatus.PairIDs_3
break;
}
}
// End Functions
//
// Start Drawing
//
// Animation properties
//
property double offset_value: close_bg.width * 0.85
property int anim_type: Easing.InOutExpo //Easing.InOutSine Easing.InOutElastic
property real anim_amplitude: 1.2
property real anim_period: 2
property int duration_value: 1600
//
// Close - Open panel
//
SvgElementImage {
id: close_bg
elementName: "close-bg"
sceneSize: panels.sceneSize
y: Math.floor(scaledBounds.y * sceneItem.height)
states: State {
name: "fading"
when: show_panels == true
PropertyChanges { target: close_bg; x: Math.floor(scaledBounds.x * sceneItem.width) + offset_value; }
}
transitions: Transition {
SequentialAnimation {
id: close_anim
PropertyAnimation { property: "x"; easing.type: anim_type; easing.amplitude: anim_amplitude; easing.period: anim_period; duration: duration_value }
}
}
}
SvgElementImage {
id: panel_open_icon
elementName: "panel-open-icon"
sceneSize: panels.sceneSize
y: Math.floor(scaledBounds.y * sceneItem.height)
z: close_bg.z+1
opacity: show_panels == true ? 0 : 1
states: State {
name: "fading"
when: show_panels == true
PropertyChanges { target: panel_open_icon; x: Math.floor(scaledBounds.x * sceneItem.width) + offset_value; }
PropertyChanges { target: panel_open_icon; opacity: 0; }
}
transitions: Transition {
SequentialAnimation {
PropertyAnimation { property: "x"; easing.type: anim_type; easing.amplitude: anim_amplitude; easing.period: anim_period; duration: duration_value }
PropertyAnimation { property: "opacity"; duration: 500; }
}
}
}
SvgElementImage {
id: close_mousearea
elementName: "close-panel-mousearea"
sceneSize: panels.sceneSize
y: Math.floor(scaledBounds.y * sceneItem.height)
z: close_bg.z+100
TooltipArea {
text: show_panels == true ? "Close panels" : "Open panels"
}
MouseArea {
id: hidedisp_close;
anchors.fill: parent;
cursorShape: Qt.PointingHandCursor
onClicked: close_panels()
}
states: State {
name: "fading"
when: show_panels == true
PropertyChanges { target: close_mousearea; x: Math.floor(scaledBounds.x * sceneItem.width) + offset_value; }
}
transitions: Transition {
SequentialAnimation {
PropertyAnimation { property: "x"; easing.type: anim_type; easing.amplitude: anim_amplitude; easing.period: anim_period; duration: duration_value }
}
}
}
//
// Rc-Input panel
//
SvgElementImage {
id: rc_input_bg
elementName: "rc-input-bg"
sceneSize: panels.sceneSize
y: Math.floor(scaledBounds.y * sceneItem.height)
z: 10
states: State {
name: "fading"
when: show_panels == true
PropertyChanges { target: rc_input_bg; x: Math.floor(scaledBounds.x * sceneItem.width) + offset_value; }
}
transitions: Transition {
SequentialAnimation {
id: rc_input_anim
PropertyAnimation { property: "x"; easing.type: anim_type; easing.amplitude: anim_amplitude; easing.period: anim_period; duration: duration_value }
}
}
}
SvgElementImage {
id: rc_input_labels
elementName: "rc-input-labels"
sceneSize: panels.sceneSize
y: Math.floor(scaledBounds.y * sceneItem.height)
z: rc_input_bg.z+1
states: State {
name: "fading"
when: show_panels == true
PropertyChanges { target: rc_input_labels; x: Math.floor(scaledBounds.x * sceneItem.width) + offset_value; }
}
transitions: Transition {
SequentialAnimation {
PropertyAnimation { property: "x"; easing.type: anim_type; easing.amplitude: anim_amplitude; easing.period: anim_period; duration: duration_value }
}
}
}
SvgElementImage {
id: rc_input_mousearea
elementName: "rc-input-panel-mousearea"
sceneSize: panels.sceneSize
y: Math.floor(scaledBounds.y * sceneItem.height)
z: rc_input_bg.z+1
TooltipArea {
text: "RC panel"
}
MouseArea {
id: hidedisp_rcinput;
anchors.fill: parent;
cursorShape: Qt.PointingHandCursor
onClicked: hide_display_rcinput()
}
states: State {
name: "fading"
when: show_panels == true
PropertyChanges { target: rc_input_mousearea; x: Math.floor(scaledBounds.x * sceneItem.width) + offset_value; }
}
transitions: Transition {
SequentialAnimation {
PropertyAnimation { property: "x"; easing.type: anim_type; easing.amplitude: anim_amplitude; easing.period: anim_period; duration: duration_value }
}
}
}
SvgElementImage {
id: rc_throttle
elementName: "rc-throttle"
sceneSize: panels.sceneSize
z: rc_input_bg.z+2
width: scaledBounds.width * sceneItem.width
height: (scaledBounds.height * sceneItem.height) * (ManualControlCommand.Throttle)
x: scaledBounds.x * sceneItem.width
y: (scaledBounds.y * sceneItem.height) - rc_throttle.height + (scaledBounds.height * sceneItem.height)
smooth: true
states: State {
name: "fading"
when: show_panels == true
PropertyChanges { target: rc_throttle; x: Math.floor(scaledBounds.x * sceneItem.width) + offset_value; }
}
transitions: Transition {
SequentialAnimation {
PropertyAnimation { property: "x"; easing.type: anim_type; easing.amplitude: anim_amplitude; easing.period: anim_period; duration: duration_value }
}
}
}
SvgElementImage {
id: rc_stick
elementName: "rc-stick"
sceneSize: panels.sceneSize
z: rc_input_bg.z+3
width: scaledBounds.width * sceneItem.width
height: scaledBounds.height * sceneItem.height
y: (scaledBounds.y * sceneItem.height) + (ManualControlCommand.Pitch * rc_stick.width * 2.5)
smooth: true
//rotate it around his center
transform: Rotation {
angle: ManualControlCommand.Yaw * 90
origin.y : rc_stick.height / 2
origin.x : rc_stick.width / 2
}
states: State {
name: "fading"
when: show_panels == true
PropertyChanges { target: rc_stick; x: Math.floor(scaledBounds.x * sceneItem.width) + (ManualControlCommand.Roll * rc_stick.width * 2.5) + offset_value; }
}
transitions: Transition {
SequentialAnimation {
PropertyAnimation { property: "x"; easing.type: anim_type; easing.amplitude: anim_amplitude; easing.period: anim_period; duration: duration_value }
}
}
}
//
// Battery panel
//
SvgElementImage {
id: battery_bg
elementName: "battery-bg"
sceneSize: panels.sceneSize
y: Math.floor(scaledBounds.y * sceneItem.height)
z: 20
states: State {
name: "fading"
when: show_panels == true
PropertyChanges { target: battery_bg; x: Math.floor(scaledBounds.x * sceneItem.width) + offset_value; }
}
transitions: Transition {
SequentialAnimation {
PropertyAnimation { property: "x"; easing.type: anim_type; easing.amplitude: anim_amplitude; easing.period: anim_period; duration: duration_value }
}
}
}
SvgElementPositionItem {
id: battery_volt
sceneSize: panels.sceneSize
elementName: "battery-volt-text"
z: battery_bg.z+1
width: scaledBounds.width * sceneItem.width
height: scaledBounds.height * sceneItem.height
y: scaledBounds.y * sceneItem.height
states: State {
name: "fading"
when: show_panels == true
PropertyChanges { target: battery_volt; x: Math.floor(scaledBounds.x * sceneItem.width) + offset_value; }
}
transitions: Transition {
SequentialAnimation {
PropertyAnimation { property: "x"; easing.type: anim_type; easing.amplitude: anim_amplitude; easing.period: anim_period; duration: duration_value }
}
}
Rectangle {
anchors.fill: parent
color: panels.batColors[SystemAlarms.Alarm_Battery]
border.color: "white"
border.width: battery_volt.width * 0.01
radius: border.width * 4
Text {
text: FlightBatteryState.Voltage.toFixed(2)
anchors.centerIn: parent
color: "white"
font {
family: pt_bold.name
pixelSize: Math.floor(parent.height * 0.6)
}
}
}
}
SvgElementPositionItem {
id: battery_amp
sceneSize: panels.sceneSize
elementName: "battery-amp-text"
z: battery_bg.z+2
width: scaledBounds.width * sceneItem.width
height: scaledBounds.height * sceneItem.height
y: scaledBounds.y * sceneItem.height
states: State {
name: "fading"
when: show_panels == true
PropertyChanges { target: battery_amp; x: Math.floor(scaledBounds.x * sceneItem.width) + offset_value; }
}
transitions: Transition {
SequentialAnimation {
PropertyAnimation { property: "x"; easing.type: anim_type; easing.amplitude: anim_amplitude; easing.period: anim_period; duration: duration_value }
}
}
Rectangle {
anchors.fill: parent
color: panels.batColors[SystemAlarms.Alarm_Battery]
border.color: "white"
border.width: battery_volt.width * 0.01
radius: border.width * 4
Text {
text: FlightBatteryState.Current.toFixed(2)
anchors.centerIn: parent
color: "white"
font {
family: pt_bold.name
pixelSize: Math.floor(parent.height * 0.6)
}
}
}
}
SvgElementPositionItem {
id: battery_milliamp
sceneSize: panels.sceneSize
elementName: "battery-milliamp-text"
z: battery_bg.z+3
width: scaledBounds.width * sceneItem.width
height: scaledBounds.height * sceneItem.height
y: scaledBounds.y * sceneItem.height
states: State {
name: "fading"
when: show_panels == true
PropertyChanges { target: battery_milliamp; x: Math.floor(scaledBounds.x * sceneItem.width) + offset_value; }
}
transitions: Transition {
SequentialAnimation {
PropertyAnimation { property: "x"; easing.type: anim_type; easing.amplitude: anim_amplitude; easing.period: anim_period; duration: duration_value }
}
}
Rectangle {
anchors.fill: parent
TooltipArea {
text: "Reset consumed energy"
visible: display_bat == true ? 1 : 0
}
MouseArea {
id: reset_panel_consumed_energy_mouseArea;
anchors.fill: parent;
cursorShape: Qt.PointingHandCursor;
visible: display_bat == true ? 1 : 0
onClicked: qmlWidget.resetConsumedEnergy();
}
// Alarm based on FlightBatteryState.EstimatedFlightTime < 120s orange, < 60s red
color: (FlightBatteryState.EstimatedFlightTime <= 120 && FlightBatteryState.EstimatedFlightTime > 60 ? "orange" :
(FlightBatteryState.EstimatedFlightTime <= 60 ? "red": panels.batColors[SystemAlarms.Alarm_Battery]))
border.color: "white"
border.width: battery_volt.width * 0.01
radius: border.width * 4
Text {
text: FlightBatteryState.ConsumedEnergy.toFixed(0)
anchors.centerIn: parent
color: "white"
font {
family: pt_bold.name
pixelSize: Math.floor(parent.height * 0.6)
}
}
}
}
SvgElementPositionItem {
id: battery_estimated_flight_time
sceneSize: panels.sceneSize
elementName: "battery-estimated-flight-time"
z: battery_bg.z+4
width: scaledBounds.width * sceneItem.width
height: scaledBounds.height * sceneItem.height
y: scaledBounds.y * sceneItem.height
states: State {
name: "fading"
when: show_panels == true
PropertyChanges { target: battery_estimated_flight_time; x: Math.floor(scaledBounds.x * sceneItem.width) + offset_value; }
}
transitions: Transition {
SequentialAnimation {
PropertyAnimation { property: "x"; easing.type: anim_type; easing.amplitude: anim_amplitude; easing.period: anim_period; duration: duration_value }
}
}
Rectangle {
anchors.fill: parent
//color: panels.batColors[SystemAlarms.Alarm_Battery]
TooltipArea {
text: "Reset consumed energy"
visible: display_bat == true ? 1 : 0
}
MouseArea {
id: reset_panel_consumed_energy_mouseArea2;
anchors.fill: parent;
cursorShape: Qt.PointingHandCursor;
visible: display_bat == true ? 1 : 0
onClicked: qmlWidget.resetConsumedEnergy();
}
// Alarm based on FlightBatteryState.EstimatedFlightTime < 120s orange, < 60s red
color: (FlightBatteryState.EstimatedFlightTime <= 120 && FlightBatteryState.EstimatedFlightTime > 60 ? "orange" :
(FlightBatteryState.EstimatedFlightTime <= 60 ? "red": panels.batColors[SystemAlarms.Alarm_Battery]))
border.color: "white"
border.width: battery_volt.width * 0.01
radius: border.width * 4
Text {
text: formatTime(est_time_h) + ":" + formatTime(est_time_m) + ":" + formatTime(est_time_s)
anchors.centerIn: parent
color: "white"
font {
family: pt_bold.name
pixelSize: Math.floor(parent.height * 0.6)
}
}
}
}
SvgElementImage {
id: battery_labels
elementName: "battery-labels"
sceneSize: panels.sceneSize
y: Math.floor(scaledBounds.y * sceneItem.height)
z: battery_bg.z+5
states: State {
name: "fading"
when: show_panels == true
PropertyChanges { target: battery_labels; x: Math.floor(scaledBounds.x * sceneItem.width) + offset_value; }
}
transitions: Transition {
SequentialAnimation {
PropertyAnimation { property: "x"; easing.type: anim_type; easing.amplitude: anim_amplitude; easing.period: anim_period; duration: duration_value }
}
}
}
SvgElementImage {
id: battery_mousearea
elementName: "battery-panel-mousearea"
sceneSize: panels.sceneSize
y: Math.floor(scaledBounds.y * sceneItem.height)
z: battery_bg.z+6
TooltipArea {
text: "Battery panel"
}
MouseArea {
id: hidedisp_battery;
anchors.fill: parent;
cursorShape: Qt.PointingHandCursor
onClicked: hide_display_battery()
}
states: State {
name: "fading"
when: show_panels == true
PropertyChanges { target: battery_mousearea; x: Math.floor(scaledBounds.x * sceneItem.width) + offset_value; }
}
transitions: Transition {
SequentialAnimation {
PropertyAnimation { property: "x"; easing.type: anim_type; easing.amplitude: anim_amplitude; easing.period: anim_period; duration: duration_value }
}
}
}
//
// OPLM panel
//
SvgElementImage {
id: oplm_bg
elementName: "oplm-bg"
sceneSize: panels.sceneSize
y: Math.floor(scaledBounds.y * sceneItem.height)
z: 30
states: State {
name: "fading"
when: show_panels == true
PropertyChanges { target: oplm_bg; x: Math.floor(scaledBounds.x * sceneItem.width) + offset_value; }
}
transitions: Transition {
SequentialAnimation {
PropertyAnimation { property: "x"; easing.type: anim_type; easing.amplitude: anim_amplitude; easing.period: anim_period; duration: duration_value }
}
}
}
SvgElementImage {
id: smeter_bg
elementName: "smeter-bg"
sceneSize: panels.sceneSize
y: Math.floor(scaledBounds.y * sceneItem.height)
z: oplm_bg.z+1
states: State {
name: "fading"
when: show_panels == true
PropertyChanges { target: smeter_bg; x: Math.floor(scaledBounds.x * sceneItem.width) + offset_value; }
}
transitions: Transition {
SequentialAnimation {
PropertyAnimation { property: "x"; easing.type: anim_type; easing.amplitude: anim_amplitude; easing.period: anim_period; duration: duration_value }
}
}
}
SvgElementImage {
id: smeter_scale
elementName: "smeter-scale"
sceneSize: panels.sceneSize
y: Math.floor(scaledBounds.y * sceneItem.height)
z: oplm_bg.z+2
states: State {
name: "fading"
when: show_panels == true
PropertyChanges { target: smeter_scale; x: Math.floor(scaledBounds.x * sceneItem.width) + offset_value; }
}
transitions: Transition {
SequentialAnimation {
PropertyAnimation { property: "x"; easing.type: anim_type; easing.amplitude: anim_amplitude; easing.period: anim_period; duration: duration_value }
}
}
}
SvgElementImage {
id: smeter_needle
elementName: "smeter-needle"
sceneSize: panels.sceneSize
y: Math.floor(scaledBounds.y * sceneItem.height)
z: oplm_bg.z+3
states: State {
name: "fading"
when: show_panels == true
PropertyChanges { target: smeter_needle; x: Math.floor(scaledBounds.x * sceneItem.width) + offset_value; }
}
transitions: Transition {
SequentialAnimation {
PropertyAnimation { property: "x"; easing.type: anim_type; easing.amplitude: anim_amplitude; easing.period: anim_period; duration: duration_value }
}
}
transform: Rotation {
angle: smeter_angle.toFixed(1)
origin.y : smeter_needle.height
}
}
SvgElementImage {
id: smeter_mask
elementName: "smeter-mask"
sceneSize: panels.sceneSize
//y: Math.floor(scaledBounds.y * sceneItem.height)
width: smeter_scale.width * 1.09
//anchors.horizontalCenter: smeter_scale
z: oplm_bg.z+4
states: State {
name: "fading"
when: show_panels == true
PropertyChanges { target: smeter_mask; x: Math.floor(scaledBounds.x * sceneItem.width) + offset_value; }
}
transitions: Transition {
SequentialAnimation {
PropertyAnimation { property: "x"; easing.type: anim_type; easing.amplitude: anim_amplitude; easing.period: anim_period; duration: duration_value }
}
}
}
SvgElementImage {
id: oplm_button_bg
elementName: "oplm-button-bg"
sceneSize: panels.sceneSize
y: Math.floor(scaledBounds.y * sceneItem.height)
width: smeter_mask.width
z: oplm_bg.z+5
states: State {
name: "fading"
when: show_panels == true
PropertyChanges { target: oplm_button_bg; x: Math.floor(scaledBounds.x * sceneItem.width) + offset_value; }
}
transitions: Transition {
SequentialAnimation {
PropertyAnimation { property: "x"; easing.type: anim_type; easing.amplitude: anim_amplitude; easing.period: anim_period; duration: duration_value }
}
}
}
Repeater {
model: 4
SvgElementImage {
z: oplm_bg.z+5
property variant idButton_oplm: "oplm_button_" + index
property variant idButton_oplm_mousearea: "oplm_button_mousearea" + index
property variant button_color: "button"+index+"_color"
id: idButton_oplm
elementName: "oplm-button-" + index
sceneSize: panels.sceneSize
Rectangle {
anchors.fill: parent
border.color: "red"
border.width: parent.width * 0.04
radius: border.width*3
color: "transparent"
opacity: smeter_filter == index ? 0.5 : 0
}
MouseArea {
id: idButton_oplm_mousearea;
anchors.fill: parent;
cursorShape: Qt.PointingHandCursor;
visible: display_oplm == true ? 1 : 0
onClicked: select_oplm(index)
}
states: State {
name: "fading"
when: show_panels == true
PropertyChanges { target: idButton_oplm; x: Math.floor(scaledBounds.x * sceneItem.width) + offset_value; }
}
transitions: Transition {
SequentialAnimation {
PropertyAnimation { property: "x"; easing.type: anim_type; easing.amplitude: anim_amplitude; easing.period: anim_period; duration: duration_value }
}
}
}
}
SvgElementImage {
id: oplm_id_label
elementName: "oplm-id-label"
sceneSize: panels.sceneSize
y: Math.floor(scaledBounds.y * sceneItem.height)
z: oplm_bg.z+6
states: State {
name: "fading"
when: show_panels == true
PropertyChanges { target: oplm_id_label; x: Math.floor(scaledBounds.x * sceneItem.width) + offset_value; }
}
transitions: Transition {
SequentialAnimation {
PropertyAnimation { property: "x"; easing.type: anim_type; easing.amplitude: anim_amplitude; easing.period: anim_period; duration: duration_value }
}
}
}
SvgElementPositionItem {
id: oplm_id_text
sceneSize: panels.sceneSize
elementName: "oplm-id-text"
z: oplm_bg.z+7
width: scaledBounds.width * sceneItem.width
height: scaledBounds.height * sceneItem.height
y: scaledBounds.y * sceneItem.height
states: State {
name: "fading"
when: show_panels == true
PropertyChanges { target: oplm_id_text; x: Math.floor(scaledBounds.x * sceneItem.width) + offset_value; }
}
transitions: Transition {
SequentialAnimation {
PropertyAnimation { property: "x"; easing.type: anim_type; easing.amplitude: anim_amplitude; easing.period: anim_period; duration: duration_value }
}
}
Text {
text: oplm_pair_id > 0 ? oplm_pair_id.toString(16) : "-- -- -- --"
anchors.centerIn: parent
color: "white"
font {
family: pt_bold.name
pixelSize: Math.floor(parent.height * 1.4)
weight: Font.DemiBold
capitalization: Font.AllUppercase
}
}
}
SvgElementImage {
id: rx_quality_label
elementName: "rx-quality-label"
sceneSize: panels.sceneSize
y: Math.floor(scaledBounds.y * sceneItem.height)
z: oplm_bg.z+8
states: State {
name: "fading"
when: show_panels == true
PropertyChanges { target: rx_quality_label; x: Math.floor(scaledBounds.x * sceneItem.width) + offset_value; }
}
transitions: Transition {
SequentialAnimation {
PropertyAnimation { property: "x"; easing.type: anim_type; easing.amplitude: anim_amplitude; easing.period: anim_period; duration: duration_value }
}
}
}
SvgElementPositionItem {
id: rx_quality_text
sceneSize: panels.sceneSize
elementName: "rx-quality-text"
z: oplm_bg.z+9
width: scaledBounds.width * sceneItem.width
height: scaledBounds.height * sceneItem.height
y: scaledBounds.y * sceneItem.height
states: State {
name: "fading"
when: show_panels == true
PropertyChanges { target: rx_quality_text; x: Math.floor(scaledBounds.x * sceneItem.width) + offset_value; }
}
transitions: Transition {
SequentialAnimation {
PropertyAnimation { property: "x"; easing.type: anim_type; easing.amplitude: anim_amplitude; easing.period: anim_period; duration: duration_value }
}
}
Text {
text: ReceiverStatus.Quality > 0 ? ReceiverStatus.Quality+"%" : "?? %"
anchors.centerIn: parent
color: "white"
font {
family: pt_bold.name
pixelSize: Math.floor(parent.height * 1.4)
weight: Font.DemiBold
}
}
}
SvgElementImage {
id: oplm_mousearea
elementName: "oplm-panel-mousearea"
sceneSize: panels.sceneSize
y: Math.floor(scaledBounds.y * sceneItem.height)
z: oplm_bg.z
TooltipArea {
text: "Link panel"
}
MouseArea {
id: hidedisp_oplm;
anchors.fill: parent;
cursorShape: Qt.PointingHandCursor
onClicked: hide_display_oplink()
}
states: State {
name: "fading"
when: show_panels == true
PropertyChanges { target: oplm_mousearea; x: Math.floor(scaledBounds.x * sceneItem.width) + offset_value; }
}
transitions: Transition {
SequentialAnimation {
PropertyAnimation { property: "x"; easing.type: anim_type; easing.amplitude: anim_amplitude; easing.period: anim_period; duration: duration_value }
}
}
}
//
// System panel
//
SvgElementImage {
id: system_bg
elementName: "system-bg"
sceneSize: panels.sceneSize
y: Math.floor(scaledBounds.y * sceneItem.height)
z: 40
states: State {
name: "fading"
when: show_panels == true
PropertyChanges { target: system_bg; x: Math.floor(scaledBounds.x * sceneItem.width) + offset_value; }
}
transitions: Transition {
SequentialAnimation {
id: system_anim
PropertyAnimation { property: "x"; easing.type: anim_type; easing.amplitude: anim_amplitude; easing.period: anim_period; duration: duration_value }
}
}
}
SvgElementPositionItem {
id: system_frametype
elementName: "system-frame-type"
sceneSize: panels.sceneSize
y: Math.floor(scaledBounds.y * sceneItem.height)
z: system_bg.z+1
states: State {
name: "fading"
when: show_panels == true
PropertyChanges { target: system_frametype; x: Math.floor(scaledBounds.x * sceneItem.width) + offset_value; }
}
transitions: Transition {
SequentialAnimation {
PropertyAnimation { property: "x"; easing.type: anim_type; easing.amplitude: anim_amplitude; easing.period: anim_period; duration: duration_value }
}
}
Text {
text: ["FixedWing", "FixedWingElevon", "FixedWingVtail", "VTOL", "HeliCP", "QuadX", "QuadP",
"Hexa+", "Octo+", "Custom", "HexaX", "HexaH", "OctoV", "OctoCoaxP", "OctoCoaxX", "OctoX", "HexaCoax",
"Tricopter", "GroundVehicleCar", "GroundVehicleDiff", "GroundVehicleMoto"][SystemSettings.AirframeType]
anchors.right: parent.right
color: "white"
font {
family: pt_bold.name
pixelSize: Math.floor(parent.height * 1.4)
weight: Font.DemiBold
}
}
}
SvgElementPositionItem {
id: system_cpuloadtemp
elementName: "system-cpu-load-temp"
sceneSize: panels.sceneSize
y: Math.floor(scaledBounds.y * sceneItem.height)
z: system_bg.z+1
states: State {
name: "fading"
when: show_panels == true
PropertyChanges { target: system_cpuloadtemp; x: Math.floor(scaledBounds.x * sceneItem.width) + offset_value; }
}
transitions: Transition {
SequentialAnimation {
PropertyAnimation { property: "x"; easing.type: anim_type; easing.amplitude: anim_amplitude; easing.period: anim_period; duration: duration_value }
}
}
Text {
// Coptercontrol detect with mem free : Only display Cpu load, no temperature available.
text: SystemStats.CPULoad+"%"+
[SystemStats.HeapRemaining < 3000 ? "" : " | "+cpuTemp+"°C"]
anchors.right: parent.right
color: "white"
font {
family: pt_bold.name
pixelSize: Math.floor(parent.height * 1.4)
weight: Font.DemiBold
}
}
}
SvgElementPositionItem {
id: system_memfree
elementName: "system-mem-free"
sceneSize: panels.sceneSize
y: Math.floor(scaledBounds.y * sceneItem.height)
z: system_bg.z+1
states: State {
name: "fading"
when: show_panels == true
PropertyChanges { target: system_memfree; x: Math.floor(scaledBounds.x * sceneItem.width) + offset_value; }
}
transitions: Transition {
SequentialAnimation {
PropertyAnimation { property: "x"; easing.type: anim_type; easing.amplitude: anim_amplitude; easing.period: anim_period; duration: duration_value }
}
}
Text {
text: SystemStats.HeapRemaining > 1024 ? memory_free.toFixed(2) +"Kb" : memory_free +"bytes"
anchors.right: parent.right
color: "white"
font {
family: pt_bold.name
pixelSize: Math.floor(parent.height * 1.4)
weight: Font.DemiBold
}
}
}
SvgElementPositionItem {
id: system_fusion_algo
elementName: "system-attitude-estimation-algo"
sceneSize: panels.sceneSize
y: Math.floor(scaledBounds.y * sceneItem.height)
z: system_bg.z+1
states: State {
name: "fading"
when: show_panels == true
PropertyChanges { target: system_fusion_algo; x: Math.floor(scaledBounds.x * sceneItem.width) + offset_value; }
}
transitions: Transition {
SequentialAnimation {
PropertyAnimation { property: "x"; easing.type: anim_type; easing.amplitude: anim_amplitude; easing.period: anim_period; duration: duration_value }
}
}
Text {
text: ["None", "Basic (No Nav)", "CompMag", "Comp+Mag+GPS", "EKFIndoor", "GPS Nav (INS13)"][RevoSettings.FusionAlgorithm]
anchors.right: parent.right
color: "white"
font {
family: pt_bold.name
pixelSize: Math.floor(parent.height * 1.35)
weight: Font.DemiBold
}
}
}
SvgElementPositionItem {
id: system_mag_used
elementName: "system-mag-used"
sceneSize: panels.sceneSize
y: Math.floor(scaledBounds.y * sceneItem.height)
z: system_bg.z+1
states: State {
name: "fading"
when: show_panels == true
PropertyChanges { target: system_mag_used; x: Math.floor(scaledBounds.x * sceneItem.width) + offset_value; }
}
transitions: Transition {
SequentialAnimation {
PropertyAnimation { property: "x"; easing.type: anim_type; easing.amplitude: anim_amplitude; easing.period: anim_period; duration: duration_value }
}
}
Text {
text: ["Invalid", "OnBoard", "External"][MagState.Source]
anchors.right: parent.right
color: "white"
font {
family: pt_bold.name
pixelSize: Math.floor(parent.height * 1.4)
weight: Font.DemiBold
}
}
}
SvgElementPositionItem {
id: system_gpstype
elementName: "system-gps-type"
sceneSize: panels.sceneSize
y: Math.floor(scaledBounds.y * sceneItem.height)
z: system_bg.z+1
states: State {
name: "fading"
when: show_panels == true
PropertyChanges { target: system_gpstype; x: Math.floor(scaledBounds.x * sceneItem.width) + offset_value; }
}
transitions: Transition {
SequentialAnimation {
PropertyAnimation { property: "x"; easing.type: anim_type; easing.amplitude: anim_amplitude; easing.period: anim_period; duration: duration_value }
}
}
Text {
text: ["Unknown", "NMEA", "UBX", "UBX7", "UBX8"][GPSPositionSensor.SensorType]
anchors.right: parent.right
color: "white"
font {
family: pt_bold.name
pixelSize: Math.floor(parent.height * 1.4)
weight: Font.DemiBold
}
}
}
SvgElementImage {
id: system_mousearea
elementName: "system-panel-mousearea"
sceneSize: panels.sceneSize
y: Math.floor(scaledBounds.y * sceneItem.height)
z: system_bg.z+1
TooltipArea {
text: "System panel"
}
MouseArea {
id: hidedisp_system;
anchors.fill: parent;
cursorShape: Qt.PointingHandCursor
onClicked: hide_display_system()
}
states: State {
name: "fading"
when: show_panels == true
PropertyChanges { target: system_mousearea; x: Math.floor(scaledBounds.x * sceneItem.width) + offset_value; }
}
transitions: Transition {
SequentialAnimation {
PropertyAnimation { property: "x"; easing.type: anim_type; easing.amplitude: anim_amplitude; easing.period: anim_period; duration: duration_value }
}
}
}
}