|
|
|
@ -64,31 +64,35 @@ DetailWidget::DetailWidget(ChartsWidget *charts, QWidget *parent) : charts(chart |
|
|
|
|
frame_layout->addWidget(warning_widget); |
|
|
|
|
main_layout->addWidget(title_frame); |
|
|
|
|
|
|
|
|
|
QWidget *container = new QWidget(this); |
|
|
|
|
QVBoxLayout *container_layout = new QVBoxLayout(container); |
|
|
|
|
container_layout->setSpacing(0); |
|
|
|
|
container_layout->setContentsMargins(0, 0, 0, 0); |
|
|
|
|
|
|
|
|
|
scroll = new QScrollArea(this); |
|
|
|
|
scroll->setWidget(container); |
|
|
|
|
scroll->setWidgetResizable(true); |
|
|
|
|
scroll->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); |
|
|
|
|
main_layout->addWidget(scroll); |
|
|
|
|
|
|
|
|
|
// msg widget
|
|
|
|
|
QWidget *msg_widget = new QWidget(this); |
|
|
|
|
QVBoxLayout *msg_layout = new QVBoxLayout(msg_widget); |
|
|
|
|
msg_layout->setContentsMargins(0, 0, 0, 0); |
|
|
|
|
// binary view
|
|
|
|
|
binary_view = new BinaryView(this); |
|
|
|
|
container_layout->addWidget(binary_view); |
|
|
|
|
|
|
|
|
|
msg_layout->addWidget(binary_view); |
|
|
|
|
// signals
|
|
|
|
|
signals_layout = new QVBoxLayout(); |
|
|
|
|
container_layout->addLayout(signals_layout); |
|
|
|
|
signals_layout->setSpacing(0); |
|
|
|
|
msg_layout->addLayout(signals_layout); |
|
|
|
|
msg_layout->addStretch(0); |
|
|
|
|
|
|
|
|
|
scroll = new QScrollArea(this); |
|
|
|
|
scroll->setFrameShape(QFrame::NoFrame); |
|
|
|
|
scroll->setWidget(msg_widget); |
|
|
|
|
scroll->setWidgetResizable(true); |
|
|
|
|
scroll->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); |
|
|
|
|
|
|
|
|
|
// history log
|
|
|
|
|
tab_widget = new QTabWidget(this); |
|
|
|
|
tab_widget->setTabPosition(QTabWidget::South); |
|
|
|
|
tab_widget->addTab(scroll, "Msg"); |
|
|
|
|
history_log = new HistoryLog(this); |
|
|
|
|
container_layout->addWidget(history_log); |
|
|
|
|
tab_widget->addTab(history_log, "Logs"); |
|
|
|
|
main_layout->addWidget(tab_widget); |
|
|
|
|
|
|
|
|
|
QObject::connect(binary_view, &BinaryView::resizeSignal, this, &DetailWidget::resizeSignal); |
|
|
|
|
QObject::connect(binary_view, &BinaryView::addSignal, this, &DetailWidget::addSignal); |
|
|
|
|
QObject::connect(tab_widget, &QTabWidget::currentChanged, [this]() { updateState(); }); |
|
|
|
|
QObject::connect(can, &CANMessages::msgsReceived, this, &DetailWidget::updateState); |
|
|
|
|
QObject::connect(dbc(), &DBCManager::DBCFileChanged, [this]() { dbcMsgChanged(); }); |
|
|
|
|
QObject::connect(tabbar, &QTabBar::customContextMenuRequested, this, &DetailWidget::showTabBarContextMenu); |
|
|
|
@ -151,6 +155,7 @@ void DetailWidget::dbcMsgChanged(int show_form_idx) { |
|
|
|
|
form = new SignalEdit(i); |
|
|
|
|
QObject::connect(form, &SignalEdit::remove, this, &DetailWidget::removeSignal); |
|
|
|
|
QObject::connect(form, &SignalEdit::save, this, &DetailWidget::saveSignal); |
|
|
|
|
QObject::connect(form, &SignalEdit::showFormClicked, this, &DetailWidget::showFormClicked); |
|
|
|
|
QObject::connect(form, &SignalEdit::highlight, binary_view, &BinaryView::highlight); |
|
|
|
|
QObject::connect(binary_view, &BinaryView::signalHovered, form, &SignalEdit::signalHovered); |
|
|
|
|
QObject::connect(form, &SignalEdit::showChart, charts, &ChartsWidget::showChart); |
|
|
|
@ -176,18 +181,28 @@ void DetailWidget::dbcMsgChanged(int show_form_idx) { |
|
|
|
|
|
|
|
|
|
warning_label->setText(warnings.join('\n')); |
|
|
|
|
warning_widget->setVisible(!warnings.isEmpty()); |
|
|
|
|
QTimer::singleShot(1, [this]() { setUpdatesEnabled(true); }); |
|
|
|
|
setUpdatesEnabled(true); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void DetailWidget::updateState(const QHash<QString, CanData> * msgs) { |
|
|
|
|
time_label->setText(QString::number(can->currentSec(), 'f', 3)); |
|
|
|
|
if (!msgs->contains(msg_id)) |
|
|
|
|
if (msg_id.isEmpty() || (msgs && !msgs->contains(msg_id))) |
|
|
|
|
return; |
|
|
|
|
|
|
|
|
|
if (tab_widget->currentIndex() == 0) |
|
|
|
|
binary_view->updateState(); |
|
|
|
|
else |
|
|
|
|
history_log->updateState(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void DetailWidget::showFormClicked() { |
|
|
|
|
auto s = qobject_cast<SignalEdit *>(sender()); |
|
|
|
|
setUpdatesEnabled(false); |
|
|
|
|
for (auto f : signal_list) |
|
|
|
|
f->updateForm(f == s && !f->isFormVisible()); |
|
|
|
|
setUpdatesEnabled(true); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void DetailWidget::updateChartState(const QString &id, const Signal *sig, bool opened) { |
|
|
|
|
for (auto f : signal_list) |
|
|
|
|
if (f->msg_id == id && f->sig == sig) f->setChartOpened(opened); |
|
|
|
|