|
|
@ -6,14 +6,18 @@ |
|
|
|
#include <QSplitter> |
|
|
|
#include <QSplitter> |
|
|
|
#include <QVBoxLayout> |
|
|
|
#include <QVBoxLayout> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#include "tools/replay/util.h" |
|
|
|
|
|
|
|
|
|
|
|
MainWindow::MainWindow() : QWidget() { |
|
|
|
MainWindow::MainWindow() : QWidget() { |
|
|
|
QVBoxLayout *main_layout = new QVBoxLayout(this); |
|
|
|
QVBoxLayout *main_layout = new QVBoxLayout(this); |
|
|
|
|
|
|
|
main_layout->setContentsMargins(11, 11, 11, 5); |
|
|
|
|
|
|
|
main_layout->setSpacing(0); |
|
|
|
|
|
|
|
|
|
|
|
QHBoxLayout *h_layout = new QHBoxLayout(); |
|
|
|
QHBoxLayout *h_layout = new QHBoxLayout(); |
|
|
|
|
|
|
|
h_layout->setContentsMargins(0, 0, 0, 0); |
|
|
|
main_layout->addLayout(h_layout); |
|
|
|
main_layout->addLayout(h_layout); |
|
|
|
|
|
|
|
|
|
|
|
QSplitter *splitter = new QSplitter(Qt::Horizontal, this); |
|
|
|
QSplitter *splitter = new QSplitter(Qt::Horizontal, this); |
|
|
|
|
|
|
|
|
|
|
|
messages_widget = new MessagesWidget(this); |
|
|
|
messages_widget = new MessagesWidget(this); |
|
|
|
splitter->addWidget(messages_widget); |
|
|
|
splitter->addWidget(messages_widget); |
|
|
|
|
|
|
|
|
|
|
@ -27,7 +31,7 @@ MainWindow::MainWindow() : QWidget() { |
|
|
|
QWidget *right_container = new QWidget(this); |
|
|
|
QWidget *right_container = new QWidget(this); |
|
|
|
right_container->setFixedWidth(640); |
|
|
|
right_container->setFixedWidth(640); |
|
|
|
r_layout = new QVBoxLayout(right_container); |
|
|
|
r_layout = new QVBoxLayout(right_container); |
|
|
|
|
|
|
|
r_layout->setContentsMargins(11, 0, 0, 0); |
|
|
|
QHBoxLayout *right_hlayout = new QHBoxLayout(); |
|
|
|
QHBoxLayout *right_hlayout = new QHBoxLayout(); |
|
|
|
QLabel *fingerprint_label = new QLabel(this); |
|
|
|
QLabel *fingerprint_label = new QLabel(this); |
|
|
|
right_hlayout->addWidget(fingerprint_label); |
|
|
|
right_hlayout->addWidget(fingerprint_label); |
|
|
@ -47,6 +51,30 @@ MainWindow::MainWindow() : QWidget() { |
|
|
|
|
|
|
|
|
|
|
|
h_layout->addWidget(right_container); |
|
|
|
h_layout->addWidget(right_container); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// status bar
|
|
|
|
|
|
|
|
status_bar = new QStatusBar(this); |
|
|
|
|
|
|
|
status_bar->setContentsMargins(0, 0, 0, 0); |
|
|
|
|
|
|
|
status_bar->setSizeGripEnabled(true); |
|
|
|
|
|
|
|
progress_bar = new QProgressBar(); |
|
|
|
|
|
|
|
progress_bar->setRange(0, 100); |
|
|
|
|
|
|
|
progress_bar->setTextVisible(true); |
|
|
|
|
|
|
|
progress_bar->setFixedSize({230, 16}); |
|
|
|
|
|
|
|
progress_bar->setVisible(false); |
|
|
|
|
|
|
|
status_bar->addPermanentWidget(progress_bar); |
|
|
|
|
|
|
|
main_layout->addWidget(status_bar); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
qRegisterMetaType<uint64_t>("uint64_t"); |
|
|
|
|
|
|
|
qRegisterMetaType<ReplyMsgType>("ReplyMsgType"); |
|
|
|
|
|
|
|
installMessageHandler([this](ReplyMsgType type, const std::string msg) { |
|
|
|
|
|
|
|
// use queued connection to recv the log messages from replay.
|
|
|
|
|
|
|
|
emit logMessageFromReplay(QString::fromStdString(msg), 3000); |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
installDownloadProgressHandler([this](uint64_t cur, uint64_t total, bool success) { |
|
|
|
|
|
|
|
emit updateProgressBar(cur, total, success); |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
QObject::connect(this, &MainWindow::logMessageFromReplay, status_bar, &QStatusBar::showMessage); |
|
|
|
|
|
|
|
QObject::connect(this, &MainWindow::updateProgressBar, this, &MainWindow::updateDownloadProgress); |
|
|
|
QObject::connect(messages_widget, &MessagesWidget::msgSelectionChanged, detail_widget, &DetailWidget::setMessage); |
|
|
|
QObject::connect(messages_widget, &MessagesWidget::msgSelectionChanged, detail_widget, &DetailWidget::setMessage); |
|
|
|
QObject::connect(detail_widget, &DetailWidget::showChart, charts_widget, &ChartsWidget::addChart); |
|
|
|
QObject::connect(detail_widget, &DetailWidget::showChart, charts_widget, &ChartsWidget::addChart); |
|
|
|
QObject::connect(charts_widget, &ChartsWidget::dock, this, &MainWindow::dockCharts); |
|
|
|
QObject::connect(charts_widget, &ChartsWidget::dock, this, &MainWindow::dockCharts); |
|
|
@ -54,6 +82,17 @@ MainWindow::MainWindow() : QWidget() { |
|
|
|
QObject::connect(can, &CANMessages::eventsMerged, [=]() { fingerprint_label->setText(can->carFingerprint() ); }); |
|
|
|
QObject::connect(can, &CANMessages::eventsMerged, [=]() { fingerprint_label->setText(can->carFingerprint() ); }); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void MainWindow::updateDownloadProgress(uint64_t cur, uint64_t total, bool success) { |
|
|
|
|
|
|
|
if (success && cur < total) { |
|
|
|
|
|
|
|
progress_bar->setValue((cur / (double)total) * 100); |
|
|
|
|
|
|
|
progress_bar->setFormat(tr("Downloading %p% (%1)").arg(formattedDataSize(total).c_str())); |
|
|
|
|
|
|
|
progress_bar->show(); |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
progress_bar->hide(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void MainWindow::dockCharts(bool dock) { |
|
|
|
void MainWindow::dockCharts(bool dock) { |
|
|
|
if (dock && floating_window) { |
|
|
|
if (dock && floating_window) { |
|
|
|
floating_window->removeEventFilter(charts_widget); |
|
|
|
floating_window->removeEventFilter(charts_widget); |
|
|
|