fofbcontrol/grouping.py

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, "GroupingTimeout")
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]["GroupingTimeout"])
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("GroupingTimeout", 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, "SFP3Status")
self.SFP4StatusLabel.setModel(device, "SFP4Status")
self.SFP3LaneUpFlag.setModel(device, "SFP3Status", 0)
self.SFP3ChannelUpFlag.setModel(device, "SFP3Status", 1)
self.SFP3IPLLFlag.setModel(device, "SFP3Status", 2)
self.SFP3EPLLFlag.setModel(device, "SFP3Status", 3)
self.SFP3SoftErrorFlag.setModel(device, "SFP3Status", 4)
self.SFP3HardErrorFlag.setModel(device, "SFP3Status", 5)
self.SFP4LaneUpFlag.setModel(device, "SFP4Status", 0)
self.SFP4ChannelUpFlag.setModel(device, "SFP4Status", 1)
self.SFP4IPLLFlag.setModel(device, "SFP4Status", 2)
self.SFP4EPLLFlag.setModel(device, "SFP4Status", 3)
self.SFP4SoftErrorFlag.setModel(device, "SFP4Status", 4)
self.SFP4HardErrorFlag.setModel(device, "SFP4Status", 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, "SFP%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, "OrbitStatus")
self.GlobalOrbitStateLabel.setColorMap(cm.GREEN_BOOL)
self.GlobalMagnetIDLabel.setText(magnet)
self.GlobalMagnetStateLabel.setModel(orbit, "MagnetStatus")
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, "OrbitReconnect")
def resetGlobalMagnet(self):
self.main_window.execute_ireg_command(self.magnet, "MagnetReconnect")