From 823e820bfa1c8bd186b17e3148e57ff87414c778 Mon Sep 17 00:00:00 2001 From: itsmattkc Date: Sun, 17 Nov 2019 13:46:14 +0900 Subject: [PATCH] update length value from signals/slots I was looking for a way to update the length value automatically with signals and slots (rather than just checking every time the viewer time changes). This should do the trick. --- app/widget/viewer/viewer.cpp | 11 ++++++++--- app/widget/viewer/viewer.h | 2 ++ 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/app/widget/viewer/viewer.cpp b/app/widget/viewer/viewer.cpp index 66a8deb1f..a618b0a5c 100644 --- a/app/widget/viewer/viewer.cpp +++ b/app/widget/viewer/viewer.cpp @@ -134,6 +134,7 @@ void ViewerWidget::ConnectViewerNode(ViewerOutput *node) disconnect(viewer_node_, SIGNAL(TimebaseChanged(const rational&)), this, SLOT(SetTimebase(const rational&))); disconnect(viewer_node_, SIGNAL(SizeChanged(int, int)), this, SLOT(SizeChangedSlot(int, int))); + disconnect(viewer_node_, SIGNAL(LengthChanged(const rational&)), this, SLOT(LengthChangedSlot(const rational&))); // Effectively disables the viewer and clears the state SizeChangedSlot(0, 0); @@ -149,8 +150,10 @@ void ViewerWidget::ConnectViewerNode(ViewerOutput *node) connect(viewer_node_, SIGNAL(TimebaseChanged(const rational&)), this, SLOT(SetTimebase(const rational&))); connect(viewer_node_, SIGNAL(SizeChanged(int, int)), this, SLOT(SizeChangedSlot(int, int))); + connect(viewer_node_, SIGNAL(LengthChanged(const rational&)), this, SLOT(LengthChangedSlot(const rational&))); SizeChangedSlot(viewer_node_->video_params().width(), viewer_node_->video_params().height()); + LengthChangedSlot(viewer_node_->Length()); } video_renderer_->SetViewerNode(viewer_node_); @@ -178,9 +181,6 @@ void ViewerWidget::UpdateTimeInternal(int64_t i) controls_->SetTime(i); if (viewer_node_ != nullptr) { - // FIXME: Implement some sort of signalling to update this when the sequence length actually changes - controls_->SetEndTime(olive::time_to_timestamp(viewer_node_->Length(), time_base_)); - UpdateTextureFromNode(time_set); PushScrubbedAudio(); @@ -359,6 +359,11 @@ void ViewerWidget::SizeChangedSlot(int width, int height) sizer_->SetChildSize(width, height); } +void ViewerWidget::LengthChangedSlot(const rational &length) +{ + controls_->SetEndTime(olive::time_to_timestamp(length, time_base_)); +} + void ViewerWidget::resizeEvent(QResizeEvent *event) { // Set scrollbar page step to the width diff --git a/app/widget/viewer/viewer.h b/app/widget/viewer/viewer.h index 941cfaad8..f8aec5760 100644 --- a/app/widget/viewer/viewer.h +++ b/app/widget/viewer/viewer.h @@ -147,6 +147,8 @@ private slots: void SizeChangedSlot(int width, int height); + void LengthChangedSlot(const rational& length); + }; #endif // VIEWER_WIDGET_H