commit 869ef989dc1723e836773abf1ab0d85b3566d5c1 Author: chrin Date: Tue Jun 28 11:30:02 2022 +0200 initial commit diff --git a/README.md b/README.md new file mode 100644 index 0000000..e69de29 diff --git a/enumkind.py b/enumkind.py new file mode 100644 index 0000000..e7174fe --- /dev/null +++ b/enumkind.py @@ -0,0 +1,40 @@ + +from enum import IntEnum + +class ElogSLS: + def __init__(self): + self.category = self.Category(0) + self.domain = self.Domain(0) + self.system = self.System(0) + + class Category(IntEnum): + INFO = 0 + MEASUREMENT = 1 + + class Domain(IntEnum): + NONE = 0 + INJECTOR = 1 + LINAC1 = 2 + LINAC2 = 3 + LINAC3 = 4 + ARAMIS = 5 + ARAMIS_BEAMLINES = 6 + ATHOS = 7 + ATHOS_BEAMLINES = 8 + + class System(IntEnum): + NONE = 0 + BEAMDYNAMICS = 1 + CONTROLS = 2 + DIAGNOSTICS = 3 + ELECTRICSUPPLY = 4 + INSERTIONDEVICES = 5 + LASER = 6 + MAGNETPOWERSUPPLIES = 7 + OPERATION = 8 + RF = 9 + SAFETY = 10 + VACUUM = 11 + WATERCOOLING = 11 + OTHER = 12 + UNKNOWN = 13 diff --git a/guiheader.py b/guiheader.py new file mode 100644 index 0000000..af6d94a --- /dev/null +++ b/guiheader.py @@ -0,0 +1,272 @@ +""" 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"] + + 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.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