1
1
#include " tools/cabana/messageswidget.h"
2
2
3
+ #include < QApplication>
3
4
#include < QFontDatabase>
5
+ #include < QHBoxLayout>
4
6
#include < QLineEdit>
5
- #include < QVBoxLayout>
6
7
#include < QPainter>
7
- #include < QApplication>
8
+ #include < QPushButton>
9
+ #include < QVBoxLayout>
8
10
9
11
#include " tools/cabana/dbcmanager.h"
10
12
@@ -28,9 +30,16 @@ MessagesWidget::MessagesWidget(QWidget *parent) : QWidget(parent) {
28
30
table_widget->sortByColumn (0 , Qt::AscendingOrder);
29
31
table_widget->horizontalHeader ()->setStretchLastSection (true );
30
32
table_widget->verticalHeader ()->hide ();
31
-
32
33
main_layout->addWidget (table_widget);
33
34
35
+ // suppress
36
+ QHBoxLayout *suppress_layout = new QHBoxLayout ();
37
+ suppress_add = new QPushButton (" Suppress Highlighted" );
38
+ suppress_clear = new QPushButton ();
39
+ suppress_layout->addWidget (suppress_add);
40
+ suppress_layout->addWidget (suppress_clear);
41
+ main_layout->addLayout (suppress_layout);
42
+
34
43
// signals/slots
35
44
QObject::connect (filter, &QLineEdit::textChanged, model, &MessageListModel::setFilterString);
36
45
QObject::connect (can, &AbstractStream::msgsReceived, model, &MessageListModel::msgsReceived);
@@ -46,6 +55,16 @@ MessagesWidget::MessagesWidget(QWidget *parent) : QWidget(parent) {
46
55
}
47
56
}
48
57
});
58
+ QObject::connect (suppress_add, &QPushButton::clicked, [=]() {
59
+ model->suppress ();
60
+ updateSuppressedButtons ();
61
+ });
62
+ QObject::connect (suppress_clear, &QPushButton::clicked, [=]() {
63
+ model->clearSuppress ();
64
+ updateSuppressedButtons ();
65
+ });
66
+
67
+ updateSuppressedButtons ();
49
68
}
50
69
51
70
void MessagesWidget::selectMessage (const QString &msg_id) {
@@ -54,6 +73,17 @@ void MessagesWidget::selectMessage(const QString &msg_id) {
54
73
}
55
74
}
56
75
76
+ void MessagesWidget::updateSuppressedButtons () {
77
+ if (model->suppressed_bytes .empty ()) {
78
+ suppress_clear->setEnabled (false );
79
+ suppress_clear->setText (" Clear Suppressed" );
80
+ } else {
81
+ suppress_clear->setEnabled (true );
82
+ suppress_clear->setText (QString (" Clear Suppressed (%1)" ).arg (model->suppressed_bytes .size ()));
83
+ }
84
+ }
85
+
86
+
57
87
// MessageListModel
58
88
59
89
QVariant MessageListModel::headerData (int section, Qt::Orientation orientation, int role) const {
@@ -75,7 +105,16 @@ QVariant MessageListModel::data(const QModelIndex &index, int role) const {
75
105
case 4 : return toHex (can_data.dat );
76
106
}
77
107
} else if (role == Qt::UserRole && index .column () == 4 ) {
78
- return HexColors::toVariantList (can_data.colors );
108
+ QList<QVariant> colors;
109
+ for (int i = 0 ; i < can_data.dat .size (); i++){
110
+ if (suppressed_bytes.contains ({id, i})) {
111
+ colors.append (QColor (255 , 255 , 255 , 0 ));
112
+ } else {
113
+ colors.append (can_data.colors [i]);
114
+ }
115
+ }
116
+ return colors;
117
+
79
118
}
80
119
return {};
81
120
}
@@ -157,3 +196,21 @@ void MessageListModel::sort(int column, Qt::SortOrder order) {
157
196
sortMessages ();
158
197
}
159
198
}
199
+
200
+ void MessageListModel::suppress () {
201
+ const double cur_ts = can->currentSec ();
202
+
203
+ for (auto &id : msgs) {
204
+ auto &can_data = can->lastMessage (id);
205
+ for (int i = 0 ; i < can_data.dat .size (); i++) {
206
+ const double dt = cur_ts - can_data.last_change_t [i];
207
+ if (dt < 2.0 ) {
208
+ suppressed_bytes.insert ({id, i});
209
+ }
210
+ }
211
+ }
212
+ }
213
+
214
+ void MessageListModel::clearSuppress () {
215
+ suppressed_bytes.clear ();
216
+ }
0 commit comments