add sniffer
This commit is contained in:
@@ -0,0 +1,132 @@
|
||||
#include <QDebug>
|
||||
#include <QListWidgetItem>
|
||||
#include "snifferwindow.h"
|
||||
#include "ui_snifferwindow.h"
|
||||
#include "connections/canconmanager.h"
|
||||
|
||||
SnifferWindow::SnifferWindow(QWidget *parent) :
|
||||
QDialog(parent),
|
||||
ui(new Ui::snifferWindow),
|
||||
mModel(this),
|
||||
mTimer(this),
|
||||
mFilter(false)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
ui->treeView->setModel(&mModel);
|
||||
|
||||
/* set column width */
|
||||
ui->treeView->setColumnWidth(tc::ID, 50);
|
||||
ui->treeView->setColumnWidth(tc::LAST, 1);
|
||||
for(int i=tc::DATA_0 ; i<=tc::DATA_7 ; i++)
|
||||
ui->treeView->setColumnWidth(i, 30);
|
||||
ui->treeView->header()->setDefaultAlignment(Qt::AlignCenter);
|
||||
|
||||
/* activate sorting */
|
||||
ui->listWidget->setSortingEnabled(true);
|
||||
|
||||
/* connect timer */
|
||||
connect(&mTimer, &QTimer::timeout, this, &SnifferWindow::update);
|
||||
mTimer.setInterval(200);
|
||||
|
||||
/* connect buttons */
|
||||
connect(ui->btNotch, &QPushButton::clicked, &mModel, &SnifferModel::notch);
|
||||
connect(ui->btUnNotch, &QPushButton::clicked, &mModel, &SnifferModel::unNotch);
|
||||
connect(ui->btAll, &QPushButton::clicked, this, &SnifferWindow::fltAll);
|
||||
connect(ui->btNone, &QPushButton::clicked, this, &SnifferWindow::fltNone);
|
||||
connect(&mModel, &SnifferModel::idChange, this, &SnifferWindow::idChange);
|
||||
connect(ui->listWidget, &QListWidget::itemChanged, this, &SnifferWindow::itemChanged);
|
||||
|
||||
}
|
||||
|
||||
SnifferWindow::~SnifferWindow()
|
||||
{
|
||||
closeEvent(NULL);
|
||||
delete ui;
|
||||
}
|
||||
|
||||
|
||||
void SnifferWindow::showEvent(QShowEvent* event)
|
||||
{
|
||||
QDialog::showEvent(event);
|
||||
connect(CANConManager::getInstance(), &CANConManager::framesReceived, &mModel, &SnifferModel::update);
|
||||
mTimer.start();
|
||||
|
||||
qDebug() << "show";
|
||||
}
|
||||
|
||||
|
||||
void SnifferWindow::closeEvent(QCloseEvent *event)
|
||||
{
|
||||
Q_UNUSED(event);
|
||||
/* stop timer */
|
||||
mTimer.stop();
|
||||
/* disconnect reception of frames */
|
||||
disconnect(CANConManager::getInstance(), 0, this, 0);
|
||||
/* clear model */
|
||||
mModel.clear();
|
||||
/* clean list */
|
||||
qDeleteAll(mMap);
|
||||
mMap.clear();
|
||||
/* reset filtering */
|
||||
mFilter = false;
|
||||
}
|
||||
|
||||
|
||||
void SnifferWindow::update()
|
||||
{
|
||||
mModel.refresh();
|
||||
}
|
||||
|
||||
|
||||
void SnifferWindow::fltAll()
|
||||
{
|
||||
filter(false);
|
||||
}
|
||||
|
||||
|
||||
void SnifferWindow::fltNone()
|
||||
{
|
||||
filter(true);
|
||||
}
|
||||
|
||||
void SnifferWindow::filter(bool pFilter)
|
||||
{
|
||||
mFilter = pFilter;
|
||||
mModel.filter(mFilter ? fltType::NONE : fltType::ALL);
|
||||
|
||||
foreach(QListWidgetItem* item, mMap)
|
||||
item->setCheckState(mFilter ? Qt::Unchecked : Qt::Checked);
|
||||
}
|
||||
|
||||
void SnifferWindow::idChange(int pId, bool pAdd)
|
||||
{
|
||||
QListWidgetItem* item;
|
||||
|
||||
if(pAdd)
|
||||
{
|
||||
QString text = QString("0x") + QString("%1").arg(pId, 3, 16, QLatin1Char('0')).toUpper();
|
||||
item = new QListWidgetItem(text);
|
||||
item->setFlags(Qt::ItemIsEnabled | Qt::ItemIsUserCheckable);
|
||||
item->setCheckState(mFilter ? Qt::Unchecked : Qt::Checked);
|
||||
ui->listWidget->addItem(item);
|
||||
mMap[pId] = item;
|
||||
}
|
||||
else
|
||||
{
|
||||
item = mMap.take(pId);
|
||||
ui->listWidget->removeItemWidget(item);
|
||||
delete item;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void SnifferWindow::itemChanged(QListWidgetItem * item)
|
||||
{
|
||||
bool checked = (Qt::Checked == item->checkState());
|
||||
|
||||
if( !mFilter && checked )
|
||||
return;
|
||||
|
||||
mModel.filter(checked ? fltType::ADD : fltType::REMOVE, mMap.key(item));
|
||||
mFilter = true;
|
||||
}
|
||||
Reference in New Issue
Block a user