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.
100 lines
3.2 KiB
100 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";
|
|
}
|
|
|