Completion of adding a new mode to sniffer window (View Bits). Also
now it loads and saves the window position, size, and column sizes for the sniffer window.
This commit is contained in:
@@ -13,6 +13,17 @@ SnifferDelegate::SnifferDelegate(QWidget *parent) : QItemDelegate(parent)
|
|||||||
grayBrush = QBrush(QColor(230,230,230));
|
grayBrush = QBrush(QColor(230,230,230));
|
||||||
mainFont.setPointSize(10);
|
mainFont.setPointSize(10);
|
||||||
mainFontInfo = new QFontInfo(mainFont);
|
mainFontInfo = new QFontInfo(mainFont);
|
||||||
|
mFadeInactive = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool SnifferDelegate::getFadeInactive()
|
||||||
|
{
|
||||||
|
return mFadeInactive;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SnifferDelegate::setFadeInactive(bool val)
|
||||||
|
{
|
||||||
|
mFadeInactive = val;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SnifferDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
|
void SnifferDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
|
||||||
@@ -40,6 +51,8 @@ void SnifferDelegate::paint(QPainter *painter, const QStyleOptionViewItem &optio
|
|||||||
|
|
||||||
int xSpan = viewport.right() - viewport.left();
|
int xSpan = viewport.right() - viewport.left();
|
||||||
int ySpan = viewport.bottom() - viewport.top();
|
int ySpan = viewport.bottom() - viewport.top();
|
||||||
|
int yOffset = (ySpan - (xSpan / 4)) / 2;
|
||||||
|
if (yOffset < 0) yOffset = 0;
|
||||||
|
|
||||||
//qDebug() << "XSpan" << xSpan << " YSpan " << ySpan;
|
//qDebug() << "XSpan" << xSpan << " YSpan " << ySpan;
|
||||||
|
|
||||||
@@ -81,14 +94,16 @@ void SnifferDelegate::paint(QPainter *painter, const QStyleOptionViewItem &optio
|
|||||||
painter->setBrush(redBrush);
|
painter->setBrush(redBrush);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
painter->setOpacity((255 - v) / 255.0);
|
if (mFadeInactive) painter->setOpacity((255 - v) / 255.0);
|
||||||
painter->drawRect(viewport.left() + x * xSector, viewport.top(), xSector, xSector);
|
else painter->setOpacity(1.0);
|
||||||
|
painter->drawRect(viewport.left() + x * xSector, viewport.top() + yOffset, xSector, xSector);
|
||||||
}
|
}
|
||||||
|
|
||||||
//painter->setPen(QPen(QColor(v,v,v,255)));
|
//painter->setPen(QPen(QColor(v,v,v,255)));
|
||||||
|
painter->setOpacity(1.0);
|
||||||
painter->setPen(Qt::black);
|
painter->setPen(Qt::black);
|
||||||
painter->setFont(mainFont);
|
painter->setFont(mainFont);
|
||||||
painter->drawText(QRect(viewport.left(), viewport.top() + xSector, xSpan, mainFontInfo->pixelSize()), Qt::AlignCenter, Utility::formatNumber(val));
|
painter->drawText(QRect(viewport.left(), viewport.top() + xSector + yOffset, xSpan, mainFontInfo->pixelSize()), Qt::AlignCenter, Utility::formatNumber(val));
|
||||||
}
|
}
|
||||||
|
|
||||||
QSize SnifferDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
|
QSize SnifferDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
|
||||||
|
|||||||
@@ -10,6 +10,8 @@ public:
|
|||||||
explicit SnifferDelegate(QWidget *parent = nullptr);
|
explicit SnifferDelegate(QWidget *parent = nullptr);
|
||||||
void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const;
|
void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const;
|
||||||
QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const;
|
QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const;
|
||||||
|
bool getFadeInactive();
|
||||||
|
void setFadeInactive(bool val);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
|
|
||||||
@@ -19,6 +21,7 @@ private:
|
|||||||
QBrush blackBrush, whiteBrush, redBrush, greenBrush, grayBrush;
|
QBrush blackBrush, whiteBrush, redBrush, greenBrush, grayBrush;
|
||||||
QFont mainFont;
|
QFont mainFont;
|
||||||
QFontInfo* mainFontInfo;
|
QFontInfo* mainFontInfo;
|
||||||
|
bool mFadeInactive;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -17,6 +17,9 @@ SnifferWindow::SnifferWindow(QWidget *parent) :
|
|||||||
setWindowFlags(Qt::Window);
|
setWindowFlags(Qt::Window);
|
||||||
ui->treeView->setModel(&mModel);
|
ui->treeView->setModel(&mModel);
|
||||||
|
|
||||||
|
sniffDel = new SnifferDelegate();
|
||||||
|
defaultDel = ui->treeView->itemDelegate();
|
||||||
|
|
||||||
/* set column width */
|
/* set column width */
|
||||||
ui->treeView->setColumnWidth(tc::ID, 80);
|
ui->treeView->setColumnWidth(tc::ID, 80);
|
||||||
ui->treeView->setColumnWidth(tc::LAST, 1);
|
ui->treeView->setColumnWidth(tc::LAST, 1);
|
||||||
@@ -24,7 +27,7 @@ SnifferWindow::SnifferWindow(QWidget *parent) :
|
|||||||
ui->treeView->setColumnWidth(i, 92);
|
ui->treeView->setColumnWidth(i, 92);
|
||||||
ui->treeView->setUniformRowHeights(true);
|
ui->treeView->setUniformRowHeights(true);
|
||||||
ui->treeView->header()->setDefaultAlignment(Qt::AlignCenter);
|
ui->treeView->header()->setDefaultAlignment(Qt::AlignCenter);
|
||||||
ui->treeView->setItemDelegate(new SnifferDelegate());
|
//ui->treeView->setItemDelegate(new SnifferDelegate());
|
||||||
|
|
||||||
/* activate sorting */
|
/* activate sorting */
|
||||||
ui->listWidget->setSortingEnabled(true);
|
ui->listWidget->setSortingEnabled(true);
|
||||||
@@ -41,23 +44,75 @@ SnifferWindow::SnifferWindow(QWidget *parent) :
|
|||||||
connect(&mModel, &SnifferModel::idChange, this, &SnifferWindow::idChange);
|
connect(&mModel, &SnifferModel::idChange, this, &SnifferWindow::idChange);
|
||||||
connect(ui->listWidget, &QListWidget::itemChanged, this, &SnifferWindow::itemChanged);
|
connect(ui->listWidget, &QListWidget::itemChanged, this, &SnifferWindow::itemChanged);
|
||||||
|
|
||||||
connect(ui->cbFadeInactive, &QCheckBox::stateChanged, this, [this](int val){mModel.setFadeInactive(val);});
|
connect(ui->cbFadeInactive, &QCheckBox::stateChanged, this, [this](int val){mModel.setFadeInactive(val);sniffDel->setFadeInactive(val);});
|
||||||
connect(ui->cbMuteNotched, &QCheckBox::stateChanged, this, [this](int val){mModel.setMuteNotched(val);});
|
connect(ui->cbMuteNotched, &QCheckBox::stateChanged, this, [this](int val){mModel.setMuteNotched(val);});
|
||||||
connect(ui->cbNoExpire, &QCheckBox::stateChanged, this, [this](int val){mModel.setNeverExpire(val);});
|
connect(ui->cbNoExpire, &QCheckBox::stateChanged, this, [this](int val){mModel.setNeverExpire(val);});
|
||||||
|
connect(ui->cbViewBits, &QCheckBox::stateChanged, this,
|
||||||
|
[this](int val)
|
||||||
|
{
|
||||||
|
if (val) ui->treeView->setItemDelegate(sniffDel);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ui->treeView->setItemDelegate(defaultDel);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
SnifferWindow::~SnifferWindow()
|
SnifferWindow::~SnifferWindow()
|
||||||
{
|
{
|
||||||
closeEvent(NULL);
|
closeEvent(NULL);
|
||||||
|
delete sniffDel;
|
||||||
delete ui;
|
delete ui;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SnifferWindow::readSettings()
|
||||||
|
{
|
||||||
|
QSettings settings;
|
||||||
|
if (settings.value("Main/SaveRestorePositions", false).toBool())
|
||||||
|
{
|
||||||
|
resize(settings.value("Sniffer/WindowSize", QSize(1100, 750)).toSize());
|
||||||
|
move(settings.value("Sniffer/WindowPos", QPoint(50, 50)).toPoint());
|
||||||
|
ui->treeView->setColumnWidth(0, settings.value("Sniffer/DeltaColumn", 110).toUInt());
|
||||||
|
ui->treeView->setColumnWidth(1, settings.value("Sniffer/IDColumn", 70).toUInt());
|
||||||
|
ui->treeView->setColumnWidth(2, settings.value("Sniffer/Data0Column", 92).toUInt());
|
||||||
|
ui->treeView->setColumnWidth(3, settings.value("Sniffer/Data1Column", 92).toUInt());
|
||||||
|
ui->treeView->setColumnWidth(4, settings.value("Sniffer/Data2Column", 92).toUInt());
|
||||||
|
ui->treeView->setColumnWidth(5, settings.value("Sniffer/Data3Column", 92).toUInt());
|
||||||
|
ui->treeView->setColumnWidth(6, settings.value("Sniffer/Data4Column", 92).toUInt());
|
||||||
|
ui->treeView->setColumnWidth(7, settings.value("Sniffer/Data5Column", 92).toUInt());
|
||||||
|
ui->treeView->setColumnWidth(8, settings.value("Sniffer/Data6Column", 92).toUInt());
|
||||||
|
ui->treeView->setColumnWidth(9, settings.value("Sniffer/Data7Column", 92).toUInt());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void SnifferWindow::writeSettings()
|
||||||
|
{
|
||||||
|
QSettings settings;
|
||||||
|
|
||||||
|
if (settings.value("Main/SaveRestorePositions", false).toBool())
|
||||||
|
{
|
||||||
|
settings.setValue("Sniffer/WindowSize", size());
|
||||||
|
settings.setValue("Sniffer/WindowPos", pos());
|
||||||
|
settings.setValue("Sniffer/DeltaColumn", ui->treeView->columnWidth(0));
|
||||||
|
settings.setValue("Sniffer/IDColumn", ui->treeView->columnWidth(1));
|
||||||
|
settings.setValue("Sniffer/Data0Column", ui->treeView->columnWidth(2));
|
||||||
|
settings.setValue("Sniffer/Data1Column", ui->treeView->columnWidth(3));
|
||||||
|
settings.setValue("Sniffer/Data2Column", ui->treeView->columnWidth(4));
|
||||||
|
settings.setValue("Sniffer/Data3Column", ui->treeView->columnWidth(5));
|
||||||
|
settings.setValue("Sniffer/Data4Column", ui->treeView->columnWidth(6));
|
||||||
|
settings.setValue("Sniffer/Data5Column", ui->treeView->columnWidth(7));
|
||||||
|
settings.setValue("Sniffer/Data6Column", ui->treeView->columnWidth(8));
|
||||||
|
settings.setValue("Sniffer/Data7Column", ui->treeView->columnWidth(9));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void SnifferWindow::showEvent(QShowEvent* event)
|
void SnifferWindow::showEvent(QShowEvent* event)
|
||||||
{
|
{
|
||||||
QDialog::showEvent(event);
|
QDialog::showEvent(event);
|
||||||
connect(CANConManager::getInstance(), &CANConManager::framesReceived, &mModel, &SnifferModel::update);
|
connect(CANConManager::getInstance(), &CANConManager::framesReceived, &mModel, &SnifferModel::update);
|
||||||
mTimer.start();
|
mTimer.start();
|
||||||
|
readSettings();
|
||||||
installEventFilter(this);
|
installEventFilter(this);
|
||||||
qDebug() << "show";
|
qDebug() << "show";
|
||||||
}
|
}
|
||||||
@@ -70,6 +125,7 @@ void SnifferWindow::closeEvent(QCloseEvent *event)
|
|||||||
mTimer.stop();
|
mTimer.stop();
|
||||||
/* disconnect reception of frames */
|
/* disconnect reception of frames */
|
||||||
disconnect(CANConManager::getInstance(), 0, this, 0);
|
disconnect(CANConManager::getInstance(), 0, this, 0);
|
||||||
|
writeSettings();
|
||||||
/* clear model */
|
/* clear model */
|
||||||
mModel.clear();
|
mModel.clear();
|
||||||
/* clean list */
|
/* clean list */
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
#include <QDialog>
|
#include <QDialog>
|
||||||
#include <QListWidgetItem>
|
#include <QListWidgetItem>
|
||||||
#include "sniffermodel.h"
|
#include "sniffermodel.h"
|
||||||
|
#include "SnifferDelegate.h"
|
||||||
|
|
||||||
namespace Ui {
|
namespace Ui {
|
||||||
class snifferWindow;
|
class snifferWindow;
|
||||||
@@ -46,12 +47,16 @@ public slots:
|
|||||||
private:
|
private:
|
||||||
void filter(bool pFilter);
|
void filter(bool pFilter);
|
||||||
bool eventFilter(QObject *obj, QEvent *event);
|
bool eventFilter(QObject *obj, QEvent *event);
|
||||||
|
void readSettings();
|
||||||
|
void writeSettings();
|
||||||
|
|
||||||
Ui::snifferWindow* ui;
|
Ui::snifferWindow* ui;
|
||||||
SnifferModel mModel;
|
SnifferModel mModel;
|
||||||
QTimer mTimer;
|
QTimer mTimer;
|
||||||
QMap<int, QListWidgetItem*> mMap;
|
QMap<int, QListWidgetItem*> mMap;
|
||||||
bool mFilter;
|
bool mFilter;
|
||||||
|
SnifferDelegate *sniffDel;
|
||||||
|
QAbstractItemDelegate *defaultDel;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // SNIFFER_H
|
#endif // SNIFFER_H
|
||||||
|
|||||||
@@ -103,6 +103,13 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QCheckBox" name="cbViewBits">
|
||||||
|
<property name="text">
|
||||||
|
<string>View Bits</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<spacer name="verticalSpacer">
|
<spacer name="verticalSpacer">
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
|
|||||||
Reference in New Issue
Block a user