Files
Artemis/ui/SpaceWeatherForecastPage.qml
2024-05-31 16:36:34 +02:00

757 lines
28 KiB
QML

import QtQuick
import QtQuick.Window
import QtQuick.Controls
import QtQuick.Controls.Material
import QtQuick.Layouts
Page {
id: spaceWeatherCurrent
anchors.fill: parent
objectName: "spaceWeatherForecastObj"
function loadForecastReport(poseidon_data) {
if (poseidon_data['FORCST']['SUMMARY']['G_REPORT'][0] === 1) {
imageAttentionGReport.source = "qrc:/images/icons/dialog_warn.svg"
} else {
imageAttentionGReport.source = "qrc:/images/icons/dialog_info.svg"
}
labelGReport.text = poseidon_data['FORCST']['SUMMARY']['G_REPORT'][1]
if (poseidon_data['FORCST']['SUMMARY']['S_REPORT'][0] === 1) {
imageAttentionSReport.source = "qrc:/images/icons/dialog_warn.svg"
} else {
imageAttentionSReport.source = "qrc:/images/icons/dialog_info.svg"
}
labelSReport.text = poseidon_data['FORCST']['SUMMARY']['S_REPORT'][1]
if (poseidon_data['FORCST']['SUMMARY']['R_REPORT'][0] === 1) {
imageAttentionRReport.source = "qrc:/images/icons/dialog_warn.svg"
} else {
imageAttentionRReport.source = "qrc:/images/icons/dialog_info.svg"
}
labelRReport.text = poseidon_data['FORCST']['SUMMARY']['R_REPORT'][1]
labelDay1kp.text = poseidon_data['FORCST']['SUMMARY']['PRE_DATES'][0]
labelDay2kp.text = poseidon_data['FORCST']['SUMMARY']['PRE_DATES'][1]
labelDay3kp.text = poseidon_data['FORCST']['SUMMARY']['PRE_DATES'][2]
var timeRanges = ['00-03UT', '03-06UT', '06-09UT', '09-12UT', '12-15UT', '15-18UT', '18-21UT', '21-00UT']
for (var i = 0; i < timeRanges.length; i++) {
var timeRange = timeRanges[i]
for (var j = 0; j < 3; j++) {
var index = j.toString()
var labelName = 'labelKp' + (i).toString() + (j+1).toString()
var labelText = poseidon_data['FORCST']['SUMMARY']['kp'][timeRange][j]['textual']
var colorText = poseidon_data['FORCST']['SUMMARY']['kp'][timeRange][j]['color']
eval(labelName + '.text = labelText')
if (colorText !== '') {
eval(labelName + '.color = colorText')
}
}
}
labelDay1Event.text = poseidon_data['FORCST']['PRE_DATES'][0]
labelDay2Event.text = poseidon_data['FORCST']['PRE_DATES'][1]
labelDay3Event.text = poseidon_data['FORCST']['PRE_DATES'][2]
labelEventS10.text = poseidon_data['FORCST']['SUMMARY']['S_PROB']['probS1'][0] + ' %'
labelEventS11.text = poseidon_data['FORCST']['SUMMARY']['S_PROB']['probS1'][1] + ' %'
labelEventS12.text = poseidon_data['FORCST']['SUMMARY']['S_PROB']['probS1'][2] + ' %'
labelEventMFlare0.text = poseidon_data['FORCST']['CLASS_M'][0] + ' %'
labelEventMFlare1.text = poseidon_data['FORCST']['CLASS_M'][1] + ' %'
labelEventMFlare2.text = poseidon_data['FORCST']['CLASS_M'][2] + ' %'
labelEventXFlare0.text = poseidon_data['FORCST']['CLASS_X'][0] + ' %'
labelEventXFlare1.text = poseidon_data['FORCST']['CLASS_X'][1] + ' %'
labelEventXFlare2.text = poseidon_data['FORCST']['CLASS_X'][2] + ' %'
labelEventPFlare0.text = poseidon_data['FORCST']['CLASS_PROTON'][0] + ' %'
labelEventPFlare1.text = poseidon_data['FORCST']['CLASS_PROTON'][1] + ' %'
labelEventPFlare2.text = poseidon_data['FORCST']['CLASS_PROTON'][2] + ' %'
labelEventR1R20.text = poseidon_data['FORCST']['SUMMARY']['R_PROB']['probR1'][0] + ' %'
labelEventR1R21.text = poseidon_data['FORCST']['SUMMARY']['R_PROB']['probR1'][1] + ' %'
labelEventR1R22.text = poseidon_data['FORCST']['SUMMARY']['R_PROB']['probR1'][2] + ' %'
labelEventR30.text = poseidon_data['FORCST']['SUMMARY']['R_PROB']['probR3'][0] + ' %'
labelEventR31.text = poseidon_data['FORCST']['SUMMARY']['R_PROB']['probR3'][1] + ' %'
labelEventR32.text = poseidon_data['FORCST']['SUMMARY']['R_PROB']['probR3'][2] + ' %'
var geoActiveM0 = poseidon_data['FORCST']['GEO_MID_ACTIVE'][0] + ' %'
var geoActiveM1 = poseidon_data['FORCST']['GEO_MID_ACTIVE'][1] + ' %'
var geoActiveM2 = poseidon_data['FORCST']['GEO_MID_ACTIVE'][2] + ' %'
var geoActiveH0 = poseidon_data['FORCST']['GEO_HIG_ACTIVE'][0] + ' %'
var geoActiveH1 = poseidon_data['FORCST']['GEO_HIG_ACTIVE'][1] + ' %'
var geoActiveH2 = poseidon_data['FORCST']['GEO_HIG_ACTIVE'][2] + ' %'
var geoMinorM0 = poseidon_data['FORCST']['GEO_MID_MINOR'][0] + ' %'
var geoMinorM1 = poseidon_data['FORCST']['GEO_MID_MINOR'][1] + ' %'
var geoMinorM2 = poseidon_data['FORCST']['GEO_MID_MINOR'][2] + ' %'
var geoMinorH0 = poseidon_data['FORCST']['GEO_HIG_MINOR'][0] + ' %'
var geoMinorH1 = poseidon_data['FORCST']['GEO_HIG_MINOR'][1] + ' %'
var geoMinorH2 = poseidon_data['FORCST']['GEO_HIG_MINOR'][2] + ' %'
var geoMajorM0 = poseidon_data['FORCST']['GEO_MID_MAJOR'][0] + ' %'
var geoMajorM1 = poseidon_data['FORCST']['GEO_MID_MAJOR'][1] + ' %'
var geoMajorM2 = poseidon_data['FORCST']['GEO_MID_MAJOR'][2] + ' %'
var geoMajorH0 = poseidon_data['FORCST']['GEO_HIG_MAJOR'][0] + ' %'
var geoMajorH1 = poseidon_data['FORCST']['GEO_HIG_MAJOR'][1] + ' %'
var geoMajorH2 = poseidon_data['FORCST']['GEO_HIG_MAJOR'][2] + ' %'
labelEventActive0.text = geoActiveM0 + ' / ' + geoActiveH0
labelEventActive1.text = geoActiveM1 + ' / ' + geoActiveH1
labelEventActive2.text = geoActiveM2 + ' / ' + geoActiveH2
labelEventMinor0.text = geoMinorM0 + ' / ' + geoMinorH0
labelEventMinor1.text = geoMinorM1 + ' / ' + geoMinorH1
labelEventMinor2.text = geoMinorM2 + ' / ' + geoMinorH2
labelEventMajor0.text = geoMajorM0 + ' / ' + geoMajorH0
labelEventMajor1.text = geoMajorM1 + ' / ' + geoMajorH1
labelEventMajor2.text = geoMajorM2 + ' / ' + geoMajorH2
}
ColumnLayout {
anchors.fill: parent
anchors.rightMargin: 20
anchors.leftMargin: 20
anchors.bottomMargin: 20
anchors.topMargin: 20
ColumnLayout {
Layout.fillHeight: true
Layout.fillWidth: true
Label {
text: qsTr("FORECAST SUMMARY")
font.capitalization: Font.SmallCaps
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
}
Frame {
Layout.fillWidth: true
ColumnLayout {
anchors.fill: parent
spacing: 15
RowLayout {
spacing: 20
Image {
id: imageAttentionGReport
sourceSize.height: 40
sourceSize.width: 40
fillMode: Image.PreserveAspectFit
}
ColumnLayout {
Layout.fillHeight: true
Layout.fillWidth: true
Label {
font.capitalization: Font.SmallCaps
text: qsTr("Geomagnetic Activity")
font.pointSize: 11
Layout.fillWidth: true
}
Label {
id: labelGReport
wrapMode: Label.WordWrap
Layout.fillWidth: true
}
}
}
RowLayout {
spacing: 20
Image {
id: imageAttentionSReport
fillMode: Image.PreserveAspectFit
sourceSize.height: 40
sourceSize.width: 40
}
ColumnLayout {
Layout.fillHeight: true
Label {
text: qsTr("Solar Radiation Storms")
font.pointSize: 11
font.capitalization: Font.SmallCaps
Layout.fillWidth: true
}
Label {
id: labelSReport
wrapMode: Label.WordWrap
Layout.fillWidth: true
}
Layout.fillWidth: true
}
}
RowLayout {
spacing: 20
Image {
id: imageAttentionRReport
fillMode: Image.PreserveAspectFit
sourceSize.height: 40
sourceSize.width: 40
}
ColumnLayout {
Layout.fillHeight: true
Label {
text: qsTr("Radio Blackouts")
font.pointSize: 11
font.capitalization: Font.SmallCaps
Layout.fillWidth: true
}
Label {
id: labelRReport
wrapMode: Label.WordWrap
Layout.fillWidth: true
}
Layout.fillWidth: true
}
}
}
}
}
RowLayout {
Layout.fillHeight: true
Layout.fillWidth: true
ColumnLayout {
Layout.fillHeight: true
Layout.fillWidth: true
Label {
text: qsTr("3-DAY Kp INDEX")
font.capitalization: Font.SmallCaps
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
}
Frame {
clip: true
Layout.fillHeight: true
GridLayout {
anchors.fill: parent
columnSpacing: 15
rows: 9
columns: 4
Label {
text: qsTr("Time (UTC)")
}
Label {
id: labelDay1kp
text: qsTr("Day 1")
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
}
Label {
id: labelDay2kp
text: qsTr("Day 2")
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
}
Label {
id: labelDay3kp
text: qsTr("Day 3")
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
}
Label {
text: qsTr("00-03")
}
Label {
id: labelKp01
Layout.leftMargin: labelDay1kp.width * 0.3
font.pointSize: 12
font.bold: true
}
Label {
id: labelKp02
Layout.leftMargin: labelDay1kp.width * 0.3
font.pointSize: 12
font.bold: true
}
Label {
id: labelKp03
Layout.leftMargin: labelDay1kp.width * 0.3
font.pointSize: 12
font.bold: true
}
Label {
text: qsTr("03-06")
}
Label {
id: labelKp11
Layout.leftMargin: labelDay1kp.width * 0.3
font.pointSize: 12
font.bold: true
}
Label {
id: labelKp12
Layout.leftMargin: labelDay1kp.width * 0.3
font.pointSize: 12
font.bold: true
}
Label {
id: labelKp13
Layout.leftMargin: labelDay1kp.width * 0.3
font.pointSize: 12
font.bold: true
}
Label {
text: qsTr("06-09")
}
Label {
id: labelKp21
Layout.leftMargin: labelDay1kp.width * 0.3
font.pointSize: 12
font.bold: true
}
Label {
id: labelKp22
Layout.leftMargin: labelDay1kp.width * 0.3
font.pointSize: 12
font.bold: true
}
Label {
id: labelKp23
Layout.leftMargin: labelDay1kp.width * 0.3
font.pointSize: 12
font.bold: true
}
Label {
text: qsTr("09-12")
}
Label {
id: labelKp31
Layout.leftMargin: labelDay1kp.width * 0.3
font.pointSize: 12
font.bold: true
}
Label {
id: labelKp32
Layout.leftMargin: labelDay1kp.width * 0.3
font.pointSize: 12
font.bold: true
}
Label {
id: labelKp33
Layout.leftMargin: labelDay1kp.width * 0.3
font.pointSize: 12
font.bold: true
}
Label {
text: qsTr("12-15")
}
Label {
id: labelKp41
Layout.leftMargin: labelDay1kp.width * 0.3
font.pointSize: 12
font.bold: true
}
Label {
id: labelKp42
Layout.leftMargin: labelDay1kp.width * 0.3
font.pointSize: 12
font.bold: true
}
Label {
id: labelKp43
Layout.leftMargin: labelDay1kp.width * 0.3
font.pointSize: 12
font.bold: true
}
Label {
text: qsTr("15-18")
}
Label {
id: labelKp51
Layout.leftMargin: labelDay1kp.width * 0.3
font.pointSize: 12
font.bold: true
}
Label {
id: labelKp52
Layout.leftMargin: labelDay1kp.width * 0.3
font.pointSize: 12
font.bold: true
}
Label {
id: labelKp53
Layout.leftMargin: labelDay1kp.width * 0.3
font.pointSize: 12
font.bold: true
}
Label {
text: qsTr("18-21")
}
Label {
id: labelKp61
Layout.leftMargin: labelDay1kp.width * 0.3
font.pointSize: 12
font.bold: true
}
Label {
id: labelKp62
Layout.leftMargin: labelDay1kp.width * 0.3
font.pointSize: 12
font.bold: true
}
Label {
id: labelKp63
Layout.leftMargin: labelDay1kp.width * 0.3
font.pointSize: 12
font.bold: true
}
Label {
text: qsTr("21-00")
}
Label {
id: labelKp71
Layout.leftMargin: labelDay1kp.width * 0.3
font.pointSize: 12
font.bold: true
}
Label {
id: labelKp72
Layout.leftMargin: labelDay1kp.width * 0.3
font.pointSize: 12
font.bold: true
}
Label {
id: labelKp73
Layout.leftMargin: labelDay1kp.width * 0.3
font.pointSize: 12
font.bold: true
}
}
}
}
ColumnLayout {
Label {
text: qsTr("EVENTS PROBABILITY")
font.capitalization: Font.SmallCaps
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
}
Frame {
Layout.fillWidth: true
GridLayout {
anchors.fill: parent
rows: 9
columnSpacing: 15
columns: 4
Label {
}
Label {
id: labelDay1Event
text: qsTr("Day 1")
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
}
Label {
id: labelDay2Event
text: qsTr("Day 2")
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
}
Label {
id: labelDay3Event
text: qsTr("Day 3")
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
}
Label {
text: qsTr("Solar Radiation Storm")
font.capitalization: Font.SmallCaps
font.bold: true
Layout.columnSpan: 4
}
Label {
text: qsTr("S1 or greater")
}
Label {
id: labelEventS10
font.bold: true
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
}
Label {
id: labelEventS11
font.bold: true
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
}
Label {
id: labelEventS12
font.bold: true
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
}
Label {
text: qsTr("Solar Flares")
font.capitalization: Font.SmallCaps
font.bold: true
Layout.columnSpan: 4
}
Label {
text: qsTr("Class M flare")
}
Label {
id: labelEventMFlare0
font.bold: true
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
}
Label {
id: labelEventMFlare1
font.bold: true
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
}
Label {
id: labelEventMFlare2
font.bold: true
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
}
Label {
text: qsTr("Class X flare")
}
Label {
id: labelEventXFlare0
font.bold: true
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
}
Label {
id: labelEventXFlare1
font.bold: true
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
}
Label {
id: labelEventXFlare2
font.bold: true
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
}
Label {
text: qsTr("Proton flare")
}
Label {
id: labelEventPFlare0
font.bold: true
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
}
Label {
id: labelEventPFlare1
font.bold: true
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
}
Label {
id: labelEventPFlare2
font.bold: true
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
}
Label {
text: qsTr("Radio Blackout")
font.capitalization: Font.SmallCaps
font.bold: true
Layout.columnSpan: 4
}
Label {
text: qsTr("R1 - R2")
}
Label {
id: labelEventR1R20
font.bold: true
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
}
Label {
id: labelEventR1R21
font.bold: true
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
}
Label {
id: labelEventR1R22
font.bold: true
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
}
Label {
text: qsTr("R3 or greater")
}
Label {
id: labelEventR30
font.bold: true
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
}
Label {
id: labelEventR31
font.bold: true
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
}
Label {
id: labelEventR32
font.bold: true
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
}
Label {
text: qsTr("Geomagnetic Activity")
font.capitalization: Font.SmallCaps
font.bold: true
Layout.columnSpan: 4
}
Label {
text: qsTr("Active")
}
Label {
id: labelEventActive0
font.bold: true
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
}
Label {
id: labelEventActive1
font.bold: true
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
}
Label {
id: labelEventActive2
font.bold: true
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
}
Label {
text: qsTr("Minor")
}
Label {
id: labelEventMinor0
font.bold: true
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
}
Label {
id: labelEventMinor1
font.bold: true
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
}
Label {
id: labelEventMinor2
font.bold: true
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
}
Label {
text: qsTr("Major")
}
Label {
id: labelEventMajor0
font.bold: true
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
}
Label {
id: labelEventMajor1
font.bold: true
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
}
Label {
id: labelEventMajor2
font.bold: true
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
}
}
Layout.fillHeight: true
clip: true
}
Layout.fillHeight: true
Layout.fillWidth: true
}
}
}
}