2
2
3
3
#include < iostream>
4
4
#include < QClipboard>
5
- #include < QCompleter>
6
5
#include < QDesktopWidget>
7
6
#include < QFile>
8
7
#include < QFileDialog>
@@ -54,7 +53,6 @@ MainWindow::MainWindow() : QMainWindow() {
54
53
fingerprint_to_dbc = QJsonDocument::fromJson (json_file.readAll ());
55
54
}
56
55
57
- QObject::connect (dbc_combo, SIGNAL (activated (const QString &)), SLOT (loadDBCFromName (const QString &)));
58
56
QObject::connect (this , &MainWindow::showMessage, statusBar (), &QStatusBar::showMessage);
59
57
QObject::connect (this , &MainWindow::updateProgressBar, this , &MainWindow::updateDownloadProgress);
60
58
QObject::connect (messages_widget, &MessagesWidget::msgSelectionChanged, detail_widget, &DetailWidget::setMessage);
@@ -68,7 +66,7 @@ void MainWindow::createActions() {
68
66
QMenu *file_menu = menuBar ()->addMenu (tr (" &File" ));
69
67
file_menu->addAction (tr (" New DBC File" ), this , &MainWindow::newFile)->setShortcuts (QKeySequence::New);
70
68
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
+
72
70
open_recent_menu = file_menu->addMenu (tr (" Open &Recent" ));
73
71
for (int i = 0 ; i < MAX_RECENT_FILES; ++i) {
74
72
recent_files_acts[i] = new QAction (this );
@@ -78,6 +76,17 @@ void MainWindow::createActions() {
78
76
}
79
77
updateRecentFileActions ();
80
78
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
+
81
90
file_menu->addSeparator ();
82
91
file_menu->addAction (tr (" Save DBC..." ), this , &MainWindow::save)->setShortcuts (QKeySequence::Save);
83
92
file_menu->addAction (tr (" Save DBC As..." ), this , &MainWindow::saveAs)->setShortcuts (QKeySequence::SaveAs);
@@ -113,18 +122,12 @@ void MainWindow::createActions() {
113
122
114
123
void MainWindow::createDockWindows () {
115
124
// 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);
120
125
messages_widget = new MessagesWidget (this );
121
- messages_layout->addWidget (messages_widget);
122
-
123
126
QDockWidget *dock = new QDockWidget (tr (" MESSAGES" ), this );
124
127
dock->setObjectName (" MessagesPanel" );
125
128
dock->setAllowedAreas (Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea | Qt::TopDockWidgetArea | Qt::BottomDockWidgetArea);
126
129
dock->setFeatures (QDockWidget::DockWidgetMovable | QDockWidget::DockWidgetFloatable);
127
- dock->setWidget (messages_container );
130
+ dock->setWidget (messages_widget );
128
131
addDockWidget (Qt::LeftDockWidgetArea, dock);
129
132
130
133
// right panel
@@ -156,23 +159,6 @@ void MainWindow::createDockWindows() {
156
159
addDockWidget (Qt::RightDockWidgetArea, video_dock);
157
160
}
158
161
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
-
176
162
void MainWindow::createStatusBar () {
177
163
progress_bar = new QProgressBar ();
178
164
progress_bar->setRange (0 , 100 );
@@ -190,8 +176,6 @@ void MainWindow::createShortcuts() {
190
176
191
177
void MainWindow::DBCFileChanged () {
192
178
detail_widget->undo_stack ->clear ();
193
- int index = dbc_combo->findText (QFileInfo (dbc ()->name ()).baseName ());
194
- dbc_combo->setCurrentIndex (index );
195
179
setWindowFilePath (QString (" %1" ).arg (dbc ()->name ()));
196
180
}
197
181
@@ -220,14 +204,21 @@ void MainWindow::loadFile(const QString &fn) {
220
204
}
221
205
}
222
206
207
+ void MainWindow::openOpendbcFile () {
208
+ if (auto action = qobject_cast<QAction *>(sender ())) {
209
+ remindSaveChanges ();
210
+ loadDBCFromOpendbc (action->text ());
211
+ }
212
+ }
213
+
223
214
void MainWindow::openRecentFile () {
224
215
if (auto action = qobject_cast<QAction *>(sender ())) {
225
216
remindSaveChanges ();
226
217
loadFile (action->data ().toString ());
227
218
}
228
219
}
229
220
230
- void MainWindow::loadDBCFromName (const QString &name) {
221
+ void MainWindow::loadDBCFromOpendbc (const QString &name) {
231
222
if (name != dbc ()->name ()) {
232
223
remindSaveChanges ();
233
224
dbc ()->open (name);
@@ -252,7 +243,7 @@ void MainWindow::loadDBCFromFingerprint() {
252
243
if (!fingerprint.isEmpty ()) {
253
244
auto dbc_name = fingerprint_to_dbc[fingerprint];
254
245
if (dbc_name != QJsonValue::Undefined) {
255
- loadDBCFromName (dbc_name.toString ());
246
+ loadDBCFromOpendbc (dbc_name.toString ());
256
247
return ;
257
248
}
258
249
}
0 commit comments