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