From 6fb36d6c028d4fe88043c764e42b54df9b06f48b Mon Sep 17 00:00:00 2001 From: Tannin Date: Sun, 4 May 2014 14:50:01 +0200 Subject: - main window now has a small view displaying log messages - mod list will now be highlighted when grouping is active is active - download tooltip now supports bbcode markup in the description - bbcode translator will now translate some named colors - algorithm for detection of mod order problems is now more sophisticated - exposed more functionality to python plugins - updated to qt 4.8.6 dlls - bugfix: plugin list wasn't - bugfix: state changes in mod list wasn't always reported - bugfix: loot client will now create necessary directory - bugfix: NCC sometimes used wrong source path for extracting - bugfix: removed noisy debug message --- src/logbuffer.cpp | 82 +++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 79 insertions(+), 3 deletions(-) (limited to 'src/logbuffer.cpp') diff --git a/src/logbuffer.cpp b/src/logbuffer.cpp index 689d2b55..b9fa9417 100644 --- a/src/logbuffer.cpp +++ b/src/logbuffer.cpp @@ -29,7 +29,7 @@ QMutex LogBuffer::s_Mutex; LogBuffer::LogBuffer(int messageCount, QtMsgType minMsgType, const QString &outputFileName) - : QObject(NULL), m_OutFileName(outputFileName), m_ShutDown(false), + : QAbstractItemModel(NULL), m_OutFileName(outputFileName), m_ShutDown(false), m_MinMsgType(minMsgType), m_NumMessages(0) { m_Messages.resize(messageCount); @@ -51,7 +51,16 @@ LogBuffer::~LogBuffer() void LogBuffer::logMessage(QtMsgType type, const QString &message) { if (type >= m_MinMsgType) { - m_Messages.at(m_NumMessages % m_Messages.size()) = message; + Message msg = { type, QTime::currentTime(), message }; + if (m_NumMessages < m_Messages.size()) { + beginInsertRows(QModelIndex(), m_NumMessages, m_NumMessages + 1); + } + m_Messages.at(m_NumMessages % m_Messages.size()) = msg; + if (m_NumMessages < m_Messages.size()) { + endInsertRows(); + } else { + emit dataChanged(createIndex(0, 0), createIndex(m_Messages.size(), 0)); + } ++m_NumMessages; if (type >= QtCriticalMsg) { write(); @@ -77,7 +86,7 @@ void LogBuffer::write() const unsigned int i = (m_NumMessages > m_Messages.size()) ? m_NumMessages - m_Messages.size() : 0U; for (; i < m_NumMessages; ++i) { - file.write(m_Messages.at(i % m_Messages.size()).toUtf8()); + file.write(m_Messages.at(i % m_Messages.size()).toString().toUtf8()); file.write("\r\n"); } ::SetLastError(lastError); @@ -125,6 +134,67 @@ char LogBuffer::msgTypeID(QtMsgType type) } } +QModelIndex LogBuffer::index(int row, int column, const QModelIndex&) const +{ + return createIndex(row, column, row); +} + +QModelIndex LogBuffer::parent(const QModelIndex&) const +{ + return QModelIndex(); +} + +int LogBuffer::rowCount(const QModelIndex &parent) const +{ + if (parent.isValid()) + return 0; + else + return std::min(m_NumMessages, m_Messages.size()); +} + +int LogBuffer::columnCount(const QModelIndex&) const +{ + return 2; +} + + +QVariant LogBuffer::data(const QModelIndex &index, int role) const +{ + unsigned offset = m_NumMessages < m_Messages.size() ? 0 + : m_NumMessages - m_Messages.size(); + unsigned int msgIndex = (offset + index.row()) % m_Messages.size(); + switch (role) { + case Qt::DisplayRole: { + if (index.column() == 0) { + return m_Messages.at(msgIndex).time; + } else if (index.column() == 1) { + return m_Messages.at(msgIndex).message; + } + } break; + case Qt::DecorationRole: { + if (index.column() == 1) { + switch (m_Messages.at(msgIndex).type) { + case QtDebugMsg: return QIcon(":/MO/gui/information"); + case QtWarningMsg: return QIcon(":/MO/gui/warning"); + case QtCriticalMsg: return QIcon(":/MO/gui/important"); + case QtFatalMsg: return QIcon(":/MO/gui/problem"); + } + } + } break; + case Qt::UserRole: { + if (index.column() == 1) { + switch (m_Messages.at(msgIndex).type) { + case QtDebugMsg: return "D"; + case QtWarningMsg: return "W"; + case QtCriticalMsg: return "C"; + case QtFatalMsg: return "F"; + } + } + } break; + } + return QVariant(); +} + void LogBuffer::log(QtMsgType type, const char *message) { QMutexLocker guard(&s_Mutex); @@ -171,3 +241,9 @@ void log(const char *format, ...) va_end(argList); } + + +QString LogBuffer::Message::toString() const +{ + return QString("%1 [%2] %3").arg(time.toString()).arg(msgTypeID(type)).arg(message); +} -- cgit v1.3.1