Log Viewer
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

101 lines
3.2 KiB

#include "viewmodel/table/LogTableModel.h"
#include "viewmodel/displayString/util/DisplayStringProviderMapGenerator.h"
/*************************************************************************************************/
LogTableModel::LogTableModel(LogWarehouse_ptr warehouse) : _warehouse(warehouse)
{
initColumnMap();
connect(warehouse.get(), &LogWarehouse::dataAdded, this, &LogTableModel::rowsAdded);
_lastModelSize = _warehouse->getLength();
}
/*************************************************************************************************/
LogTableModel::~LogTableModel()
{
}
/*************************************************************************************************/
int LogTableModel::rowCount(const QModelIndex& parent) const {
Q_UNUSED(parent)
auto size = _warehouse->getLength();
return size;
}
/*************************************************************************************************/
int LogTableModel::columnCount(const QModelIndex& parent) const {
Q_UNUSED(parent)
return _columnMap.size();
}
/*************************************************************************************************/
QVariant LogTableModel::data(const QModelIndex& index, int role) const {
if(!index.isValid() || role != Qt::DisplayRole)
{
return QVariant();
}
return providerDisplayRepresentation(_warehouse->getItem(index.row()),
static_cast<ELogColumn>(index.column()));
}
/*************************************************************************************************/
QVariant LogTableModel::headerData(int section, Qt::Orientation orientation, int role) const {
if(role == Qt::DisplayRole)
{
if(orientation == Qt::Horizontal)
{
return _columnMap[section];
}
}
return QVariant();
}
/*************************************************************************************************/
void LogTableModel::setDisplayProviderCreator(DisplayProviderCreator_ptr creator)
{
_textProviders = DisplayStringProviderMapGenerator::generate(creator);
}
/*************************************************************************************************/
void LogTableModel::rowsAdded()
{
auto warehouseSize = _warehouse->getLength();
if(_lastModelSize < warehouseSize)
{
beginInsertRows(QModelIndex(), _lastModelSize, warehouseSize - 1);
endInsertRows();
_lastModelSize = warehouseSize;
}
}
/*************************************************************************************************/
QVariant LogTableModel::providerDisplayRepresentation(const Log_ptr& log, ELogColumn column) const
{
auto provider = _textProviders.value(column, nullptr);
if(provider)
{
return provider->provideString(log);
}
return QVariant();
}
/*************************************************************************************************/
void LogTableModel::initColumnMap()
{
_columnMap[id] = "Logger Id";
_columnMap[level] = "Level";
_columnMap[timestamp] = "Time";
_columnMap[file] = "File Address";
_columnMap[func] = "Function";
_columnMap[lineno] = "Line Number";
_columnMap[msg] = "Message";
_columnMap[scope] = "Scope";
_columnMap[threadId] = "Thread";
}