284 lines
11 KiB
Python
284 lines
11 KiB
Python
""" Gui header for SLS
|
|
"""
|
|
from qtpy.QtCore import Qt
|
|
from qtpy.QtGui import QFont
|
|
from qtpy.QtWidgets import (QGridLayout, QGroupBox, QHBoxLayout, QLabel,
|
|
QVBoxLayout, QWidget)
|
|
|
|
from caqtwidgets.pvwidgets import CAQLabel
|
|
from pyqtacc.bdbase.enumkind import UserMode
|
|
|
|
class GUIHeader(QWidget):
|
|
""" GUI Header Class
|
|
"""
|
|
def __init__(self, parent, user_mode=UserMode.OPERATION, extended=True):
|
|
super(GUIHeader, self).__init__()
|
|
self.parent = parent
|
|
self.appname = parent.appname
|
|
self.title = parent.title
|
|
self.settings = parent.settings
|
|
self.user_mode = user_mode
|
|
self.current_user_mode = user_mode
|
|
self.extended = extended
|
|
self.cafe = parent.cafe
|
|
self.cyca = parent.cyca
|
|
|
|
self.input_parameters = parent.input_parameters
|
|
self.input_labels = parent.input_labels
|
|
self.expert_parameters = parent.expert_parameters
|
|
self.expert_labels = parent.expert_labels
|
|
|
|
self.pct_status = None
|
|
self.orbit_status = None
|
|
self.machine_status = None
|
|
|
|
self.font_gui = QFont("sans serif")
|
|
self.font_gui.setPointSize(11)
|
|
self.font_pts10 = QFont("sans serif")
|
|
self.font_pts10.setPointSize(10)
|
|
self.widget_height = self.settings.data["StyleGuide"]["widgetHeight"]
|
|
self.extra_height = self.settings.data["StyleGuide"]["extraGroupHeight"]
|
|
self.extra_height = self.settings.data["StyleGuide"]["extraGroupHeight"]
|
|
self.machine_color = self.settings.data['Machine']['color']
|
|
self.machine_grad = self.settings.data['Machine']['qlingrad']
|
|
|
|
pvlist = []
|
|
|
|
for pv in self.settings.data["OpMsg"].values():
|
|
pvlist.append(pv)
|
|
for pv in self.settings.data["PCT"].values():
|
|
pvlist.append(pv)
|
|
for pv in self.settings.data["OFB"].values():
|
|
pvlist.append(pv)
|
|
|
|
self.cafe.openPrepare()
|
|
self.cafe.open(pvlist)
|
|
self.cafe.openNowAndWait(0.4)
|
|
self.cafe.printDisconnected()
|
|
|
|
self.station_width = 200 #default
|
|
self.station_height = 100
|
|
self.hor_layout = QHBoxLayout()
|
|
self.hor_layout.addWidget(self.status_widget())
|
|
self.hor_layout.addWidget(self.pct_widget())
|
|
self.hor_layout.addWidget(self.orbit_widget())
|
|
self.hor_layout.setSpacing(10)
|
|
self.hor_layout.setAlignment(Qt.AlignLeft)
|
|
self.hor_layout.setContentsMargins(5, 0, 5, 0)
|
|
|
|
self.header_wgt = QGroupBox()
|
|
self.header_wgt.setObjectName(self.user_mode.name)
|
|
self.header_wgt.setLayout(self.hor_layout)
|
|
self.header_wgt.setFixedHeight(110)
|
|
title = "SLS {0}".format(self.user_mode.name)
|
|
if self.title:
|
|
title += ": {0}".format(self.title)
|
|
self.header_wgt.setTitle(title)
|
|
|
|
def reset_operation_mode(self):
|
|
""" Reset header colors to application operation mode
|
|
"""
|
|
self.change_operation_mode(user_mode=self.user_mode)
|
|
|
|
def change_operation_mode(self, user_mode=UserMode.OPERATION):
|
|
""" Different operation modes have different color schemes
|
|
"""
|
|
self.header_wgt.setObjectName(user_mode.name)
|
|
self.header_wgt.setTitle(self.header_wgt.title().replace(
|
|
self.current_user_mode.name, user_mode.name))
|
|
self.header_wgt.style().polish(self.header_wgt)
|
|
self.current_user_mode = user_mode
|
|
|
|
def status_widget(self):
|
|
""" QGroupBox encompassing machine status info
|
|
"""
|
|
station = QGroupBox()
|
|
station.setObjectName("MACHINE")
|
|
station.setAlignment(Qt.AlignmentFlag(Qt.AlignHCenter|Qt.AlignTop))
|
|
station.setFlat(False)
|
|
station.setTitle("Status")
|
|
date = CAQLabel(self, pv_name=self.settings.data["OpMsg"]["pvDate1"])
|
|
date.setFixedHeight(self.widget_height)
|
|
date.setFixedWidth(140)
|
|
uptime = CAQLabel(self, pv_name=self.settings.data["OpMsg"]["upTime"],
|
|
show_units=True, prefix=" Up")
|
|
uptime.setFixedHeight(self.widget_height)
|
|
uptime.setFixedWidth(110)
|
|
uptime.setAlignment(Qt.AlignCenter)
|
|
message = CAQLabel(
|
|
self, pv_name=self.settings.data["OpMsg"]["pvMsg1"])
|
|
message.setFixedHeight(self.widget_height)
|
|
message.setFixedWidth(uptime.width() + date.width() + 15)
|
|
|
|
grid_layout = QGridLayout()
|
|
grid_layout.addWidget(date, 0, 0, 1, 1, Qt.AlignCenter)
|
|
grid_layout.addWidget(uptime, 0, 1, 1, 1, Qt.AlignRight)
|
|
grid_layout.addWidget(message, 1, 0, 1, 2, Qt.AlignCenter)
|
|
grid_layout.setVerticalSpacing(0)
|
|
grid_layout.setHorizontalSpacing(0)
|
|
grid_layout.setContentsMargins(2, 9, 2, 0)
|
|
|
|
station.setLayout(grid_layout)
|
|
station.setFixedHeight(uptime.height() + date.height() +
|
|
self.extra_height)
|
|
station.setFixedWidth(uptime.width() + date.width() + 23)
|
|
self.machine_status = station
|
|
return self.machine_status
|
|
|
|
|
|
def pct_widget(self):
|
|
|
|
ipct_widget = QGroupBox()
|
|
ipct_widget.setAlignment(Qt.AlignHCenter)
|
|
ipct_widget.setFlat(False)
|
|
ipct_widget.setTitle("PCT")
|
|
|
|
ipct_layout_outer = QHBoxLayout()
|
|
|
|
ipct_layout_inner = QVBoxLayout()
|
|
ipct_widget_inner = QWidget()
|
|
|
|
ipct_current = CAQLabel(
|
|
self, pv_name=self.settings.data["PCT"]["current"], precision=3,
|
|
show_units=True)
|
|
ipct_cur_roc = CAQLabel(
|
|
self, pv_name=self.settings.data["PCT"]["curROC"], show_units=True,
|
|
prefix="ROC")
|
|
ipct_tau = CAQLabel(
|
|
self, pv_name=self.settings.data["PCT"]["tauHour"], show_units=True,
|
|
prefix="Tau")
|
|
ipct_inj = CAQLabel(self, pv_name=self.settings.data["PCT"]["injRate"],
|
|
show_units=True, prefix="Inj")
|
|
|
|
ipct_current.setFixedHeight(self.widget_height)
|
|
ipct_current.setMinimumWidth(160)
|
|
ipct_cur_roc.setFixedHeight(self.widget_height)
|
|
ipct_cur_roc.setMinimumWidth(160)
|
|
ipct_tau.setFixedHeight(self.widget_height)
|
|
ipct_tau.setMinimumWidth(150)
|
|
ipct_inj.setFixedHeight(self.widget_height)
|
|
ipct_inj.setMinimumWidth(150)
|
|
|
|
ipct_layout_inner.addWidget(ipct_current, stretch=0,
|
|
alignment=Qt.AlignLeft)
|
|
ipct_layout_inner.addWidget(ipct_cur_roc, stretch=0,
|
|
alignment=Qt.AlignLeft)
|
|
ipct_layout_inner.setSpacing(0)
|
|
ipct_layout_inner.setContentsMargins(2, 9, 2, 0)
|
|
ipct_widget_inner.setLayout(ipct_layout_inner)
|
|
|
|
ipct_layout_inner2 = QVBoxLayout()
|
|
ipct_widget_inner2 = QWidget()
|
|
|
|
ipct_layout_inner2.addWidget(ipct_tau, stretch=0,
|
|
alignment=Qt.AlignLeft)
|
|
ipct_layout_inner2.addWidget(ipct_inj, stretch=0,
|
|
alignment=Qt.AlignLeft)
|
|
|
|
ipct_layout_inner2.setSpacing(0)
|
|
ipct_widget_inner2.setLayout(ipct_layout_inner2)
|
|
ipct_layout_inner2.setContentsMargins(2, 9, 2, 0)
|
|
|
|
ipct_layout_outer.addWidget(ipct_widget_inner, stretch=0,
|
|
alignment=Qt.AlignCenter)
|
|
ipct_layout_outer.addWidget(ipct_widget_inner2, stretch=0,
|
|
alignment=Qt.AlignCenter)
|
|
ipct_layout_outer.setSpacing(0)
|
|
ipct_widget.setLayout(ipct_layout_outer)
|
|
ipct_layout_outer.setContentsMargins(0, 0, 0, 0)
|
|
ipct_widget.setObjectName("PCT")
|
|
|
|
ipct_widget.setFixedHeight(self.machine_status.height())
|
|
ipct_widget.setFixedWidth(320)
|
|
|
|
|
|
return ipct_widget
|
|
|
|
def orbit_widget(self):
|
|
|
|
orbit_widget = QGroupBox()
|
|
orbit_widget.setAlignment(Qt.AlignHCenter)
|
|
orbit_widget.setFlat(False)
|
|
orbit_widget.setTitle("Orbit")
|
|
|
|
orbit_layout_outer = QVBoxLayout()
|
|
orbit_layout_inner = QHBoxLayout()
|
|
orbit_layout_inner2 = QHBoxLayout()
|
|
orbit_widget_inner = QWidget()
|
|
orbit_widget_inner2 = QWidget()
|
|
|
|
orbit_xrms = CAQLabel(self, pv_name=self.settings.data["OFB"]["xrms"],
|
|
show_units=True)
|
|
orbit_yrms = CAQLabel(self, pv_name=self.settings.data["OFB"]["yrms"],
|
|
show_units=True)
|
|
orbit_xmean = CAQLabel(self, pv_name=self.settings.data["OFB"]["xmean"],
|
|
show_units=True)
|
|
orbit_ymean = CAQLabel(self, pv_name=self.settings.data["OFB"]["ymean"],
|
|
show_units=True)
|
|
|
|
orbit_xrms.setFixedHeight(self.widget_height)
|
|
orbit_xrms.setMinimumWidth(110)
|
|
orbit_yrms.setFixedHeight(self.widget_height)
|
|
orbit_yrms.setMinimumWidth(110)
|
|
orbit_xmean.setFixedHeight(self.widget_height)
|
|
orbit_xmean.setMinimumWidth(110)
|
|
orbit_ymean.setFixedHeight(self.widget_height)
|
|
orbit_ymean.setMinimumWidth(110)
|
|
|
|
x_label = QLabel('\u27E8x\u27E9:')
|
|
x_label.setFixedHeight(self.widget_height)
|
|
x_label.setFont(self.font_pts10)
|
|
y_label = QLabel('\u27E8y\u27E9:')
|
|
y_label.setFixedHeight(self.widget_height)
|
|
y_label.setFont(self.font_pts10)
|
|
x_pm = QLabel(' \u00B1 ')
|
|
x_pm.setFixedHeight(self.widget_height)
|
|
x_pm.setFont(self.font_pts10)
|
|
y_pm = QLabel(' \u00B1 ')
|
|
y_pm.setFixedHeight(self.widget_height)
|
|
y_pm.setFont(self.font_pts10)
|
|
orbit_layout_inner.addWidget(x_label, stretch=0,
|
|
alignment=Qt.AlignRight)
|
|
orbit_layout_inner.addWidget(orbit_xmean, stretch=0,
|
|
alignment=Qt.AlignLeft)
|
|
orbit_layout_inner.addWidget(x_pm, stretch=0, alignment=Qt.AlignCenter)
|
|
orbit_layout_inner.addWidget(orbit_xrms, stretch=0,
|
|
alignment=Qt.AlignLeft)
|
|
orbit_layout_inner.setSpacing(0)
|
|
orbit_layout_inner.setContentsMargins(9, 9, 9, 0)
|
|
orbit_widget_inner.setLayout(orbit_layout_inner)
|
|
orbit_layout_inner2.addWidget(y_label, stretch=0,
|
|
alignment=Qt.AlignRight)
|
|
orbit_layout_inner2.addWidget(orbit_ymean, stretch=0,
|
|
alignment=Qt.AlignLeft)
|
|
orbit_layout_inner2.addWidget(y_pm, stretch=0,
|
|
alignment=Qt.AlignCenter)
|
|
orbit_layout_inner2.addWidget(orbit_yrms, stretch=0,
|
|
alignment=Qt.AlignLeft)
|
|
orbit_layout_inner2.setSpacing(0)
|
|
orbit_layout_inner2.setContentsMargins(9, 0, 9, 0)
|
|
orbit_widget_inner2.setLayout(orbit_layout_inner2)
|
|
orbit_layout_outer.setContentsMargins(0, 0, 0, 0)
|
|
orbit_layout_outer.addWidget(orbit_widget_inner, stretch=0,
|
|
alignment=Qt.AlignLeft)
|
|
orbit_layout_outer.addWidget(orbit_widget_inner2, stretch=0,
|
|
alignment=Qt.AlignLeft)
|
|
orbit_layout_outer.setSpacing(0)
|
|
|
|
orbit_widget.setLayout(orbit_layout_outer)
|
|
|
|
orbit_widget.setObjectName("ORBIT")
|
|
|
|
orbit_widget.setFixedHeight(self.machine_status.height())
|
|
orbit_widget.setFixedWidth(280)
|
|
|
|
return orbit_widget
|
|
|
|
'''
|
|
#Used in v.1.6.3
|
|
def get_location_color(self, title: str):
|
|
return self.machine_color
|
|
def get_location_gradient_color(self, title: str):
|
|
return self.machine_grad
|
|
'''
|