diff --git a/tools/cabana/mainwin.cc b/tools/cabana/mainwin.cc index 43aa330029..46ef8f10f9 100644 --- a/tools/cabana/mainwin.cc +++ b/tools/cabana/mainwin.cc @@ -281,5 +281,6 @@ void MainWindow::setOption() { void MainWindow::findSimilarBits() { FindSimilarBitsDlg dlg(this); + QObject::connect(&dlg, &FindSimilarBitsDlg::openMessage, messages_widget, &MessagesWidget::selectMessage); dlg.exec(); } diff --git a/tools/cabana/messageswidget.cc b/tools/cabana/messageswidget.cc index a5224e108b..fd0bc68514 100644 --- a/tools/cabana/messageswidget.cc +++ b/tools/cabana/messageswidget.cc @@ -39,6 +39,7 @@ MessagesWidget::MessagesWidget(QWidget *parent) : QWidget(parent) { QObject::connect(dbc(), &DBCManager::DBCFileChanged, model, &MessageListModel::sortMessages); QObject::connect(dbc(), &DBCManager::msgUpdated, model, &MessageListModel::sortMessages); QObject::connect(dbc(), &DBCManager::msgRemoved, model, &MessageListModel::sortMessages); + QObject::connect(model, &MessageListModel::modelReset, [this]() { selectMessage(current_msg_id); }); QObject::connect(table_widget->selectionModel(), &QItemSelectionModel::currentChanged, [=](const QModelIndex ¤t, const QModelIndex &previous) { if (current.isValid() && current.row() < model->msgs.size()) { if (model->msgs[current.row()] != current_msg_id) { @@ -47,10 +48,12 @@ MessagesWidget::MessagesWidget(QWidget *parent) : QWidget(parent) { } } }); - QObject::connect(model, &MessageListModel::modelReset, [this]() { - if (int row = model->msgs.indexOf(current_msg_id); row != -1) - table_widget->selectionModel()->setCurrentIndex(model->index(row, 0), QItemSelectionModel::Rows | QItemSelectionModel::ClearAndSelect); - }); +} + +void MessagesWidget::selectMessage(const QString &msg_id) { + if (int row = model->msgs.indexOf(msg_id); row != -1) { + table_widget->selectionModel()->setCurrentIndex(model->index(row, 0), QItemSelectionModel::Rows | QItemSelectionModel::ClearAndSelect); + } } // MessageListModel diff --git a/tools/cabana/messageswidget.h b/tools/cabana/messageswidget.h index 3a42bed4be..62aa23c02e 100644 --- a/tools/cabana/messageswidget.h +++ b/tools/cabana/messageswidget.h @@ -31,6 +31,8 @@ class MessagesWidget : public QWidget { public: MessagesWidget(QWidget *parent); + void selectMessage(const QString &message_id); + signals: void msgSelectionChanged(const QString &message_id); diff --git a/tools/cabana/tools/findsimilarbits.cc b/tools/cabana/tools/findsimilarbits.cc index cb5dbc0845..5c9623c7e4 100644 --- a/tools/cabana/tools/findsimilarbits.cc +++ b/tools/cabana/tools/findsimilarbits.cc @@ -59,12 +59,19 @@ FindSimilarBitsDlg::FindSimilarBitsDlg(QWidget *parent) : QDialog(parent) { main_layout->addLayout(form_layout); table = new QTableWidget(this); + table->setSelectionBehavior(QAbstractItemView::SelectRows); + table->setSelectionMode(QAbstractItemView::SingleSelection); table->setEditTriggers(QAbstractItemView::NoEditTriggers); table->horizontalHeader()->setStretchLastSection(true); main_layout->addWidget(table); setMinimumSize({700, 500}); QObject::connect(search_btn, &QPushButton::clicked, this, &FindSimilarBitsDlg::find); + QObject::connect(table, &QTableWidget::doubleClicked, [this](const QModelIndex &index) { + if (index.isValid()) { + emit openMessage(bus_combo->currentText() + ":" + table->item(index.row(), 0)->text()); + } + }); } void FindSimilarBitsDlg::find() { @@ -91,7 +98,6 @@ QList FindSimilarBitsDlg::calcBits(uint8_ QHash> mismatches; QHash msg_count; auto events = can->events(); - qDebug() << bus << selected_address << byte_idx << bit_idx; int bit_to_find = -1; for (auto e : *events) { if (e->which == cereal::Event::Which::CAN) { diff --git a/tools/cabana/tools/findsimilarbits.h b/tools/cabana/tools/findsimilarbits.h index 8083999909..30d78f0dea 100644 --- a/tools/cabana/tools/findsimilarbits.h +++ b/tools/cabana/tools/findsimilarbits.h @@ -7,9 +7,14 @@ #include class FindSimilarBitsDlg : public QDialog { + Q_OBJECT + public: FindSimilarBitsDlg(QWidget *parent); +signals: + void openMessage(const QString &msg_id); + private: struct mismatched_struct { uint32_t address, byte_idx, bit_idx, mismatches, total;