diff --git a/re/sniffer/SnifferDelegate.cpp b/re/sniffer/SnifferDelegate.cpp index 962c5a3..82b2fdd 100644 --- a/re/sniffer/SnifferDelegate.cpp +++ b/re/sniffer/SnifferDelegate.cpp @@ -13,6 +13,17 @@ SnifferDelegate::SnifferDelegate(QWidget *parent) : QItemDelegate(parent) grayBrush = QBrush(QColor(230,230,230)); mainFont.setPointSize(10); 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 @@ -40,6 +51,8 @@ void SnifferDelegate::paint(QPainter *painter, const QStyleOptionViewItem &optio int xSpan = viewport.right() - viewport.left(); int ySpan = viewport.bottom() - viewport.top(); + int yOffset = (ySpan - (xSpan / 4)) / 2; + if (yOffset < 0) yOffset = 0; //qDebug() << "XSpan" << xSpan << " YSpan " << ySpan; @@ -81,14 +94,16 @@ void SnifferDelegate::paint(QPainter *painter, const QStyleOptionViewItem &optio painter->setBrush(redBrush); } } - painter->setOpacity((255 - v) / 255.0); - painter->drawRect(viewport.left() + x * xSector, viewport.top(), xSector, xSector); + if (mFadeInactive) painter->setOpacity((255 - v) / 255.0); + 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->setOpacity(1.0); painter->setPen(Qt::black); 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 diff --git a/re/sniffer/SnifferDelegate.h b/re/sniffer/SnifferDelegate.h index fcae02c..693c259 100644 --- a/re/sniffer/SnifferDelegate.h +++ b/re/sniffer/SnifferDelegate.h @@ -10,6 +10,8 @@ public: explicit SnifferDelegate(QWidget *parent = nullptr); void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const; QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const; + bool getFadeInactive(); + void setFadeInactive(bool val); signals: @@ -19,6 +21,7 @@ private: QBrush blackBrush, whiteBrush, redBrush, greenBrush, grayBrush; QFont mainFont; QFontInfo* mainFontInfo; + bool mFadeInactive; }; #endif diff --git a/re/sniffer/snifferwindow.cpp b/re/sniffer/snifferwindow.cpp index f131293..f6a4505 100644 --- a/re/sniffer/snifferwindow.cpp +++ b/re/sniffer/snifferwindow.cpp @@ -17,6 +17,9 @@ SnifferWindow::SnifferWindow(QWidget *parent) : setWindowFlags(Qt::Window); ui->treeView->setModel(&mModel); + sniffDel = new SnifferDelegate(); + defaultDel = ui->treeView->itemDelegate(); + /* set column width */ ui->treeView->setColumnWidth(tc::ID, 80); ui->treeView->setColumnWidth(tc::LAST, 1); @@ -24,7 +27,7 @@ SnifferWindow::SnifferWindow(QWidget *parent) : ui->treeView->setColumnWidth(i, 92); ui->treeView->setUniformRowHeights(true); ui->treeView->header()->setDefaultAlignment(Qt::AlignCenter); - ui->treeView->setItemDelegate(new SnifferDelegate()); + //ui->treeView->setItemDelegate(new SnifferDelegate()); /* activate sorting */ ui->listWidget->setSortingEnabled(true); @@ -41,23 +44,75 @@ SnifferWindow::SnifferWindow(QWidget *parent) : connect(&mModel, &SnifferModel::idChange, this, &SnifferWindow::idChange); 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->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() { closeEvent(NULL); + delete sniffDel; 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) { QDialog::showEvent(event); connect(CANConManager::getInstance(), &CANConManager::framesReceived, &mModel, &SnifferModel::update); mTimer.start(); + readSettings(); installEventFilter(this); qDebug() << "show"; } @@ -70,6 +125,7 @@ void SnifferWindow::closeEvent(QCloseEvent *event) mTimer.stop(); /* disconnect reception of frames */ disconnect(CANConManager::getInstance(), 0, this, 0); + writeSettings(); /* clear model */ mModel.clear(); /* clean list */ diff --git a/re/sniffer/snifferwindow.h b/re/sniffer/snifferwindow.h index cebd059..87d9338 100644 --- a/re/sniffer/snifferwindow.h +++ b/re/sniffer/snifferwindow.h @@ -4,6 +4,7 @@ #include #include #include "sniffermodel.h" +#include "SnifferDelegate.h" namespace Ui { class snifferWindow; @@ -46,12 +47,16 @@ public slots: private: void filter(bool pFilter); bool eventFilter(QObject *obj, QEvent *event); + void readSettings(); + void writeSettings(); Ui::snifferWindow* ui; SnifferModel mModel; QTimer mTimer; QMap mMap; bool mFilter; + SnifferDelegate *sniffDel; + QAbstractItemDelegate *defaultDel; }; #endif // SNIFFER_H diff --git a/ui/snifferwindow.ui b/ui/snifferwindow.ui index ebd01dd..9adc67f 100644 --- a/ui/snifferwindow.ui +++ b/ui/snifferwindow.ui @@ -103,6 +103,13 @@ + + + + View Bits + + +