1 """
2 Created on 28.10.2013
3 @author: lehmann
4
5 """
6
7 from PyQt4.QtGui import QColor
8 from PyQt4.QtCore import QAbstractTableModel, Qt, QVariant, QModelIndex
9
10 from alarmserver import AlarmServer, AlarmNotDefinedError
11
12 ALARM_NR = 0
13 ALARM_TEXT = 1
14 ALARM_COUNTER = 2
15
17 """
18 Model for viewing active alarms.
19
20 """
21
28
30 alarm = self.defined_alarms.get(alarm_nr)
31 if alarm is None:
32 raise AlarmNotDefinedError(alarm_nr)
33
34 if alarm.active:
35 alarm.counter += 1
36 else:
37 alarm_count = len(self.active_alarms)
38 self.beginInsertRows(QModelIndex(), alarm_count - 1, alarm_count - 1)
39 AlarmServer.raise_alarm(self, alarm_nr)
40 self.endInsertRows()
41
42 - def rowCount(self, index=QModelIndex()):
43 return len(self.active_alarms)
44
47
48 - def data(self, index, role=Qt.DisplayRole):
49 """
50 @type index: PyQt4.QtCore.QModelIndex
51 @param role: int
52
53 """
54
55 if not index.isValid() or \
56 not (0 <= index.row() < len(self.active_alarms)):
57 return QVariant
58
59 alarm = self.active_alarms[index.row()]
60 column = index.column()
61 if role == Qt.DisplayRole:
62 if column == ALARM_NR:
63 return QVariant(alarm.alarm_nr)
64 elif column == ALARM_TEXT:
65 return QVariant(alarm.text)
66 elif column == ALARM_COUNTER:
67 return QVariant(alarm.counter)
68 elif role == Qt.TextAlignmentRole:
69 return QVariant(int(Qt.AlignLeft | Qt.AlignVCenter))
70 elif role == Qt.TextColorRole:
71 if alarm.acknowledged:
72 return QVariant(QColor(Qt.darkGreen))
73 elif alarm.active:
74 return QVariant(QColor(Qt.red))
75