mirror of
https://github.com/firestar5683/StarPilot.git
synced 2026-07-01 03:22:07 +08:00
Cabana: add status bar to main window (#26159)
old-commit-hash: 02a0a1c201e2c203e79669fd927b38768ef645b7
This commit is contained in:
@@ -12,6 +12,7 @@
|
||||
|
||||
DetailWidget::DetailWidget(QWidget *parent) : QWidget(parent) {
|
||||
QVBoxLayout *main_layout = new QVBoxLayout(this);
|
||||
main_layout->setContentsMargins(0, 0, 0, 0);
|
||||
main_layout->setSpacing(0);
|
||||
|
||||
// tabbar
|
||||
|
||||
+41
-2
@@ -6,14 +6,18 @@
|
||||
#include <QSplitter>
|
||||
#include <QVBoxLayout>
|
||||
|
||||
#include "tools/replay/util.h"
|
||||
|
||||
MainWindow::MainWindow() : QWidget() {
|
||||
QVBoxLayout *main_layout = new QVBoxLayout(this);
|
||||
main_layout->setContentsMargins(11, 11, 11, 5);
|
||||
main_layout->setSpacing(0);
|
||||
|
||||
QHBoxLayout *h_layout = new QHBoxLayout();
|
||||
h_layout->setContentsMargins(0, 0, 0, 0);
|
||||
main_layout->addLayout(h_layout);
|
||||
|
||||
QSplitter *splitter = new QSplitter(Qt::Horizontal, this);
|
||||
|
||||
messages_widget = new MessagesWidget(this);
|
||||
splitter->addWidget(messages_widget);
|
||||
|
||||
@@ -27,7 +31,7 @@ MainWindow::MainWindow() : QWidget() {
|
||||
QWidget *right_container = new QWidget(this);
|
||||
right_container->setFixedWidth(640);
|
||||
r_layout = new QVBoxLayout(right_container);
|
||||
|
||||
r_layout->setContentsMargins(11, 0, 0, 0);
|
||||
QHBoxLayout *right_hlayout = new QHBoxLayout();
|
||||
QLabel *fingerprint_label = new QLabel(this);
|
||||
right_hlayout->addWidget(fingerprint_label);
|
||||
@@ -47,6 +51,30 @@ MainWindow::MainWindow() : QWidget() {
|
||||
|
||||
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(detail_widget, &DetailWidget::showChart, charts_widget, &ChartsWidget::addChart);
|
||||
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() ); });
|
||||
}
|
||||
|
||||
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) {
|
||||
if (dock && floating_window) {
|
||||
floating_window->removeEventFilter(charts_widget);
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
#pragma once
|
||||
|
||||
#include <QProgressBar>
|
||||
#include <QStatusBar>
|
||||
|
||||
#include "tools/cabana/chartswidget.h"
|
||||
#include "tools/cabana/detailwidget.h"
|
||||
#include "tools/cabana/messageswidget.h"
|
||||
@@ -12,8 +15,13 @@ public:
|
||||
MainWindow();
|
||||
void dockCharts(bool dock);
|
||||
|
||||
signals:
|
||||
void logMessageFromReplay(const QString &msg, int timeout);
|
||||
void updateProgressBar(uint64_t cur, uint64_t total, bool success);
|
||||
|
||||
protected:
|
||||
void closeEvent(QCloseEvent *event) override;
|
||||
void updateDownloadProgress(uint64_t cur, uint64_t total, bool success);
|
||||
void setOption();
|
||||
|
||||
VideoWidget *video_widget;
|
||||
@@ -22,4 +30,6 @@ protected:
|
||||
ChartsWidget *charts_widget;
|
||||
QWidget *floating_window = nullptr;
|
||||
QVBoxLayout *r_layout;
|
||||
QProgressBar *progress_bar;
|
||||
QStatusBar *status_bar;
|
||||
};
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
|
||||
MessagesWidget::MessagesWidget(QWidget *parent) : QWidget(parent) {
|
||||
QVBoxLayout *main_layout = new QVBoxLayout(this);
|
||||
main_layout->setContentsMargins(0, 0, 0, 0);
|
||||
|
||||
// DBC file selector
|
||||
QHBoxLayout *dbc_file_layout = new QHBoxLayout();
|
||||
|
||||
Reference in New Issue
Block a user