optimization

This commit is contained in:
canpadawan
2016-07-08 11:02:23 +02:00
parent 5162769712
commit d36b437239
2 changed files with 51 additions and 50 deletions
+3 -3
View File
@@ -4,9 +4,9 @@
SnifferItem::SnifferItem(const CANFrame& pFrame):
mNotch(0)
mNotch(0),
mID(pFrame.ID)
{
mID = pFrame.ID;
mMarker = {0,0};
mLastMarker = {0,0};
/* that's dirty */
@@ -65,7 +65,7 @@ void SnifferItem::update(const CANFrame& pFrame)
/* update marker */
mMarker.data |= mLast.data ^ mCurrent.data;
mMarker.len |= mLast.len ^ mCurrent.data;
mMarker.len |= mLast.len ^ mCurrent.len;
/* restart timeout */
mTime.restart();
+48 -47
View File
@@ -11,7 +11,9 @@ SnifferModel::SnifferModel(QObject *parent)
SnifferModel::~SnifferModel()
{
clear();
qDeleteAll(mMap);
mMap.clear();
mFilters.clear();
}
@@ -33,58 +35,53 @@ QVariant SnifferModel::data(const QModelIndex &index, int role) const
if (!index.isValid())
return QVariant();
const QMap<quint32, SnifferItem*>& map = mFilter ? mFilters : mMap;
SnifferItem *item = static_cast<SnifferItem*>(index.internalPointer());
if(!item) QVariant();
if(index.row()<=map.size())
int col = index.column();
switch(role)
{
quint64 key = map.keys()[index.row()];
SnifferItem* item = map[key];
int col = index.column();
switch(role)
case Qt::DisplayRole:
{
case Qt::DisplayRole:
switch(col)
{
switch(col)
case tc::DELTA:
return QString::number(item->getDelta(), 'f');
case tc::ID:
return QString("%1").arg(item->getId(), 5, 16, QLatin1Char(' ')).toUpper();
default:
break;
}
if(tc::DATA_0<=col && col <=tc::DATA_7)
{
int data = item->getData(col-tc::DATA_0);
if(data>=0)
return QString("%1").arg(data, 2, 16, QLatin1Char('0')).toUpper();
}
break;
}
case Qt::BackgroundRole:
{
if(tc::ID==col)
{
if(item->elapsed()>4000)
return QBrush(Qt::red);
}
else if(tc::DATA_0<=col && col<=tc::DATA_7)
{
dc change = item->dataChange(col-tc::DATA_0);
switch(change)
{
case tc::DELTA:
return QString::number(item->getDelta(), 'f');
case tc::ID:
return QString("%1").arg(item->getId(), 5, 16, QLatin1Char(' ')).toUpper();
case dc::INC:
return QBrush(Qt::green);
case dc::DEC:
return QBrush(Qt::red);
default:
break;
}
if(tc::DATA_0<=col && col <=tc::DATA_7)
{
int data = item->getData(col-tc::DATA_0);
if(data>=0)
return QString("%1").arg(data, 2, 16, QLatin1Char('0')).toUpper();
}
break;
}
case Qt::BackgroundRole:
{
if(tc::ID==col)
{
if(item->elapsed()>4000)
return QBrush(Qt::red);
}
else if(tc::DATA_0<=col && col<=tc::DATA_7)
{
dc change = item->dataChange(col-tc::DATA_0);
switch(change)
{
case dc::INC:
return QBrush(Qt::green);
case dc::DEC:
return QBrush(Qt::red);
default:
break;
}
}
break;
}
break;
}
}
@@ -122,8 +119,7 @@ QVariant SnifferModel::headerData(int section, Qt::Orientation orientation, int
}
QModelIndex SnifferModel::index(int row, int column, const QModelIndex &parent)
const
QModelIndex SnifferModel::index(int row, int column, const QModelIndex &parent) const
{
if (parent.isValid())
return QModelIndex();
@@ -133,7 +129,12 @@ QModelIndex SnifferModel::index(int row, int column, const QModelIndex &parent)
if(column>tc::LAST || row>=map.size())
return QModelIndex();
return createIndex(row, column);
/* ugly but I can't find best without creating a list to keep indexes */
QMap<quint32, SnifferItem*>::const_iterator iter;
int i;
for(iter = map.begin(), i=0 ; i<row ; ++i, ++iter);
return createIndex(row, column, iter.value());
}