@ -3,6 +3,7 @@
# include <QButtonGroup>
# include <QDateTime>
# include <QHBoxLayout>
# include <QMouseEvent>
# include <QPushButton>
# include <QVBoxLayout>
@ -15,6 +16,7 @@ inline QString formatTime(int seconds) {
VideoWidget : : VideoWidget ( QWidget * parent ) : QWidget ( parent ) {
QVBoxLayout * main_layout = new QVBoxLayout ( this ) ;
// TODO: figure out why the CameraViewWidget crashed occasionally.
cam_widget = new CameraViewWidget ( " camerad " , VISION_STREAM_ROAD , false , this ) ;
cam_widget - > setFixedSize ( parent - > width ( ) , parent - > width ( ) / 1.596 ) ;
main_layout - > addWidget ( cam_widget ) ;
@ -24,16 +26,12 @@ VideoWidget::VideoWidget(QWidget *parent) : QWidget(parent) {
time_label = new QLabel ( " 00:00 " ) ;
slider_layout - > addWidget ( time_label ) ;
slider = new Q Slider( Qt : : Horizontal , this ) ;
QObject : : connect ( slider , & QSlider : : sliderMoved , [ = ] ( ) {
time_label - > setText ( formatTime ( slider - > value ( ) ) ) ;
} ) ;
slider - > setSingleStep ( 1 ) ;
slider = new Slider ( this ) ;
slider - > setSingleStep ( 0 ) ;
slider - > setMinimum ( 0 ) ;
slider - > setTickInterval ( 60 ) ;
slider - > setTickPosition ( QSlider : : TicksBelow ) ;
slider - > setMaximum ( parser - > replay - > totalSeconds ( ) ) ;
QObject : : connect ( slider , & QSlider : : sliderReleased , [ = ] ( ) {
time_label - > setText ( formatTime ( slider - > value ( ) ) ) ;
parser - > replay - > seekTo ( slider - > value ( ) , false ) ;
} ) ;
slider_layout - > addWidget ( slider ) ;
total_time_label = new QLabel ( formatTime ( parser - > replay - > totalSeconds ( ) ) ) ;
@ -45,11 +43,6 @@ VideoWidget::VideoWidget(QWidget *parent) : QWidget(parent) {
QHBoxLayout * control_layout = new QHBoxLayout ( ) ;
QPushButton * play = new QPushButton ( " ⏸ " ) ;
play - > setStyleSheet ( " font-weight:bold " ) ;
QObject : : connect ( play , & QPushButton : : clicked , [ = ] ( ) {
bool is_paused = parser - > replay - > isPaused ( ) ;
play - > setText ( is_paused ? " ⏸ " : " ▶ " ) ;
parser - > replay - > pause ( ! is_paused ) ;
} ) ;
control_layout - > addWidget ( play ) ;
QButtonGroup * group = new QButtonGroup ( this ) ;
@ -68,6 +61,20 @@ VideoWidget::VideoWidget(QWidget *parent) : QWidget(parent) {
QObject : : connect ( parser , & Parser : : rangeChanged , this , & VideoWidget : : rangeChanged ) ;
QObject : : connect ( parser , & Parser : : updated , this , & VideoWidget : : updateState ) ;
QObject : : connect ( slider , & QSlider : : sliderMoved , [ = ] ( ) { time_label - > setText ( formatTime ( slider - > value ( ) ) ) ; } ) ;
QObject : : connect ( slider , & QSlider : : sliderReleased , [ this ] ( ) { setPosition ( slider - > value ( ) ) ; } ) ;
QObject : : connect ( slider , & Slider : : setPosition , this , & VideoWidget : : setPosition ) ;
QObject : : connect ( play , & QPushButton : : clicked , [ = ] ( ) {
bool is_paused = parser - > replay - > isPaused ( ) ;
play - > setText ( is_paused ? " ⏸ " : " ▶ " ) ;
parser - > replay - > pause ( ! is_paused ) ;
} ) ;
}
void VideoWidget : : setPosition ( int value ) {
time_label - > setText ( formatTime ( value ) ) ;
parser - > seekTo ( value ) ;
}
void VideoWidget : : rangeChanged ( double min , double max ) {
@ -77,6 +84,7 @@ void VideoWidget::rangeChanged(double min, double max) {
}
time_label - > setText ( formatTime ( min ) ) ;
total_time_label - > setText ( formatTime ( max ) ) ;
slider - > setMinimum ( min ) ;
slider - > setMaximum ( max ) ;
slider - > setValue ( parser - > currentSec ( ) ) ;
}
@ -88,3 +96,17 @@ void VideoWidget::updateState() {
slider - > setValue ( current_sec ) ;
}
}
// Slider
// TODO: show timeline bar like what replay did.
Slider : : Slider ( QWidget * parent ) : QSlider ( Qt : : Horizontal , parent ) {
}
void Slider : : mousePressEvent ( QMouseEvent * e ) {
QSlider : : mousePressEvent ( e ) ;
if ( e - > button ( ) = = Qt : : LeftButton & & ! isSliderDown ( ) ) {
int value = minimum ( ) + ( ( maximum ( ) - minimum ( ) ) * e - > x ( ) ) / width ( ) ;
setValue ( value ) ;
emit setPosition ( value ) ;
}
}