def showList(self, delete=False): """ This method just redraws the list keeping the currently selected items """ trace('%s -> AlarmGUI.showList()' % time.ctime(), level=2) #self._ui.listWidget.blockSignals(True) currents, news = [a.tag for a in self.getSelectedAlarms()], [] trace('\t\t%d items selected' % len(currents), level=3) if delete: trace('\t\tremoving objects from the list ...') while self._ui.listWidget.count(): delItem = self._ui.listWidget.takeItem(0) #del delItem trace('\t\tdisplaying the list ...', level=2) ActiveCheck = self._ui.activeCheckBox.isChecked() \ or self.timeSortingEnabled data = self.view.sort() if not data: trace('NO ALARMS FOUND!!!', level=1) else: self.ALARM_LENGTHS[0] = max( len(str(t).split('/')[-1]) for t in data) self.ALARM_LENGTHS[3] = max( len(str(t).rsplit('/', 1)[0]) for t in data) for i in range(len(data)): #self.getVisibleRows(): t = data[i] try: data[i] = (self.view.get_alarm(t), self.view.get_alarm_as_text( t, cols=self.ALARM_ROW, lengths=self.ALARM_LENGTHS)) except: traceback.print_exc() # data is now a sorted list of alarm,text rows for i, t in enumerate(data): #self._ordered: #obj = self.AlarmRows[alarm.tag] #if not ActiveCheck or (obj.alarm and not obj.alarmAcknowledged #and (obj.alarm.active #or (not self.timeSortingEnabled #and str(obj.quality) == 'ATTR_INVALID'))): alarm, text = t if i >= self._ui.listWidget.count(): self._ui.listWidget.addItem("...") font = Qt.QFont(Qt.QString("Courier")) self._ui.listWidget.item(i).setFont(font) item = self._ui.listWidget.item(i) row = str(item.text()) if text != row: #font = Qt.QFont(Qt.QString("Courier")) #self._ui.listWidget.item(i).setFont(font) item.setText(text) self.setFontsAndColors(item, alarm) if alarm.tag in currents: try: trace('\tselect %s' % alarm.tag) item.setSelected(True) if alarm.tag == currents[0]: self._ui.listWidget.setCurrentItem(item) except: traceback.print_exc() else: item.setSelected(False) for i in range(len(data), self._ui.listWidget.count()): item = self._ui.listWidget.item(i) item.setText('') item.setBackgroundColor(Qt.QColor('white')) item.setIcon(self.NO_ICON) self.changed = False trace('\t\tshowList(): %d alarms match filters.' % self._ui.listWidget.count()) self.updateStatusLabel() #< getAlarms() called again here
def setFontsAndColors(item, alarm): state, severity = alarm.get_state(), alarm.severity severity = severity or panic.DEFAULT_SEVERITY color = Qt.QColor("black") background = Qt.QColor("white") bold = False icon = "" if state in ('OOSRV', ): color = Qt.QColor("grey").light() background = Qt.QColor("white") elif state in ('ERROR', ): color = Qt.QColor("red") background = Qt.QColor("white") elif state in ACTIVE_STATES: if severity in ('ERROR', ): color = Qt.QColor("white") background = Qt.QColor("red").lighter() elif severity in ('ALARM', ): background = Qt.QColor("red").lighter() elif severity == 'WARNING': background = Qt.QColor("orange").lighter() elif severity in ('INFO', 'DEBUG'): background = Qt.QColor("yellow").lighter() elif state in ('DSUPR', 'SHLVD'): color = Qt.QColor("grey").light() background = Qt.QColor("white") elif state == 'NORM': color = Qt.QColor("green").lighter() background = Qt.QColor("white") else: raise Exception('UnknownState:%s' % state) icon = getIconForAlarm(alarm) if (fandango.now() - alarm.get_time()) < 60: bold = True alarmicon = getThemeIcon(icon) if icon else None #tracer('setFontsAndColors(%s,%s,%s,%s,%s)' #%(alarm.tag,state,icon,background,bold)) item.setIcon(alarmicon or Qt.QIcon()) item.setTextColor(color) item.setBackgroundColor(background) f = item.font() f.setFixedPitch(True) f.setBold(bold) item.setFont(f) status = [ 'Severity: ' + alarm.severity, 'Formula: ' + alarm.formula, 'Description: %s' % alarm.description, 'Alarm Device: %s' % alarm.device, 'Archived: %s' % ('Yes' if 'SNAP' in alarm.receivers else 'No'), ] for t in ('last_error', 'acknowledged', 'disabled', 'sortkey'): v = getattr(alarm, t, None) if v: status.append('%s%s: %s' % (t[0].upper(), t[1:], shortstr(v))) item.setToolTip('\n'.join(status)) try: forms = [] for f in WindowManager.WINDOWS: if isinstance(f, AlarmForm): tag = f.getCurrentAlarm().tag if tag == alarm.tag: forms.append(f) if forms: #@TODO: these checks will be not needed after full update tracer("\tupdating %d %s forms" % (len(forms), alarm)) [f.valueChanged(forced=True) for f in forms] else: pass #tracer("no forms open?") except: tracer(traceback.format_exc()) return item