示例#1
0
文件: gui.py 项目: S2Innovation/PANIC
    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
示例#2
0
文件: gui.py 项目: S2Innovation/PANIC
    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