1
2 """
3 Created on 28.10.2013
4 @author: lehmann
5
6 """
7
8 from PyQt4.QtGui import QColor
9 from PyQt4.QtCore import QAbstractTableModel, Qt, QVariant, QModelIndex, SIGNAL
10
11 from alarmserver import AlarmServer, AlarmNotDefinedError
12
13 ALARM_NR = 0
14 ALARM_TEXT = 1
15 ALARM_COUNTER = 2
16 ALARM_TIME_COMING = 3
17 ALARM_TIME_GOING = 4
18
19 COLUMN_COUNT = 5
20 TIME_PATTERN = "%H:%M:%S"
21
23 """
24 This class allows the user access to the alarm server via
25 the model/view mechanism of the Qt framework.
26
27 """
28
32
34 alarm = self.defined_alarms.get(alarm_nr)
35
36 if alarm is None:
37 raise AlarmNotDefinedError(alarm_nr)
38
39 if alarm in self.current_alarms:
40 row = self.current_alarms.index(alarm)
41 indexTopLeft = self.index(row, 0, QModelIndex())
42 indexBottomRight = self.index(row, COLUMN_COUNT - 1, QModelIndex())
43 self.emit(SIGNAL("dataChanged(QModelIndex, QModelIndex)"), indexTopLeft, indexBottomRight)
44
48
53
55 alarm = self.defined_alarms.get(alarm_nr)
56 if alarm is None:
57 raise AlarmNotDefinedError(alarm_nr)
58
59 if alarm in self.current_alarms:
60 AlarmServer.alarm_coming(self, alarm_nr)
61 row = self.current_alarms.index(alarm)
62 indexTopLeft = self.index(row, 0, QModelIndex())
63 indexBottomRight = self.index(row, COLUMN_COUNT - 1, QModelIndex())
64
65 self.emit(SIGNAL("dataChanged(QModelIndex, QModelIndex)"), indexTopLeft, indexBottomRight)
66 else:
67 alarm_count = len(self.current_alarms)
68 self.beginInsertRows(QModelIndex(), alarm_count - 1, alarm_count - 1)
69 AlarmServer.alarm_coming(self, alarm_nr)
70 self.endInsertRows()
71
75
76 - def clear(self, alarm_nr):
77 alarm = self.defined_alarms.get(alarm_nr)
78 if alarm is None:
79 raise AlarmNotDefinedError(alarm_nr)
80
81 if alarm in self.current_alarms:
82 row = self.current_alarms.index(alarm)
83 self.beginRemoveRows(QModelIndex(), row, row)
84 AlarmServer.clear(self, alarm_nr)
85 self.endRemoveRows()
86
91
94
95 - def data(self, index, role=Qt.DisplayRole):
96 """
97 @type index: Gui.QtCore.QModelIndex
98 @param role: int
99
100 """
101
102 if not index.isValid() or \
103 not (0 <= index.row() < len(self.current_alarms)):
104 return QVariant
105
106 alarm = self.current_alarms[index.row()]
107 column = index.column()
108 if role == Qt.DisplayRole:
109 if column == ALARM_NR:
110 return QVariant(alarm.alarm_nr)
111 elif column == ALARM_TEXT:
112 return QVariant(alarm.text)
113 elif column == ALARM_COUNTER:
114 return QVariant(alarm.counter)
115 elif column == ALARM_TIME_COMING:
116 return QVariant(alarm.time_coming.strftime(TIME_PATTERN))
117 elif column == ALARM_TIME_GOING:
118 time_going = alarm.time_going
119 if time_going is None:
120 return QVariant()
121 return QVariant(alarm.time_going.strftime(TIME_PATTERN))
122 elif role == Qt.TextAlignmentRole:
123 return QVariant(int(Qt.AlignLeft | Qt.AlignVCenter))
124 elif role == Qt.TextColorRole:
125 if alarm.is_acknowledged:
126 return QVariant(QColor(Qt.darkGreen))
127 elif alarm.is_active:
128 return QVariant(QColor(Qt.red))
129
131 if role == Qt.TextAlignmentRole:
132 return QVariant(int(Qt.AlignLeft | Qt.AlignVCenter))
133 if role == Qt.DisplayRole:
134 if orientation == Qt.Horizontal:
135 if section == ALARM_NR:
136 return "id"
137 elif section == ALARM_TEXT:
138 return "message"
139 elif section == ALARM_COUNTER:
140 return "counter"
141 elif section == ALARM_TIME_COMING:
142 return "time coming"
143 elif section == ALARM_TIME_GOING:
144 return "time going"
145 else:
146 return QVariant()
147 else:
148 return QVariant(section + 1)
149 return QVariant()
150
151 - def rowCount(self, index=QModelIndex()):
152 return len(self.current_alarms)
153