freeswitch/fscomm/debugtools/sortfilterproxymodel.cpp

117 lines
3.0 KiB
C++

#include <QtGui>
#include "sortfilterproxymodel.h"
ConsoleModel::ConsoleModel (QObject *parent)
: QAbstractTableModel(parent)
{
QSettings settings;
batchSize = settings.value("Console/batchSize", 200).toInt();
insertionTimer = new QBasicTimer;
insertionTimer->start(0, this);
}
int ConsoleModel::rowCount ( const QModelIndex & parent ) const
{
if (parent.isValid())
return 0;
return _listDisplayModel.count();
}
int ConsoleModel::columnCount ( const QModelIndex & /*parent*/ ) const
{
return 1;
}
QVariant ConsoleModel::data ( const QModelIndex & index, int role ) const
{
if (!index.isValid())
return QVariant();
return _listDisplayModel.at(index.row())->data(role);
}
void ConsoleModel::clear()
{
_listDisplayModel.clear();
reset();
}
void ConsoleModel::appendRow ( QStandardItem* item )
{
_listInsertModel.append(item);
insertionTimer->start(0, this);
}
void ConsoleModel::timerEvent(QTimerEvent *e)
{
if (e->timerId() == insertionTimer->timerId())
{
if (!_listInsertModel.isEmpty())
{
int inserted_items = 0;
int toBeInserted = 0;
if (_listInsertModel.size() < batchSize)
{
toBeInserted = _listInsertModel.size() - 1;
} else {
toBeInserted = batchSize - 1;
}
emit beforeInserting();
beginInsertRows( QModelIndex(), _listDisplayModel.size(), _listDisplayModel.size() + toBeInserted );
while( !_listInsertModel.isEmpty() && inserted_items <= batchSize)
{
_listDisplayModel.append(_listInsertModel.takeFirst());
inserted_items++;
}
endInsertRows();
emit afterInserting();
} else {
insertionTimer->stop();
}
}
}
SortFilterProxyModel::SortFilterProxyModel(QObject *parent)
: QSortFilterProxyModel(parent)
{
reverseFlag = false;
for(int i = 0; i < 8; i++)
loglevels.insert(i, true);
}
void SortFilterProxyModel::toggleReverseFlag()
{
reverseFlag = !reverseFlag;
invalidateFilter();
}
void SortFilterProxyModel::setLogLevelFilter(int level)
{
loglevels.replace(level, loglevels.value(level) == false);
// Let us filter
invalidateFilter();
}
void SortFilterProxyModel::setUUIDFilterLog(QString uuid)
{
_uuid = uuid;
invalidateFilter();
}
bool SortFilterProxyModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const
{
QModelIndex index0 = sourceModel()->index(source_row, 0, source_parent);
bool uuidMatch = true;
if (!_uuid.isEmpty())
uuidMatch = (sourceModel()->data(index0, ConsoleModel::UUIDRole).toString() == _uuid);
bool res = (loglevels.value(sourceModel()->data(index0, Qt::UserRole).toInt()) == true
&& sourceModel()->data(index0).toString().contains(filterRegExp())
&& uuidMatch);
if (reverseFlag)
return !res;
else
return res;
}