Cabana: multiple tabs detail view (#26174)

old-commit-hash: 998d18783d
taco
Dean Lee 3 years ago committed by GitHub
parent f3b226bf81
commit decc08073f
  1. 48
      tools/cabana/detailwidget.cc
  2. 3
      tools/cabana/detailwidget.h

@ -12,13 +12,26 @@
DetailWidget::DetailWidget(QWidget *parent) : QWidget(parent) { DetailWidget::DetailWidget(QWidget *parent) : QWidget(parent) {
QVBoxLayout *main_layout = new QVBoxLayout(this); QVBoxLayout *main_layout = new QVBoxLayout(this);
main_layout->setSpacing(0);
// title
// tabbar
tabbar = new QTabBar(this);
tabbar->setTabsClosable(true);
tabbar->setDrawBase(false);
tabbar->setUsesScrollButtons(true);
tabbar->setAutoHide(true);
main_layout->addWidget(tabbar);
// message title
QFrame *title_frame = new QFrame();
main_layout->addWidget(title_frame);
QVBoxLayout *frame_layout = new QVBoxLayout(title_frame);
title_frame->setFrameShape(QFrame::StyledPanel);
QHBoxLayout *title_layout = new QHBoxLayout(); QHBoxLayout *title_layout = new QHBoxLayout();
title_layout->addWidget(new QLabel("time:")); title_layout->addWidget(new QLabel("time:"));
time_label = new QLabel(this); time_label = new QLabel(this);
title_layout->addWidget(time_label);
time_label->setStyleSheet("font-weight:bold"); time_label->setStyleSheet("font-weight:bold");
title_layout->addWidget(time_label);
title_layout->addStretch(); title_layout->addStretch();
name_label = new QLabel(this); name_label = new QLabel(this);
name_label->setStyleSheet("font-weight:bold;"); name_label->setStyleSheet("font-weight:bold;");
@ -27,18 +40,18 @@ DetailWidget::DetailWidget(QWidget *parent) : QWidget(parent) {
edit_btn = new QPushButton(tr("Edit"), this); edit_btn = new QPushButton(tr("Edit"), this);
edit_btn->setVisible(false); edit_btn->setVisible(false);
title_layout->addWidget(edit_btn); title_layout->addWidget(edit_btn);
main_layout->addLayout(title_layout); frame_layout->addLayout(title_layout);
// warning // warning
warning_widget = new QWidget(this); warning_widget = new QWidget(this);
QHBoxLayout *warning_hlayout = new QHBoxLayout(warning_widget); QHBoxLayout *warning_hlayout = new QHBoxLayout(warning_widget);
QLabel *warning_icon = new QLabel(this); QLabel *warning_icon = new QLabel(this);
warning_icon->setPixmap(style()->standardIcon(QStyle::SP_MessageBoxWarning).pixmap({16, 16})); warning_icon->setPixmap(style()->standardIcon(QStyle::SP_MessageBoxWarning).pixmap({16, 16}));
warning_hlayout->addWidget(warning_icon); warning_hlayout->addWidget(warning_icon);
warning_label = new QLabel(this); warning_label = new QLabel(this);
warning_hlayout->addWidget(warning_label,1, Qt::AlignLeft); warning_hlayout->addWidget(warning_label, 1, Qt::AlignLeft);
warning_widget->hide(); warning_widget->hide();
main_layout->addWidget(warning_widget); frame_layout->addWidget(warning_widget);
// binary view // binary view
binary_view = new BinaryView(this); binary_view = new BinaryView(this);
@ -63,13 +76,28 @@ DetailWidget::DetailWidget(QWidget *parent) : QWidget(parent) {
QObject::connect(binary_view, &BinaryView::cellsSelected, this, &DetailWidget::addSignal); QObject::connect(binary_view, &BinaryView::cellsSelected, this, &DetailWidget::addSignal);
QObject::connect(can, &CANMessages::updated, this, &DetailWidget::updateState); QObject::connect(can, &CANMessages::updated, this, &DetailWidget::updateState);
QObject::connect(dbc(), &DBCManager::DBCFileChanged, this, &DetailWidget::dbcMsgChanged); QObject::connect(dbc(), &DBCManager::DBCFileChanged, this, &DetailWidget::dbcMsgChanged);
QObject::connect(tabbar, &QTabBar::currentChanged, [this](int index) { setMessage(messages[index]); });
QObject::connect(tabbar, &QTabBar::tabCloseRequested, [=](int index) {
messages.removeAt(index);
tabbar->removeTab(index);
setMessage(messages.isEmpty() ? "" : messages[0]);
});
} }
void DetailWidget::setMessage(const QString &message_id) { void DetailWidget::setMessage(const QString &message_id) {
if (msg_id != message_id) { if (message_id.isEmpty()) return;
msg_id = message_id;
dbcMsgChanged(); int index = messages.indexOf(message_id);
if (index == -1) {
messages.push_back(message_id);
tabbar->addTab(message_id);
index = tabbar->count() - 1;
auto msg = dbc()->msg(message_id);
tabbar->setTabToolTip(index, msg ? msg->name.c_str() : "untitled");
} }
tabbar->setCurrentIndex(index);
msg_id = message_id;
dbcMsgChanged();
} }
void DetailWidget::dbcMsgChanged() { void DetailWidget::dbcMsgChanged() {

@ -1,6 +1,7 @@
#pragma once #pragma once
#include <QScrollArea> #include <QScrollArea>
#include <QTabBar>
#include "tools/cabana/binaryview.h" #include "tools/cabana/binaryview.h"
#include "tools/cabana/historylog.h" #include "tools/cabana/historylog.h"
@ -50,6 +51,8 @@ private:
QWidget *warning_widget; QWidget *warning_widget;
QPushButton *edit_btn; QPushButton *edit_btn;
QWidget *signals_container; QWidget *signals_container;
QTabBar *tabbar;
QStringList messages;
HistoryLog *history_log; HistoryLog *history_log;
BinaryView *binary_view; BinaryView *binary_view;
ScrollArea *scroll; ScrollArea *scroll;

Loading…
Cancel
Save