src/messagelog.cpp

changeset 236
1fa0e1de9f0a
child 250
2837b549e616
--- /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 <QColor>
+#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<Column>(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<Column>(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 {};
+	}
+}

mercurial