src/messagelog.cpp

changeset 236
1fa0e1de9f0a
child 250
2837b549e616
equal deleted inserted replaced
235:7ef03c2b46ab 236:1fa0e1de9f0a
1 #include <QColor>
2 #include "messagelog.h"
3
4 MessageLog::MessageLog(QObject *parent) :
5 QAbstractTableModel{parent}
6 {
7
8 }
9
10 void MessageLog::addMessage(const Message& message)
11 {
12 this->beginInsertRows({}, this->messages.size(), this->messages.size());
13 this->messages.push_back(message);
14 this->endInsertRows();
15 }
16
17 QVariant MessageLog::headerData(int section, Qt::Orientation orientation, int role) const
18 {
19 if (orientation != Qt::Horizontal or role != Qt::DisplayRole) {
20 return {};
21 }
22 else {
23 switch (static_cast<Column>(section)) {
24 case TimeColumn:
25 return tr("Time");
26 case MessageColumn:
27 return tr("Message");
28 }
29 return {};
30 }
31 }
32
33 int MessageLog::rowCount(const QModelIndex&) const
34 {
35 return signed_cast(this->messages.size());
36 }
37
38 int MessageLog::columnCount(const QModelIndex&) const
39 {
40 return NUM_COLUMNS;
41 }
42
43 QVariant MessageLog::data(const QModelIndex& index, int role) const
44 {
45 const std::size_t row = unsigned_cast(index.row());
46 if (false
47 or row >= this->messages.size()
48 or index.column() < 0
49 or index.column() >= NUM_COLUMNS
50 ) {
51 return {};
52 }
53 else {
54 const Message& message = this->messages[row];
55 switch (role) {
56 case Qt::DisplayRole:
57 switch (static_cast<Column>(index.column())) {
58 case TimeColumn:
59 return message.time.toString(tr("hh:mm:ss"));
60 case MessageColumn:
61 return message.text;
62 }
63 break;
64 case Qt::BackgroundRole:
65 switch(message.type) {
66 case Message::Info:
67 return {};
68 case Message::Warning:
69 return QColor{Qt::yellow};
70 case Message::Error:
71 return QColor{Qt::red};
72 }
73 break;
74 }
75 return {};
76 }
77 }

mercurial