Skip to content

Commit 900c542

Browse files
deanleetwilsonco
authored andcommitted
Cabana: load commaai/opendbc from menu (commaai#27114)
* load from opendbc * move load from commaai/opendbc to menu * keep margins
1 parent 9af6fb1 commit 900c542

File tree

3 files changed

+24
-36
lines changed

3 files changed

+24
-36
lines changed

tools/cabana/mainwin.cc

+22-31
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
#include <iostream>
44
#include <QClipboard>
5-
#include <QCompleter>
65
#include <QDesktopWidget>
76
#include <QFile>
87
#include <QFileDialog>
@@ -54,7 +53,6 @@ MainWindow::MainWindow() : QMainWindow() {
5453
fingerprint_to_dbc = QJsonDocument::fromJson(json_file.readAll());
5554
}
5655

57-
QObject::connect(dbc_combo, SIGNAL(activated(const QString &)), SLOT(loadDBCFromName(const QString &)));
5856
QObject::connect(this, &MainWindow::showMessage, statusBar(), &QStatusBar::showMessage);
5957
QObject::connect(this, &MainWindow::updateProgressBar, this, &MainWindow::updateDownloadProgress);
6058
QObject::connect(messages_widget, &MessagesWidget::msgSelectionChanged, detail_widget, &DetailWidget::setMessage);
@@ -68,7 +66,7 @@ void MainWindow::createActions() {
6866
QMenu *file_menu = menuBar()->addMenu(tr("&File"));
6967
file_menu->addAction(tr("New DBC File"), this, &MainWindow::newFile)->setShortcuts(QKeySequence::New);
7068
file_menu->addAction(tr("Open DBC File..."), this, &MainWindow::openFile)->setShortcuts(QKeySequence::Open);
71-
file_menu->addAction(tr("Load DBC From Clipboard"), this, &MainWindow::loadDBCFromClipboard);
69+
7270
open_recent_menu = file_menu->addMenu(tr("Open &Recent"));
7371
for (int i = 0; i < MAX_RECENT_FILES; ++i) {
7472
recent_files_acts[i] = new QAction(this);
@@ -78,6 +76,17 @@ void MainWindow::createActions() {
7876
}
7977
updateRecentFileActions();
8078

79+
file_menu->addSeparator();
80+
QMenu *load_opendbc_menu = file_menu->addMenu(tr("Load DBC from commaai/opendbc"));
81+
// load_opendbc_menu->setStyleSheet("QMenu { menu-scrollable: true; }");
82+
auto dbc_names = dbc()->allDBCNames();
83+
std::sort(dbc_names.begin(), dbc_names.end());
84+
for (const auto &name : dbc_names) {
85+
load_opendbc_menu->addAction(QString::fromStdString(name), this, &MainWindow::openOpendbcFile);
86+
}
87+
88+
file_menu->addAction(tr("Load DBC From Clipboard"), this, &MainWindow::loadDBCFromClipboard);
89+
8190
file_menu->addSeparator();
8291
file_menu->addAction(tr("Save DBC..."), this, &MainWindow::save)->setShortcuts(QKeySequence::Save);
8392
file_menu->addAction(tr("Save DBC As..."), this, &MainWindow::saveAs)->setShortcuts(QKeySequence::SaveAs);
@@ -113,18 +122,12 @@ void MainWindow::createActions() {
113122

114123
void MainWindow::createDockWindows() {
115124
// left panel
116-
QWidget *messages_container = new QWidget(this);
117-
QVBoxLayout *messages_layout = new QVBoxLayout(messages_container);
118-
dbc_combo = createDBCSelector();
119-
messages_layout->addWidget(dbc_combo);
120125
messages_widget = new MessagesWidget(this);
121-
messages_layout->addWidget(messages_widget);
122-
123126
QDockWidget *dock = new QDockWidget(tr("MESSAGES"), this);
124127
dock->setObjectName("MessagesPanel");
125128
dock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea | Qt::TopDockWidgetArea | Qt::BottomDockWidgetArea);
126129
dock->setFeatures(QDockWidget::DockWidgetMovable | QDockWidget::DockWidgetFloatable);
127-
dock->setWidget(messages_container);
130+
dock->setWidget(messages_widget);
128131
addDockWidget(Qt::LeftDockWidgetArea, dock);
129132

130133
// right panel
@@ -156,23 +159,6 @@ void MainWindow::createDockWindows() {
156159
addDockWidget(Qt::RightDockWidgetArea, video_dock);
157160
}
158161

159-
QComboBox *MainWindow::createDBCSelector() {
160-
QComboBox *c = new QComboBox(this);
161-
c->setEditable(true);
162-
c->lineEdit()->setPlaceholderText(tr("Select from an existing DBC file"));
163-
c->setInsertPolicy(QComboBox::NoInsert);
164-
c->completer()->setCompletionMode(QCompleter::PopupCompletion);
165-
c->completer()->setFilterMode(Qt::MatchContains);
166-
167-
auto dbc_names = dbc()->allDBCNames();
168-
std::sort(dbc_names.begin(), dbc_names.end());
169-
for (const auto &name : dbc_names) {
170-
c->addItem(QString::fromStdString(name));
171-
}
172-
c->setCurrentIndex(-1);
173-
return c;
174-
}
175-
176162
void MainWindow::createStatusBar() {
177163
progress_bar = new QProgressBar();
178164
progress_bar->setRange(0, 100);
@@ -190,8 +176,6 @@ void MainWindow::createShortcuts() {
190176

191177
void MainWindow::DBCFileChanged() {
192178
detail_widget->undo_stack->clear();
193-
int index = dbc_combo->findText(QFileInfo(dbc()->name()).baseName());
194-
dbc_combo->setCurrentIndex(index);
195179
setWindowFilePath(QString("%1").arg(dbc()->name()));
196180
}
197181

@@ -220,14 +204,21 @@ void MainWindow::loadFile(const QString &fn) {
220204
}
221205
}
222206

207+
void MainWindow::openOpendbcFile() {
208+
if (auto action = qobject_cast<QAction *>(sender())) {
209+
remindSaveChanges();
210+
loadDBCFromOpendbc(action->text());
211+
}
212+
}
213+
223214
void MainWindow::openRecentFile() {
224215
if (auto action = qobject_cast<QAction *>(sender())) {
225216
remindSaveChanges();
226217
loadFile(action->data().toString());
227218
}
228219
}
229220

230-
void MainWindow::loadDBCFromName(const QString &name) {
221+
void MainWindow::loadDBCFromOpendbc(const QString &name) {
231222
if (name != dbc()->name()) {
232223
remindSaveChanges();
233224
dbc()->open(name);
@@ -252,7 +243,7 @@ void MainWindow::loadDBCFromFingerprint() {
252243
if (!fingerprint.isEmpty()) {
253244
auto dbc_name = fingerprint_to_dbc[fingerprint];
254245
if (dbc_name != QJsonValue::Undefined) {
255-
loadDBCFromName(dbc_name.toString());
246+
loadDBCFromOpendbc(dbc_name.toString());
256247
return;
257248
}
258249
}

tools/cabana/mainwin.h

+2-4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
#pragma once
22

3-
#include <QComboBox>
43
#include <QDockWidget>
54
#include <QJsonDocument>
65
#include <QMainWindow>
@@ -26,7 +25,8 @@ public slots:
2625
void newFile();
2726
void openFile();
2827
void openRecentFile();
29-
void loadDBCFromName(const QString &name);
28+
void openOpendbcFile();
29+
void loadDBCFromOpendbc(const QString &name);
3030
void loadDBCFromFingerprint();
3131
void loadDBCFromClipboard();
3232
void save();
@@ -45,7 +45,6 @@ public slots:
4545
void updateRecentFileActions();
4646
void createActions();
4747
void createDockWindows();
48-
QComboBox *createDBCSelector();
4948
void createStatusBar();
5049
void createShortcuts();
5150
void closeEvent(QCloseEvent *event) override;
@@ -63,7 +62,6 @@ public slots:
6362
QVBoxLayout *charts_layout;
6463
QProgressBar *progress_bar;
6564
QJsonDocument fingerprint_to_dbc;
66-
QComboBox *dbc_combo;
6765
QSplitter *video_splitter;;
6866
QString current_file = "";
6967
enum { MAX_RECENT_FILES = 15 };

tools/cabana/messageswidget.cc

-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010

1111
MessagesWidget::MessagesWidget(QWidget *parent) : QWidget(parent) {
1212
QVBoxLayout *main_layout = new QVBoxLayout(this);
13-
main_layout->setContentsMargins(0, 0, 0, 0);
1413

1514
// message filter
1615
QLineEdit *filter = new QLineEdit(this);

0 commit comments

Comments
 (0)