cabana: make video resizable (#26998)

old-commit-hash: 351d97ab5a
beeps
Dean Lee 2 years ago committed by GitHub
parent 10a738c845
commit 215526119d
  1. 1
      tools/cabana/chartswidget.cc
  2. 19
      tools/cabana/mainwin.cc
  3. 4
      tools/cabana/mainwin.h
  4. 2
      tools/cabana/settings.cc
  5. 4
      tools/cabana/settings.h
  6. 30
      tools/cabana/videowidget.cc
  7. 2
      tools/cabana/videowidget.h

@ -16,7 +16,6 @@
ChartsWidget::ChartsWidget(QWidget *parent) : QWidget(parent) { ChartsWidget::ChartsWidget(QWidget *parent) : QWidget(parent) {
QVBoxLayout *main_layout = new QVBoxLayout(this); QVBoxLayout *main_layout = new QVBoxLayout(this);
main_layout->setContentsMargins(0, 0, 0, 0);
// toolbar // toolbar
QToolBar *toolbar = new QToolBar(tr("Charts"), this); QToolBar *toolbar = new QToolBar(tr("Charts"), this);

@ -116,19 +116,23 @@ void MainWindow::createDockWindows() {
addDockWidget(Qt::LeftDockWidgetArea, dock); addDockWidget(Qt::LeftDockWidgetArea, dock);
// right panel // right panel
QWidget *right_container = new QWidget(this);
r_layout = new QVBoxLayout(right_container);
charts_widget = new ChartsWidget(this); charts_widget = new ChartsWidget(this);
QWidget *charts_container = new QWidget(this);
charts_layout = new QVBoxLayout(charts_container);
charts_layout->setContentsMargins(0, 0, 0, 0);
charts_layout->addWidget(charts_widget);
video_widget = new VideoWidget(this); video_widget = new VideoWidget(this);
r_layout->addWidget(video_widget, 0, Qt::AlignTop); video_splitter = new QSplitter(Qt::Vertical,this);
r_layout->addWidget(charts_widget, 1); video_splitter->addWidget(video_widget);
r_layout->addStretch(0); video_splitter->addWidget(charts_container);
video_splitter->restoreState(settings.video_splitter_state);
video_dock = new QDockWidget(can->routeName(), this); video_dock = new QDockWidget(can->routeName(), this);
video_dock->setObjectName(tr("VideoPanel")); video_dock->setObjectName(tr("VideoPanel"));
video_dock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); video_dock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
video_dock->setFeatures(QDockWidget::DockWidgetMovable | QDockWidget::DockWidgetFloatable); video_dock->setFeatures(QDockWidget::DockWidgetMovable | QDockWidget::DockWidgetFloatable);
video_dock->setWidget(right_container); video_dock->setWidget(video_splitter);
addDockWidget(Qt::RightDockWidgetArea, video_dock); addDockWidget(Qt::RightDockWidgetArea, video_dock);
} }
@ -239,7 +243,7 @@ void MainWindow::updateDownloadProgress(uint64_t cur, uint64_t total, bool succe
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);
r_layout->insertWidget(2, charts_widget, 1); charts_layout->insertWidget(0, charts_widget, 1);
floating_window->deleteLater(); floating_window->deleteLater();
floating_window = nullptr; floating_window = nullptr;
} else if (!dock && !floating_window) { } else if (!dock && !floating_window) {
@ -270,6 +274,7 @@ void MainWindow::closeEvent(QCloseEvent *event) {
settings.geometry = saveGeometry(); settings.geometry = saveGeometry();
settings.window_state = saveState(); settings.window_state = saveState();
settings.video_splitter_state = video_splitter->saveState();
settings.save(); settings.save();
QWidget::closeEvent(event); QWidget::closeEvent(event);
} }

@ -5,6 +5,7 @@
#include <QJsonDocument> #include <QJsonDocument>
#include <QMainWindow> #include <QMainWindow>
#include <QProgressBar> #include <QProgressBar>
#include <QSplitter>
#include <QStatusBar> #include <QStatusBar>
#include "tools/cabana/chartswidget.h" #include "tools/cabana/chartswidget.h"
@ -51,8 +52,9 @@ protected:
DetailWidget *detail_widget; DetailWidget *detail_widget;
ChartsWidget *charts_widget; ChartsWidget *charts_widget;
QWidget *floating_window = nullptr; QWidget *floating_window = nullptr;
QVBoxLayout *r_layout; QVBoxLayout *charts_layout;
QProgressBar *progress_bar; QProgressBar *progress_bar;
QJsonDocument fingerprint_to_dbc; QJsonDocument fingerprint_to_dbc;
QComboBox *dbc_combo; QComboBox *dbc_combo;
QSplitter *video_splitter;;
}; };

@ -21,6 +21,7 @@ void Settings::save() {
s.setValue("last_dir", last_dir); s.setValue("last_dir", last_dir);
s.setValue("window_state", window_state); s.setValue("window_state", window_state);
s.setValue("geometry", geometry); s.setValue("geometry", geometry);
s.setValue("video_splitter_state", video_splitter_state);
} }
void Settings::load() { void Settings::load() {
@ -32,6 +33,7 @@ void Settings::load() {
last_dir = s.value("last_dir", QDir::homePath()).toString(); last_dir = s.value("last_dir", QDir::homePath()).toString();
window_state = s.value("window_state").toByteArray(); window_state = s.value("window_state").toByteArray();
geometry = s.value("geometry").toByteArray(); geometry = s.value("geometry").toByteArray();
video_splitter_state = s.value("video_splitter_state").toByteArray();
} }
// SettingsDlg // SettingsDlg

@ -18,7 +18,9 @@ public:
int chart_height = 200; int chart_height = 200;
int max_chart_x_range = 3 * 60; // 3 minutes int max_chart_x_range = 3 * 60; // 3 minutes
QString last_dir; QString last_dir;
QByteArray window_state, geometry; QByteArray geometry;
QByteArray video_splitter_state;
QByteArray window_state;
signals: signals:
void changed(); void changed();

@ -17,20 +17,16 @@ inline QString formatTime(int seconds) {
return QDateTime::fromTime_t(seconds).toString(seconds > 60 * 60 ? "hh:mm:ss" : "mm:ss"); return QDateTime::fromTime_t(seconds).toString(seconds > 60 * 60 ? "hh:mm:ss" : "mm:ss");
} }
VideoWidget::VideoWidget(QWidget *parent) : QFrame(parent) { VideoWidget::VideoWidget(QWidget *parent) : QWidget(parent) {
setFrameShape(QFrame::StyledPanel); QVBoxLayout *main_layout = new QVBoxLayout(this);
setFrameShadow(QFrame::Sunken); QFrame *frame = new QFrame(this);
QHBoxLayout *containter_layout = new QHBoxLayout(this); frame->setFrameShape(QFrame::StyledPanel);
QVBoxLayout *main_layout = new QVBoxLayout(); frame->setFrameShadow(QFrame::Sunken);
main_layout->setContentsMargins(0, 0, 0, 0); main_layout->addWidget(frame);
containter_layout->addStretch(1); QVBoxLayout *frame_layout = new QVBoxLayout(frame);
containter_layout->addLayout(main_layout); cam_widget = new CameraWidget("camerad", can->visionStreamType(), false);
containter_layout->addStretch(1); frame_layout->addWidget(cam_widget);
cam_widget = new CameraWidget("camerad", can->visionStreamType(), false, this);
cam_widget->setFixedSize(parent->width(), parent->width() / 1.596);
main_layout->addWidget(cam_widget);
// slider controls // slider controls
QHBoxLayout *slider_layout = new QHBoxLayout(); QHBoxLayout *slider_layout = new QHBoxLayout();
@ -43,7 +39,7 @@ VideoWidget::VideoWidget(QWidget *parent) : QFrame(parent) {
end_time_label = new QLabel(this); end_time_label = new QLabel(this);
slider_layout->addWidget(end_time_label); slider_layout->addWidget(end_time_label);
main_layout->addLayout(slider_layout); frame_layout->addLayout(slider_layout);
// btn controls // btn controls
QHBoxLayout *control_layout = new QHBoxLayout(); QHBoxLayout *control_layout = new QHBoxLayout();
@ -61,7 +57,11 @@ VideoWidget::VideoWidget(QWidget *parent) : QFrame(parent) {
group->addButton(btn); group->addButton(btn);
if (speed == 1.0) btn->setChecked(true); if (speed == 1.0) btn->setChecked(true);
} }
main_layout->addLayout(control_layout); frame_layout->addLayout(control_layout);
cam_widget->setMinimumHeight(100);
cam_widget->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::MinimumExpanding);
setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Maximum);
QObject::connect(slider, &QSlider::sliderReleased, [this]() { can->seekTo(slider->value() / 1000.0); }); QObject::connect(slider, &QSlider::sliderReleased, [this]() { can->seekTo(slider->value() / 1000.0); });
QObject::connect(slider, &QSlider::valueChanged, [=](int value) { time_label->setText(formatTime(value / 1000)); }); QObject::connect(slider, &QSlider::valueChanged, [=](int value) { time_label->setText(formatTime(value / 1000)); });

@ -35,7 +35,7 @@ private:
QSize thumbnail_size = {}; QSize thumbnail_size = {};
}; };
class VideoWidget : public QFrame { class VideoWidget : public QWidget {
Q_OBJECT Q_OBJECT
public: public:

Loading…
Cancel
Save