diff options
Diffstat (limited to 'DebugModel.cpp')
-rw-r--r-- | DebugModel.cpp | 158 |
1 files changed, 158 insertions, 0 deletions
diff --git a/DebugModel.cpp b/DebugModel.cpp new file mode 100644 index 0000000..5afa3ba --- /dev/null +++ b/DebugModel.cpp @@ -0,0 +1,158 @@ +#include "DebugEngine.h" + +#include <QColor> + +#ifdef ULTRACOPIER_DEBUG + +#define COLUMN_COUNT 5 + +// Model + +DebugModel::DebugModel() +{ + displayed = false; + inWaitOfDisplay = false; + updateDisplayTimer = NULL; +} + +DebugModel::~DebugModel() +{ + if(updateDisplayTimer!=NULL) + delete updateDisplayTimer; +} + +int DebugModel::columnCount( const QModelIndex& parent ) const +{ + return parent == QModelIndex() ? COLUMN_COUNT : 0; +} + +QVariant DebugModel::data( const QModelIndex& index, int role ) const +{ + int row,column; + row=index.row(); + column=index.column(); + if(index.parent()!=QModelIndex() || row < 0 || row >= (int)list.size() || column < 0 || column >= COLUMN_COUNT) + return QVariant(); + + const DebugItem& item = list.at(row); + if(role==Qt::UserRole) + return row; + else if(role==Qt::DisplayRole) + { + switch(column) + { + case 0: + return item.time; + break; + case 1: + return QString::fromStdString(item.file); + break; + case 2: + return QString::fromStdString(item.function); + break; + case 3: + return QString::fromStdString(item.location); + break; + case 4: + return QString::fromStdString(item.text); + break; + default: + return QVariant(); + } + } + else if(role==Qt::DecorationRole) + return QVariant(); + else if(role==Qt::ForegroundRole) + { + switch(item.level) + { + case DebugLevel_custom_Information: + return QColor(94,165,255); + break; + case DebugLevel_custom_Critical: + return QColor(255,0,0); + break; + case DebugLevel_custom_Warning: + return QColor(255,178,0); + break; + case DebugLevel_custom_Notice: + return QColor(128,128,128); + break; + case DebugLevel_custom_UserNote: + return QColor(0,0,0); + break; + } + return QVariant(); + } + return QVariant(); +} + +int DebugModel::rowCount( const QModelIndex& parent ) const +{ + return parent == QModelIndex() ? list.size() : 0; +} + +QVariant DebugModel::headerData( int section, Qt::Orientation orientation, int role ) const +{ + if ( role == Qt::DisplayRole && orientation == Qt::Horizontal && section >= 0 && section < COLUMN_COUNT ) { + switch ( section ) { + case 0: + return QStringLiteral("Time"); + case 1: + return QStringLiteral("File"); + case 2: + return QStringLiteral("Function"); + case 3: + return QStringLiteral("Location"); + case 4: + return QStringLiteral("Text"); + } + } + + return QAbstractTableModel::headerData( section, orientation, role ); +} + +bool DebugModel::setData( const QModelIndex&, const QVariant&, int) +{ + return false; +} + +void DebugModel::addDebugInformation(const int &time, const DebugLevel_custom &level, const std::string &function, const std::string &text, const std::string &file, const unsigned int& ligne, const std::string &location) +{ + DebugItem item; + item.time=time; + item.level=level; + item.function=function; + item.text=text; + item.file=file+":"+std::to_string(ligne); + item.location=location; + list.push_back(item); + if(!displayed) + { + displayed=true; + emit layoutChanged(); + } + else + inWaitOfDisplay=true; +} + +void DebugModel::setupTheTimer() +{ + if(updateDisplayTimer!=NULL) + return; + updateDisplayTimer=new QTimer(); + connect(updateDisplayTimer,&QTimer::timeout,this,&DebugModel::updateDisplay); + updateDisplayTimer->start(100); +} + +void DebugModel::updateDisplay() +{ + displayed=false; + if(!inWaitOfDisplay) + { + inWaitOfDisplay=false; + displayed=true; + emit layoutChanged(); + } +} +#endif |