Added Synoptic Analysis, UV Imagers, and Spectrometric Coronagraph

This commit is contained in:
Marco Dalla Tiezza
2024-06-25 00:38:00 +02:00
parent b8e6075aa0
commit ccc6e99a7f
7 changed files with 465 additions and 54 deletions

View File

@@ -8,6 +8,12 @@
### Added
- Created a setting panel for the audio player
- Selection of the audio output device. Closes [#4](https://github.com/AresValley/Artemis/issues/4)
- Added the following (advanced) products to the space weather module [#53](https://github.com/AresValley/Artemis/issues/53):
- Sun Synoptic Analysis (SAS)
- GOES Solar Ultraviolet Imager (SUVI), all wavelenght (94 Å, 131 Å, 171 Å, 195 Å, 284 Å, 304 Å)
- GOES Thematic Map (from SUVI)
- Large Angle and Spectrometric Coronagraph (LASCO), both C2/C3 optical imaging of the Suns corona
- Helioseismic and Magnetic Imager (HMI): Magnetogram, Intensitygram, Dopplergram (TODO)
### Fixed
- Fixed margins for downloader window

View File

@@ -41,6 +41,8 @@
<file>ui/SpaceWeatherForecastPage.qml</file>
<file>ui/SpaceWeatherDRAPPage.qml</file>
<file>ui/SpaceWeatherAuroraPage.qml</file>
<file>ui/SpaceWeatherSSA.qml</file>
<file>ui/SpaceWeatherSunImagers.qml</file>
<file>ui/About.qml</file>

View File

@@ -1,6 +1,6 @@
# Resource object code (Python 3)
# Created by: object code
# Created by: The Resource Compiler for Qt version 6.7.1
# Created by: The Resource Compiler for Qt version 6.7.2
# WARNING! All changes made in this file will be lost!
from PySide6 import QtCore
@@ -6023,43 +6023,45 @@ Text\x0d\x0a \
.WordWrap\x0d\x0a \
}\x0d\x0a }\x0d\x0a}\x0d\x0a\
\
\x00\x00\x02*\
\x00\x00\x02M\
\x00\
\x00\x08\x87x\xda\xbdUQk\xdb0\x10~\x0f\xe4?\
\x88>\xb5\x0f\xd3\xd2\xc2\x18\x18\xfa\x90f\x8c\x15ZH\
\x97B\x9e\x15\xfb\x1c\x8b\xca\x92'\x9dI\xb2\xe1\xff>\
\xc9\xb2\x12\xdbq\xb6\xa5\xa3\x15y\x90\xee\xbe\xbb\xfb\xee\
\xf4Y\xe1y\xa14\x92'|*y\xfc2\x1e\xf1\xce\
\x99.\xb9L\xd4\xe6\xc8<S\x12\xb5\x12\xe6\xa4\x83>\
2\x04\xcd\x998B<\xb0\x9d*\xd1F\x8eG>9\
\xf95\x1e\x11\xbbx\x12\x91MmY\x14,\x86%0\
\xcc@;\x9c\xf3nx\x82YD\xae'\x93\x897d\
\xc0\xd7\x19F\xe4\xb33x\xd3L\xd9R\x12$R%\
\xdd^\x00\x82M\xda\xe4wkKn\xc9\x22\xd6\x00\x92\
\xd6\x09\xc9GrC>\x90\xfd\xfe\x80\xdc\x1d\x90\xbeR\
\x03=\x1c<\xb6\x0a\xc5s\x950\xc1q\x17\xd9N\xe9\
\xb4(\x04\x8f\x19r%\x1f\x9d\xddCR\xc1\xd6\xa6\xf6\
\x87\xb1z;r\x14\x10\x91\x1f\xe6Y_^L5B\
\xce\x8d-U\x8f\x814s\xb8\xb8\x0a\xe8\xb4\x94\xb1K\
L\xca\x22\xb1C\xbeS\x88*\xbfc\xfa2\x07c\xd8\
\x1a\xae\xda\x0d\x1b\x97c\x0f\xa1\x08[\xb4\x8d5\xc8V\
\x07~;\xb7\xc6v4\x93q\xa6\xb4\xa1)\x17\x22\x22\
\x05\xd3v\xb6\x01[SQ\xca\xderD\x1e\xd8\x0aD\
;0\xdcg\xb7|\xd7\x9fZ\xa9\xd0\x82oA,\xf8\
O\xdb\xfe\xf5M\xd7/ \xc59K\x12.\xd7\x11\xf9\
\xd4\xf5iw\x09\xa7\x9c\xab\xba\xde\x90\xb7j\x93\x9f)\
Q\xe6\xd2\xcb\xb1\xcf\xfdo\x8d\xbb\xf5\xccV\xb6\xa7~\
d\xe8\x1ck\xef\xb1\xaf\xd1\xb1O\xe9Ex\x0c\xf2\xa4\
\xea\xeaK\x8fG]B\x9f@ Q\xdav\xe5\x10\x8f\
Z[\xf6\xc6\x83\xb4f\xa5vU\x9d\x94\xfa\xb0\xea?\
S\x7fU\x1abf\xd0\xbcE\xf2/\xdf\xa7\xf3\xb7\xc8\
;-\xb5\xd2\xec\x1f2W\xfd\xd1/\x90\xc5/\xc3\xd2\
q+\xf6\x83\xbe\x97\x09l\x83\x14h\xdb\xf8\xc7+\xff\
\xd6\xbcl\xfe\xce_\xaf\x8d{\xfb\x90\x9c\x1aC\xfb\x89\
md\xd1\xff\xf8\x87Tm\x86\xc3\x86\x83\xaa\xc1\xb9\xbe\
\x9eg\xd0\xd8\xb9D\xdbq\xef\xc3\xd4\x09\xf6\x5c\x96!\
\xe6}\x18z\xe9\x9f\xcb\xf1\x10u\x0e\xcb\x13\xc7j\xff\
\xf7c\x7f\xbf\x01\x0fJ\x0a\x01\
\x00\x0a{x\xda\xbdVQo\xda0\x10~G\xe2?\
X}j\x1f\x96\xd1J\xd3\xa4H}\xa0L\xd3\x90Z\
\x89.\x95\xfal\x92\x03\xac:vf\x9f\x05l\xca\x7f\
\x9f\x1d\xc7\x10B\xd8\x96N`\xf1\x90\xdc}w\xf7\xdd\
\xf9\xb3\x03\xcb\x0b\xa9\x90<\xe3\xb3a\xe9\xdbp\xc0\x0e\
\xde\xa3W&2\xb9>2O\xa4@%\xb9>\xe9\x88\
\x9e(\x82b\x94\x1f!\x1e\xe9V\x1a\xb4\x91\xc3\x81O\
N~\x0d\x07\xc4.\x96\xc5d]Y\x92\x82\xa6\xf0\x0a\
\x14W\xa0\x1c\xcey\xd7,\xc3ULnG\xa3\x917\
\xac\x80-W\x18\x93\xcf\xce\xe0M\x13iK\x09\x10\x18\
I\xe1\x9e9 \xd8\xa4u~\xb76\xe4\x9e$\xa9\x02\
\x10Q\x95\x90|$w\xe4\x03\xd9=\xef\x91\xdb=\xd2\
W\xaa\xa1\xfb\x17\x8f-C\xf1\x5cf\x943\xdc\xc6\xb6\
\xd3h\x5c\x14\x9c\xa5\x14\x99\x14O\xce\xee!\x0bN\x97\
\xba\xf2\x87\xb1z;2\xe4\x10\x93\x1f\xfaE]_\x8d\
\x15B\xce\xb4-U\x8d\x81\xd4s\xb8\xba\x09\xe8\x85\x11\
\xa9KLL\x91\xd9!?HD\x99?Pu\x9d\x83\
\xd6t\x097\xcd\x86\xb5\xcb\xb1\x83D\x08\x1b\xb4\x8d\xd5\
\xc8F\x07\xfeqf\x8d\xcdh*\xd2\x95T:Z0\
\xcecRPeg\x1b\xb0\x15\x15)\xed.\xc7\xe4\x91\
\xce\x817\x03\xc3~\x1e\x96?\xf4/\xacT\xa2\x82m\
\x80'\xec\xa7m\xff\xf6\xee\xd0\xcfa\x813\x9aeL\
,c\xf2\xe9\xd0\xa7\xdc&\x9cr\xce\xabz]\xde\xb2\
I~\x22\xb9\xc9\x85\x97c\x9b\xfb\xdf\x1aw\xeb\x85\xce\
mO\xed\xc8\xd09V\xdec_\xadc\x9f\xd2\x8b\xf0\
\x18\xe4IU\xd5_=\x1e\x95\x816\x81@\xc2\xd8v\
E\x17\x8fJ[v\xc7\x83\xb4&F\xb9\xaaNJm\
X\xf9\x9f\xa9\xbfJ\x05)\xd5\xa8\xcf\x91\xfc\xcb\xf7\xf1\
\xec\x1cy\xc7FIE\xcf\x919I\xc6gIk\x04\
\x99\xe6\xf6\x90\xaa\x7f\x99s\xd9\x16L\x824}\xeb\x16\
\xbc[\xa9\x97\xc7Td\xb0\x09\x02\x8e\x9a\xc6?\x0a\xf5\
[}\x1f{\xa5\xbe_\xd1S{\xfd\x9d\x9aE\xf3\xc3\
P\x8b\xb9}eu\x9dE\xdd\x1d\xd6\x1dTv\xce\xf5\
\xfd<\xc3\xc9\xe8K\xb4\x19w\x19\xa6\xee\x98\xf5e\x19\
b.\xc3\xd0\x1f\xd8\xbe\x1c\xf7Q\x97ai\x0f\x7f\x1f\
z\x16~!^F\xd4\x97G/z\xbb\xa8>,O\
\xbc\x96\xbb\xbf\x1c\xf6\xf7\x1b\xfa\xe8n|\
\x00\x00\x08\xee\
\x00\
\x00[Ux\xda\xed\x5cms\xdb6\x12\xfe\xde\x99\xfe\
@@ -6404,6 +6406,158 @@ Mode: Image.Pres\
erveAspectFit\x0d\x0a \
}\x0d\x0a }\x0d\
\x0a}\x0d\x0a\
\x00\x00\x09W\
i\
mport QtQuick\x0d\x0ai\
mport QtQuick.Wi\
ndow\x0d\x0aimport QtQ\
uick.Controls\x0d\x0ai\
mport QtQuick.Co\
ntrols.Material\x0d\
\x0aimport QtQuick.\
Layouts\x0d\x0a\x0d\x0a\x0d\x0aPag\
e {\x0d\x0a id: spa\
ceWeatherSunImag\
ers\x0d\x0a anchors\
.fill: parent\x0d\x0a\x0d\
\x0a objectName:\
\x22spaceWeatherSu\
nImagers\x22\x0d\x0a\x0d\x0a \
property var po\
seidon_json\x0d\x0a\x0d\x0a \
function load\
DrapReport(posei\
don_data) {\x0d\x0a \
poseidon_js\
on = poseidon_da\
ta\x0d\x0a load\
Image(poseidon_j\
son['URL'][combo\
BoxImageProduct.\
currentValue.val\
ue])\x0d\x0a }\x0d\x0a\x0d\x0a \
function load\
Image(url) {\x0d\x0a \
checkUrlEx\
ists(url, functi\
on(exists) {\x0d\x0a \
if (ex\
ists) {\x0d\x0a \
imageBo\
x.source = url\x0d\x0a\
} el\
se {\x0d\x0a \
imageBox.s\
ource = \x22qrc:///\
images/artemis_n\
ot_available.svg\
\x22\x0d\x0a }\
\x0d\x0a })\x0d\x0a \
}\x0d\x0a\x0d\x0a funct\
ion checkUrlExis\
ts(url, callback\
) {\x0d\x0a var\
xhr = new XMLHt\
tpRequest()\x0d\x0a \
xhr.onready\
statechange = fu\
nction() {\x0d\x0a \
if (xhr.\
readyState === X\
MLHttpRequest.DO\
NE) {\x0d\x0a \
callback(\
xhr.status === 2\
00)\x0d\x0a \
}\x0d\x0a }\x0d\x0a \
xhr.open(\
\x22HEAD\x22, url, tru\
e)\x0d\x0a xhr.\
send()\x0d\x0a }\x0d\x0a\x0d\
\x0a ColumnLayou\
t {\x0d\x0a anc\
hors.fill: paren\
t\x0d\x0a ancho\
rs.rightMargin: \
10\x0d\x0a anch\
ors.leftMargin: \
10\x0d\x0a anch\
ors.bottomMargin\
: 10\x0d\x0a an\
chors.topMargin:\
10\x0d\x0a\x0d\x0a C\
omboBox {\x0d\x0a \
id: combo\
BoxImageProduct\x0d\
\x0a tex\
tRole: 'text'\x0d\x0a \
Layou\
t.fillWidth: tru\
e\x0d\x0a m\
odel: ListModel\
{\x0d\x0a \
ListElement \
{ text: \x22SUVI 94\
\xc3\x85\x22; value: \x22SU\
VI_094\x22 }\x0d\x0a \
ListE\
lement { text: \x22\
SUVI 131 \xc3\x85\x22; va\
lue: \x22SUVI_131\x22 \
}\x0d\x0a \
ListElement {\
text: \x22SUVI 171\
\xc3\x85\x22; value: \x22SU\
VI_171\x22 }\x0d\x0a \
ListE\
lement { text: \x22\
SUVI 195 \xc3\x85\x22; va\
lue: \x22SUVI_195\x22 \
}\x0d\x0a \
ListElement {\
text: \x22SUVI 284\
\xc3\x85\x22; value: \x22SU\
VI_284\x22 }\x0d\x0a \
ListE\
lement { text: \x22\
SUVI 304 \xc3\x85\x22; va\
lue: \x22SUVI_304\x22 \
}\x0d\x0a \
ListElement {\
text: \x22LASCO C2\
\x22; value: \x22LASCO\
_C2\x22 }\x0d\x0a \
ListElem\
ent { text: \x22LAS\
CO C3\x22; value: \x22\
LASCO_C3\x22 }\x0d\x0a \
Lis\
tElement { text:\
\x22Thematic Map\x22;\
value: \x22SUVI_TH\
EMATIC\x22 }\x0d\x0a \
}\x0d\x0a \
onActivate\
d: {\x0d\x0a \
loadImage(\
poseidon_json['U\
RL'][comboBoxIma\
geProduct.curren\
tValue.value])\x0d\x0a\
}\x0d\x0a \
}\x0d\x0a\x0d\x0a \
Image {\x0d\x0a \
id: ima\
geBox\x0d\x0a \
Layout.fillHe\
ight: true\x0d\x0a \
Layout.f\
illWidth: true\x0d\x0a\
fill\
Mode: Image.Pres\
erveAspectFit\x0d\x0a\x0d\
\x0a }\x0d\x0a \
}\x0d\x0a}\x0d\x0a\
\x00\x00\x04[\
\x00\
\x00\x12\x85x\xda\xddX_o\xdb6\x10\x7f/\xd0\xef\
@@ -6476,6 +6630,89 @@ b\xdb\xfa>\xa9xx\xc1r\xec\x83\xf5\x85\xa5\xe8\x0b\
\xc4_\xbb\xf1\xd85y\x87\x12\xa4\x98pf\xef\x13\xc3\
c\x81\xda\xdd\xee\xc3\xe4\xf0E\x22\x92\x05\x88\x10\xcb\xe6\
\x8c\xbb\x17~\xff\x06f\x1eq:\
\x00\x00\x05\x01\
i\
mport QtQuick\x0d\x0ai\
mport QtQuick.Wi\
ndow\x0d\x0aimport QtQ\
uick.Controls\x0d\x0ai\
mport QtQuick.Co\
ntrols.Material\x0d\
\x0aimport QtQuick.\
Layouts\x0d\x0a\x0d\x0a\x0d\x0aPag\
e {\x0d\x0a id: spa\
ceWeatherSSA\x0d\x0a \
anchors.fill: \
parent\x0d\x0a\x0d\x0a ob\
jectName: \x22space\
WeatherSSA\x22\x0d\x0a\x0d\x0a \
function load\
DrapReport(posei\
don_data) {\x0d\x0a \
checkUrlExi\
sts(poseidon_dat\
a['URL']['SYNOPT\
IC_MAP'], functi\
on(exists) {\x0d\x0a \
if (ex\
ists) {\x0d\x0a \
imageBo\
x.source = posei\
don_data['URL'][\
'SYNOPTIC_MAP']\x0d\
\x0a } e\
lse {\x0d\x0a \
imageBox.\
source = \x22qrc://\
/images/artemis_\
not_available.sv\
g\x22\x0d\x0a \
}\x0d\x0a })\x0d\x0a \
}\x0d\x0a\x0d\x0a func\
tion checkUrlExi\
sts(url, callbac\
k) {\x0d\x0a va\
r xhr = new XMLH\
ttpRequest()\x0d\x0a \
xhr.onread\
ystatechange = f\
unction() {\x0d\x0a \
if (xhr\
.readyState === \
XMLHttpRequest.D\
ONE) {\x0d\x0a \
callback\
(xhr.status === \
200)\x0d\x0a \
}\x0d\x0a }\x0d\x0a\
xhr.open\
(\x22HEAD\x22, url, tr\
ue)\x0d\x0a xhr\
.send()\x0d\x0a }\x0d\x0a\
\x0d\x0a ColumnLayo\
ut {\x0d\x0a an\
chors.fill: pare\
nt\x0d\x0a anch\
ors.rightMargin:\
10\x0d\x0a anc\
hors.leftMargin:\
10\x0d\x0a anc\
hors.bottomMargi\
n: 10\x0d\x0a a\
nchors.topMargin\
: 10\x0d\x0a\x0d\x0a \
Image {\x0d\x0a \
id: imageBo\
x\x0d\x0a L\
ayout.fillHeight\
: true\x0d\x0a \
Layout.fillW\
idth: true\x0d\x0a \
fillMode\
: Image.Preserve\
AspectFit\x0d\x0a \
}\x0d\x0a }\x0d\x0a}\x0d\x0a\
\
\x00\x00\x0a\x18\
\x00\
\x00Xhx\xda\xed\x5cko\xdb:\x12\xfd^\xa0\xff\
@@ -7252,10 +7489,20 @@ qt_resource_name = b"\
\x00S\
\x00p\x00a\x00c\x00e\x00W\x00e\x00a\x00t\x00h\x00e\x00r\x00A\x00u\x00r\x00o\x00r\
\x00a\x00P\x00a\x00g\x00e\x00.\x00q\x00m\x00l\
\x00\x1a\
\x05\xbc\x12\x9c\
\x00S\
\x00p\x00a\x00c\x00e\x00W\x00e\x00a\x00t\x00h\x00e\x00r\x00S\x00u\x00n\x00I\x00m\
\x00a\x00g\x00e\x00r\x00s\x00.\x00q\x00m\x00l\
\x00\x0f\
\x0e^\x1a\x9c\
\x00P\
\x00r\x00e\x00f\x00e\x00r\x00e\x00n\x00c\x00e\x00s\x00.\x00q\x00m\x00l\
\x00\x13\
\x06\xfb\xe9|\
\x00S\
\x00p\x00a\x00c\x00e\x00W\x00e\x00a\x00t\x00h\x00e\x00r\x00S\x00S\x00A\x00.\x00q\
\x00m\x00l\
\x00\x0e\
\x08!D\x9c\
\x00S\
@@ -7289,7 +7536,7 @@ qt_resource_name = b"\
qt_resource_struct = b"\
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x01\
\x00\x00\x00\x00\x00\x00\x00\x00\
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x11\x00\x00\x00\x1a\
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x13\x00\x00\x00\x1a\
\x00\x00\x00\x00\x00\x00\x00\x00\
\x00\x00\x00\x0a\x00\x02\x00\x00\x00\x05\x00\x00\x00\x03\
\x00\x00\x00\x00\x00\x00\x00\x00\
@@ -7334,7 +7581,7 @@ qt_resource_struct = b"\
\x00\x00\x01r\x00\x00\x00\x00\x00\x01\x00\x01\x1c\x98\
\x00\x00\x01\x8f\xff^8P\
\x00\x00\x01\x96\x00\x00\x00\x00\x00\x01\x00\x01\x1d\x90\
\x00\x00\x01\x90K\x1aN%\
\x00\x00\x01\x90K\xe3\xbe\xa0\
\x00\x00\x01\xb4\x00\x00\x00\x00\x00\x01\x00\x01 F\
\x00\x00\x01\x8f\xff^8P\
\x00\x00\x01\x0e\x00\x00\x00\x00\x00\x01\x00\x01\x16\xe5\
@@ -7349,38 +7596,42 @@ qt_resource_struct = b"\
\x00\x00\x01\x8f\xff^8P\
\x00\x00\x036\x00\x01\x00\x00\x00\x01\x00\x01>\x85\
\x00\x00\x01\x90\x13\xddn\xea\
\x00\x00\x05\xa2\x00\x00\x00\x00\x00\x01\x00\x01\xa1\x8a\
\x00\x00\x05:\x00\x00\x00\x00\x00\x01\x00\x01\x8b>\
\x00\x00\x01\x90LRx\x5c\
\x00\x00\x06\x08\x00\x00\x00\x00\x00\x01\x00\x01\xb0\x0d\
\x00\x00\x01\x8f\xff^8P\
\x00\x00\x03l\x00\x01\x00\x00\x00\x01\x00\x01I\x06\
\x00\x00\x01\x8f\xff^8_\
\x00\x00\x05\x80\x00\x00\x00\x00\x00\x01\x00\x01\x99\x96\
\x00\x00\x01\x90J\xbe\xce\x04\
\x00\x00\x03R\x00\x02\x00\x00\x00\x04\x00\x00\x00+\
\x00\x00\x05\x98\x00\x00\x00\x00\x00\x01\x00\x01\x98\xf8\
\x00\x00\x01\x90LO8\x08\
\x00\x00\x05\xe6\x00\x00\x00\x00\x00\x01\x00\x01\xa8\x19\
\x00\x00\x01\x90K\xe3\xbe\xa0\
\x00\x00\x03R\x00\x02\x00\x00\x00\x04\x00\x00\x00-\
\x00\x00\x00\x00\x00\x00\x00\x00\
\x00\x00\x04\xbe\x00\x01\x00\x00\x00\x01\x00\x01v\x08\
\x00\x00\x04\xbe\x00\x01\x00\x00\x00\x01\x00\x01v+\
\x00\x00\x01\x90\x13\xdd\x17\xd4\
\x00\x00\x05^\x00\x01\x00\x00\x00\x01\x00\x01\x8fz\
\x00\x00\x05\xc4\x00\x01\x00\x00\x00\x01\x00\x01\x9d\xfd\
\x00\x00\x01\x90\x01\x93J\xb0\
\x00\x00\x04\xe0\x00\x01\x00\x00\x00\x01\x00\x01~\xfa\
\x00\x00\x04\xe0\x00\x01\x00\x00\x00\x01\x00\x01\x7f\x1d\
\x00\x00\x01\x90\x18\xf5\x014\
\x00\x00\x04B\x00\x01\x00\x00\x00\x01\x00\x01a\xf6\
\x00\x00\x01\x90\x13\xdd\x17\xd3\
\x00\x00\x04p\x00\x00\x00\x00\x00\x01\x00\x01n\x15\
\x00\x00\x01\x8f\xff^8P\
\x00\x00\x04\x98\x00\x01\x00\x00\x00\x01\x00\x01s\xda\
\x00\x00\x01\x8f\xff^8P\
\x00\x00\x05:\x00\x01\x00\x00\x00\x01\x00\x01\x8b\x1b\
\x00\x00\x01\x90LRh&\
\x00\x00\x05t\x00\x01\x00\x00\x00\x01\x00\x01\x94\x99\
\x00\x00\x01\x90\x1b[j\x99\
\x00\x00\x05\x00\x00\x00\x00\x00\x00\x01\x00\x01\x85\xf2\
\x00\x00\x05\x00\x00\x00\x00\x00\x00\x01\x00\x01\x86\x15\
\x00\x00\x01\x8f\xff^8P\
\x00\x00\x05\xd6\x00\x01\x00\x00\x00\x01\x00\x01\xaa=\
\x00\x00\x06<\x00\x01\x00\x00\x00\x01\x00\x01\xb8\xc0\
\x00\x00\x01\x8f\xff^8_\
\x00\x00\x06\x1e\x00\x01\x00\x00\x00\x01\x00\x01\xb2U\
\x00\x00\x06\x84\x00\x01\x00\x00\x00\x01\x00\x01\xc0\xd8\
\x00\x00\x01\x8f\xff^8_\
\x00\x00\x05\xba\x00\x01\x00\x00\x00\x01\x00\x01\xa7:\
\x00\x00\x06 \x00\x01\x00\x00\x00\x01\x00\x01\xb5\xbd\
\x00\x00\x01\x8f\xff^8_\
\x00\x00\x05\xfa\x00\x01\x00\x00\x00\x01\x00\x01\xad\x00\
\x00\x00\x01\x90K\x22\xa8\x89\
\x00\x00\x06`\x00\x01\x00\x00\x00\x01\x00\x01\xbb\x83\
\x00\x00\x01\x90K\xe3\xbe\xa0\
"
def qInitResources():

View File

@@ -13,6 +13,8 @@ class UIspaceweather(QObject):
load_poseidon_report = Signal(dict)
load_poseidon_forecast_report = Signal(dict)
load_poseidon_drap_report = Signal(dict)
load_poseidon_SSA_report = Signal(dict)
load_poseidon_sun_images_report = Signal(dict)
load_aurora_report = Signal()
update_bottom_bar = Signal(str)
@@ -30,6 +32,8 @@ class UIspaceweather(QObject):
self._window_forecast = self._window.findChild(QObject, "spaceWeatherForecastObj")
self._window_drap = self._window.findChild(QObject, "spaceWeatherDRAPObj")
self._window_aurora = self._window.findChild(QObject, "spaceWeatherAuroraObj")
self._window_SSA = self._window.findChild(QObject, "spaceWeatherSSA")
self._window_sun_images = self._window.findChild(QObject, "spaceWeatherSunImagers")
self._connect()
@@ -43,6 +47,8 @@ class UIspaceweather(QObject):
self.load_poseidon_report.connect(self._window_current.loadReport)
self.load_poseidon_forecast_report.connect(self._window_forecast.loadForecastReport)
self.load_poseidon_drap_report.connect(self._window_drap.loadDrapReport)
self.load_poseidon_SSA_report.connect(self._window_SSA.loadDrapReport)
self.load_poseidon_sun_images_report.connect(self._window_sun_images.loadDrapReport)
self.load_aurora_report.connect(self._window_aurora.loadAuroraReport)
@@ -62,6 +68,8 @@ class UIspaceweather(QObject):
self.load_poseidon_report.emit(poseidon_data)
self.load_poseidon_forecast_report.emit(poseidon_data)
self.load_poseidon_drap_report.emit(poseidon_data)
self.load_poseidon_sun_images_report.emit(poseidon_data)
self.load_poseidon_SSA_report.emit(poseidon_data)
self.load_aurora_report.emit()
self.update_bottom_bar.emit(

View File

@@ -56,6 +56,12 @@ Window {
TabButton {
text: qsTr("Aurora")
}
TabButton {
text: qsTr("SSA")
}
TabButton {
text: qsTr("Sun Imagers")
}
}
StackLayout {
@@ -86,6 +92,18 @@ Window {
id: spaceWeatherAuroraPage
}
}
Item {
SpaceWeatherSSA {
id: spaceWeatherSSA
}
}
Item {
SpaceWeatherSunImagers {
id: spaceWeatherSunImagers
}
}
}
}
}

49
ui/SpaceWeatherSSA.qml Normal file
View File

@@ -0,0 +1,49 @@
import QtQuick
import QtQuick.Window
import QtQuick.Controls
import QtQuick.Controls.Material
import QtQuick.Layouts
Page {
id: spaceWeatherSSA
anchors.fill: parent
objectName: "spaceWeatherSSA"
function loadDrapReport(poseidon_data) {
checkUrlExists(poseidon_data['URL']['SYNOPTIC_MAP'], function(exists) {
if (exists) {
imageBox.source = poseidon_data['URL']['SYNOPTIC_MAP']
} else {
imageBox.source = "qrc:///images/artemis_not_available.svg"
}
})
}
function checkUrlExists(url, callback) {
var xhr = new XMLHttpRequest()
xhr.onreadystatechange = function() {
if (xhr.readyState === XMLHttpRequest.DONE) {
callback(xhr.status === 200)
}
}
xhr.open("HEAD", url, true)
xhr.send()
}
ColumnLayout {
anchors.fill: parent
anchors.rightMargin: 10
anchors.leftMargin: 10
anchors.bottomMargin: 10
anchors.topMargin: 10
Image {
id: imageBox
Layout.fillHeight: true
Layout.fillWidth: true
fillMode: Image.PreserveAspectFit
}
}
}

View File

@@ -0,0 +1,77 @@
import QtQuick
import QtQuick.Window
import QtQuick.Controls
import QtQuick.Controls.Material
import QtQuick.Layouts
Page {
id: spaceWeatherSunImagers
anchors.fill: parent
objectName: "spaceWeatherSunImagers"
property var poseidon_json
function loadDrapReport(poseidon_data) {
poseidon_json = poseidon_data
loadImage(poseidon_json['URL'][comboBoxImageProduct.currentValue.value])
}
function loadImage(url) {
checkUrlExists(url, function(exists) {
if (exists) {
imageBox.source = url
} else {
imageBox.source = "qrc:///images/artemis_not_available.svg"
}
})
}
function checkUrlExists(url, callback) {
var xhr = new XMLHttpRequest()
xhr.onreadystatechange = function() {
if (xhr.readyState === XMLHttpRequest.DONE) {
callback(xhr.status === 200)
}
}
xhr.open("HEAD", url, true)
xhr.send()
}
ColumnLayout {
anchors.fill: parent
anchors.rightMargin: 10
anchors.leftMargin: 10
anchors.bottomMargin: 10
anchors.topMargin: 10
ComboBox {
id: comboBoxImageProduct
textRole: 'text'
Layout.fillWidth: true
model: ListModel {
ListElement { text: "SUVI 94 Å"; value: "SUVI_094" }
ListElement { text: "SUVI 131 Å"; value: "SUVI_131" }
ListElement { text: "SUVI 171 Å"; value: "SUVI_171" }
ListElement { text: "SUVI 195 Å"; value: "SUVI_195" }
ListElement { text: "SUVI 284 Å"; value: "SUVI_284" }
ListElement { text: "SUVI 304 Å"; value: "SUVI_304" }
ListElement { text: "LASCO C2"; value: "LASCO_C2" }
ListElement { text: "LASCO C3"; value: "LASCO_C3" }
ListElement { text: "Thematic Map"; value: "SUVI_THEMATIC" }
}
onActivated: {
loadImage(poseidon_json['URL'][comboBoxImageProduct.currentValue.value])
}
}
Image {
id: imageBox
Layout.fillHeight: true
Layout.fillWidth: true
fillMode: Image.PreserveAspectFit
}
}
}