viewer: automatically update maximum scroll from media length

This commit is contained in:
itsmattkc
2020-02-01 23:09:25 +11:00
parent c0360abee1
commit 9b7cbb3fbd
5 changed files with 66 additions and 3 deletions
+24 -1
View File
@@ -4,7 +4,8 @@
TimeBasedWidget::TimeBasedWidget(bool ruler_text_visible, bool ruler_cache_status_visible, QWidget *parent) :
QWidget(parent),
viewer_node_(nullptr)
viewer_node_(nullptr),
auto_max_scrollbar_(false)
{
ruler_ = new TimeRuler(ruler_text_visible, ruler_cache_status_visible, this);
connect(ruler_, &TimeRuler::TimeChanged, this, &TimeBasedWidget::SetTimeAndSignal);
@@ -31,6 +32,8 @@ void TimeBasedWidget::ConnectViewerNode(ViewerOutput *node)
{
if (viewer_node_) {
DisconnectNodeInternal(viewer_node_);
disconnect(viewer_node_, &ViewerOutput::LengthChanged, this, &TimeBasedWidget::UpdateMaximumScroll);
}
viewer_node_ = node;
@@ -39,9 +42,20 @@ void TimeBasedWidget::ConnectViewerNode(ViewerOutput *node)
if (viewer_node_) {
ConnectNodeInternal(viewer_node_);
connect(viewer_node_, &ViewerOutput::LengthChanged, this, &TimeBasedWidget::UpdateMaximumScroll);
}
}
void TimeBasedWidget::UpdateMaximumScroll()
{
if (!viewer_node_ || !auto_max_scrollbar_) {
return;
}
scrollbar_->setMaximum(qMax(0, qCeil(TimeToScene(viewer_node_->Length())) - width()));
}
TimeRuler *TimeBasedWidget::ruler() const
{
return ruler_;
@@ -66,6 +80,13 @@ void TimeBasedWidget::ScaleChangedEvent(const double &scale)
TimelineScaledObject::ScaleChangedEvent(scale);
ruler_->SetScale(scale);
UpdateMaximumScroll();
}
void TimeBasedWidget::SetAutoMaxScrollBar(bool e)
{
auto_max_scrollbar_ = e;
}
void TimeBasedWidget::resizeEvent(QResizeEvent *event)
@@ -74,6 +95,8 @@ void TimeBasedWidget::resizeEvent(QResizeEvent *event)
// Update horizontal scrollbar's page step to the width of the panel
scrollbar()->setPageStep(scrollbar()->width());
UpdateMaximumScroll();
}
void TimeBasedWidget::SetTime(int64_t timestamp)