added Last Power seeting to IOC panel

This commit is contained in:
2024-02-27 15:02:24 +01:00
parent bfa1a1d1c1
commit 8eeadde607
12 changed files with 1067 additions and 394 deletions
+20
View File
@@ -0,0 +1,20 @@
{
"Parameters":{
"drawLine" : {"flag" : 0, "data":{ "widget": "QHLine", "text" : "None", "value" : "None"}},
"delayRamp" : {"flag" : 1, "data":{ "widget": "QDoubleSpinBox", "text" : "Ramp delay (s):",
"value" : 0.1, "min": 0.00, "max": 0.20, "step": 0.01,
"tooltip":"Wait time between sending set point to each magnet in 'Restore'/'Standby' "}},
"drawLine2" : {"flag" : 0, "data":{ "widget": "QHLine", "text" : "None", "value" : "None"}}
},
"Expert":{
"debug": {"flag" : 0, "data":{ "widget": "None", "text" : "Debug", "value" : 0}},
"simulation": {"flag" : 1, "data":{ "widget": "None", "text" : "Dry run", "value" : 0}}
},
"IOC": {
"resultsTabTitle" : "IOC"
},
"headerMagnetSector": ["B1B2","G1","SH","G2","O2","PIF", "G3"],
"Master": "Controlroom"
}
+255 -124
View File
@@ -9,6 +9,229 @@
from PyQt5 import QtCore
qt_resource_data = b"\
\x00\x00\x00\xa7\
\x3c\
\x68\x74\x6d\x6c\x3e\x3c\x68\x65\x61\x64\x3e\x3c\x74\x69\x74\x6c\
\x65\x3e\x57\x65\x62\x20\x48\x65\x6c\x70\x3c\x2f\x74\x69\x74\x6c\
\x65\x3e\x3c\x2f\x68\x65\x61\x64\x3e\x0a\x3c\x62\x6f\x64\x79\x3e\
\x0a\x0a\x3c\x70\x3e\x3c\x62\x3e\x50\x61\x67\x65\x20\x31\x20\x6f\
\x66\x20\x77\x65\x62\x20\x68\x65\x6c\x70\x3c\x2f\x62\x3e\x3c\x2f\
\x70\x3e\x0a\x3c\x70\x3e\x20\x20\x3c\x61\x20\x68\x72\x65\x66\x3d\
\x22\x70\x61\x67\x65\x32\x2e\x68\x74\x6d\x6c\x22\x3e\x20\x4e\x65\
\x78\x74\x3c\x2f\x61\x3e\x3c\x2f\x70\x3e\x0a\x3c\x70\x3e\x3c\x62\
\x3e\x65\x74\x63\x2e\x2e\x2e\x3c\x2f\x62\x3e\x20\x65\x74\x63\x2e\
\x2e\x2e\x3c\x2f\x70\x3e\x0a\x3c\x2f\x62\x6f\x64\x79\x3e\x3c\x2f\
\x68\x74\x6d\x6c\x3e\x0a\
\x00\x00\x0b\x58\
\x3c\
\x68\x74\x6d\x6c\x3e\x3c\x68\x65\x61\x64\x3e\x3c\x74\x69\x74\x6c\
\x65\x3e\x48\x61\x6e\x64\x73\x6f\x6d\x65\x20\x50\x6f\x77\x65\x72\
\x20\x55\x73\x61\x67\x65\x20\x61\x6e\x64\x20\x53\x61\x76\x69\x6e\
\x67\x20\x48\x69\x65\x72\x61\x72\x63\x68\x79\x20\x61\x74\x20\x50\
\x72\x6f\x73\x63\x61\x6e\x2c\x20\x48\x55\x53\x48\x21\x3c\x2f\x74\
\x69\x74\x6c\x65\x3e\x3c\x2f\x68\x65\x61\x64\x3e\x0a\x3c\x62\x6f\
\x64\x79\x3e\x0a\x0a\x3c\x68\x35\x20\x20\x73\x74\x79\x6c\x65\x3d\
\x22\x63\x6f\x6c\x6f\x72\x3a\x67\x72\x61\x79\x3b\x22\x3e\x46\x65\
\x62\x72\x75\x61\x72\x79\x20\x32\x30\x32\x34\x2c\x20\x4a\x61\x6e\
\x20\x43\x68\x72\x69\x6e\x3c\x2f\x68\x35\x3e\x0a\x3c\x68\x34\x3e\
\x20\x3c\x73\x70\x61\x6e\x20\x73\x74\x79\x6c\x65\x3d\x22\x63\x6f\
\x6c\x6f\x72\x3a\x20\x72\x65\x64\x3b\x22\x3e\x48\x3c\x2f\x73\x70\
\x61\x6e\x3e\x61\x6e\x64\x73\x6f\x6d\x65\x20\x3c\x73\x70\x61\x6e\
\x20\x73\x74\x79\x6c\x65\x3d\x22\x63\x6f\x6c\x6f\x72\x3a\x20\x67\
\x72\x61\x79\x3b\x22\x3e\x50\x6f\x77\x65\x72\x3c\x2f\x73\x70\x61\
\x6e\x3e\x20\x3c\x73\x70\x61\x6e\x20\x73\x74\x79\x6c\x65\x3d\x22\
\x63\x6f\x6c\x6f\x72\x3a\x20\x72\x65\x64\x3b\x22\x3e\x55\x3c\x2f\
\x73\x70\x61\x6e\x3e\x73\x61\x67\x65\x20\x3c\x73\x70\x61\x6e\x20\
\x73\x74\x79\x6c\x65\x3d\x22\x63\x6f\x6c\x6f\x72\x3a\x20\x67\x72\
\x61\x79\x3b\x22\x3e\x61\x6e\x64\x3c\x2f\x73\x70\x61\x6e\x3e\x20\
\x3c\x73\x70\x61\x6e\x20\x73\x74\x79\x6c\x65\x3d\x22\x63\x6f\x6c\
\x6f\x72\x3a\x20\x72\x65\x64\x3b\x22\x3e\x53\x3c\x2f\x73\x70\x61\
\x6e\x3e\x61\x76\x69\x6e\x67\x20\x3c\x73\x70\x61\x6e\x20\x73\x74\
\x79\x6c\x65\x3d\x22\x63\x6f\x6c\x6f\x72\x3a\x20\x72\x65\x64\x3b\
\x22\x3e\x48\x3c\x2f\x73\x70\x61\x6e\x3e\x69\x65\x72\x61\x72\x63\
\x68\x79\x3c\x2f\x73\x70\x61\x6e\x3e\x20\x3c\x73\x70\x61\x6e\x20\
\x73\x74\x79\x6c\x65\x3d\x22\x63\x6f\x6c\x6f\x72\x3a\x20\x67\x72\
\x61\x79\x3b\x22\x3e\x61\x74\x20\x50\x72\x6f\x73\x63\x61\x6e\x2c\
\x3c\x2f\x73\x70\x61\x6e\x3e\x20\x3c\x73\x70\x61\x6e\x20\x73\x74\
\x79\x6c\x65\x3d\x22\x63\x6f\x6c\x6f\x72\x3a\x20\x72\x65\x64\x3b\
\x22\x3e\x48\x55\x53\x48\x21\x3c\x2f\x73\x70\x61\x6e\x3e\x3c\x2f\
\x68\x34\x3e\x0a\x3c\x68\x32\x20\x73\x74\x79\x6c\x65\x3d\x22\x63\
\x6f\x6c\x6f\x72\x3a\x62\x6c\x75\x65\x3b\x22\x3e\x41\x62\x6f\x75\
\x74\x3c\x2f\x68\x32\x3e\x0a\x0a\x3c\x70\x3e\x54\x68\x65\x20\x48\
\x55\x53\x48\x21\x20\x61\x70\x70\x6c\x69\x63\x61\x74\x69\x6f\x6e\
\x20\x69\x6e\x69\x74\x69\x61\x74\x65\x73\x20\x65\x6e\x65\x72\x67\
\x79\x20\x73\x61\x76\x69\x6e\x67\x20\x70\x72\x6f\x63\x65\x64\x75\
\x72\x65\x73\x20\x61\x6e\x64\x20\x72\x65\x63\x6f\x72\x64\x73\x20\
\x74\x68\x65\x20\x70\x6f\x77\x65\x72\x20\x73\x61\x76\x65\x64\x2e\
\x3c\x62\x72\x3e\x0a\x20\x20\x3c\x73\x70\x61\x6e\x20\x73\x74\x79\
\x6c\x65\x3d\x22\x63\x6f\x6c\x6f\x72\x3a\x62\x6c\x61\x63\x6b\x3b\
\x20\x66\x6f\x6e\x74\x2d\x73\x74\x79\x6c\x65\x3a\x69\x74\x61\x6c\
\x69\x63\x3b\x22\x3e\x50\x6f\x77\x65\x72\x20\x53\x61\x76\x69\x6e\
\x67\x20\x41\x63\x63\x6f\x75\x6e\x74\x69\x6e\x67\x20\x69\x73\x20\
\x6f\x6e\x6c\x79\x20\x61\x63\x74\x69\x76\x61\x74\x65\x64\x20\x77\
\x68\x65\x6e\x20\x50\x52\x4f\x53\x43\x41\x4e\x20\x69\x73\x20\x69\
\x6e\x20\x22\x50\x72\x6f\x64\x75\x6b\x74\x69\x6f\x6e\x22\x20\x6d\
\x6f\x64\x65\x2e\x3c\x2f\x73\x70\x61\x6e\x3e\x0a\x20\x20\x3c\x2f\
\x70\x3e\x0a\x3c\x21\x2d\x2d\x61\x20\x68\x72\x65\x66\x3d\x22\x70\
\x61\x67\x65\x31\x2e\x68\x74\x6d\x6c\x22\x3e\x68\x65\x72\x65\x3c\
\x2f\x61\x3e\x3c\x2f\x70\x2d\x2d\x3e\x0a\x0a\x3c\x68\x32\x20\x73\
\x74\x79\x6c\x65\x3d\x22\x63\x6f\x6c\x6f\x72\x3a\x62\x6c\x75\x65\
\x3b\x22\x3e\x54\x68\x65\x20\x52\x65\x70\x6f\x73\x69\x74\x6f\x72\
\x79\x3c\x2f\x68\x32\x3e\x0a\x0a\x3c\x70\x3e\x54\x68\x65\x20\x61\
\x70\x70\x6c\x69\x63\x61\x74\x69\x6f\x6e\x20\x63\x6f\x6d\x70\x72\
\x69\x73\x65\x73\x20\x74\x77\x6f\x20\x63\x6f\x6d\x70\x6f\x6e\x65\
\x6e\x74\x73\x3a\x0a\x20\x20\x3c\x75\x6c\x3e\x0a\x3c\x6c\x69\x3e\
\x0a\x20\x20\x41\x20\x53\x74\x61\x74\x65\x20\x4d\x61\x63\x68\x69\
\x6e\x65\x20\x28\x53\x4d\x29\x20\x6f\x70\x65\x72\x61\x74\x69\x6e\
\x67\x20\x61\x74\x20\x74\x68\x65\x20\x49\x4f\x43\x20\x6c\x65\x76\
\x65\x6c\x20\x74\x68\x61\x74\x20\x69\x73\x20\x72\x65\x73\x70\x6f\
\x6e\x73\x69\x62\x6c\x65\x20\x66\x6f\x72\x20\x74\x68\x65\x20\x70\
\x6f\x77\x65\x72\x20\x73\x61\x76\x69\x6e\x67\x20\x61\x63\x63\x6f\
\x75\x6e\x74\x69\x6e\x67\x2e\x3c\x62\x72\x3e\x0a\x20\x20\x3c\x73\
\x70\x61\x6e\x20\x73\x74\x79\x6c\x65\x3d\x22\x63\x6f\x6c\x6f\x72\
\x3a\x20\x67\x72\x61\x79\x3b\x22\x3e\x20\x68\x74\x74\x70\x73\x3a\
\x2f\x2f\x67\x69\x74\x6c\x61\x62\x2e\x70\x73\x69\x2e\x63\x68\x2f\
\x70\x72\x6f\x73\x63\x61\x6e\x5f\x61\x70\x70\x73\x34\x6f\x70\x73\
\x2f\x48\x55\x53\x48\x3c\x2f\x73\x70\x61\x6e\x3e\x3c\x62\x72\x3e\
\x0a\x20\x3c\x73\x70\x61\x6e\x20\x73\x74\x79\x6c\x65\x3d\x22\x63\
\x6f\x6c\x6f\x72\x3a\x20\x67\x72\x61\x79\x3b\x22\x3e\x20\x2f\x70\
\x72\x6f\x73\x63\x61\x6e\x2f\x62\x64\x2f\x61\x70\x70\x6c\x69\x63\
\x61\x74\x69\x6f\x6e\x73\x2f\x68\x75\x73\x68\x2f\x68\x6c\x61\x2f\
\x3c\x2f\x73\x70\x61\x6e\x3e\x3c\x62\x72\x3e\x0a\x3c\x2f\x6c\x69\
\x3e\x0a\x20\x20\x3c\x6c\x69\x3e\x0a\x20\x20\x20\x20\x41\x20\x48\
\x69\x67\x68\x20\x4c\x65\x76\x65\x6c\x20\x41\x70\x70\x6c\x69\x63\
\x61\x74\x69\x6f\x6e\x20\x28\x48\x4c\x41\x29\x20\x74\x68\x61\x74\
\x20\x69\x73\x20\x61\x62\x6c\x65\x20\x74\x6f\x20\x69\x6e\x74\x65\
\x72\x61\x63\x74\x20\x77\x69\x74\x68\x20\x74\x68\x65\x20\x49\x4f\
\x43\x20\x28\x66\x6f\x72\x20\x65\x78\x70\x65\x72\x74\x20\x75\x73\
\x65\x29\x2c\x20\x64\x69\x73\x70\x6c\x61\x79\x73\x20\x61\x63\x63\
\x6f\x75\x6e\x74\x69\x6e\x67\x0a\x20\x20\x20\x20\x66\x69\x67\x75\
\x72\x65\x73\x2c\x20\x61\x6e\x64\x20\x70\x72\x6f\x76\x69\x64\x65\
\x73\x20\x61\x20\x70\x61\x6e\x65\x6c\x20\x74\x6f\x20\x65\x6e\x61\
\x62\x6c\x65\x20\x71\x75\x61\x64\x72\x75\x70\x6c\x65\x73\x20\x74\
\x6f\x20\x62\x65\x20\x73\x65\x74\x20\x74\x6f\x20\x74\x68\x65\x69\
\x72\x20\x73\x74\x61\x6e\x64\x62\x79\x2f\x72\x65\x73\x74\x6f\x72\
\x65\x20\x76\x61\x6c\x75\x65\x73\x2e\x3c\x62\x72\x3e\x0a\x20\x20\
\x20\x20\x3c\x73\x70\x61\x6e\x20\x73\x74\x79\x6c\x65\x3d\x22\x63\
\x6f\x6c\x6f\x72\x3a\x20\x67\x72\x61\x79\x3b\x22\x3e\x68\x74\x74\
\x70\x73\x3a\x2f\x2f\x67\x69\x74\x2e\x70\x73\x69\x2e\x63\x68\x2f\
\x65\x70\x69\x63\x73\x5f\x69\x6f\x63\x62\x6f\x6f\x74\x5f\x70\x72\
\x6f\x73\x63\x61\x6e\x2f\x50\x52\x4f\x5f\x68\x75\x73\x68\x3c\x2f\
\x73\x70\x61\x6e\x3e\x3c\x62\x72\x3e\x0a\x20\x20\x20\x20\x20\x3c\
\x73\x70\x61\x6e\x20\x73\x74\x79\x6c\x65\x3d\x22\x63\x6f\x6c\x6f\
\x72\x3a\x20\x67\x72\x61\x79\x3b\x22\x3e\x2f\x70\x72\x6f\x73\x63\
\x61\x6e\x2f\x62\x64\x2f\x61\x70\x70\x6c\x69\x63\x61\x74\x69\x6f\
\x6e\x73\x2f\x68\x75\x73\x68\x2f\x69\x6f\x63\x2f\x6c\x61\x74\x65\
\x73\x74\x2f\x50\x52\x4f\x5f\x68\x75\x73\x68\x2f\x3c\x2f\x73\x70\
\x61\x6e\x3e\x3c\x62\x72\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x6c\x69\
\x3e\x0a\x3c\x2f\x75\x6c\x3e\x0a\x20\x20\x3c\x68\x32\x20\x73\x74\
\x79\x6c\x65\x3d\x22\x63\x6f\x6c\x6f\x72\x3a\x62\x6c\x75\x65\x3b\
\x22\x3e\x54\x68\x65\x20\x47\x72\x61\x70\x68\x69\x63\x61\x6c\x20\
\x55\x73\x65\x72\x20\x49\x6e\x74\x65\x72\x66\x61\x63\x65\x3c\x2f\
\x68\x32\x3e\x0a\x20\x20\x3c\x68\x33\x20\x73\x74\x79\x6c\x65\x3d\
\x22\x63\x6f\x6c\x6f\x72\x3a\x6c\x69\x67\x68\x74\x62\x6c\x75\x65\
\x3b\x22\x3e\x4f\x70\x65\x72\x61\x74\x6f\x72\x20\x50\x61\x6e\x65\
\x6c\x3c\x2f\x68\x33\x3e\x0a\x20\x20\x52\x61\x6d\x70\x20\x44\x65\
\x6c\x61\x79\x3a\x20\x43\x61\x6e\x20\x74\x61\x6b\x65\x20\x6f\x6e\
\x20\x76\x61\x6c\x75\x65\x73\x20\x66\x72\x6f\x6d\x20\x30\x2e\x30\
\x73\x20\x74\x6f\x20\x30\x2e\x32\x73\x2e\x20\x3c\x62\x72\x3e\x0a\
\x20\x20\x44\x65\x66\x69\x6e\x65\x73\x20\x74\x68\x65\x20\x64\x65\
\x6c\x61\x79\x20\x62\x65\x74\x77\x65\x65\x6e\x20\x73\x65\x74\x74\
\x69\x6e\x67\x20\x69\x6e\x64\x69\x76\x69\x64\x75\x61\x6c\x20\x71\
\x75\x61\x64\x72\x75\x70\x6c\x65\x73\x20\x77\x68\x65\x6e\x20\x69\
\x6e\x69\x74\x69\x61\x74\x69\x6e\x67\x20\x73\x74\x61\x6e\x64\x62\
\x79\x2f\x72\x65\x73\x74\x6f\x72\x65\x2e\x0a\x20\x20\x41\x20\x76\
\x61\x6c\x75\x65\x20\x6f\x66\x20\x30\x2e\x30\x73\x20\x6d\x65\x61\
\x6e\x73\x20\x74\x68\x61\x74\x20\x74\x68\x65\x20\x71\x75\x61\x64\
\x72\x75\x70\x6c\x65\x20\x63\x75\x72\x72\x65\x6e\x74\x73\x20\x61\
\x72\x65\x20\x73\x65\x74\x20\x73\x69\x6d\x75\x6c\x74\x61\x6e\x65\
\x6f\x75\x73\x6c\x79\x2e\x0a\x20\x20\x3c\x68\x33\x20\x73\x74\x79\
\x6c\x65\x3d\x22\x63\x6f\x6c\x6f\x72\x3a\x6c\x69\x67\x68\x74\x62\
\x6c\x75\x65\x3b\x22\x3e\x45\x78\x70\x65\x72\x74\x20\x50\x61\x6e\
\x65\x6c\x3c\x2f\x68\x33\x3e\x0a\x20\x20\x53\x65\x6c\x65\x63\x74\
\x69\x6e\x67\x20\x74\x68\x65\x20\x44\x72\x79\x20\x52\x75\x6e\x20\
\x6f\x70\x74\x69\x6f\x6e\x20\x64\x69\x73\x61\x62\x6c\x65\x73\x20\
\x73\x65\x74\x74\x69\x6e\x67\x20\x76\x61\x6c\x75\x65\x73\x20\x74\
\x6f\x20\x65\x70\x69\x63\x73\x20\x70\x72\x6f\x63\x65\x73\x73\x20\
\x76\x61\x72\x69\x61\x62\x6c\x65\x73\x2e\x20\x55\x73\x65\x64\x20\
\x66\x6f\x72\x20\x74\x65\x73\x74\x69\x6e\x67\x2e\x20\x3c\x62\x72\
\x3e\x0a\x20\x20\x3c\x68\x33\x20\x73\x74\x79\x6c\x65\x3d\x22\x63\
\x6f\x6c\x6f\x72\x3a\x6c\x69\x67\x68\x74\x62\x6c\x75\x65\x3b\x22\
\x3e\x53\x61\x76\x69\x6e\x67\x20\x4f\x76\x65\x72\x76\x69\x65\x77\
\x3c\x2f\x68\x33\x3e\x0a\x20\x20\x44\x69\x73\x70\x6c\x61\x79\x73\
\x20\x61\x20\x6e\x75\x6d\x62\x65\x72\x20\x6f\x66\x20\x70\x72\x6f\
\x63\x65\x73\x73\x20\x76\x61\x72\x61\x69\x62\x6c\x65\x73\x20\x72\
\x65\x6c\x61\x74\x65\x64\x20\x74\x6f\x20\x74\x68\x65\x20\x70\x6f\
\x77\x65\x72\x20\x73\x61\x76\x69\x6e\x67\x20\x61\x63\x63\x6f\x75\
\x6e\x74\x69\x6e\x67\x20\x3c\x62\x72\x3e\x0a\x20\x20\x3c\x73\x70\
\x61\x6e\x20\x73\x74\x79\x6c\x65\x3d\x22\x63\x6f\x6c\x6f\x72\x3a\
\x62\x6c\x61\x63\x6b\x3b\x20\x66\x6f\x6e\x74\x2d\x73\x74\x79\x6c\
\x65\x3a\x69\x74\x61\x6c\x69\x63\x3b\x22\x3e\x50\x6f\x77\x65\x72\
\x20\x53\x61\x76\x69\x6e\x67\x20\x41\x63\x63\x6f\x75\x6e\x74\x69\
\x6e\x67\x20\x69\x73\x20\x6f\x6e\x6c\x79\x20\x61\x63\x74\x69\x76\
\x61\x74\x65\x64\x20\x77\x68\x65\x6e\x20\x50\x52\x4f\x53\x43\x41\
\x4e\x20\x69\x73\x20\x69\x6e\x20\x22\x50\x72\x6f\x64\x75\x6b\x74\
\x69\x6f\x6e\x22\x20\x6d\x6f\x64\x65\x2e\x3c\x2f\x73\x70\x61\x6e\
\x3e\x0a\x20\x20\x3c\x74\x61\x62\x6c\x65\x3e\x0a\x20\x20\x20\x20\
\x3c\x74\x72\x3e\x3c\x74\x64\x3e\x49\x6e\x69\x74\x69\x61\x6c\x20\
\x50\x6f\x77\x65\x72\x20\x28\x6b\x77\x29\x3a\x3c\x2f\x74\x64\x3e\
\x20\x3c\x74\x64\x3e\x54\x68\x65\x20\x6e\x6f\x6d\x69\x6e\x61\x6c\
\x20\x70\x6f\x77\x65\x72\x20\x76\x61\x6c\x75\x65\x20\x77\x68\x65\
\x6e\x20\x71\x75\x61\x64\x72\x75\x70\x6c\x65\x73\x20\x61\x72\x65\
\x20\x69\x6e\x20\x74\x68\x65\x20\x75\x73\x75\x61\x6c\x20\x70\x6f\
\x77\x65\x72\x65\x64\x2d\x6f\x6e\x20\x73\x74\x61\x74\x65\x2e\x3c\
\x2f\x74\x64\x3e\x3c\x2f\x74\x72\x3e\x0a\x20\x20\x20\x20\x3c\x74\
\x72\x3e\x3c\x74\x64\x3e\x50\x6f\x77\x65\x72\x20\x28\x6b\x77\x29\
\x3a\x3c\x2f\x74\x64\x3e\x20\x3c\x74\x64\x3e\x54\x68\x65\x20\x63\
\x75\x72\x72\x65\x6e\x74\x20\x70\x6f\x77\x65\x72\x20\x76\x61\x6c\
\x75\x65\x2e\x3c\x2f\x74\x64\x3e\x3c\x2f\x74\x72\x3e\x0a\x20\x20\
\x20\x20\x3c\x74\x72\x3e\x3c\x74\x64\x3e\x53\x61\x76\x69\x6e\x67\
\x20\x28\x4d\x57\x68\x29\x3a\x3c\x2f\x74\x64\x3e\x20\x3c\x74\x64\
\x3e\x54\x68\x65\x20\x63\x75\x72\x72\x65\x6e\x74\x20\x70\x6f\x77\
\x65\x72\x20\x76\x61\x6c\x75\x65\x2e\x3c\x2f\x74\x64\x3e\x3c\x2f\
\x74\x72\x3e\x0a\x20\x20\x20\x20\x3c\x74\x72\x3e\x3c\x74\x64\x3e\
\x54\x69\x6d\x65\x20\x69\x6e\x20\x53\x61\x76\x69\x6e\x67\x20\x4d\
\x6f\x64\x65\x3a\x3c\x2f\x74\x64\x3e\x20\x3c\x74\x64\x3e\x54\x69\
\x6d\x65\x20\x65\x6c\x61\x70\x73\x65\x64\x20\x69\x6e\x20\x63\x75\
\x72\x72\x65\x6e\x74\x20\x73\x61\x76\x69\x6e\x67\x20\x70\x65\x72\
\x69\x6f\x64\x20\x28\x64\x61\x79\x73\x20\x68\x6f\x75\x72\x73\x3a\
\x6d\x69\x6e\x75\x74\x65\x73\x3a\x73\x65\x63\x6f\x6e\x64\x73\x29\
\x2e\x3c\x2f\x74\x64\x3e\x3c\x2f\x74\x72\x3e\x0a\x20\x20\x20\x20\
\x3c\x74\x72\x3e\x3c\x74\x64\x3e\x54\x6f\x74\x20\x53\x61\x76\x65\
\x64\x20\x28\x4d\x57\x68\x29\x3a\x3c\x2f\x74\x64\x3e\x20\x3c\x74\
\x64\x3e\x54\x68\x65\x20\x61\x63\x63\x75\x6d\x75\x6c\x61\x74\x65\
\x64\x20\x70\x6f\x77\x65\x72\x20\x73\x61\x76\x65\x64\x20\x69\x6e\
\x20\x74\x68\x65\x20\x63\x61\x6c\x65\x6e\x64\x61\x72\x20\x79\x65\
\x61\x72\x2e\x3c\x2f\x74\x64\x3e\x3c\x2f\x74\x72\x3e\x0a\x20\x20\
\x3c\x2f\x74\x61\x62\x6c\x65\x3e\x20\x0a\x20\x20\x0a\x20\x20\x0a\
\x20\x20\x0a\x0a\x0a\x0a\x0a\x0a\x3c\x2f\x62\x6f\x64\x79\x3e\x3c\
\x2f\x68\x74\x6d\x6c\x3e\x0a\
\x00\x00\x00\xa7\
\x3c\
\x68\x74\x6d\x6c\x3e\x3c\x68\x65\x61\x64\x3e\x3c\x74\x69\x74\x6c\
\x65\x3e\x57\x65\x62\x20\x48\x65\x6c\x70\x3c\x2f\x74\x69\x74\x6c\
\x65\x3e\x3c\x2f\x68\x65\x61\x64\x3e\x0a\x3c\x62\x6f\x64\x79\x3e\
\x0a\x0a\x3c\x70\x3e\x3c\x62\x3e\x50\x61\x67\x65\x20\x33\x20\x6f\
\x66\x20\x77\x65\x62\x20\x68\x65\x6c\x70\x3c\x2f\x62\x3e\x3c\x2f\
\x70\x3e\x0a\x3c\x70\x3e\x20\x20\x3c\x61\x20\x68\x72\x65\x66\x3d\
\x22\x70\x61\x67\x65\x34\x2e\x68\x74\x6d\x6c\x22\x3e\x20\x4e\x65\
\x78\x74\x3c\x2f\x61\x3e\x3c\x2f\x70\x3e\x0a\x3c\x70\x3e\x3c\x62\
\x3e\x65\x74\x63\x2e\x2e\x2e\x3c\x2f\x62\x3e\x20\x65\x74\x63\x2e\
\x2e\x2e\x3c\x2f\x70\x3e\x0a\x3c\x2f\x62\x6f\x64\x79\x3e\x3c\x2f\
\x68\x74\x6d\x6c\x3e\x0a\
\x00\x00\x00\xa7\
\x3c\
\x68\x74\x6d\x6c\x3e\x3c\x68\x65\x61\x64\x3e\x3c\x74\x69\x74\x6c\
\x65\x3e\x57\x65\x62\x20\x48\x65\x6c\x70\x3c\x2f\x74\x69\x74\x6c\
\x65\x3e\x3c\x2f\x68\x65\x61\x64\x3e\x0a\x3c\x62\x6f\x64\x79\x3e\
\x0a\x0a\x3c\x70\x3e\x3c\x62\x3e\x50\x61\x67\x65\x20\x32\x20\x6f\
\x66\x20\x77\x65\x62\x20\x68\x65\x6c\x70\x3c\x2f\x62\x3e\x3c\x2f\
\x70\x3e\x0a\x3c\x70\x3e\x20\x20\x3c\x61\x20\x68\x72\x65\x66\x3d\
\x22\x70\x61\x67\x65\x33\x2e\x68\x74\x6d\x6c\x22\x3e\x20\x4e\x65\
\x78\x74\x3c\x2f\x61\x3e\x3c\x2f\x70\x3e\x0a\x3c\x70\x3e\x3c\x62\
\x3e\x65\x74\x63\x2e\x2e\x2e\x3c\x2f\x62\x3e\x20\x65\x74\x63\x2e\
\x2e\x2e\x3c\x2f\x70\x3e\x0a\x3c\x2f\x62\x6f\x64\x79\x3e\x3c\x2f\
\x68\x74\x6d\x6c\x3e\x0a\
\x00\x00\x00\x80\
\x3c\
\x68\x74\x6d\x6c\x3e\x3c\x68\x65\x61\x64\x3e\x3c\x74\x69\x74\x6c\
@@ -32,118 +255,10 @@ qt_resource_data = b"\
\x3e\x65\x74\x63\x2e\x2e\x2e\x3c\x2f\x62\x3e\x20\x65\x74\x63\x2e\
\x2e\x2e\x3c\x2f\x70\x3e\x0a\x3c\x2f\x62\x6f\x64\x79\x3e\x3c\x2f\
\x68\x74\x6d\x6c\x3e\x0a\
\x00\x00\x00\xa7\
\x3c\
\x68\x74\x6d\x6c\x3e\x3c\x68\x65\x61\x64\x3e\x3c\x74\x69\x74\x6c\
\x65\x3e\x57\x65\x62\x20\x48\x65\x6c\x70\x3c\x2f\x74\x69\x74\x6c\
\x65\x3e\x3c\x2f\x68\x65\x61\x64\x3e\x0a\x3c\x62\x6f\x64\x79\x3e\
\x0a\x0a\x3c\x70\x3e\x3c\x62\x3e\x50\x61\x67\x65\x20\x32\x20\x6f\
\x66\x20\x77\x65\x62\x20\x68\x65\x6c\x70\x3c\x2f\x62\x3e\x3c\x2f\
\x70\x3e\x0a\x3c\x70\x3e\x20\x20\x3c\x61\x20\x68\x72\x65\x66\x3d\
\x22\x70\x61\x67\x65\x33\x2e\x68\x74\x6d\x6c\x22\x3e\x20\x4e\x65\
\x78\x74\x3c\x2f\x61\x3e\x3c\x2f\x70\x3e\x0a\x3c\x70\x3e\x3c\x62\
\x3e\x65\x74\x63\x2e\x2e\x2e\x3c\x2f\x62\x3e\x20\x65\x74\x63\x2e\
\x2e\x2e\x3c\x2f\x70\x3e\x0a\x3c\x2f\x62\x6f\x64\x79\x3e\x3c\x2f\
\x68\x74\x6d\x6c\x3e\x0a\
\x00\x00\x00\xa7\
\x3c\
\x68\x74\x6d\x6c\x3e\x3c\x68\x65\x61\x64\x3e\x3c\x74\x69\x74\x6c\
\x65\x3e\x57\x65\x62\x20\x48\x65\x6c\x70\x3c\x2f\x74\x69\x74\x6c\
\x65\x3e\x3c\x2f\x68\x65\x61\x64\x3e\x0a\x3c\x62\x6f\x64\x79\x3e\
\x0a\x0a\x3c\x70\x3e\x3c\x62\x3e\x50\x61\x67\x65\x20\x33\x20\x6f\
\x66\x20\x77\x65\x62\x20\x68\x65\x6c\x70\x3c\x2f\x62\x3e\x3c\x2f\
\x70\x3e\x0a\x3c\x70\x3e\x20\x20\x3c\x61\x20\x68\x72\x65\x66\x3d\
\x22\x70\x61\x67\x65\x34\x2e\x68\x74\x6d\x6c\x22\x3e\x20\x4e\x65\
\x78\x74\x3c\x2f\x61\x3e\x3c\x2f\x70\x3e\x0a\x3c\x70\x3e\x3c\x62\
\x3e\x65\x74\x63\x2e\x2e\x2e\x3c\x2f\x62\x3e\x20\x65\x74\x63\x2e\
\x2e\x2e\x3c\x2f\x70\x3e\x0a\x3c\x2f\x62\x6f\x64\x79\x3e\x3c\x2f\
\x68\x74\x6d\x6c\x3e\x0a\
\x00\x00\x00\xa7\
\x3c\
\x68\x74\x6d\x6c\x3e\x3c\x68\x65\x61\x64\x3e\x3c\x74\x69\x74\x6c\
\x65\x3e\x57\x65\x62\x20\x48\x65\x6c\x70\x3c\x2f\x74\x69\x74\x6c\
\x65\x3e\x3c\x2f\x68\x65\x61\x64\x3e\x0a\x3c\x62\x6f\x64\x79\x3e\
\x0a\x0a\x3c\x70\x3e\x3c\x62\x3e\x50\x61\x67\x65\x20\x31\x20\x6f\
\x66\x20\x77\x65\x62\x20\x68\x65\x6c\x70\x3c\x2f\x62\x3e\x3c\x2f\
\x70\x3e\x0a\x3c\x70\x3e\x20\x20\x3c\x61\x20\x68\x72\x65\x66\x3d\
\x22\x70\x61\x67\x65\x32\x2e\x68\x74\x6d\x6c\x22\x3e\x20\x4e\x65\
\x78\x74\x3c\x2f\x61\x3e\x3c\x2f\x70\x3e\x0a\x3c\x70\x3e\x3c\x62\
\x3e\x65\x74\x63\x2e\x2e\x2e\x3c\x2f\x62\x3e\x20\x65\x74\x63\x2e\
\x2e\x2e\x3c\x2f\x70\x3e\x0a\x3c\x2f\x62\x6f\x64\x79\x3e\x3c\x2f\
\x68\x74\x6d\x6c\x3e\x0a\
\x00\x00\x03\x29\
\x3c\
\x68\x74\x6d\x6c\x3e\x3c\x68\x65\x61\x64\x3e\x3c\x74\x69\x74\x6c\
\x65\x3e\x48\x61\x6e\x64\x73\x6f\x6d\x65\x20\x50\x6f\x77\x65\x72\
\x20\x55\x73\x61\x67\x65\x20\x61\x6e\x64\x20\x53\x61\x76\x69\x6e\
\x67\x20\x48\x69\x65\x72\x61\x72\x63\x68\x79\x20\x61\x74\x20\x50\
\x72\x6f\x73\x63\x61\x6e\x2c\x20\x48\x55\x53\x48\x21\x3c\x2f\x74\
\x69\x74\x6c\x65\x3e\x3c\x2f\x68\x65\x61\x64\x3e\x0a\x3c\x62\x6f\
\x64\x79\x3e\x0a\x0a\x3c\x68\x35\x20\x20\x73\x74\x79\x6c\x65\x3d\
\x22\x63\x6f\x6c\x6f\x72\x3a\x67\x72\x61\x79\x3b\x22\x3e\x4a\x61\
\x6e\x75\x61\x72\x79\x20\x32\x30\x32\x34\x2c\x20\x4a\x61\x6e\x20\
\x43\x68\x72\x69\x6e\x3c\x2f\x68\x35\x3e\x0a\x3c\x68\x34\x3e\x20\
\x3c\x73\x70\x61\x6e\x20\x73\x74\x79\x6c\x65\x3d\x22\x63\x6f\x6c\
\x6f\x72\x3a\x20\x72\x65\x64\x3b\x22\x3e\x48\x3c\x2f\x73\x70\x61\
\x6e\x3e\x61\x6e\x64\x73\x6f\x6d\x65\x20\x3c\x73\x70\x61\x6e\x20\
\x73\x74\x79\x6c\x65\x3d\x22\x63\x6f\x6c\x6f\x72\x3a\x20\x67\x72\
\x61\x79\x3b\x22\x3e\x50\x6f\x77\x65\x72\x3c\x2f\x73\x70\x61\x6e\
\x3e\x20\x3c\x73\x70\x61\x6e\x20\x73\x74\x79\x6c\x65\x3d\x22\x63\
\x6f\x6c\x6f\x72\x3a\x20\x72\x65\x64\x3b\x22\x3e\x55\x3c\x2f\x73\
\x70\x61\x6e\x3e\x73\x61\x67\x65\x20\x61\x6e\x64\x20\x3c\x73\x70\
\x61\x6e\x20\x73\x74\x79\x6c\x65\x3d\x22\x63\x6f\x6c\x6f\x72\x3a\
\x20\x72\x65\x64\x3b\x22\x3e\x53\x3c\x2f\x73\x70\x61\x6e\x3e\x61\
\x76\x69\x6e\x67\x20\x3c\x73\x70\x61\x6e\x20\x73\x74\x79\x6c\x65\
\x3d\x22\x63\x6f\x6c\x6f\x72\x3a\x20\x72\x65\x64\x3b\x22\x3e\x48\
\x3c\x2f\x73\x70\x61\x6e\x3e\x69\x65\x72\x61\x72\x63\x68\x79\x20\
\x61\x74\x20\x50\x72\x6f\x73\x63\x61\x6e\x2c\x20\x3c\x73\x70\x61\
\x6e\x20\x73\x74\x79\x6c\x65\x3d\x22\x63\x6f\x6c\x6f\x72\x3a\x20\
\x72\x65\x64\x3b\x22\x3e\x48\x55\x53\x48\x21\x3c\x2f\x73\x70\x61\
\x6e\x3e\x3c\x2f\x68\x34\x3e\x0a\x3c\x68\x32\x20\x73\x74\x79\x6c\
\x65\x3d\x22\x63\x6f\x6c\x6f\x72\x3a\x62\x6c\x75\x65\x3b\x22\x3e\
\x41\x62\x6f\x75\x74\x3c\x2f\x68\x32\x3e\x0a\x0a\x3c\x70\x3e\x54\
\x68\x69\x73\x20\x3c\x62\x3e\x48\x55\x53\x48\x21\x3c\x2f\x62\x3e\
\x20\x61\x70\x70\x6c\x69\x63\x61\x74\x69\x6f\x6e\x20\x69\x6e\x68\
\x65\x72\x69\x74\x73\x20\x66\x72\x6f\x6d\x20\x74\x68\x65\x20\x57\
\x69\x6e\x64\x6f\x77\x20\x62\x61\x73\x65\x20\x63\x6c\x61\x73\x73\
\x2e\x3c\x62\x72\x3e\x20\x20\x0a\x3c\x70\x3e\x69\x6e\x66\x6f\x72\
\x6d\x61\x74\x69\x6f\x6e\x20\x63\x6f\x6e\x63\x65\x72\x6e\x69\x6e\
\x67\x20\x74\x68\x69\x73\x20\x61\x70\x70\x6c\x69\x63\x61\x74\x69\
\x6f\x6e\x2c\x20\x73\x75\x63\x68\x20\x61\x73\x20\x63\x6f\x6e\x66\
\x69\x67\x75\x72\x61\x74\x69\x6f\x6e\x20\x70\x61\x72\x61\x6d\x65\
\x74\x65\x72\x73\x20\x6f\x72\x20\x6f\x74\x68\x65\x72\x2c\x20\x6d\
\x61\x79\x20\x62\x65\x20\x65\x6e\x74\x65\x72\x65\x64\x2c\x20\x65\
\x2e\x67\x2e\x2c\x20\x3c\x61\x20\x68\x72\x65\x66\x3d\x22\x70\x61\
\x67\x65\x31\x2e\x68\x74\x6d\x6c\x22\x3e\x68\x65\x72\x65\x3c\x2f\
\x61\x3e\x3c\x2f\x70\x3e\x0a\x0a\x3c\x68\x32\x20\x73\x74\x79\x6c\
\x65\x3d\x22\x63\x6f\x6c\x6f\x72\x3a\x62\x6c\x75\x65\x3b\x22\x3e\
\x54\x68\x65\x20\x50\x61\x6e\x65\x6c\x3c\x2f\x68\x32\x3e\x0a\x0a\
\x3c\x70\x3e\x54\x68\x65\x73\x65\x20\x77\x65\x62\x20\x70\x61\x67\
\x65\x73\x20\x61\x72\x65\x20\x74\x6f\x20\x62\x65\x20\x63\x6f\x6d\
\x70\x6c\x65\x74\x65\x64\x20\x62\x79\x20\x74\x68\x65\x20\x61\x70\
\x70\x6c\x69\x63\x61\x74\x69\x6f\x6e\x20\x6f\x77\x6e\x65\x72\x2e\
\x3c\x62\x72\x3e\x0a\x0a\x0a\x0a\x0a\x3c\x2f\x62\x6f\x64\x79\x3e\
\x3c\x2f\x68\x74\x6d\x6c\x3e\x0a\
"
qt_resource_name = b"\
\x00\x0a\
\x08\x8a\x34\x9c\
\x00\x70\
\x00\x61\x00\x67\x00\x65\x00\x35\x00\x2e\x00\x68\x00\x74\x00\x6d\x00\x6c\
\x00\x0a\
\x08\x7a\x34\x9c\
\x00\x70\
\x00\x61\x00\x67\x00\x65\x00\x34\x00\x2e\x00\x68\x00\x74\x00\x6d\x00\x6c\
\x00\x0a\
\x08\x5a\x34\x9c\
\x00\x70\
\x00\x61\x00\x67\x00\x65\x00\x32\x00\x2e\x00\x68\x00\x74\x00\x6d\x00\x6c\
\x00\x0a\
\x08\x6a\x34\x9c\
\x00\x70\
\x00\x61\x00\x67\x00\x65\x00\x33\x00\x2e\x00\x68\x00\x74\x00\x6d\x00\x6c\
\x00\x0a\
\x08\x4a\x34\x9c\
\x00\x70\
\x00\x61\x00\x67\x00\x65\x00\x31\x00\x2e\x00\x68\x00\x74\x00\x6d\x00\x6c\
@@ -151,33 +266,49 @@ qt_resource_name = b"\
\x0c\xba\xf2\x7c\
\x00\x69\
\x00\x6e\x00\x64\x00\x65\x00\x78\x00\x2e\x00\x68\x00\x74\x00\x6d\x00\x6c\
\x00\x0a\
\x08\x6a\x34\x9c\
\x00\x70\
\x00\x61\x00\x67\x00\x65\x00\x33\x00\x2e\x00\x68\x00\x74\x00\x6d\x00\x6c\
\x00\x0a\
\x08\x5a\x34\x9c\
\x00\x70\
\x00\x61\x00\x67\x00\x65\x00\x32\x00\x2e\x00\x68\x00\x74\x00\x6d\x00\x6c\
\x00\x0a\
\x08\x8a\x34\x9c\
\x00\x70\
\x00\x61\x00\x67\x00\x65\x00\x35\x00\x2e\x00\x68\x00\x74\x00\x6d\x00\x6c\
\x00\x0a\
\x08\x7a\x34\x9c\
\x00\x70\
\x00\x61\x00\x67\x00\x65\x00\x34\x00\x2e\x00\x68\x00\x74\x00\x6d\x00\x6c\
"
qt_resource_struct_v1 = b"\
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x06\x00\x00\x00\x01\
\x00\x00\x00\x68\x00\x00\x00\x00\x00\x01\x00\x00\x02\x85\
\x00\x00\x00\x34\x00\x00\x00\x00\x00\x01\x00\x00\x01\x2f\
\x00\x00\x00\x4e\x00\x00\x00\x00\x00\x01\x00\x00\x01\xda\
\x00\x00\x00\x1a\x00\x00\x00\x00\x00\x01\x00\x00\x00\x84\
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
\x00\x00\x00\x82\x00\x00\x00\x00\x00\x01\x00\x00\x03\x30\
\x00\x00\x00\x4e\x00\x00\x00\x00\x00\x01\x00\x00\x0c\xb2\
\x00\x00\x00\x34\x00\x00\x00\x00\x00\x01\x00\x00\x0c\x07\
\x00\x00\x00\x82\x00\x00\x00\x00\x00\x01\x00\x00\x0d\xe1\
\x00\x00\x00\x68\x00\x00\x00\x00\x00\x01\x00\x00\x0d\x5d\
\x00\x00\x00\x1a\x00\x00\x00\x00\x00\x01\x00\x00\x00\xab\
"
qt_resource_struct_v2 = b"\
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x06\x00\x00\x00\x01\
\x00\x00\x00\x00\x00\x00\x00\x00\
\x00\x00\x00\x68\x00\x00\x00\x00\x00\x01\x00\x00\x02\x85\
\x00\x00\x01\x8d\x9c\xeb\xd9\x5b\
\x00\x00\x00\x34\x00\x00\x00\x00\x00\x01\x00\x00\x01\x2f\
\x00\x00\x01\x8d\x9c\xeb\xd9\x5c\
\x00\x00\x00\x4e\x00\x00\x00\x00\x00\x01\x00\x00\x01\xda\
\x00\x00\x01\x8d\x9c\xeb\xd9\x5e\
\x00\x00\x00\x1a\x00\x00\x00\x00\x00\x01\x00\x00\x00\x84\
\x00\x00\x01\x8d\x9c\xeb\xd9\x5f\
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
\x00\x00\x01\x8d\x9c\xeb\xd9\x61\
\x00\x00\x00\x82\x00\x00\x00\x00\x00\x01\x00\x00\x03\x30\
\x00\x00\x01\x8d\xa7\xc7\x77\x2b\
\x00\x00\x01\x8d\xc6\x98\xaa\x4d\
\x00\x00\x00\x4e\x00\x00\x00\x00\x00\x01\x00\x00\x0c\xb2\
\x00\x00\x01\x8d\xc6\x98\xaa\x50\
\x00\x00\x00\x34\x00\x00\x00\x00\x00\x01\x00\x00\x0c\x07\
\x00\x00\x01\x8d\xc6\x98\xaa\x52\
\x00\x00\x00\x82\x00\x00\x00\x00\x00\x01\x00\x00\x0d\xe1\
\x00\x00\x01\x8d\xc6\x98\xaa\x54\
\x00\x00\x00\x68\x00\x00\x00\x00\x00\x01\x00\x00\x0d\x5d\
\x00\x00\x01\x8d\xc6\x98\xaa\x55\
\x00\x00\x00\x1a\x00\x00\x00\x00\x00\x01\x00\x00\x00\xab\
\x00\x00\x01\x8d\xd0\x41\x77\x24\
"
qt_version = QtCore.qVersion().split('.')
+51 -6
View File
@@ -1,16 +1,61 @@
<html><head><title>Handsome Power Usage and Saving Hierarchy at Proscan, HUSH!</title></head>
<body>
<h5 style="color:gray;">January 2024, Jan Chrin</h5>
<h4> <span style="color: red;">H</span>andsome <span style="color: gray;">Power</span> <span style="color: red;">U</span>sage and <span style="color: red;">S</span>aving <span style="color: red;">H</span>ierarchy at Proscan, <span style="color: red;">HUSH!</span></h4>
<h5 style="color:gray;">February 2024, Jan Chrin</h5>
<h4> <span style="color: red;">H</span>andsome <span style="color: gray;">Power</span> <span style="color: red;">U</span>sage <span style="color: gray;">and</span> <span style="color: red;">S</span>aving <span style="color: red;">H</span>ierarchy</span> <span style="color: gray;">at Proscan,</span> <span style="color: red;">HUSH!</span></h4>
<h2 style="color:blue;">About</h2>
<p>This <b>HUSH!</b> application inherits from the Window base class.<br>
<p>information concerning this application, such as configuration parameters or other, may be entered, e.g., <a href="page1.html">here</a></p>
<p>The HUSH! application initiates energy saving procedures and records the power saved.<br>
<span style="color:black; font-style:italic;">Power Saving Accounting is only activated when PROSCAN is in "Produktion" mode.</span>
</p>
<!--a href="page1.html">here</a></p-->
<h2 style="color:blue;">The Panel</h2>
<h2 style="color:blue;">The Repository</h2>
<p>The application comprises two components:
<ul>
<li>
A State Machine (SM) operating at the IOC level that is responsible for the power saving accounting.<br>
<span style="color: gray;"> https://gitlab.psi.ch/proscan_apps4ops/HUSH</span><br>
<span style="color: gray;"> /proscan/bd/applications/hush/hla/</span><br>
</li>
<li>
A High Level Application (HLA) that is able to interact with the IOC (for expert use), displays accounting
figures, and provides a panel to enable quadruples to be set to their standby/restore values.<br>
<span style="color: gray;">https://git.psi.ch/epics_iocboot_proscan/PRO_hush</span><br>
<span style="color: gray;">/proscan/bd/applications/hush/ioc/latest/PRO_hush/</span><br>
</li>
</ul>
<h2 style="color:blue;">The Graphical User Interface</h2>
<h3 style="color:lightblue;">Operator Panel</h3>
Ramp Delay: Can take on values from 0.0s to 0.2s. <br>
Defines the delay between setting individual quadruples when initiating standby/restore.
A value of 0.0s means that the quadruple currents are set simultaneously.
<h3 style="color:lightblue;">Expert Panel</h3>
Selecting the Dry Run option disables setting values to epics process variables. Used for testing.
<h3 style="color:lightblue;">Saving Overview</h3>
Displays a number of process variables related to the power saving accounting. <br>
<span style="color:black; font-style:italic;">Power Saving Accounting is only activated when PROSCAN is in "Produktion" mode.</span>
<br>
<table>
<tr><td>Initial Power (kw):</td> <td>The nominal power value when quadruples are in the usual powered-on state.</td></tr>
<tr><td>Power (kw):</td> <td>The current power value.</td></tr>
<tr><td>Saving (MWh):</td> <td>The running power saved in the current saving period.</td></tr>
<tr><td>Time in Saving Mode:</td> <td>Time elapsed in current saving period (days hours:minutes:seconds).</td></tr>
<tr><td>Tot Saved (MWh):</td> <td>The accumulated power saved in the calendar year.</td></tr>
</table>
<h3 style="color:lightblue;">Magnet Panel</h3>
Table of current and power values for quadruples within each section.
Quadruples may be set to their standby values or restored to their initial values.
These action buttons are only enabled if certan conditions are met, i.e, the corresponding
beam disrupter is closed, "Geschlossen" and the corresponding access writes are granted as
controlled by either the global Mastership or the relevant section Submastership
<p>
</p>
<p>These web pages are to be completed by the application owner.<br>
+5 -8
View File
@@ -21,7 +21,7 @@ from src.gui import AppGui
_pymodule = os.path.basename(__file__)
_appname, _appext = _pymodule.split(".")
_appversion = "1.0.0"
_appversion = "2.0.0"
# _title = """Power Usage & Saving Hierarchy""" #, HUSH!"""
_title = """HUSH!"""
@@ -57,8 +57,7 @@ class StartMain(BaseWindow):
self.gui = AppGui(self)
def prepare_elog_message(self):
self.system_idx = self.elog_enum.system.NONE
self.eintrag_idx = self.elog_enum.eintrag.INFO
self.effekt_idx = self.elog_enum.effekt.NO
@@ -177,12 +176,10 @@ class StartMain(BaseWindow):
"""<b>{0}</b> v {1}
<p>Copyright &copy; Paul Scherrer Institut (PSI).
All rights reserved.</p>
<p>Author: J. Chrin, Spring 2023 </p>
<p>(EPICS db adapted from A. Kovach, 2016) <p>
<p>Author: J. Chrin, February 2024 </p>
<p>(EPICS db adapted from A. Kovach, 2016) </p>
<p>IOC Administrator: H. Lutz </p>
<p>1st Responsible: J. Chrin
or 3301 (Control Room) </p>
<p>1st Responsible: J. Chrin </p>
<p>Initiates energy saving procedures and records power saved</p>
<p>Python {2} - Qt {3} - PyQt {4} <br>
cafe {5} - epics {6} on {7}""".format(
+23 -9
View File
@@ -1,5 +1,5 @@
#!/bin/bash
cd /proscan/bd/applications/hush/hla/1.2.0
cd /proscan/bd/applications/hush/hla/1.3.0
# For use if script is sourced rather than executed
appNameDefault="hush.sh"
@@ -20,15 +20,29 @@ else
echo "Interactive/sourced script"
fi
# Select Python Version here. Currently one of 3.5, 3.7
PYTHON_VERSION=3.7
# Select Python Version here. Currently one of 3.5, 3.7, 3.8, 3.10
PYTHON_VERSION=3.10
# Only neede for verison-specific packages, e.g., bigtree-
# Not required for elog.
PYTHON_VERSION_DIR=310
EXTRA_PYTHON_PATH_FLAG=0
if [ "$1" ]; then
if [ "$1" == "3.5" -o "$1" == "35" ]; then
echo "Using default version $PYTHON_VERSION"
elif [ "$1" == "3.7" -o "$1" == "37" ]; then
PYTHON_VERSION=3.7
PYTHON_VERSION=3.7
PYTHON_VERSION_DIR=37
elif [ "$1" == "3.8" -o "$1" == "38" ]; then
PYTHON_VERSION=3.8
PYTHON_VERSION_DIR=38
#EXTRA_PYTHON_PATH_FLAG=1
elif [ "$1" == "3.10" -o "$1" == "310" ]; then
PYTHON_VERSION=3.10
PYTHON_VERSION_DIR=310
#EXTRA_PYTHON_PATH_FLAG=1
else
echo "Requested Python version is not supported"
echo "Using default version $PYTHON_VERSION"
@@ -42,13 +56,13 @@ _EPICS_HOST_ARCH=${RHREL}-x86_64
#_EPICS_HOST_ARCH=${EPICS_HOST_ARCH}
. /opt/gfa/python $PYTHON_VERSION
#/sf/bd/applications/OnlineModel/current/PythonModule:/sf/bd/applications/OnlineModel/current
#/sf/bd/applications/OnlineModel/default/scripts/VA:
#C_EXT version for Py 3.7:
export PYTHONPATH=.:/opt/gfa/cafe/python/pycafe/cafe-1.19.3/lib/${_EPICS_HOST_ARCH}:/proscan/bd/applications/deps/apps4ops/v1.9.0
#C_EXT version
export PYTHONPATH=.:/opt/gfa/cafe/python/pycafe/cafe-1.19.3/lib/${_EPICS_HOST_ARCH}:/proscan/bd/applications/deps/apps4ops/v1.10.0
if [ "${EXTRA_PYTHON_PATH_FLAG}" -gt "0" ] ; then
export PYTHONPATH=$PYTHONPATH:/proscan/bd/applications/deps/apps4ops/v1.10.0/common/python${PYTHON_VERSION_DIR}
fi
echo $PYTHONPATH
STDOUT_DIR="/tmp"
+24 -7
View File
@@ -1,5 +1,5 @@
#!/bin/bash
cd /proscan/bd/applications/hush/hla/1.1.0
cd /proscan/bd/applications/hush/hla/1.3.0
# For use if script is sourced rather than executed
appNameDefault="hush.sh"
@@ -20,20 +20,34 @@ else
echo "Interactive/sourced script"
fi
# Select Python Version here. Currently one of 3.5, 3.7
PYTHON_VERSION=3.7
# Select Python Version here. Currently one of 3.5, 3.7, 3,8, 3,10
PYTHON_VERSION=3.10
# Only neede for verison-specific packages, e.g., bigtree-
# Not required for elog.
PYTHON_VERSION_DIR=310
EXTRA_PYTHON_PATH_FLAG=0
if [ "$1" ]; then
if [ "$1" == "3.5" -o "$1" == "35" ]; then
echo "Using default version $PYTHON_VERSION"
echo "Using default version $PYTHON_VERSION"
elif [ "$1" == "3.7" -o "$1" == "37" ]; then
PYTHON_VERSION=3.7
PYTHON_VERSION=3.7
PYTHON_VERSION_DIR=37
elif [ "$1" == "3.8" -o "$1" == "38" ]; then
PYTHON_VERSION=3.8
PYTHON_VERSION_DIR=38
#EXTRA_PYTHON_PATH_FLAG=1
elif [ "$1" == "3.10" -o "$1" == "310" ]; then
PYTHON_VERSION=3.10
PYTHON_VERSION_DIR=310
#EXTRA_PYTHON_PATH_FLAG=1
else
echo "Requested Python version is not supported"
echo "Using default version $PYTHON_VERSION"
fi
fi
echo "PYTHON_VERSION $PYTHON_VERSION"
@@ -46,8 +60,11 @@ _EPICS_HOST_ARCH=${RHREL}-x86_64
#/sf/bd/applications/OnlineModel/default/scripts/VA:
#C_EXT version for Py 3.7:
export PYTHONPATH=.:/opt/gfa/cafe/python/pycafe/cafe-1.19.3/lib/${_EPICS_HOST_ARCH}:/proscan/bd/applications/deps/apps4ops/v1.8.0
export PYTHONPATH=.:/opt/gfa/cafe/python/pycafe/cafe-1.19.3/lib/${_EPICS_HOST_ARCH}:/proscan/bd/applications/deps/apps4ops/v1.10.0
if [ "${EXTRA_PYTHON_PATH_FLAG}" -gt "0" ] ; then
export PYTHONPATH=$PYTHONPATH:/proscan/bd/applications/deps/apps4ops/v1.10.0/common/python${PYTHON_VERSION_DIR}
fi
echo $PYTHONPATH
+21 -4
View File
@@ -1,5 +1,5 @@
#!/bin/bash
cd /proscan/bd/applications/hush/hla/1.1.0
cd /proscan/bd/applications/hush/hla/1.3.0
# For use if script is sourced rather than executed
appNameDefault="hush.sh"
@@ -21,14 +21,28 @@ else
fi
# Select Python Version here. Currently one of 3.5, 3.7
PYTHON_VERSION=3.7
PYTHON_VERSION=3.10
# Only neede for verison-specific packages, e.g., bigtree-
# Not required for elog.
PYTHON_VERSION_DIR=310
EXTRA_PYTHON_PATH_FLAG=0
if [ "$1" ]; then
if [ "$1" == "3.5" -o "$1" == "35" ]; then
echo "Using default version $PYTHON_VERSION"
elif [ "$1" == "3.7" -o "$1" == "37" ]; then
PYTHON_VERSION=3.7
PYTHON_VERSION=3.7
PYTHON_VERSION_DIR=37
elif [ "$1" == "3.8" -o "$1" == "38" ]; then
PYTHON_VERSION=3.8
PYTHON_VERSION_DIR=38
#EXTRA_PYTHON_PATH_FLAG=1
elif [ "$1" == "3.10" -o "$1" == "310" ]; then
PYTHON_VERSION=3.10
PYTHON_VERSION_DIR=310
#EXTRA_PYTHON_PATH_FLAG=1
else
echo "Requested Python version is not supported"
echo "Using default version $PYTHON_VERSION"
@@ -46,8 +60,11 @@ _EPICS_HOST_ARCH=${RHREL}-x86_64
#/sf/bd/applications/OnlineModel/default/scripts/VA:
#C_EXT version for Py 3.7:
export PYTHONPATH=.:/opt/gfa/cafe/python/pycafe/cafe-1.19.3/lib/${_EPICS_HOST_ARCH}:/proscan/bd/applications/deps/apps4ops/v1.8.0
export PYTHONPATH=.:/opt/gfa/cafe/python/pycafe/cafe-1.19.3/lib/${_EPICS_HOST_ARCH}:/proscan/bd/applications/deps/apps4ops/v1.10.0
if [ "${EXTRA_PYTHON_PATH_FLAG}" -gt "0" ] ; then
export PYTHONPATH=$PYTHONPATH:/proscan/bd/applications/deps/apps4ops/v1.10.0/common/python${PYTHON_VERSION_DIR}
fi
echo $PYTHONPATH
+23 -7
View File
@@ -1,5 +1,5 @@
#!/bin/bash
cd /proscan/bd/applications/hush/hla/1.1.0
cd /proscan/bd/applications/hush/hla/1.3.0
# For use if script is sourced rather than executed
appNameDefault="hush.sh"
@@ -20,19 +20,33 @@ else
echo "Interactive/sourced script"
fi
# Select Python Version here. Currently one of 3.5, 3.7
PYTHON_VERSION=3.7
# Select Python Version here. Currently one of 3.5, 3.7, 3.8, 3.10
PYTHON_VERSION=3.10
# Only neede for verison-specific packages, e.g., bigtree-
# Not required for elog.
PYTHON_VERSION_DIR=310
EXTRA_PYTHON_PATH_FLAG=0
if [ "$1" ]; then
if [ "$1" == "3.5" -o "$1" == "35" ]; then
echo "Using default version $PYTHON_VERSION"
elif [ "$1" == "3.7" -o "$1" == "37" ]; then
PYTHON_VERSION=3.7
PYTHON_VERSION=3.7
PYTHON_VERSION_DIR=37
elif [ "$1" == "3.8" -o "$1" == "38" ]; then
PYTHON_VERSION=3.8
PYTHON_VERSION_DIR=38
#EXTRA_PYTHON_PATH_FLAG=1
elif [ "$1" == "3.10" -o "$1" == "310" ]; then
PYTHON_VERSION=3.10
PYTHON_VERSION_DIR=310
#EXTRA_PYTHON_PATH_FLAG=1
else
echo "Requested Python version is not supported"
echo "Using default version $PYTHON_VERSION"
fi
fi
fi
@@ -46,9 +60,11 @@ _EPICS_HOST_ARCH=${RHREL}-x86_64
#/sf/bd/applications/OnlineModel/default/scripts/VA:
#C_EXT version for Py 3.7:
export PYTHONPATH=.:/opt/gfa/cafe/python/pycafe/cafe-1.19.3/lib/${_EPICS_HOST_ARCH}:/proscan/bd/applications/deps/apps4ops/v1.8.0
export PYTHONPATH=.:/opt/gfa/cafe/python/pycafe/cafe-1.19.3/lib/${_EPICS_HOST_ARCH}:/proscan/bd/applications/deps/apps4ops/v1.10.0
if [ "${EXTRA_PYTHON_PATH_FLAG}" -gt "0" ] ; then
export PYTHONPATH=$PYTHONPATH:/proscan/bd/applications/deps/apps4ops/v1.10.0/common/python${PYTHON_VERSION_DIR}
fi
echo $PYTHONPATH
STDOUT_DIR="/tmp"
+22 -4
View File
@@ -1,5 +1,5 @@
#!/bin/bash
cd /proscan/bd/applications/hush/hla/1.1.0
cd /proscan/bd/applications/hush/hla/1.3.0
# For use if script is sourced rather than executed
appNameDefault="hush.sh"
@@ -21,14 +21,28 @@ else
fi
# Select Python Version here. Currently one of 3.5, 3.7
PYTHON_VERSION=3.7
PYTHON_VERSION=3.10
# Only neede for verison-specific packages, e.g., bigtree-
# Not required for elog.
PYTHON_VERSION_DIR=310
EXTRA_PYTHON_PATH_FLAG=0
if [ "$1" ]; then
if [ "$1" == "3.5" -o "$1" == "35" ]; then
echo "Using default version $PYTHON_VERSION"
elif [ "$1" == "3.7" -o "$1" == "37" ]; then
PYTHON_VERSION=3.7
PYTHON_VERSION=3.7
PYTHON_VERSION_DIR=37
elif [ "$1" == "3.8" -o "$1" == "38" ]; then
PYTHON_VERSION=3.8
PYTHON_VERSION_DIR=38
#EXTRA_PYTHON_PATH_FLAG=1
elif [ "$1" == "3.10" -o "$1" == "310" ]; then
PYTHON_VERSION=3.10
PYTHON_VERSION_DIR=310
#EXTRA_PYTHON_PATH_FLAG=1
else
echo "Requested Python version is not supported"
echo "Using default version $PYTHON_VERSION"
@@ -36,6 +50,7 @@ if [ "$1" ]; then
fi
echo "PYTHON_VERSION $PYTHON_VERSION"
_EPICS_HOST_ARCH=${RHREL}-x86_64
@@ -46,9 +61,12 @@ _EPICS_HOST_ARCH=${RHREL}-x86_64
#/sf/bd/applications/OnlineModel/default/scripts/VA:
#C_EXT version for Py 3.7:
export PYTHONPATH=.:/opt/gfa/cafe/python/pycafe/cafe-1.19.3/lib/${_EPICS_HOST_ARCH}:/proscan/bd/applications/deps/apps4ops/v1.8.0
export PYTHONPATH=.:/opt/gfa/cafe/python/pycafe/cafe-1.19.3/lib/${_EPICS_HOST_ARCH}:/proscan/bd/applications/deps/apps4ops/v1.10.0
if [ "${EXTRA_PYTHON_PATH_FLAG}" -gt "0" ] ; then
export PYTHONPATH=$PYTHONPATH:/proscan/bd/applications/deps/apps4ops/v1.10.0/common/python${PYTHON_VERSION_DIR}
fi
echo $PYTHONPATH
STDOUT_DIR="/tmp"
+23 -4
View File
@@ -1,5 +1,5 @@
#!/bin/bash
cd /proscan/bd/applications/hush/hla/1.1.0
cd /proscan/bd/applications/hush/hla/1.3.0
# For use if script is sourced rather than executed
appNameDefault="hush.sh"
@@ -21,14 +21,28 @@ else
fi
# Select Python Version here. Currently one of 3.5, 3.7
PYTHON_VERSION=3.7
PYTHON_VERSION=3.10
# Only neede for verison-specific packages, e.g., bigtree-
# Not required for elog.
PYTHON_VERSION_DIR=310
EXTRA_PYTHON_PATH_FLAG=0
if [ "$1" ]; then
if [ "$1" == "3.5" -o "$1" == "35" ]; then
echo "Using default version $PYTHON_VERSION"
elif [ "$1" == "3.7" -o "$1" == "37" ]; then
PYTHON_VERSION=3.7
PYTHON_VERSION=3.7
PYTHON_VERSION_DIR=37
elif [ "$1" == "3.8" -o "$1" == "38" ]; then
PYTHON_VERSION=3.8
PYTHON_VERSION_DIR=38
#EXTRA_PYTHON_PATH_FLAG=1
elif [ "$1" == "3.10" -o "$1" == "310" ]; then
PYTHON_VERSION=3.10
PYTHON_VERSION_DIR=310
#EXTRA_PYTHON_PATH_FLAG=1
else
echo "Requested Python version is not supported"
echo "Using default version $PYTHON_VERSION"
@@ -36,6 +50,8 @@ if [ "$1" ]; then
fi
echo "PYTHON_VERSION $PYTHON_VERSION"
_EPICS_HOST_ARCH=${RHREL}-x86_64
@@ -46,9 +62,12 @@ _EPICS_HOST_ARCH=${RHREL}-x86_64
#/sf/bd/applications/OnlineModel/default/scripts/VA:
#C_EXT version for Py 3.7:
export PYTHONPATH=.:/opt/gfa/cafe/python/pycafe/cafe-1.19.3/lib/${_EPICS_HOST_ARCH}:/proscan/bd/applications/deps/apps4ops/v1.8.0
export PYTHONPATH=.:/opt/gfa/cafe/python/pycafe/cafe-1.19.3/lib/${_EPICS_HOST_ARCH}:/proscan/bd/applications/deps/apps4ops/v1.10.0
if [ "${EXTRA_PYTHON_PATH_FLAG}" -gt "0" ] ; then
export PYTHONPATH=$PYTHONPATH:/proscan/bd/applications/deps/apps4ops/v1.10.0/common/python${PYTHON_VERSION_DIR}
fi
echo $PYTHONPATH
STDOUT_DIR="/tmp"
+255 -124
View File
@@ -9,6 +9,229 @@
from PyQt5 import QtCore
qt_resource_data = b"\
\x00\x00\x00\xa7\
\x3c\
\x68\x74\x6d\x6c\x3e\x3c\x68\x65\x61\x64\x3e\x3c\x74\x69\x74\x6c\
\x65\x3e\x57\x65\x62\x20\x48\x65\x6c\x70\x3c\x2f\x74\x69\x74\x6c\
\x65\x3e\x3c\x2f\x68\x65\x61\x64\x3e\x0a\x3c\x62\x6f\x64\x79\x3e\
\x0a\x0a\x3c\x70\x3e\x3c\x62\x3e\x50\x61\x67\x65\x20\x31\x20\x6f\
\x66\x20\x77\x65\x62\x20\x68\x65\x6c\x70\x3c\x2f\x62\x3e\x3c\x2f\
\x70\x3e\x0a\x3c\x70\x3e\x20\x20\x3c\x61\x20\x68\x72\x65\x66\x3d\
\x22\x70\x61\x67\x65\x32\x2e\x68\x74\x6d\x6c\x22\x3e\x20\x4e\x65\
\x78\x74\x3c\x2f\x61\x3e\x3c\x2f\x70\x3e\x0a\x3c\x70\x3e\x3c\x62\
\x3e\x65\x74\x63\x2e\x2e\x2e\x3c\x2f\x62\x3e\x20\x65\x74\x63\x2e\
\x2e\x2e\x3c\x2f\x70\x3e\x0a\x3c\x2f\x62\x6f\x64\x79\x3e\x3c\x2f\
\x68\x74\x6d\x6c\x3e\x0a\
\x00\x00\x0b\x58\
\x3c\
\x68\x74\x6d\x6c\x3e\x3c\x68\x65\x61\x64\x3e\x3c\x74\x69\x74\x6c\
\x65\x3e\x48\x61\x6e\x64\x73\x6f\x6d\x65\x20\x50\x6f\x77\x65\x72\
\x20\x55\x73\x61\x67\x65\x20\x61\x6e\x64\x20\x53\x61\x76\x69\x6e\
\x67\x20\x48\x69\x65\x72\x61\x72\x63\x68\x79\x20\x61\x74\x20\x50\
\x72\x6f\x73\x63\x61\x6e\x2c\x20\x48\x55\x53\x48\x21\x3c\x2f\x74\
\x69\x74\x6c\x65\x3e\x3c\x2f\x68\x65\x61\x64\x3e\x0a\x3c\x62\x6f\
\x64\x79\x3e\x0a\x0a\x3c\x68\x35\x20\x20\x73\x74\x79\x6c\x65\x3d\
\x22\x63\x6f\x6c\x6f\x72\x3a\x67\x72\x61\x79\x3b\x22\x3e\x46\x65\
\x62\x72\x75\x61\x72\x79\x20\x32\x30\x32\x34\x2c\x20\x4a\x61\x6e\
\x20\x43\x68\x72\x69\x6e\x3c\x2f\x68\x35\x3e\x0a\x3c\x68\x34\x3e\
\x20\x3c\x73\x70\x61\x6e\x20\x73\x74\x79\x6c\x65\x3d\x22\x63\x6f\
\x6c\x6f\x72\x3a\x20\x72\x65\x64\x3b\x22\x3e\x48\x3c\x2f\x73\x70\
\x61\x6e\x3e\x61\x6e\x64\x73\x6f\x6d\x65\x20\x3c\x73\x70\x61\x6e\
\x20\x73\x74\x79\x6c\x65\x3d\x22\x63\x6f\x6c\x6f\x72\x3a\x20\x67\
\x72\x61\x79\x3b\x22\x3e\x50\x6f\x77\x65\x72\x3c\x2f\x73\x70\x61\
\x6e\x3e\x20\x3c\x73\x70\x61\x6e\x20\x73\x74\x79\x6c\x65\x3d\x22\
\x63\x6f\x6c\x6f\x72\x3a\x20\x72\x65\x64\x3b\x22\x3e\x55\x3c\x2f\
\x73\x70\x61\x6e\x3e\x73\x61\x67\x65\x20\x3c\x73\x70\x61\x6e\x20\
\x73\x74\x79\x6c\x65\x3d\x22\x63\x6f\x6c\x6f\x72\x3a\x20\x67\x72\
\x61\x79\x3b\x22\x3e\x61\x6e\x64\x3c\x2f\x73\x70\x61\x6e\x3e\x20\
\x3c\x73\x70\x61\x6e\x20\x73\x74\x79\x6c\x65\x3d\x22\x63\x6f\x6c\
\x6f\x72\x3a\x20\x72\x65\x64\x3b\x22\x3e\x53\x3c\x2f\x73\x70\x61\
\x6e\x3e\x61\x76\x69\x6e\x67\x20\x3c\x73\x70\x61\x6e\x20\x73\x74\
\x79\x6c\x65\x3d\x22\x63\x6f\x6c\x6f\x72\x3a\x20\x72\x65\x64\x3b\
\x22\x3e\x48\x3c\x2f\x73\x70\x61\x6e\x3e\x69\x65\x72\x61\x72\x63\
\x68\x79\x3c\x2f\x73\x70\x61\x6e\x3e\x20\x3c\x73\x70\x61\x6e\x20\
\x73\x74\x79\x6c\x65\x3d\x22\x63\x6f\x6c\x6f\x72\x3a\x20\x67\x72\
\x61\x79\x3b\x22\x3e\x61\x74\x20\x50\x72\x6f\x73\x63\x61\x6e\x2c\
\x3c\x2f\x73\x70\x61\x6e\x3e\x20\x3c\x73\x70\x61\x6e\x20\x73\x74\
\x79\x6c\x65\x3d\x22\x63\x6f\x6c\x6f\x72\x3a\x20\x72\x65\x64\x3b\
\x22\x3e\x48\x55\x53\x48\x21\x3c\x2f\x73\x70\x61\x6e\x3e\x3c\x2f\
\x68\x34\x3e\x0a\x3c\x68\x32\x20\x73\x74\x79\x6c\x65\x3d\x22\x63\
\x6f\x6c\x6f\x72\x3a\x62\x6c\x75\x65\x3b\x22\x3e\x41\x62\x6f\x75\
\x74\x3c\x2f\x68\x32\x3e\x0a\x0a\x3c\x70\x3e\x54\x68\x65\x20\x48\
\x55\x53\x48\x21\x20\x61\x70\x70\x6c\x69\x63\x61\x74\x69\x6f\x6e\
\x20\x69\x6e\x69\x74\x69\x61\x74\x65\x73\x20\x65\x6e\x65\x72\x67\
\x79\x20\x73\x61\x76\x69\x6e\x67\x20\x70\x72\x6f\x63\x65\x64\x75\
\x72\x65\x73\x20\x61\x6e\x64\x20\x72\x65\x63\x6f\x72\x64\x73\x20\
\x74\x68\x65\x20\x70\x6f\x77\x65\x72\x20\x73\x61\x76\x65\x64\x2e\
\x3c\x62\x72\x3e\x0a\x20\x20\x3c\x73\x70\x61\x6e\x20\x73\x74\x79\
\x6c\x65\x3d\x22\x63\x6f\x6c\x6f\x72\x3a\x62\x6c\x61\x63\x6b\x3b\
\x20\x66\x6f\x6e\x74\x2d\x73\x74\x79\x6c\x65\x3a\x69\x74\x61\x6c\
\x69\x63\x3b\x22\x3e\x50\x6f\x77\x65\x72\x20\x53\x61\x76\x69\x6e\
\x67\x20\x41\x63\x63\x6f\x75\x6e\x74\x69\x6e\x67\x20\x69\x73\x20\
\x6f\x6e\x6c\x79\x20\x61\x63\x74\x69\x76\x61\x74\x65\x64\x20\x77\
\x68\x65\x6e\x20\x50\x52\x4f\x53\x43\x41\x4e\x20\x69\x73\x20\x69\
\x6e\x20\x22\x50\x72\x6f\x64\x75\x6b\x74\x69\x6f\x6e\x22\x20\x6d\
\x6f\x64\x65\x2e\x3c\x2f\x73\x70\x61\x6e\x3e\x0a\x20\x20\x3c\x2f\
\x70\x3e\x0a\x3c\x21\x2d\x2d\x61\x20\x68\x72\x65\x66\x3d\x22\x70\
\x61\x67\x65\x31\x2e\x68\x74\x6d\x6c\x22\x3e\x68\x65\x72\x65\x3c\
\x2f\x61\x3e\x3c\x2f\x70\x2d\x2d\x3e\x0a\x0a\x3c\x68\x32\x20\x73\
\x74\x79\x6c\x65\x3d\x22\x63\x6f\x6c\x6f\x72\x3a\x62\x6c\x75\x65\
\x3b\x22\x3e\x54\x68\x65\x20\x52\x65\x70\x6f\x73\x69\x74\x6f\x72\
\x79\x3c\x2f\x68\x32\x3e\x0a\x0a\x3c\x70\x3e\x54\x68\x65\x20\x61\
\x70\x70\x6c\x69\x63\x61\x74\x69\x6f\x6e\x20\x63\x6f\x6d\x70\x72\
\x69\x73\x65\x73\x20\x74\x77\x6f\x20\x63\x6f\x6d\x70\x6f\x6e\x65\
\x6e\x74\x73\x3a\x0a\x20\x20\x3c\x75\x6c\x3e\x0a\x3c\x6c\x69\x3e\
\x0a\x20\x20\x41\x20\x53\x74\x61\x74\x65\x20\x4d\x61\x63\x68\x69\
\x6e\x65\x20\x28\x53\x4d\x29\x20\x6f\x70\x65\x72\x61\x74\x69\x6e\
\x67\x20\x61\x74\x20\x74\x68\x65\x20\x49\x4f\x43\x20\x6c\x65\x76\
\x65\x6c\x20\x74\x68\x61\x74\x20\x69\x73\x20\x72\x65\x73\x70\x6f\
\x6e\x73\x69\x62\x6c\x65\x20\x66\x6f\x72\x20\x74\x68\x65\x20\x70\
\x6f\x77\x65\x72\x20\x73\x61\x76\x69\x6e\x67\x20\x61\x63\x63\x6f\
\x75\x6e\x74\x69\x6e\x67\x2e\x3c\x62\x72\x3e\x0a\x20\x20\x3c\x73\
\x70\x61\x6e\x20\x73\x74\x79\x6c\x65\x3d\x22\x63\x6f\x6c\x6f\x72\
\x3a\x20\x67\x72\x61\x79\x3b\x22\x3e\x20\x68\x74\x74\x70\x73\x3a\
\x2f\x2f\x67\x69\x74\x6c\x61\x62\x2e\x70\x73\x69\x2e\x63\x68\x2f\
\x70\x72\x6f\x73\x63\x61\x6e\x5f\x61\x70\x70\x73\x34\x6f\x70\x73\
\x2f\x48\x55\x53\x48\x3c\x2f\x73\x70\x61\x6e\x3e\x3c\x62\x72\x3e\
\x0a\x20\x3c\x73\x70\x61\x6e\x20\x73\x74\x79\x6c\x65\x3d\x22\x63\
\x6f\x6c\x6f\x72\x3a\x20\x67\x72\x61\x79\x3b\x22\x3e\x20\x2f\x70\
\x72\x6f\x73\x63\x61\x6e\x2f\x62\x64\x2f\x61\x70\x70\x6c\x69\x63\
\x61\x74\x69\x6f\x6e\x73\x2f\x68\x75\x73\x68\x2f\x68\x6c\x61\x2f\
\x3c\x2f\x73\x70\x61\x6e\x3e\x3c\x62\x72\x3e\x0a\x3c\x2f\x6c\x69\
\x3e\x0a\x20\x20\x3c\x6c\x69\x3e\x0a\x20\x20\x20\x20\x41\x20\x48\
\x69\x67\x68\x20\x4c\x65\x76\x65\x6c\x20\x41\x70\x70\x6c\x69\x63\
\x61\x74\x69\x6f\x6e\x20\x28\x48\x4c\x41\x29\x20\x74\x68\x61\x74\
\x20\x69\x73\x20\x61\x62\x6c\x65\x20\x74\x6f\x20\x69\x6e\x74\x65\
\x72\x61\x63\x74\x20\x77\x69\x74\x68\x20\x74\x68\x65\x20\x49\x4f\
\x43\x20\x28\x66\x6f\x72\x20\x65\x78\x70\x65\x72\x74\x20\x75\x73\
\x65\x29\x2c\x20\x64\x69\x73\x70\x6c\x61\x79\x73\x20\x61\x63\x63\
\x6f\x75\x6e\x74\x69\x6e\x67\x0a\x20\x20\x20\x20\x66\x69\x67\x75\
\x72\x65\x73\x2c\x20\x61\x6e\x64\x20\x70\x72\x6f\x76\x69\x64\x65\
\x73\x20\x61\x20\x70\x61\x6e\x65\x6c\x20\x74\x6f\x20\x65\x6e\x61\
\x62\x6c\x65\x20\x71\x75\x61\x64\x72\x75\x70\x6c\x65\x73\x20\x74\
\x6f\x20\x62\x65\x20\x73\x65\x74\x20\x74\x6f\x20\x74\x68\x65\x69\
\x72\x20\x73\x74\x61\x6e\x64\x62\x79\x2f\x72\x65\x73\x74\x6f\x72\
\x65\x20\x76\x61\x6c\x75\x65\x73\x2e\x3c\x62\x72\x3e\x0a\x20\x20\
\x20\x20\x3c\x73\x70\x61\x6e\x20\x73\x74\x79\x6c\x65\x3d\x22\x63\
\x6f\x6c\x6f\x72\x3a\x20\x67\x72\x61\x79\x3b\x22\x3e\x68\x74\x74\
\x70\x73\x3a\x2f\x2f\x67\x69\x74\x2e\x70\x73\x69\x2e\x63\x68\x2f\
\x65\x70\x69\x63\x73\x5f\x69\x6f\x63\x62\x6f\x6f\x74\x5f\x70\x72\
\x6f\x73\x63\x61\x6e\x2f\x50\x52\x4f\x5f\x68\x75\x73\x68\x3c\x2f\
\x73\x70\x61\x6e\x3e\x3c\x62\x72\x3e\x0a\x20\x20\x20\x20\x20\x3c\
\x73\x70\x61\x6e\x20\x73\x74\x79\x6c\x65\x3d\x22\x63\x6f\x6c\x6f\
\x72\x3a\x20\x67\x72\x61\x79\x3b\x22\x3e\x2f\x70\x72\x6f\x73\x63\
\x61\x6e\x2f\x62\x64\x2f\x61\x70\x70\x6c\x69\x63\x61\x74\x69\x6f\
\x6e\x73\x2f\x68\x75\x73\x68\x2f\x69\x6f\x63\x2f\x6c\x61\x74\x65\
\x73\x74\x2f\x50\x52\x4f\x5f\x68\x75\x73\x68\x2f\x3c\x2f\x73\x70\
\x61\x6e\x3e\x3c\x62\x72\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x6c\x69\
\x3e\x0a\x3c\x2f\x75\x6c\x3e\x0a\x20\x20\x3c\x68\x32\x20\x73\x74\
\x79\x6c\x65\x3d\x22\x63\x6f\x6c\x6f\x72\x3a\x62\x6c\x75\x65\x3b\
\x22\x3e\x54\x68\x65\x20\x47\x72\x61\x70\x68\x69\x63\x61\x6c\x20\
\x55\x73\x65\x72\x20\x49\x6e\x74\x65\x72\x66\x61\x63\x65\x3c\x2f\
\x68\x32\x3e\x0a\x20\x20\x3c\x68\x33\x20\x73\x74\x79\x6c\x65\x3d\
\x22\x63\x6f\x6c\x6f\x72\x3a\x6c\x69\x67\x68\x74\x62\x6c\x75\x65\
\x3b\x22\x3e\x4f\x70\x65\x72\x61\x74\x6f\x72\x20\x50\x61\x6e\x65\
\x6c\x3c\x2f\x68\x33\x3e\x0a\x20\x20\x52\x61\x6d\x70\x20\x44\x65\
\x6c\x61\x79\x3a\x20\x43\x61\x6e\x20\x74\x61\x6b\x65\x20\x6f\x6e\
\x20\x76\x61\x6c\x75\x65\x73\x20\x66\x72\x6f\x6d\x20\x30\x2e\x30\
\x73\x20\x74\x6f\x20\x30\x2e\x32\x73\x2e\x20\x3c\x62\x72\x3e\x0a\
\x20\x20\x44\x65\x66\x69\x6e\x65\x73\x20\x74\x68\x65\x20\x64\x65\
\x6c\x61\x79\x20\x62\x65\x74\x77\x65\x65\x6e\x20\x73\x65\x74\x74\
\x69\x6e\x67\x20\x69\x6e\x64\x69\x76\x69\x64\x75\x61\x6c\x20\x71\
\x75\x61\x64\x72\x75\x70\x6c\x65\x73\x20\x77\x68\x65\x6e\x20\x69\
\x6e\x69\x74\x69\x61\x74\x69\x6e\x67\x20\x73\x74\x61\x6e\x64\x62\
\x79\x2f\x72\x65\x73\x74\x6f\x72\x65\x2e\x0a\x20\x20\x41\x20\x76\
\x61\x6c\x75\x65\x20\x6f\x66\x20\x30\x2e\x30\x73\x20\x6d\x65\x61\
\x6e\x73\x20\x74\x68\x61\x74\x20\x74\x68\x65\x20\x71\x75\x61\x64\
\x72\x75\x70\x6c\x65\x20\x63\x75\x72\x72\x65\x6e\x74\x73\x20\x61\
\x72\x65\x20\x73\x65\x74\x20\x73\x69\x6d\x75\x6c\x74\x61\x6e\x65\
\x6f\x75\x73\x6c\x79\x2e\x0a\x20\x20\x3c\x68\x33\x20\x73\x74\x79\
\x6c\x65\x3d\x22\x63\x6f\x6c\x6f\x72\x3a\x6c\x69\x67\x68\x74\x62\
\x6c\x75\x65\x3b\x22\x3e\x45\x78\x70\x65\x72\x74\x20\x50\x61\x6e\
\x65\x6c\x3c\x2f\x68\x33\x3e\x0a\x20\x20\x53\x65\x6c\x65\x63\x74\
\x69\x6e\x67\x20\x74\x68\x65\x20\x44\x72\x79\x20\x52\x75\x6e\x20\
\x6f\x70\x74\x69\x6f\x6e\x20\x64\x69\x73\x61\x62\x6c\x65\x73\x20\
\x73\x65\x74\x74\x69\x6e\x67\x20\x76\x61\x6c\x75\x65\x73\x20\x74\
\x6f\x20\x65\x70\x69\x63\x73\x20\x70\x72\x6f\x63\x65\x73\x73\x20\
\x76\x61\x72\x69\x61\x62\x6c\x65\x73\x2e\x20\x55\x73\x65\x64\x20\
\x66\x6f\x72\x20\x74\x65\x73\x74\x69\x6e\x67\x2e\x20\x3c\x62\x72\
\x3e\x0a\x20\x20\x3c\x68\x33\x20\x73\x74\x79\x6c\x65\x3d\x22\x63\
\x6f\x6c\x6f\x72\x3a\x6c\x69\x67\x68\x74\x62\x6c\x75\x65\x3b\x22\
\x3e\x53\x61\x76\x69\x6e\x67\x20\x4f\x76\x65\x72\x76\x69\x65\x77\
\x3c\x2f\x68\x33\x3e\x0a\x20\x20\x44\x69\x73\x70\x6c\x61\x79\x73\
\x20\x61\x20\x6e\x75\x6d\x62\x65\x72\x20\x6f\x66\x20\x70\x72\x6f\
\x63\x65\x73\x73\x20\x76\x61\x72\x61\x69\x62\x6c\x65\x73\x20\x72\
\x65\x6c\x61\x74\x65\x64\x20\x74\x6f\x20\x74\x68\x65\x20\x70\x6f\
\x77\x65\x72\x20\x73\x61\x76\x69\x6e\x67\x20\x61\x63\x63\x6f\x75\
\x6e\x74\x69\x6e\x67\x20\x3c\x62\x72\x3e\x0a\x20\x20\x3c\x73\x70\
\x61\x6e\x20\x73\x74\x79\x6c\x65\x3d\x22\x63\x6f\x6c\x6f\x72\x3a\
\x62\x6c\x61\x63\x6b\x3b\x20\x66\x6f\x6e\x74\x2d\x73\x74\x79\x6c\
\x65\x3a\x69\x74\x61\x6c\x69\x63\x3b\x22\x3e\x50\x6f\x77\x65\x72\
\x20\x53\x61\x76\x69\x6e\x67\x20\x41\x63\x63\x6f\x75\x6e\x74\x69\
\x6e\x67\x20\x69\x73\x20\x6f\x6e\x6c\x79\x20\x61\x63\x74\x69\x76\
\x61\x74\x65\x64\x20\x77\x68\x65\x6e\x20\x50\x52\x4f\x53\x43\x41\
\x4e\x20\x69\x73\x20\x69\x6e\x20\x22\x50\x72\x6f\x64\x75\x6b\x74\
\x69\x6f\x6e\x22\x20\x6d\x6f\x64\x65\x2e\x3c\x2f\x73\x70\x61\x6e\
\x3e\x0a\x20\x20\x3c\x74\x61\x62\x6c\x65\x3e\x0a\x20\x20\x20\x20\
\x3c\x74\x72\x3e\x3c\x74\x64\x3e\x49\x6e\x69\x74\x69\x61\x6c\x20\
\x50\x6f\x77\x65\x72\x20\x28\x6b\x77\x29\x3a\x3c\x2f\x74\x64\x3e\
\x20\x3c\x74\x64\x3e\x54\x68\x65\x20\x6e\x6f\x6d\x69\x6e\x61\x6c\
\x20\x70\x6f\x77\x65\x72\x20\x76\x61\x6c\x75\x65\x20\x77\x68\x65\
\x6e\x20\x71\x75\x61\x64\x72\x75\x70\x6c\x65\x73\x20\x61\x72\x65\
\x20\x69\x6e\x20\x74\x68\x65\x20\x75\x73\x75\x61\x6c\x20\x70\x6f\
\x77\x65\x72\x65\x64\x2d\x6f\x6e\x20\x73\x74\x61\x74\x65\x2e\x3c\
\x2f\x74\x64\x3e\x3c\x2f\x74\x72\x3e\x0a\x20\x20\x20\x20\x3c\x74\
\x72\x3e\x3c\x74\x64\x3e\x50\x6f\x77\x65\x72\x20\x28\x6b\x77\x29\
\x3a\x3c\x2f\x74\x64\x3e\x20\x3c\x74\x64\x3e\x54\x68\x65\x20\x63\
\x75\x72\x72\x65\x6e\x74\x20\x70\x6f\x77\x65\x72\x20\x76\x61\x6c\
\x75\x65\x2e\x3c\x2f\x74\x64\x3e\x3c\x2f\x74\x72\x3e\x0a\x20\x20\
\x20\x20\x3c\x74\x72\x3e\x3c\x74\x64\x3e\x53\x61\x76\x69\x6e\x67\
\x20\x28\x4d\x57\x68\x29\x3a\x3c\x2f\x74\x64\x3e\x20\x3c\x74\x64\
\x3e\x54\x68\x65\x20\x63\x75\x72\x72\x65\x6e\x74\x20\x70\x6f\x77\
\x65\x72\x20\x76\x61\x6c\x75\x65\x2e\x3c\x2f\x74\x64\x3e\x3c\x2f\
\x74\x72\x3e\x0a\x20\x20\x20\x20\x3c\x74\x72\x3e\x3c\x74\x64\x3e\
\x54\x69\x6d\x65\x20\x69\x6e\x20\x53\x61\x76\x69\x6e\x67\x20\x4d\
\x6f\x64\x65\x3a\x3c\x2f\x74\x64\x3e\x20\x3c\x74\x64\x3e\x54\x69\
\x6d\x65\x20\x65\x6c\x61\x70\x73\x65\x64\x20\x69\x6e\x20\x63\x75\
\x72\x72\x65\x6e\x74\x20\x73\x61\x76\x69\x6e\x67\x20\x70\x65\x72\
\x69\x6f\x64\x20\x28\x64\x61\x79\x73\x20\x68\x6f\x75\x72\x73\x3a\
\x6d\x69\x6e\x75\x74\x65\x73\x3a\x73\x65\x63\x6f\x6e\x64\x73\x29\
\x2e\x3c\x2f\x74\x64\x3e\x3c\x2f\x74\x72\x3e\x0a\x20\x20\x20\x20\
\x3c\x74\x72\x3e\x3c\x74\x64\x3e\x54\x6f\x74\x20\x53\x61\x76\x65\
\x64\x20\x28\x4d\x57\x68\x29\x3a\x3c\x2f\x74\x64\x3e\x20\x3c\x74\
\x64\x3e\x54\x68\x65\x20\x61\x63\x63\x75\x6d\x75\x6c\x61\x74\x65\
\x64\x20\x70\x6f\x77\x65\x72\x20\x73\x61\x76\x65\x64\x20\x69\x6e\
\x20\x74\x68\x65\x20\x63\x61\x6c\x65\x6e\x64\x61\x72\x20\x79\x65\
\x61\x72\x2e\x3c\x2f\x74\x64\x3e\x3c\x2f\x74\x72\x3e\x0a\x20\x20\
\x3c\x2f\x74\x61\x62\x6c\x65\x3e\x20\x0a\x20\x20\x0a\x20\x20\x0a\
\x20\x20\x0a\x0a\x0a\x0a\x0a\x0a\x3c\x2f\x62\x6f\x64\x79\x3e\x3c\
\x2f\x68\x74\x6d\x6c\x3e\x0a\
\x00\x00\x00\xa7\
\x3c\
\x68\x74\x6d\x6c\x3e\x3c\x68\x65\x61\x64\x3e\x3c\x74\x69\x74\x6c\
\x65\x3e\x57\x65\x62\x20\x48\x65\x6c\x70\x3c\x2f\x74\x69\x74\x6c\
\x65\x3e\x3c\x2f\x68\x65\x61\x64\x3e\x0a\x3c\x62\x6f\x64\x79\x3e\
\x0a\x0a\x3c\x70\x3e\x3c\x62\x3e\x50\x61\x67\x65\x20\x33\x20\x6f\
\x66\x20\x77\x65\x62\x20\x68\x65\x6c\x70\x3c\x2f\x62\x3e\x3c\x2f\
\x70\x3e\x0a\x3c\x70\x3e\x20\x20\x3c\x61\x20\x68\x72\x65\x66\x3d\
\x22\x70\x61\x67\x65\x34\x2e\x68\x74\x6d\x6c\x22\x3e\x20\x4e\x65\
\x78\x74\x3c\x2f\x61\x3e\x3c\x2f\x70\x3e\x0a\x3c\x70\x3e\x3c\x62\
\x3e\x65\x74\x63\x2e\x2e\x2e\x3c\x2f\x62\x3e\x20\x65\x74\x63\x2e\
\x2e\x2e\x3c\x2f\x70\x3e\x0a\x3c\x2f\x62\x6f\x64\x79\x3e\x3c\x2f\
\x68\x74\x6d\x6c\x3e\x0a\
\x00\x00\x00\xa7\
\x3c\
\x68\x74\x6d\x6c\x3e\x3c\x68\x65\x61\x64\x3e\x3c\x74\x69\x74\x6c\
\x65\x3e\x57\x65\x62\x20\x48\x65\x6c\x70\x3c\x2f\x74\x69\x74\x6c\
\x65\x3e\x3c\x2f\x68\x65\x61\x64\x3e\x0a\x3c\x62\x6f\x64\x79\x3e\
\x0a\x0a\x3c\x70\x3e\x3c\x62\x3e\x50\x61\x67\x65\x20\x32\x20\x6f\
\x66\x20\x77\x65\x62\x20\x68\x65\x6c\x70\x3c\x2f\x62\x3e\x3c\x2f\
\x70\x3e\x0a\x3c\x70\x3e\x20\x20\x3c\x61\x20\x68\x72\x65\x66\x3d\
\x22\x70\x61\x67\x65\x33\x2e\x68\x74\x6d\x6c\x22\x3e\x20\x4e\x65\
\x78\x74\x3c\x2f\x61\x3e\x3c\x2f\x70\x3e\x0a\x3c\x70\x3e\x3c\x62\
\x3e\x65\x74\x63\x2e\x2e\x2e\x3c\x2f\x62\x3e\x20\x65\x74\x63\x2e\
\x2e\x2e\x3c\x2f\x70\x3e\x0a\x3c\x2f\x62\x6f\x64\x79\x3e\x3c\x2f\
\x68\x74\x6d\x6c\x3e\x0a\
\x00\x00\x00\x80\
\x3c\
\x68\x74\x6d\x6c\x3e\x3c\x68\x65\x61\x64\x3e\x3c\x74\x69\x74\x6c\
@@ -32,118 +255,10 @@ qt_resource_data = b"\
\x3e\x65\x74\x63\x2e\x2e\x2e\x3c\x2f\x62\x3e\x20\x65\x74\x63\x2e\
\x2e\x2e\x3c\x2f\x70\x3e\x0a\x3c\x2f\x62\x6f\x64\x79\x3e\x3c\x2f\
\x68\x74\x6d\x6c\x3e\x0a\
\x00\x00\x00\xa7\
\x3c\
\x68\x74\x6d\x6c\x3e\x3c\x68\x65\x61\x64\x3e\x3c\x74\x69\x74\x6c\
\x65\x3e\x57\x65\x62\x20\x48\x65\x6c\x70\x3c\x2f\x74\x69\x74\x6c\
\x65\x3e\x3c\x2f\x68\x65\x61\x64\x3e\x0a\x3c\x62\x6f\x64\x79\x3e\
\x0a\x0a\x3c\x70\x3e\x3c\x62\x3e\x50\x61\x67\x65\x20\x32\x20\x6f\
\x66\x20\x77\x65\x62\x20\x68\x65\x6c\x70\x3c\x2f\x62\x3e\x3c\x2f\
\x70\x3e\x0a\x3c\x70\x3e\x20\x20\x3c\x61\x20\x68\x72\x65\x66\x3d\
\x22\x70\x61\x67\x65\x33\x2e\x68\x74\x6d\x6c\x22\x3e\x20\x4e\x65\
\x78\x74\x3c\x2f\x61\x3e\x3c\x2f\x70\x3e\x0a\x3c\x70\x3e\x3c\x62\
\x3e\x65\x74\x63\x2e\x2e\x2e\x3c\x2f\x62\x3e\x20\x65\x74\x63\x2e\
\x2e\x2e\x3c\x2f\x70\x3e\x0a\x3c\x2f\x62\x6f\x64\x79\x3e\x3c\x2f\
\x68\x74\x6d\x6c\x3e\x0a\
\x00\x00\x00\xa7\
\x3c\
\x68\x74\x6d\x6c\x3e\x3c\x68\x65\x61\x64\x3e\x3c\x74\x69\x74\x6c\
\x65\x3e\x57\x65\x62\x20\x48\x65\x6c\x70\x3c\x2f\x74\x69\x74\x6c\
\x65\x3e\x3c\x2f\x68\x65\x61\x64\x3e\x0a\x3c\x62\x6f\x64\x79\x3e\
\x0a\x0a\x3c\x70\x3e\x3c\x62\x3e\x50\x61\x67\x65\x20\x33\x20\x6f\
\x66\x20\x77\x65\x62\x20\x68\x65\x6c\x70\x3c\x2f\x62\x3e\x3c\x2f\
\x70\x3e\x0a\x3c\x70\x3e\x20\x20\x3c\x61\x20\x68\x72\x65\x66\x3d\
\x22\x70\x61\x67\x65\x34\x2e\x68\x74\x6d\x6c\x22\x3e\x20\x4e\x65\
\x78\x74\x3c\x2f\x61\x3e\x3c\x2f\x70\x3e\x0a\x3c\x70\x3e\x3c\x62\
\x3e\x65\x74\x63\x2e\x2e\x2e\x3c\x2f\x62\x3e\x20\x65\x74\x63\x2e\
\x2e\x2e\x3c\x2f\x70\x3e\x0a\x3c\x2f\x62\x6f\x64\x79\x3e\x3c\x2f\
\x68\x74\x6d\x6c\x3e\x0a\
\x00\x00\x00\xa7\
\x3c\
\x68\x74\x6d\x6c\x3e\x3c\x68\x65\x61\x64\x3e\x3c\x74\x69\x74\x6c\
\x65\x3e\x57\x65\x62\x20\x48\x65\x6c\x70\x3c\x2f\x74\x69\x74\x6c\
\x65\x3e\x3c\x2f\x68\x65\x61\x64\x3e\x0a\x3c\x62\x6f\x64\x79\x3e\
\x0a\x0a\x3c\x70\x3e\x3c\x62\x3e\x50\x61\x67\x65\x20\x31\x20\x6f\
\x66\x20\x77\x65\x62\x20\x68\x65\x6c\x70\x3c\x2f\x62\x3e\x3c\x2f\
\x70\x3e\x0a\x3c\x70\x3e\x20\x20\x3c\x61\x20\x68\x72\x65\x66\x3d\
\x22\x70\x61\x67\x65\x32\x2e\x68\x74\x6d\x6c\x22\x3e\x20\x4e\x65\
\x78\x74\x3c\x2f\x61\x3e\x3c\x2f\x70\x3e\x0a\x3c\x70\x3e\x3c\x62\
\x3e\x65\x74\x63\x2e\x2e\x2e\x3c\x2f\x62\x3e\x20\x65\x74\x63\x2e\
\x2e\x2e\x3c\x2f\x70\x3e\x0a\x3c\x2f\x62\x6f\x64\x79\x3e\x3c\x2f\
\x68\x74\x6d\x6c\x3e\x0a\
\x00\x00\x03\x29\
\x3c\
\x68\x74\x6d\x6c\x3e\x3c\x68\x65\x61\x64\x3e\x3c\x74\x69\x74\x6c\
\x65\x3e\x48\x61\x6e\x64\x73\x6f\x6d\x65\x20\x50\x6f\x77\x65\x72\
\x20\x55\x73\x61\x67\x65\x20\x61\x6e\x64\x20\x53\x61\x76\x69\x6e\
\x67\x20\x48\x69\x65\x72\x61\x72\x63\x68\x79\x20\x61\x74\x20\x50\
\x72\x6f\x73\x63\x61\x6e\x2c\x20\x48\x55\x53\x48\x21\x3c\x2f\x74\
\x69\x74\x6c\x65\x3e\x3c\x2f\x68\x65\x61\x64\x3e\x0a\x3c\x62\x6f\
\x64\x79\x3e\x0a\x0a\x3c\x68\x35\x20\x20\x73\x74\x79\x6c\x65\x3d\
\x22\x63\x6f\x6c\x6f\x72\x3a\x67\x72\x61\x79\x3b\x22\x3e\x4a\x61\
\x6e\x75\x61\x72\x79\x20\x32\x30\x32\x34\x2c\x20\x4a\x61\x6e\x20\
\x43\x68\x72\x69\x6e\x3c\x2f\x68\x35\x3e\x0a\x3c\x68\x34\x3e\x20\
\x3c\x73\x70\x61\x6e\x20\x73\x74\x79\x6c\x65\x3d\x22\x63\x6f\x6c\
\x6f\x72\x3a\x20\x72\x65\x64\x3b\x22\x3e\x48\x3c\x2f\x73\x70\x61\
\x6e\x3e\x61\x6e\x64\x73\x6f\x6d\x65\x20\x3c\x73\x70\x61\x6e\x20\
\x73\x74\x79\x6c\x65\x3d\x22\x63\x6f\x6c\x6f\x72\x3a\x20\x67\x72\
\x61\x79\x3b\x22\x3e\x50\x6f\x77\x65\x72\x3c\x2f\x73\x70\x61\x6e\
\x3e\x20\x3c\x73\x70\x61\x6e\x20\x73\x74\x79\x6c\x65\x3d\x22\x63\
\x6f\x6c\x6f\x72\x3a\x20\x72\x65\x64\x3b\x22\x3e\x55\x3c\x2f\x73\
\x70\x61\x6e\x3e\x73\x61\x67\x65\x20\x61\x6e\x64\x20\x3c\x73\x70\
\x61\x6e\x20\x73\x74\x79\x6c\x65\x3d\x22\x63\x6f\x6c\x6f\x72\x3a\
\x20\x72\x65\x64\x3b\x22\x3e\x53\x3c\x2f\x73\x70\x61\x6e\x3e\x61\
\x76\x69\x6e\x67\x20\x3c\x73\x70\x61\x6e\x20\x73\x74\x79\x6c\x65\
\x3d\x22\x63\x6f\x6c\x6f\x72\x3a\x20\x72\x65\x64\x3b\x22\x3e\x48\
\x3c\x2f\x73\x70\x61\x6e\x3e\x69\x65\x72\x61\x72\x63\x68\x79\x20\
\x61\x74\x20\x50\x72\x6f\x73\x63\x61\x6e\x2c\x20\x3c\x73\x70\x61\
\x6e\x20\x73\x74\x79\x6c\x65\x3d\x22\x63\x6f\x6c\x6f\x72\x3a\x20\
\x72\x65\x64\x3b\x22\x3e\x48\x55\x53\x48\x21\x3c\x2f\x73\x70\x61\
\x6e\x3e\x3c\x2f\x68\x34\x3e\x0a\x3c\x68\x32\x20\x73\x74\x79\x6c\
\x65\x3d\x22\x63\x6f\x6c\x6f\x72\x3a\x62\x6c\x75\x65\x3b\x22\x3e\
\x41\x62\x6f\x75\x74\x3c\x2f\x68\x32\x3e\x0a\x0a\x3c\x70\x3e\x54\
\x68\x69\x73\x20\x3c\x62\x3e\x48\x55\x53\x48\x21\x3c\x2f\x62\x3e\
\x20\x61\x70\x70\x6c\x69\x63\x61\x74\x69\x6f\x6e\x20\x69\x6e\x68\
\x65\x72\x69\x74\x73\x20\x66\x72\x6f\x6d\x20\x74\x68\x65\x20\x57\
\x69\x6e\x64\x6f\x77\x20\x62\x61\x73\x65\x20\x63\x6c\x61\x73\x73\
\x2e\x3c\x62\x72\x3e\x20\x20\x0a\x3c\x70\x3e\x69\x6e\x66\x6f\x72\
\x6d\x61\x74\x69\x6f\x6e\x20\x63\x6f\x6e\x63\x65\x72\x6e\x69\x6e\
\x67\x20\x74\x68\x69\x73\x20\x61\x70\x70\x6c\x69\x63\x61\x74\x69\
\x6f\x6e\x2c\x20\x73\x75\x63\x68\x20\x61\x73\x20\x63\x6f\x6e\x66\
\x69\x67\x75\x72\x61\x74\x69\x6f\x6e\x20\x70\x61\x72\x61\x6d\x65\
\x74\x65\x72\x73\x20\x6f\x72\x20\x6f\x74\x68\x65\x72\x2c\x20\x6d\
\x61\x79\x20\x62\x65\x20\x65\x6e\x74\x65\x72\x65\x64\x2c\x20\x65\
\x2e\x67\x2e\x2c\x20\x3c\x61\x20\x68\x72\x65\x66\x3d\x22\x70\x61\
\x67\x65\x31\x2e\x68\x74\x6d\x6c\x22\x3e\x68\x65\x72\x65\x3c\x2f\
\x61\x3e\x3c\x2f\x70\x3e\x0a\x0a\x3c\x68\x32\x20\x73\x74\x79\x6c\
\x65\x3d\x22\x63\x6f\x6c\x6f\x72\x3a\x62\x6c\x75\x65\x3b\x22\x3e\
\x54\x68\x65\x20\x50\x61\x6e\x65\x6c\x3c\x2f\x68\x32\x3e\x0a\x0a\
\x3c\x70\x3e\x54\x68\x65\x73\x65\x20\x77\x65\x62\x20\x70\x61\x67\
\x65\x73\x20\x61\x72\x65\x20\x74\x6f\x20\x62\x65\x20\x63\x6f\x6d\
\x70\x6c\x65\x74\x65\x64\x20\x62\x79\x20\x74\x68\x65\x20\x61\x70\
\x70\x6c\x69\x63\x61\x74\x69\x6f\x6e\x20\x6f\x77\x6e\x65\x72\x2e\
\x3c\x62\x72\x3e\x0a\x0a\x0a\x0a\x0a\x3c\x2f\x62\x6f\x64\x79\x3e\
\x3c\x2f\x68\x74\x6d\x6c\x3e\x0a\
"
qt_resource_name = b"\
\x00\x0a\
\x08\x8a\x34\x9c\
\x00\x70\
\x00\x61\x00\x67\x00\x65\x00\x35\x00\x2e\x00\x68\x00\x74\x00\x6d\x00\x6c\
\x00\x0a\
\x08\x7a\x34\x9c\
\x00\x70\
\x00\x61\x00\x67\x00\x65\x00\x34\x00\x2e\x00\x68\x00\x74\x00\x6d\x00\x6c\
\x00\x0a\
\x08\x5a\x34\x9c\
\x00\x70\
\x00\x61\x00\x67\x00\x65\x00\x32\x00\x2e\x00\x68\x00\x74\x00\x6d\x00\x6c\
\x00\x0a\
\x08\x6a\x34\x9c\
\x00\x70\
\x00\x61\x00\x67\x00\x65\x00\x33\x00\x2e\x00\x68\x00\x74\x00\x6d\x00\x6c\
\x00\x0a\
\x08\x4a\x34\x9c\
\x00\x70\
\x00\x61\x00\x67\x00\x65\x00\x31\x00\x2e\x00\x68\x00\x74\x00\x6d\x00\x6c\
@@ -151,33 +266,49 @@ qt_resource_name = b"\
\x0c\xba\xf2\x7c\
\x00\x69\
\x00\x6e\x00\x64\x00\x65\x00\x78\x00\x2e\x00\x68\x00\x74\x00\x6d\x00\x6c\
\x00\x0a\
\x08\x6a\x34\x9c\
\x00\x70\
\x00\x61\x00\x67\x00\x65\x00\x33\x00\x2e\x00\x68\x00\x74\x00\x6d\x00\x6c\
\x00\x0a\
\x08\x5a\x34\x9c\
\x00\x70\
\x00\x61\x00\x67\x00\x65\x00\x32\x00\x2e\x00\x68\x00\x74\x00\x6d\x00\x6c\
\x00\x0a\
\x08\x8a\x34\x9c\
\x00\x70\
\x00\x61\x00\x67\x00\x65\x00\x35\x00\x2e\x00\x68\x00\x74\x00\x6d\x00\x6c\
\x00\x0a\
\x08\x7a\x34\x9c\
\x00\x70\
\x00\x61\x00\x67\x00\x65\x00\x34\x00\x2e\x00\x68\x00\x74\x00\x6d\x00\x6c\
"
qt_resource_struct_v1 = b"\
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x06\x00\x00\x00\x01\
\x00\x00\x00\x68\x00\x00\x00\x00\x00\x01\x00\x00\x02\x85\
\x00\x00\x00\x34\x00\x00\x00\x00\x00\x01\x00\x00\x01\x2f\
\x00\x00\x00\x4e\x00\x00\x00\x00\x00\x01\x00\x00\x01\xda\
\x00\x00\x00\x1a\x00\x00\x00\x00\x00\x01\x00\x00\x00\x84\
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
\x00\x00\x00\x82\x00\x00\x00\x00\x00\x01\x00\x00\x03\x30\
\x00\x00\x00\x4e\x00\x00\x00\x00\x00\x01\x00\x00\x0c\xb2\
\x00\x00\x00\x34\x00\x00\x00\x00\x00\x01\x00\x00\x0c\x07\
\x00\x00\x00\x82\x00\x00\x00\x00\x00\x01\x00\x00\x0d\xe1\
\x00\x00\x00\x68\x00\x00\x00\x00\x00\x01\x00\x00\x0d\x5d\
\x00\x00\x00\x1a\x00\x00\x00\x00\x00\x01\x00\x00\x00\xab\
"
qt_resource_struct_v2 = b"\
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x06\x00\x00\x00\x01\
\x00\x00\x00\x00\x00\x00\x00\x00\
\x00\x00\x00\x68\x00\x00\x00\x00\x00\x01\x00\x00\x02\x85\
\x00\x00\x01\x8d\x9c\xeb\xd9\x5b\
\x00\x00\x00\x34\x00\x00\x00\x00\x00\x01\x00\x00\x01\x2f\
\x00\x00\x01\x8d\x9c\xeb\xd9\x5c\
\x00\x00\x00\x4e\x00\x00\x00\x00\x00\x01\x00\x00\x01\xda\
\x00\x00\x01\x8d\x9c\xeb\xd9\x5e\
\x00\x00\x00\x1a\x00\x00\x00\x00\x00\x01\x00\x00\x00\x84\
\x00\x00\x01\x8d\x9c\xeb\xd9\x5f\
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
\x00\x00\x01\x8d\x9c\xeb\xd9\x61\
\x00\x00\x00\x82\x00\x00\x00\x00\x00\x01\x00\x00\x03\x30\
\x00\x00\x01\x8d\xa7\xc7\x77\x2b\
\x00\x00\x01\x8d\xc6\x98\xaa\x4d\
\x00\x00\x00\x4e\x00\x00\x00\x00\x00\x01\x00\x00\x0c\xb2\
\x00\x00\x01\x8d\xc6\x98\xaa\x50\
\x00\x00\x00\x34\x00\x00\x00\x00\x00\x01\x00\x00\x0c\x07\
\x00\x00\x01\x8d\xc6\x98\xaa\x52\
\x00\x00\x00\x82\x00\x00\x00\x00\x00\x01\x00\x00\x0d\xe1\
\x00\x00\x01\x8d\xc6\x98\xaa\x54\
\x00\x00\x00\x68\x00\x00\x00\x00\x00\x01\x00\x00\x0d\x5d\
\x00\x00\x01\x8d\xc6\x98\xaa\x55\
\x00\x00\x00\x1a\x00\x00\x00\x00\x00\x01\x00\x00\x00\xab\
\x00\x00\x01\x8d\xd0\x41\x77\x24\
"
qt_version = QtCore.qVersion().split('.')
+345 -97
View File
@@ -1,5 +1,6 @@
'''The GUI module for Savings Overview and magnet control
'''
import decimal
import getpass
import os
import random
@@ -14,15 +15,21 @@ from qtpy.QtWidgets import (
QMessageBox, QPushButton, QTabBar, QTabWidget, QTableWidgetItem,
QTextEdit, QWidget)
import elog
from common.packages import elog
from apps4ops.bdbase.utils import _line
from apps4ops.bdbase.enumkind import MsgSeverity
from caqtwidgets.pvwidgets import (
CAQLabel, CAQLineEdit, CAQMenu, CAQMessageButton, CAQTableWidget, QHLine)
CAQLabel, CAQLineEdit, CAQMenu, CAQMessageButton, CAQTableWidget,
CAQTextEntry, QHLine)
_pymodule = os.path.basename(__file__)
file_path = elog.__file__
# storing the directory in dir variable
dir = os.path.dirname(file_path)
print(dir)
class AppGui(QWidget):
'''The GUI class
@@ -36,7 +43,7 @@ class AppGui(QWidget):
self.check_status = self.parent.check_status
self.check_status_list = self.parent.check_status_list
self.elog_enum = self.parent.elog_enum
self.input_parameters = self.parent.input_parameters
# Required for caqtwidgets
self.settings = self.parent.settings
self.show_log_message = self.parent.show_log_message
@@ -50,12 +57,12 @@ class AppGui(QWidget):
self.gui_frame.expert_parameters_group.setFixedWidth(260)
self.gui_frame.expert_parameters_group.setFixedHeight(130)
self.gui_frame.operator_parameters_group.setFixedWidth(260)
if "Controlroom" in self.settings.data["Master"]:
self.gui_frame.operator_parameters_group.setFixedHeight(160)
else:
self.gui_frame.operator_parameters_group.setFixedHeight(130)
#if "Controlroom" in self.settings.data["Master"]:
# self.gui_frame.operator_parameters_group.setFixedHeight(160)
#else:
self.gui_frame.operator_parameters_group.setFixedHeight(130)
self.gui_frame.measurement_tab_wgt.setFixedWidth(440)
self.gui_frame.measurement_tab_wgt.setFixedHeight(240)
self.gui_frame.measurement_tab_wgt.setFixedHeight(200)
# self.gui_frame.operator_wgt.setFixedHeight(240)
# self.gui_frame.expert_wgt.setFixedHeight(240)
@@ -69,22 +76,21 @@ class AppGui(QWidget):
self.gui_frame.central_tab_widget.tabBar().setTabText(0, "Control")
#self.gui_frame.central_tab_widget.tabBar().setTabText(1, "IOC")
#wgt = self.gui_frame.central_tab_widget.widget(1)
#lay = self.gui_frame.central_tab_widget.widget(1).layout()
if "Controlroom" in self.assigned_master:
'''
shift_type = CAQMenu(self, pv_name="PRO-HUSH:SHIFT-TYPE")
self.gui_frame.operator_parameters_group.layout().insertWidget(
0, QLabel(" Shift Type:"))
self.gui_frame.operator_parameters_group.layout().insertWidget(
1, shift_type)
'''
self.gui_frame.results_wgt.setFixedWidth(1400)
self.gui_frame.results_wgt.setFixedHeight(400)
self.gui_frame.results_wgt.setFixedHeight(860)
self.gui_frame.results_wgt.setLayout(self.gui_frame.results_layout)
self.gui_frame.results_layout.addWidget(
self.reset_ioc_sm(), 0, 0, 1, 1)
sec_prefix_list = [
sub[0: sub.index("-")] for sub in self.sec_state_list]
@@ -101,8 +107,14 @@ class AppGui(QWidget):
label.setScaledContents(True)
self.gui_frame.results_layout.addWidget(label, 0, 2, 1, 1, Qt.AlignTop)
self.gui_frame.results_layout.setContentsMargins(15, 15, 15, 15)
self.gui_frame.results_layout.setVerticalSpacing(20)
self.gui_frame.results_layout.setHorizontalSpacing(10)
self.gui_frame.results_layout.addWidget(
self.reset_lastpwr(), 1, 0, 1, 1,
Qt.AlignmentFlag(Qt.AlignTop|Qt.AlignCenter))
self.expert_labels = self.parent.expert_labels
self.settings = self.parent.settings
@@ -113,8 +125,6 @@ class AppGui(QWidget):
self.table_pwr_dict = {}
self.offtime_dict = {}
# self.I_min = 0.002 HIPA
self.cafe.openPrepare()
self.cafe.open(["PRO-HUSH:LASTPWR", "PRO-HUSH:TOTPWR",
"PRO:LASTSAVE", "PPO-HUSH:TOTSAVE"])
@@ -122,39 +132,51 @@ class AppGui(QWidget):
self.cafe.openNowAndWait(0.1)
self.magnet_tab_wgt = self.group_sector_qtabwidget()
self.magnet_tab_wgt.setFixedHeight(380)
self.gui_frame.measurement_layout.addWidget(
self.magnet_tab_wgt, 0, 2, 6, 20, alignment=Qt.AlignTop)
self.magnet_tab_wgt, 0, 2, 3, 2, alignment=Qt.AlignTop)
idx = self.magnet_tab_wgt.count() - 1
self.submastership_dict = {
"G1": None, "G2": None, "O2": None, "PIF": None, "G3": None}
_row = self.gui_frame.measurement_layout.rowCount()
self.gui_frame.measurement_layout.addWidget(
self.group_submaster_status(), _row, 2, 2, 2,
Qt.AlignTop|Qt.AlignHCenter)
self.sh_idx = self.magnet_tab_wgt.count() - 1
for i in range(0, self.magnet_tab_wgt.count()):
tabtext = self.magnet_tab_wgt.tabText(i)
if tabtext == "SH":
idx = i
self.sh_idx = i
break
self.magnet_tab_wgt.setCurrentIndex(idx)
self.magnet_tab_wgt.setCurrentIndex(self.sh_idx)
status_wgt = self.group_sector_status()
status_wgt.setFixedHeight(340)
#qf = QFrame()
#qf.setFixedHeight(15)
#self.gui_frame.measurement_layout.addWidget(qf, 2, 0, 1, 1)
self.gui_frame.measurement_layout.addWidget(
status_wgt, 3, 0, 2, 1, alignment=Qt.AlignTop) # | Qt.AlignHCenter)
status_wgt, 1, 0, 4, 1, alignment=Qt.AlignTop) # | Qt.AlignHCenter)
qf = QFrame()
qf.setFixedHeight(5)
self.gui_frame.measurement_layout.addWidget(
qf, 2, 0, 1, 1, alignment=Qt.AlignTop)
#qf = QFrame()
#qf.setFixedHeight(1)
#self.gui_frame.measurement_layout.addWidget(qf, 5, 0, 1, 1)
qf1 = QFrame()
qf1.setFixedWidth(10)
qf1.setFixedWidth(1)
self.gui_frame.measurement_layout.addWidget(
qf1, 4, 1, 2, 1, alignment=Qt.AlignTop)
qf1, 5, 1, 1, 1, alignment=Qt.AlignTop)
#qf2 = QFrame()
#qf2.setFixedWidth(1)
#self.gui_frame.measurement_layout.addWidget(
# qf2, 0, 22, 1, 1, alignment=Qt.AlignTop)
qf2 = QFrame()
qf2.setFixedWidth(1)
self.gui_frame.measurement_layout.addWidget(
qf2, 0, 7, 1, 1, alignment=Qt.AlignTop)
# Overload from guiheader.py
self.sector_disruptor_dict = {}
@@ -166,12 +188,20 @@ class AppGui(QWidget):
self.sector_disruptor_dict["G3"] = "Geschlossen"
def enable_disable_beamline(sect, sector_line, value):
def is_submaster(local_sector):
if local_sector in self.submastership_dict:
return bool(
"MASTERSHIP" in self.submastership_dict[local_sector])
#"UNDEF" in self.submastership_dict[local_sector])
#"Geschlossen" in self.submastership_dict[local_sector])
else:
return self.gui_header.is_master()
self.sector_disruptor_dict[sect] = value
#print("sect/value", sect, value)
for sector in sector_line:
if "Geschlossen" not in self.sector_disruptor_dict[
sector] or not self.gui_header.is_master():
sector] or not is_submaster(sector): #not self.gui_header.is_master():
#print("sector/value", sector, value)
#print("isMaster", self.gui_header.is_master())
#print("master", self.gui_header.mastership)
@@ -185,7 +215,6 @@ class AppGui(QWidget):
sector].restore_value_button.isEnabled():
self.table_sol_dict[
sector].restore_value_button.setEnabled(False)
else:
print("Geschlossen? sector/value/ismaster", sector, value,
self.gui_header.mastership)
@@ -291,27 +320,56 @@ class AppGui(QWidget):
"B1B2"].restore_value_button.isEnabled():
self.table_sol_dict[
"B1B2"].restore_value_button.setEnabled(True)
'''
if "B1B2" in self.settings.data["headerMagnetSector"]:
self.gui_header.shift_type.trigger_monitor_str.connect(
receive_b1b2_update)
#holds shifttype
pvd = self.cafe.getPVCache(
self.settings.data["B1B2"]["status"], dt="str")
receive_b1b2_update(pvd.value[0], pvd.alarmStatus, pvd.alarmSeverity)
receive_b1b2_update(pvd.value[0], pvd.alarmStatus, pvd.alarmSeverity)
'''
# end overload from guiheader.py
@Slot()
@Slot()
def receive_master_update(value, status, alarm_severity):
idx = self.sh_idx
for key, wgt_val in self.gui_header.master_to_wgt.items():
#master = self.gui_header.beam_current_wgt_group[wgt_val]
if value in key:
for i in range(0, self.magnet_tab_wgt.count()):
tabtext = self.magnet_tab_wgt.tabText(i)
if tabtext == wgt_val:
idx = i
break
self.magnet_tab_wgt.setCurrentIndex(idx)
self.gui_header.beam_current_wgt_dict[
"MASTER"].trigger_monitor_str.connect(receive_master_update)
pvd = self.cafe.getPVCache(
self.settings.data["MASTER"]["status"], dt="str")
try:
self.gui_header.beam_current_wgt_dict[
"MASTER"].trigger_monitor_str.emit(pvd.value[0], pvd.status,
pvd.alarmSeverity)
except Exception as ex:
print("EMIT FAILED", str(ex))
#print("EMIT SUCCEEDED ===========>")
#receive_master_update(pvd.value[0], pvd.status, pvd.alarmSeverity)
@Slot(int)
def simulation_update(state):
if bool(state):
color = self.gui_header.sim_color
else:
color = self.gui_header.op_color
print("SIM STATE CHANGED", state, color, flush=True)
self.gui_header.pf_off_color = color
###JC CHANGE BACK#
###JC COMMENT OUT TO MAKE VISIBLE WHEN TESTING#
self.gui_header.color_pframe(color)
print("SIM STATE CHANGED//", state, color, flush=True)
#print("SIMULATION IS TRUE??", self.input_parameters["simulation"])
self.gui_frame.simulation_checkbox.stateChanged.connect(
simulation_update)
@@ -373,6 +431,77 @@ class AppGui(QWidget):
print("MONITOR======>", sector, state)
break
'''
@Slot(str, int, int)
def receive_submaster_update(self, value, status, alarm_severity):
print("VALUE=========================", value, flush=True)
sender = self.sender()
print("sender, value", sender, value, flush=True)
print("sender.sector", sender.sector, flush=True)
self.submastership_dict[sender.sector] = value
print("VALUE ===============================", self.submastership_dict[sender.sector], flush=True)
'''
def group_submaster_status(self):
@Slot(str, int, int)
def receive_submaster_update(value, status, alarm_severity):
print("VALUE=========================", value, flush=True)
sender = self.sender()
print("sender, value", sender, value, flush=True)
print("sender.sector", sender.sector, flush=True)
self.submastership_dict[sender.sector] = value
print("VALUE ===============================", self.submastership_dict[sender.sector], flush=True)
pv_id = "mastershipStatus"
qgrid = QGridLayout()
qgb = QGroupBox("Mastership Status")
no_beamlines = 0
for i, sector in enumerate(self.settings.data["headerMagnetSector"]):
if "mastershipStatus" in self.settings.data[sector]:
no_beamlines += 1
qgb_inner = QGroupBox(sector)
#qgb_inner.setFixedHeight(80)
qgb_inner.setObjectName("INNER")
text_color = self.settings.data[sector]["color"]
#print("text color", text_color)
sss = ("QGroupBox {" + "color: {0};".format(text_color) +
" font-weight: bold;}")
qgb_inner.setStyleSheet(sss)
#ql = QLabel(sector)
pv_name = self.settings.data[sector][pv_id]
print(type(pv_name))
#pv_name = u"{0}".format(pv_name)
print("pv_name", pv_name, "in sector", sector)
pv_name = pv_name.encode('utf-8')
print(type(pv_name))
pv_name = pv_name.decode('ascii')
qw = CAQLabel(self, pv_name=str(pv_name))
qw.sector = sector
#self.submastership_dict[sector] = None
qw.trigger_monitor_str.connect(receive_submaster_update)
print(i, sector)
value = self.cafe.getCache(
self.settings.data[sector][pv_id], dt='str')
qw.trigger_monitor_str.emit(value, 1, 0)
print("emitted", flush=True)
qw.setFixedWidth(120)
qw.setText("submastership")
qw_layout = QHBoxLayout()
qw_layout.addWidget(qw)
qgb_inner.setLayout(qw_layout)
#qgrid.addWidget(ql, 0, i, 1, 1, Qt.AlignBottom)
qgrid.addWidget(qgb_inner, 0, i, 1, 1,
Qt.AlignTop|Qt.AlignHCenter)
qgb.setContentsMargins(9, 9, 9, 9)
qgb.setObjectName("OUTER")
qgb.setLayout(qgrid)
qgb.setFixedWidth((150 * no_beamlines) + 20)
return qgb
def group_sector_status(self):
qgrid = QGridLayout()
@@ -755,8 +884,9 @@ class AppGui(QWidget):
sum_pwr = sum(list(row_pwr_dict.values()))
pv_last_pwr = "P" + target.sector + "-HUSH:LASTPWR"
stat = self.cafe.set(pv_last_pwr, sum_pwr)
self.check_status(_pymodule, "set", pv_last_pwr, stat, _line())
if not self.input_parameters["simulation"]:
stat = self.cafe.set(pv_last_pwr, sum_pwr)
self.check_status(_pymodule, "set", pv_last_pwr, stat, _line())
def ca_table_sector_widget(self, sector: str = ""):
device_list = self.settings.data[sector]["device"]
@@ -783,24 +913,43 @@ class AppGui(QWidget):
#print(pv_dict['SOL:2'], flush=True)
#print(_standby_values, flush=True)
table_sol = CAQTableWidget(
self, pv_list=pv_dict["SOL:2"], show_units=True, notify_freq_hz=0,
notify_unison=False, scale_factor=1, show_timestamp=False,
init_column=True, pv_list_show=device_list, standby_column=True,
standby_values=standby_values, set_delay=delay)
table_sol.restore_value_button.setToolTip(
("Restore devices to their pre-standby values"))
table_sol.init_value_button.setToolTip(
("Shows initial, pre-standby values. Update is also " +
"executed automatically before the standby procedure."))
table_sol.standby_value_button.sector = sector
table_sol.standby_value_button.clicked.disconnect()
table_sol.standby_value_button.clicked.connect(self.on_sector_standby)
table_sol.restore_value_button.sector = sector
table_sol.restore_value_button.clicked.disconnect()
table_sol.restore_value_button.clicked.connect(self.on_sector_restore)
init_column = True
standby_column = True
if "B1B2" in sector:
init_column = False
standby_column = False
standby_values = None
table_sol = CAQTableWidget(
self, pv_list=pv_dict["SOL:2"], show_units=True, notify_freq_hz=1,
notify_unison=True, scale_factor=1, show_timestamp=False,
init_column=False)
else:
table_sol = CAQTableWidget(
self, pv_list=pv_dict["SOL:2"], show_units=True, notify_freq_hz=0,
notify_unison=False, scale_factor=1, show_timestamp=False,
init_column=init_column, pv_list_show=device_list,
standby_column=standby_column, standby_values=standby_values,
set_delay=delay)
if init_column:
table_sol.restore_value_button.setToolTip(
("Restore devices to their pre-standby values"))
table_sol.init_value_button.setToolTip(
("Shows initial, pre-standby values. Update is also " +
"executed automatically before the standby procedure."))
if standby_column:
table_sol.standby_value_button.sector = sector
table_sol.standby_value_button.clicked.disconnect()
table_sol.standby_value_button.clicked.connect(self.on_sector_standby)
table_sol.restore_value_button.sector = sector
table_sol.restore_value_button.clicked.disconnect()
table_sol.restore_value_button.clicked.connect(self.on_sector_restore)
self.table_sol_dict[sector] = table_sol
@@ -813,11 +962,13 @@ class AppGui(QWidget):
self, pv_list=pv_dict["PWR"], show_units=False, notify_freq_hz=1,
suffix="kW",
notify_unison=True, scale_factor=0.001, show_timestamp=False,
init_column=True, init_list=pv_dict["PWR"], pv_list_show=[False])
init_column=init_column, init_list=pv_dict["PWR"],
pv_list_show=[False])
table_pwr.init_value_button.setToolTip(
("Shows initial, pre-standby values. Update is also " +
"executed automatically before the standby procedure."))
if init_column:
table_pwr.init_value_button.setToolTip(
("Shows initial, pre-standby values. Update is also " +
"executed automatically before the standby procedure."))
self.table_pwr_dict[sector] = table_pwr
@@ -828,7 +979,11 @@ class AppGui(QWidget):
f = header_value.font()
f.setPixelSize(13)
header_item.setFont(f)
header_item.setText("Device")
if init_column:
header_item.setText("Device")
else:
header_item.setText("PV")
header_init.setFont(f)
header_init.setText("Init. Value")
header_standby.setFont(f)
@@ -837,14 +992,20 @@ class AppGui(QWidget):
header_value.setText("SOL:2")
table_sol.setContentsMargins(15, 0, 15, 10)
table_sol.setHorizontalHeaderItem(0, header_item)
table_sol.setHorizontalHeaderItem(1, header_init)
table_sol.setHorizontalHeaderItem(2, header_standby)
table_sol.setHorizontalHeaderItem(3, header_value)
if init_column:
table_sol.setHorizontalHeaderItem(1, header_init)
table_sol.setColumnWidth(1, 88)
if standby_column:
table_sol.setHorizontalHeaderItem(2, header_standby)
table_sol.setHorizontalHeaderItem(3, header_value)
table_sol.setColumnWidth(2, 80)
table_sol.setColumnWidth(3, 88)
table_sol.setColumnWidth(0, 80)
table_sol.setColumnWidth(1, 88)
table_sol.setColumnWidth(2, 80)
table_sol.setColumnWidth(3, 88)
table_sol.setFixedWidth(386)
if init_column:
table_sol.setFixedWidth(386)
else:
table_sol.setFixedWidth(220)
ioc_magnets = []
for i, device in enumerate(device_list):
@@ -871,11 +1032,16 @@ class AppGui(QWidget):
header_value.setFont(f)
header_value.setText("PWR")
table_pwr.setContentsMargins(15, 0, 15, 10)
table_pwr.setHorizontalHeaderItem(0, header_init)
table_pwr.setHorizontalHeaderItem(1, header_value)
table_pwr.setColumnWidth(0, 88)
table_pwr.setColumnWidth(1, 88)
table_pwr.setFixedWidth(226)
if init_column:
table_pwr.setHorizontalHeaderItem(0, header_init)
table_pwr.setHorizontalHeaderItem(1, header_value)
table_pwr.setColumnWidth(0, 88)
table_pwr.setColumnWidth(1, 88)
table_pwr.setFixedWidth(226)
else:
header_value.setText("PWR:2")
table_pwr.setHorizontalHeaderItem(0, header_value)
table_pwr.setFixedWidth(140)
if "Controlroom" in self.assigned_master and "B1B2" not in sector:
for i in ioc_magnets:
@@ -886,7 +1052,7 @@ class AppGui(QWidget):
pv_status = self.settings.data[sector]["status"]
beamline_status = self.cafe.getCache(pv_status)
if beamline_status is not None:
if beamline_status is not None and init_column:
# in HIPA this was I < self.I_min:
if "Geschlossen" in beamline_status:
try:
@@ -911,8 +1077,9 @@ class AppGui(QWidget):
#B1B2 is not is not in state machine
if "B1B2" in table_pwr.init_value_button.sector:
retrun
stat = self.cafe.set(pv, init_sum)
self.check_status(_pymodule, "set", pv, stat, _line())
if not self.input_parameters["simulation"]:
stat = self.cafe.set(pv, init_sum)
self.check_status(_pymodule, "set", pv, stat, _line())
def on_init_update():
table_pwr.init_value_button.setEnabled(False)
@@ -920,10 +1087,11 @@ class AppGui(QWidget):
time.sleep(0.1)
table_pwr.init_value_button.setEnabled(True)
table_sol.init_value_button.sector = sector
table_sol.init_value_button.clicked.connect(on_sol_update)
table_pwr.init_value_button.sector = sector
table_pwr.init_value_button.clicked.connect(on_init_update)
if init_column:
table_sol.init_value_button.sector = sector
table_sol.init_value_button.clicked.connect(on_sol_update)
table_pwr.init_value_button.sector = sector
table_pwr.init_value_button.clicked.connect(on_init_update)
hbox = QHBoxLayout()
hbox.addWidget(table_sol)
@@ -1006,8 +1174,9 @@ class AppGui(QWidget):
if not sector_prefix:
return
pv1 = sector_prefix + "-HUSH:SEQ-ONOFF"
stat = self.cafe.set(pv1, 0)
self.check_status(_pymodule, "set", pv1, stat, _line())
if not self.input_parameters["simulation"]:
stat = self.cafe.set(pv1, 0)
self.check_status(_pymodule, "set", pv1, stat, _line())
time.sleep(0.05)
QApplication.processEvents()
return
@@ -1018,10 +1187,11 @@ class AppGui(QWidget):
pv1 = sector_prefix + "-HUSH:SEQ-ONOFF"
pv2 = sector_prefix + "-HUSH:TOTSAVE"
pv3 = sector_prefix + "-HUSH:OFFTIME"
stat = self.cafe.set(pv1, 0)
self.check_status(_pymodule, "set", pv1, stat, _line())
off_time = self.cafe.get(pv3)
self.check_status(_pymodule, "get", pv3, None, _line())
if not self.input_parameters["simulation"]:
stat = self.cafe.set(pv1, 0)
self.check_status(_pymodule, "set", pv1, stat, _line())
off_time = self.cafe.get(pv3)
self.check_status(_pymodule, "get", pv3, None, _line())
iloop = 0
if off_time is not None:
@@ -1033,11 +1203,13 @@ class AppGui(QWidget):
QApplication.processEvents()
else:
time.sleep(0.1)
print("SECTOR ILOOP", sector_prefix, iloop)
stat = self.cafe.set(pv1, 1)
self.check_status(_pymodule, "set", pv1, stat, _line())
stat = self.cafe.set(pv2, 0)
self.check_status(_pymodule, "set", pv2, stat, _line())
if not self.input_parameters["simulation"]:
stat = self.cafe.set(pv1, 1)
self.check_status(_pymodule, "set", pv1, stat, _line())
stat = self.cafe.set(pv2, 0)
self.check_status(_pymodule, "set", pv2, stat, _line())
return
def reset_ioc_saving(self, sector_prefix_list: list = None):
@@ -1050,10 +1222,11 @@ class AppGui(QWidget):
qpb.setFixedWidth(160)
qtext = QTextEdit()
qtext.setText("""<br>&nbsp;&nbsp;The Reset Account Button resets Total Power Saved (MWh) to zero. <br>
&nbsp;&nbsp;This is typically executed at the end of the calendar year.<br>
&nbsp;&nbsp;The present energy saving figures will be entered into the elogbook.<br>
&nbsp;&nbsp;The button prompts the user for confirmation before proceeding.<br>
qtext.setText("""<br>&nbsp;&nbsp;The Reset Account Button resets Total
Power Saved (MWh) to zero. <br> &nbsp;&nbsp;This is typically executed
at the end of the calendar year. <br> &nbsp;&nbsp;The present energy
saving figures will be entered into the elogbook.<br> &nbsp;&nbsp;The
button prompts the user for confirmation before proceeding.<br>
""")
qtext.setReadOnly(True)
qtext.setStyleSheet("background-color: QColor(0, 0, 50, 10);")
@@ -1127,3 +1300,78 @@ class AppGui(QWidget):
qw.setFixedHeight(280)
return qw
def reset_lastpwr(self):
sector_label = [None] * len(self.sec_state_list)
pv_initpwr = [None] * len(self.sec_state_list)
pv_lastpwr = [None] * len(self.sec_state_list)
qgrid = QGridLayout()
qsection = QLabel("Section")
qsection.setAlignment(Qt.AlignmentFlag(Qt.AlignBottom|Qt.AlignHCenter))
qnominal = QLabel("Nominal \n Value (kW)")
qnominal.setAlignment(Qt.AlignmentFlag(Qt.AlignBottom|Qt.AlignHCenter))
qset = QLabel("Set Value (kW)")
qset.setAlignment(Qt.AlignmentFlag(Qt.AlignBottom|Qt.AlignHCenter))
#f = qsection.font()
#f.setPixelSize(16)
#qsection.setFont(f)
#qnominal.setFont(f)
#qset.setFont(f)
qgrid.addWidget(qsection, 0, 0, 1, 1)
qgrid.addWidget(qnominal, 0, 1, 1, 1)
qgrid.addWidget(qset, 0, 2, 1, 1)
for i, pv in enumerate(self.sec_state_list):
pvsplit = pv.split("-")
sector = pvsplit[0][1:]
sum_pwr = round(sum(self.settings.data[sector]["pwrref"]), 3)
pv_initpwr_value = decimal.Decimal(format(sum_pwr, '.3f'))
pv_lastpwr_name = pv.replace("STATE", "LASTPWR")
qsector = QLabel(sector + ":")
f = qsector.font()
f.setPixelSize(14)
qsector.setFont(f)
color = "black"
try:
color = self.settings.data[sector]["color"]
except KeyError as ex:
print(ex, self.settings.data[sector])
weight = "bold" if sector in self.settings.data[
"headerMagnetSector"] else "medium"
color_str = "color : {0}; font-weight:{1};".format(color, weight)
incolor = "QLabel {" + color_str + "}"
qsector.setStyleSheet(incolor)
sector_label[i] = qsector
ql = QLabel(str(pv_initpwr_value))
ql.setFont(f)
pv_initpwr[i] = ql
pv_lastpwr[i] = CAQTextEntry(self, pv_name=pv_lastpwr_name)
qgrid.addWidget(sector_label[i], i + 1, 0, 1, 1, Qt.AlignCenter)
qgrid.addWidget(pv_initpwr[i], i + 1, 1, 1, 1, Qt.AlignRight)
qgrid.addWidget(pv_lastpwr[i], i + 1, 2, 1, 1, Qt.AlignLeft)
qgrid.setContentsMargins(9, 9, 9, 9)
qgrid.setSpacing(10)
qw = QGroupBox("Last Power")
qw.setContentsMargins(5, 10, 5, 0)
qw.setAlignment(Qt.AlignTop)
qw.setObjectName("OUTER")
qw.setLayout(qgrid)
qw.setFixedWidth(250)
qw.setFixedHeight(280)
return qw