Files
sls/guiheader.py

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
'''