143 lines
4.8 KiB
Python
143 lines
4.8 KiB
Python
import os
|
|
|
|
from PyQt4 import QtGui, QtCore, uic
|
|
|
|
from labels import cm
|
|
|
|
base_dir = os.path.dirname(os.path.realpath(__file__))
|
|
|
|
|
|
class GroupingWindow(QtGui.QWidget):
|
|
def __init__(self, main_window, parent=None):
|
|
QtGui.QWidget.__init__(self, parent)
|
|
uic.loadUi("%s/ui/grouping.ui" % base_dir, self)
|
|
|
|
self.main_window = main_window
|
|
self.units = self.main_window.units
|
|
self.addAttribute = lambda dev, attr: self.main_window.addAttribute(dev, attr)
|
|
|
|
self.list_layout = QtGui.QVBoxLayout()
|
|
self.ContentFrame.setLayout(self.list_layout)
|
|
self.liberas = {}
|
|
self.timeouts = []
|
|
|
|
self.connect(self.TimeoutSpinBox, QtCore.SIGNAL("editingFinished()"), self.setTimeout)
|
|
|
|
def addLibera(self, dev):
|
|
print "[ INFO]: grouping: add Libera %s" % dev
|
|
libera = GroupingWidget(self.main_window, dev)
|
|
self.connect(self, QtCore.SIGNAL("update"), libera.update)
|
|
self.liberas[dev] = libera
|
|
self.list_layout.addWidget(libera)
|
|
self.addAttribute(dev, "GdxGroupingTimeout")
|
|
|
|
def addGlobal(self, orbit, magnet):
|
|
print "[ INFO]: grouping: global: orbit %s; magnet %s" % (orbit, magnet)
|
|
w = GlobalWidget(self.main_window, orbit, magnet)
|
|
self.connect(self, QtCore.SIGNAL("update"), w.update)
|
|
self.list_layout.addWidget(w)
|
|
|
|
def update(self, cache):
|
|
self.emit(QtCore.SIGNAL("update"), cache)
|
|
|
|
self.timeouts = []
|
|
for dev in self.liberas.keys():
|
|
self.timeouts.append(cache[dev]["GdxGroupingTimeout"])
|
|
to_set = set(self.timeouts)
|
|
common_to = max(to_set, key=self.timeouts.count)
|
|
|
|
self.TimeoutLabel.setText(str(common_to))
|
|
if len(to_set) > 1:
|
|
self.WarningLabel.show()
|
|
else:
|
|
self.WarningLabel.hide()
|
|
|
|
def showEvent(self, evt):
|
|
self.emit(QtCore.SIGNAL("show"))
|
|
evt.accept()
|
|
|
|
def hideEvent(self, evt):
|
|
self.emit(QtCore.SIGNAL("hide"))
|
|
evt.accept()
|
|
|
|
def setTimeout(self):
|
|
for dev in self.liberas.keys():
|
|
self.main_window.devices[dev].write_attribute("GdxGroupingTimeout", self.TimeoutSpinBox.value())
|
|
|
|
|
|
class GroupingWidget(QtGui.QWidget):
|
|
def __init__(self, main_window, device, parent=None):
|
|
QtGui.QWidget.__init__(self, parent)
|
|
uic.loadUi("%s/ui/groupingwidget.ui" % base_dir, self)
|
|
|
|
self.main_window = main_window
|
|
self.units = self.main_window.units
|
|
self.addAttribute = lambda dev, attr: self.main_window.addAttribute(dev, attr)
|
|
|
|
self.device = device
|
|
|
|
self.IDLabel.setText(device)
|
|
self.SFP3StatusLabel.setModel(device, "GdxSFP3Status")
|
|
self.SFP4StatusLabel.setModel(device, "GdxSFP4Status")
|
|
|
|
self.SFP3LaneUpFlag.setModel(device, "GdxSFP3Status", 0)
|
|
self.SFP3ChannelUpFlag.setModel(device, "GdxSFP3Status", 1)
|
|
self.SFP3IPLLFlag.setModel(device, "GdxSFP3Status", 2)
|
|
self.SFP3EPLLFlag.setModel(device, "GdxSFP3Status", 3)
|
|
self.SFP3SoftErrorFlag.setModel(device, "GdxSFP3Status", 4)
|
|
self.SFP3HardErrorFlag.setModel(device, "GdxSFP3Status", 5)
|
|
|
|
self.SFP4LaneUpFlag.setModel(device, "GdxSFP4Status", 0)
|
|
self.SFP4ChannelUpFlag.setModel(device, "GdxSFP4Status", 1)
|
|
self.SFP4IPLLFlag.setModel(device, "GdxSFP4Status", 2)
|
|
self.SFP4EPLLFlag.setModel(device, "GdxSFP4Status", 3)
|
|
self.SFP4SoftErrorFlag.setModel(device, "GdxSFP4Status", 4)
|
|
self.SFP4HardErrorFlag.setModel(device, "GdxSFP4Status", 5)
|
|
|
|
self.SFP3SoftErrorFlag.setColorMap(cm.RED_BOOL)
|
|
self.SFP3HardErrorFlag.setColorMap(cm.RED_BOOL)
|
|
self.SFP4SoftErrorFlag.setColorMap(cm.RED_BOOL)
|
|
self.SFP4HardErrorFlag.setColorMap(cm.RED_BOOL)
|
|
|
|
self.connect(self.ClearSFP3Button, QtCore.SIGNAL("clicked()"), lambda: self.clearStatus(3))
|
|
self.connect(self.ClearSFP4Button, QtCore.SIGNAL("clicked()"), lambda: self.clearStatus(4))
|
|
|
|
def update(self, cache):
|
|
self.emit(QtCore.SIGNAL("update"), cache)
|
|
|
|
def clearStatus(self, sfp):
|
|
self.main_window.execute_ireg_command(self.device, "GdxSFP%dStatusClear" % sfp)
|
|
|
|
|
|
class GlobalWidget(QtGui.QWidget):
|
|
def __init__(self, main_window, orbit, magnet, parent=None):
|
|
QtGui.QWidget.__init__(self, parent)
|
|
uic.loadUi("%s/ui/globalwidget.ui" % base_dir, self)
|
|
|
|
self.main_window = main_window
|
|
self.units = self.main_window.units
|
|
self.addAttribute = lambda dev, attr: self.main_window.addAttribute(dev, attr)
|
|
|
|
self.orbit = orbit
|
|
self.magnet = magnet
|
|
|
|
self.GlobalOrbitIDLabel.setText(orbit)
|
|
self.GlobalOrbitStateLabel.setModel(orbit, "GdxOrbitStatus")
|
|
self.GlobalOrbitStateLabel.setColorMap(cm.GREEN_BOOL)
|
|
|
|
self.GlobalMagnetIDLabel.setText(magnet)
|
|
self.GlobalMagnetStateLabel.setModel(orbit, "GdxMagnetStatus")
|
|
self.GlobalMagnetStateLabel.setColorMap(cm.GREEN_BOOL)
|
|
|
|
self.connect(self.GlobalOrbitResetButton, QtCore.SIGNAL("clicked()"), self.resetGlobalOrbit)
|
|
self.connect(self.GlobalMagnetResetButton, QtCore.SIGNAL("clicked()"), self.resetGlobalMagnet)
|
|
|
|
def update(self, cache):
|
|
self.emit(QtCore.SIGNAL("update"), cache)
|
|
|
|
def resetGlobalOrbit(self):
|
|
self.main_window.execute_ireg_command(self.orbit, "GdxOrbitReconnect")
|
|
|
|
def resetGlobalMagnet(self):
|
|
self.main_window.execute_ireg_command(self.magnet, "GdxMagnetReconnect")
|