@ -27,22 +27,9 @@ VideoWidget::VideoWidget(QWidget *parent) : QWidget(parent) {
main_layout - > addWidget ( frame ) ;
main_layout - > addWidget ( frame ) ;
QVBoxLayout * frame_layout = new QVBoxLayout ( frame ) ;
QVBoxLayout * frame_layout = new QVBoxLayout ( frame ) ;
cam_widget = new CameraWidget ( " camerad " , can - > visionStreamType ( ) , false ) ;
if ( ! can - > liveStreaming ( ) ) {
frame_layout - > addWidget ( cam_widget ) ;
frame_layout - > addWidget ( createCameraWidget ( ) ) ;
}
// slider controls
slider_layout = new QHBoxLayout ( ) ;
time_label = new ElidedLabel ( " 00:00 " ) ;
time_label - > setToolTip ( tr ( " Click to set current time " ) ) ;
slider_layout - > addWidget ( time_label ) ;
slider = new Slider ( this ) ;
slider - > setSingleStep ( 0 ) ;
slider_layout - > addWidget ( slider ) ;
end_time_label = new QLabel ( this ) ;
slider_layout - > addWidget ( end_time_label ) ;
frame_layout - > addLayout ( slider_layout ) ;
// btn controls
// btn controls
QHBoxLayout * control_layout = new QHBoxLayout ( ) ;
QHBoxLayout * control_layout = new QHBoxLayout ( ) ;
@ -52,6 +39,8 @@ VideoWidget::VideoWidget(QWidget *parent) : QWidget(parent) {
QButtonGroup * group = new QButtonGroup ( this ) ;
QButtonGroup * group = new QButtonGroup ( this ) ;
group - > setExclusive ( true ) ;
group - > setExclusive ( true ) ;
for ( float speed : { 0.1 , 0.5 , 1. , 2. } ) {
for ( float speed : { 0.1 , 0.5 , 1. , 2. } ) {
if ( can - > liveStreaming ( ) & & speed > 1 ) continue ;
QPushButton * btn = new QPushButton ( QString ( " %1x " ) . arg ( speed ) , this ) ;
QPushButton * btn = new QPushButton ( QString ( " %1x " ) . arg ( speed ) , this ) ;
btn - > setCheckable ( true ) ;
btn - > setCheckable ( true ) ;
QObject : : connect ( btn , & QPushButton : : clicked , [ = ] ( ) { can - > setSpeed ( speed ) ; } ) ;
QObject : : connect ( btn , & QPushButton : : clicked , [ = ] ( ) { can - > setSpeed ( speed ) ; } ) ;
@ -61,6 +50,33 @@ VideoWidget::VideoWidget(QWidget *parent) : QWidget(parent) {
}
}
frame_layout - > addLayout ( control_layout ) ;
frame_layout - > addLayout ( control_layout ) ;
QObject : : connect ( play_btn , & QPushButton : : clicked , [ ] ( ) { can - > pause ( ! can - > isPaused ( ) ) ; } ) ;
QObject : : connect ( can , & AbstractStream : : paused , this , & VideoWidget : : updatePlayBtnState ) ;
QObject : : connect ( can , & AbstractStream : : resume , this , & VideoWidget : : updatePlayBtnState ) ;
updatePlayBtnState ( ) ;
}
QWidget * VideoWidget : : createCameraWidget ( ) {
QWidget * w = new QWidget ( this ) ;
QVBoxLayout * l = new QVBoxLayout ( w ) ;
l - > setContentsMargins ( 0 , 0 , 0 , 0 ) ;
cam_widget = new CameraWidget ( " camerad " , can - > visionStreamType ( ) , false ) ;
l - > addWidget ( cam_widget ) ;
// slider controls
slider_layout = new QHBoxLayout ( ) ;
time_label = new ElidedLabel ( " 00:00 " ) ;
time_label - > setToolTip ( tr ( " Click to set current time " ) ) ;
slider_layout - > addWidget ( time_label ) ;
slider = new Slider ( this ) ;
slider - > setSingleStep ( 0 ) ;
slider_layout - > addWidget ( slider ) ;
end_time_label = new QLabel ( this ) ;
slider_layout - > addWidget ( end_time_label ) ;
l - > addLayout ( slider_layout ) ;
cam_widget - > setMinimumHeight ( 100 ) ;
cam_widget - > setMinimumHeight ( 100 ) ;
cam_widget - > setSizePolicy ( QSizePolicy : : Preferred , QSizePolicy : : MinimumExpanding ) ;
cam_widget - > setSizePolicy ( QSizePolicy : : Preferred , QSizePolicy : : MinimumExpanding ) ;
setSizePolicy ( QSizePolicy : : Preferred , QSizePolicy : : Maximum ) ;
setSizePolicy ( QSizePolicy : : Preferred , QSizePolicy : : Maximum ) ;
@ -69,15 +85,12 @@ VideoWidget::VideoWidget(QWidget *parent) : QWidget(parent) {
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 ) ) ; } ) ;
QObject : : connect ( cam_widget , & CameraWidget : : clicked , [ ] ( ) { can - > pause ( ! can - > isPaused ( ) ) ; } ) ;
QObject : : connect ( cam_widget , & CameraWidget : : clicked , [ ] ( ) { can - > pause ( ! can - > isPaused ( ) ) ; } ) ;
QObject : : connect ( play_btn , & QPushButton : : clicked , [ ] ( ) { can - > pause ( ! can - > isPaused ( ) ) ; } ) ;
QObject : : connect ( can , & AbstractStream : : updated , this , & VideoWidget : : updateState ) ;
QObject : : connect ( can , & AbstractStream : : updated , this , & VideoWidget : : updateState ) ;
QObject : : connect ( can , & AbstractStream : : paused , this , & VideoWidget : : updatePlayBtnState ) ;
QObject : : connect ( can , & AbstractStream : : resume , this , & VideoWidget : : updatePlayBtnState ) ;
QObject : : connect ( can , & AbstractStream : : streamStarted , [ this ] ( ) {
QObject : : connect ( can , & AbstractStream : : streamStarted , [ this ] ( ) {
end_time_label - > setText ( formatTime ( can - > totalSeconds ( ) ) ) ;
end_time_label - > setText ( formatTime ( can - > totalSeconds ( ) ) ) ;
slider - > setRange ( 0 , can - > totalSeconds ( ) * 1000 ) ;
slider - > setRange ( 0 , can - > totalSeconds ( ) * 1000 ) ;
} ) ;
} ) ;
updatePlayBtnState ( ) ;
return w ;
}
}
void VideoWidget : : timeLabelClicked ( ) {
void VideoWidget : : timeLabelClicked ( ) {
@ -101,6 +114,8 @@ void VideoWidget::timeLabelClicked() {
}
}
void VideoWidget : : rangeChanged ( double min , double max , bool is_zoomed ) {
void VideoWidget : : rangeChanged ( double min , double max , bool is_zoomed ) {
if ( can - > liveStreaming ( ) ) return ;
if ( ! is_zoomed ) {
if ( ! is_zoomed ) {
min = 0 ;
min = 0 ;
max = can - > totalSeconds ( ) ;
max = can - > totalSeconds ( ) ;