Cabana: load commaai/opendbc from menu (#27114)

* load from opendbc

* move load from commaai/opendbc to menu

* keep margins
old-commit-hash: a84b601d4c
beeps
Dean Lee 2 years ago committed by GitHub
parent adfdbfac54
commit 1034573f1d
  1. 53
      tools/cabana/mainwin.cc
  2. 6
      tools/cabana/mainwin.h
  3. 1
      tools/cabana/messageswidget.cc

@ -2,7 +2,6 @@
#include <iostream>
#include <QClipboard>
#include <QCompleter>
#include <QDesktopWidget>
#include <QFile>
#include <QFileDialog>
@ -54,7 +53,6 @@ MainWindow::MainWindow() : QMainWindow() {
fingerprint_to_dbc = QJsonDocument::fromJson(json_file.readAll());
}
QObject::connect(dbc_combo, SIGNAL(activated(const QString &)), SLOT(loadDBCFromName(const QString &)));
QObject::connect(this, &MainWindow::showMessage, statusBar(), &QStatusBar::showMessage);
QObject::connect(this, &MainWindow::updateProgressBar, this, &MainWindow::updateDownloadProgress);
QObject::connect(messages_widget, &MessagesWidget::msgSelectionChanged, detail_widget, &DetailWidget::setMessage);
@ -68,7 +66,7 @@ void MainWindow::createActions() {
QMenu *file_menu = menuBar()->addMenu(tr("&File"));
file_menu->addAction(tr("New DBC File"), this, &MainWindow::newFile)->setShortcuts(QKeySequence::New);
file_menu->addAction(tr("Open DBC File..."), this, &MainWindow::openFile)->setShortcuts(QKeySequence::Open);
file_menu->addAction(tr("Load DBC From Clipboard"), this, &MainWindow::loadDBCFromClipboard);
open_recent_menu = file_menu->addMenu(tr("Open &Recent"));
for (int i = 0; i < MAX_RECENT_FILES; ++i) {
recent_files_acts[i] = new QAction(this);
@ -78,6 +76,17 @@ void MainWindow::createActions() {
}
updateRecentFileActions();
file_menu->addSeparator();
QMenu *load_opendbc_menu = file_menu->addMenu(tr("Load DBC from commaai/opendbc"));
// load_opendbc_menu->setStyleSheet("QMenu { menu-scrollable: true; }");
auto dbc_names = dbc()->allDBCNames();
std::sort(dbc_names.begin(), dbc_names.end());
for (const auto &name : dbc_names) {
load_opendbc_menu->addAction(QString::fromStdString(name), this, &MainWindow::openOpendbcFile);
}
file_menu->addAction(tr("Load DBC From Clipboard"), this, &MainWindow::loadDBCFromClipboard);
file_menu->addSeparator();
file_menu->addAction(tr("Save DBC..."), this, &MainWindow::save)->setShortcuts(QKeySequence::Save);
file_menu->addAction(tr("Save DBC As..."), this, &MainWindow::saveAs)->setShortcuts(QKeySequence::SaveAs);
@ -113,18 +122,12 @@ void MainWindow::createActions() {
void MainWindow::createDockWindows() {
// left panel
QWidget *messages_container = new QWidget(this);
QVBoxLayout *messages_layout = new QVBoxLayout(messages_container);
dbc_combo = createDBCSelector();
messages_layout->addWidget(dbc_combo);
messages_widget = new MessagesWidget(this);
messages_layout->addWidget(messages_widget);
QDockWidget *dock = new QDockWidget(tr("MESSAGES"), this);
dock->setObjectName("MessagesPanel");
dock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea | Qt::TopDockWidgetArea | Qt::BottomDockWidgetArea);
dock->setFeatures(QDockWidget::DockWidgetMovable | QDockWidget::DockWidgetFloatable);
dock->setWidget(messages_container);
dock->setWidget(messages_widget);
addDockWidget(Qt::LeftDockWidgetArea, dock);
// right panel
@ -156,23 +159,6 @@ void MainWindow::createDockWindows() {
addDockWidget(Qt::RightDockWidgetArea, video_dock);
}
QComboBox *MainWindow::createDBCSelector() {
QComboBox *c = new QComboBox(this);
c->setEditable(true);
c->lineEdit()->setPlaceholderText(tr("Select from an existing DBC file"));
c->setInsertPolicy(QComboBox::NoInsert);
c->completer()->setCompletionMode(QCompleter::PopupCompletion);
c->completer()->setFilterMode(Qt::MatchContains);
auto dbc_names = dbc()->allDBCNames();
std::sort(dbc_names.begin(), dbc_names.end());
for (const auto &name : dbc_names) {
c->addItem(QString::fromStdString(name));
}
c->setCurrentIndex(-1);
return c;
}
void MainWindow::createStatusBar() {
progress_bar = new QProgressBar();
progress_bar->setRange(0, 100);
@ -190,8 +176,6 @@ void MainWindow::createShortcuts() {
void MainWindow::DBCFileChanged() {
detail_widget->undo_stack->clear();
int index = dbc_combo->findText(QFileInfo(dbc()->name()).baseName());
dbc_combo->setCurrentIndex(index);
setWindowFilePath(QString("%1").arg(dbc()->name()));
}
@ -220,6 +204,13 @@ void MainWindow::loadFile(const QString &fn) {
}
}
void MainWindow::openOpendbcFile() {
if (auto action = qobject_cast<QAction *>(sender())) {
remindSaveChanges();
loadDBCFromOpendbc(action->text());
}
}
void MainWindow::openRecentFile() {
if (auto action = qobject_cast<QAction *>(sender())) {
remindSaveChanges();
@ -227,7 +218,7 @@ void MainWindow::openRecentFile() {
}
}
void MainWindow::loadDBCFromName(const QString &name) {
void MainWindow::loadDBCFromOpendbc(const QString &name) {
if (name != dbc()->name()) {
remindSaveChanges();
dbc()->open(name);
@ -252,7 +243,7 @@ void MainWindow::loadDBCFromFingerprint() {
if (!fingerprint.isEmpty()) {
auto dbc_name = fingerprint_to_dbc[fingerprint];
if (dbc_name != QJsonValue::Undefined) {
loadDBCFromName(dbc_name.toString());
loadDBCFromOpendbc(dbc_name.toString());
return;
}
}

@ -1,6 +1,5 @@
#pragma once
#include <QComboBox>
#include <QDockWidget>
#include <QJsonDocument>
#include <QMainWindow>
@ -26,7 +25,8 @@ public slots:
void newFile();
void openFile();
void openRecentFile();
void loadDBCFromName(const QString &name);
void openOpendbcFile();
void loadDBCFromOpendbc(const QString &name);
void loadDBCFromFingerprint();
void loadDBCFromClipboard();
void save();
@ -45,7 +45,6 @@ protected:
void updateRecentFileActions();
void createActions();
void createDockWindows();
QComboBox *createDBCSelector();
void createStatusBar();
void createShortcuts();
void closeEvent(QCloseEvent *event) override;
@ -63,7 +62,6 @@ protected:
QVBoxLayout *charts_layout;
QProgressBar *progress_bar;
QJsonDocument fingerprint_to_dbc;
QComboBox *dbc_combo;
QSplitter *video_splitter;;
QString current_file = "";
enum { MAX_RECENT_FILES = 15 };

@ -10,7 +10,6 @@
MessagesWidget::MessagesWidget(QWidget *parent) : QWidget(parent) {
QVBoxLayout *main_layout = new QVBoxLayout(this);
main_layout->setContentsMargins(0, 0, 0, 0);
// message filter
QLineEdit *filter = new QLineEdit(this);

Loading…
Cancel
Save