diff -r 7ef03c2b46ab -r 1fa0e1de9f0a src/messagelog.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/messagelog.cpp Mon Jun 20 18:40:22 2022 +0300 @@ -0,0 +1,77 @@ +#include +#include "messagelog.h" + +MessageLog::MessageLog(QObject *parent) : + QAbstractTableModel{parent} +{ + +} + +void MessageLog::addMessage(const Message& message) +{ + this->beginInsertRows({}, this->messages.size(), this->messages.size()); + this->messages.push_back(message); + this->endInsertRows(); +} + +QVariant MessageLog::headerData(int section, Qt::Orientation orientation, int role) const +{ + if (orientation != Qt::Horizontal or role != Qt::DisplayRole) { + return {}; + } + else { + switch (static_cast(section)) { + case TimeColumn: + return tr("Time"); + case MessageColumn: + return tr("Message"); + } + return {}; + } +} + +int MessageLog::rowCount(const QModelIndex&) const +{ + return signed_cast(this->messages.size()); +} + +int MessageLog::columnCount(const QModelIndex&) const +{ + return NUM_COLUMNS; +} + +QVariant MessageLog::data(const QModelIndex& index, int role) const +{ + const std::size_t row = unsigned_cast(index.row()); + if (false + or row >= this->messages.size() + or index.column() < 0 + or index.column() >= NUM_COLUMNS + ) { + return {}; + } + else { + const Message& message = this->messages[row]; + switch (role) { + case Qt::DisplayRole: + switch (static_cast(index.column())) { + case TimeColumn: + return message.time.toString(tr("hh:mm:ss")); + case MessageColumn: + return message.text; + } + break; + case Qt::BackgroundRole: + switch(message.type) { + case Message::Info: + return {}; + case Message::Warning: + return QColor{Qt::yellow}; + case Message::Error: + return QColor{Qt::red}; + } + break; + } + return {}; + } +}