From ea29ffef969a0b904dc57d859f94639e7bdc1e65 Mon Sep 17 00:00:00 2001 From: itsmattkc Date: Thu, 8 Apr 2021 10:40:17 +1000 Subject: [PATCH] minor refactoring and signalling panel subtitle by node change Fixes issue where Footage Viewer subtitle wouldn't update when dropping footage in. --- app/panel/timebased/timebased.cpp | 41 ++++++++++---------- app/panel/timebased/timebased.h | 3 ++ app/widget/curvewidget/curvewidget.cpp | 2 +- app/widget/curvewidget/curvewidget.h | 2 +- app/widget/nodeparamview/nodeparamview.cpp | 2 +- app/widget/nodeparamview/nodeparamview.h | 2 +- app/widget/timebased/timebasedwidget.cpp | 8 ++-- app/widget/timebased/timebasedwidget.h | 8 ++-- app/widget/timelinewidget/timelinewidget.cpp | 4 +- app/widget/timelinewidget/timelinewidget.h | 4 +- app/widget/viewer/footageviewer.cpp | 8 ++-- app/widget/viewer/footageviewer.h | 4 +- app/widget/viewer/viewer.cpp | 6 +-- app/widget/viewer/viewer.h | 6 +-- app/widget/viewer/viewersizer.cpp | 6 +-- 15 files changed, 57 insertions(+), 49 deletions(-) diff --git a/app/panel/timebased/timebased.cpp b/app/panel/timebased/timebased.cpp index 45f6c7836..f569fc2ac 100644 --- a/app/panel/timebased/timebased.cpp +++ b/app/panel/timebased/timebased.cpp @@ -111,27 +111,7 @@ void TimeBasedPanel::ShuttleRight() void TimeBasedPanel::ConnectViewerNode(ViewerOutput *node) { - if (widget_->GetConnectedNode() == node) { - return; - } - - if (widget_->GetConnectedNode()) { - disconnect(widget_->GetConnectedNode(), &ViewerOutput::LabelChanged, this, &TimeBasedPanel::SetSubtitle); - } - widget_->ConnectViewerNode(node); - - if (node) { - connect(node, &ViewerOutput::LabelChanged, this, &TimeBasedPanel::SetSubtitle); - - if (show_and_raise_on_connect_) { - this->show(); - this->raise(); - } - } - - // Update strings - Retranslate(); } void TimeBasedPanel::SetTimeBasedWidget(TimeBasedWidget *widget) @@ -139,6 +119,7 @@ void TimeBasedPanel::SetTimeBasedWidget(TimeBasedWidget *widget) if (widget_) { disconnect(widget_, &TimeBasedWidget::TimeChanged, this, &TimeBasedPanel::TimeChanged); disconnect(widget_, &TimeBasedWidget::TimebaseChanged, this, &TimeBasedPanel::TimebaseChanged); + disconnect(widget_, &TimeBasedWidget::ConnectedNodeChanged, this, &TimeBasedPanel::ConnectedNodeChanged); } widget_ = widget; @@ -146,6 +127,7 @@ void TimeBasedPanel::SetTimeBasedWidget(TimeBasedWidget *widget) if (widget_) { connect(widget_, &TimeBasedWidget::TimeChanged, this, &TimeBasedPanel::TimeChanged); connect(widget_, &TimeBasedWidget::TimebaseChanged, this, &TimeBasedPanel::TimebaseChanged); + connect(widget_, &TimeBasedWidget::ConnectedNodeChanged, this, &TimeBasedPanel::ConnectedNodeChanged); } SetWidgetWithPadding(widget_); @@ -160,6 +142,25 @@ void TimeBasedPanel::Retranslate() } } +void TimeBasedPanel::ConnectedNodeChanged(ViewerOutput *old, ViewerOutput *now) +{ + if (old) { + disconnect(old, &ViewerOutput::LabelChanged, this, &TimeBasedPanel::SetSubtitle); + } + + if (now) { + connect(now, &ViewerOutput::LabelChanged, this, &TimeBasedPanel::SetSubtitle); + + if (show_and_raise_on_connect_) { + this->show(); + this->raise(); + } + } + + // Update strings + Retranslate(); +} + void TimeBasedPanel::SetIn() { GetTimeBasedWidget()->SetInAtPlayhead(); diff --git a/app/panel/timebased/timebased.h b/app/panel/timebased/timebased.h index 092efce1e..30b5e208b 100644 --- a/app/panel/timebased/timebased.h +++ b/app/panel/timebased/timebased.h @@ -135,6 +135,9 @@ private: bool show_and_raise_on_connect_; +private slots: + void ConnectedNodeChanged(ViewerOutput* old, ViewerOutput* now); + }; } diff --git a/app/widget/curvewidget/curvewidget.cpp b/app/widget/curvewidget/curvewidget.cpp index f8d7f6f94..1ccc78ddc 100644 --- a/app/widget/curvewidget/curvewidget.cpp +++ b/app/widget/curvewidget/curvewidget.cpp @@ -185,7 +185,7 @@ void CurveWidget::TimeTargetChangedEvent(Node *target) view_->SetTimeTarget(target); } -void CurveWidget::ConnectedNodeChanged(ViewerOutput *n) +void CurveWidget::ConnectedNodeChangeEvent(ViewerOutput *n) { SetTimeTarget(n); } diff --git a/app/widget/curvewidget/curvewidget.h b/app/widget/curvewidget/curvewidget.h index b0a281df7..c9e4374ec 100644 --- a/app/widget/curvewidget/curvewidget.h +++ b/app/widget/curvewidget/curvewidget.h @@ -67,7 +67,7 @@ protected: virtual void TimeTargetChangedEvent(Node* target) override; - virtual void ConnectedNodeChanged(ViewerOutput* n) override; + virtual void ConnectedNodeChangeEvent(ViewerOutput* n) override; private: void SetKeyframeButtonEnabled(bool enable); diff --git a/app/widget/nodeparamview/nodeparamview.cpp b/app/widget/nodeparamview/nodeparamview.cpp index 43a55a01e..2df568671 100644 --- a/app/widget/nodeparamview/nodeparamview.cpp +++ b/app/widget/nodeparamview/nodeparamview.cpp @@ -226,7 +226,7 @@ void NodeParamView::TimeChangedEvent(const int64_t ×tamp) UpdateItemTime(timestamp); } -void NodeParamView::ConnectedNodeChanged(ViewerOutput *n) +void NodeParamView::ConnectedNodeChangeEvent(ViewerOutput *n) { // Set viewer as a time target keyframe_view_->SetTimeTarget(n); diff --git a/app/widget/nodeparamview/nodeparamview.h b/app/widget/nodeparamview/nodeparamview.h index 91c842823..0e81a1720 100644 --- a/app/widget/nodeparamview/nodeparamview.h +++ b/app/widget/nodeparamview/nodeparamview.h @@ -96,7 +96,7 @@ protected: virtual void TimebaseChangedEvent(const rational&) override; virtual void TimeChangedEvent(const int64_t &) override; - virtual void ConnectedNodeChanged(ViewerOutput* n) override; + virtual void ConnectedNodeChangeEvent(ViewerOutput* n) override; private: void UpdateItemTime(const int64_t ×tamp); diff --git a/app/widget/timebased/timebasedwidget.cpp b/app/widget/timebased/timebasedwidget.cpp index 16f5e3e82..516a1008f 100644 --- a/app/widget/timebased/timebasedwidget.cpp +++ b/app/widget/timebased/timebasedwidget.cpp @@ -81,7 +81,7 @@ void TimeBasedWidget::ConnectViewerNode(ViewerOutput *node) if (viewer_node_) { // Call potential derivative functions for disconnecting the viewer node - DisconnectNodeInternal(viewer_node_); + DisconnectNodeEvent(viewer_node_); // Disconnect length changed signal disconnect(viewer_node_, &ViewerOutput::LengthChanged, this, &TimeBasedWidget::UpdateMaximumScroll); @@ -95,10 +95,12 @@ void TimeBasedWidget::ConnectViewerNode(ViewerOutput *node) } // Set viewer node + ViewerOutput* old = viewer_node_; viewer_node_ = node; + emit ConnectedNodeChanged(old, node); // Call derivatives - ConnectedNodeChanged(viewer_node_); + ConnectedNodeChangeEvent(viewer_node_); if (viewer_node_) { // Connect length changed signal @@ -126,7 +128,7 @@ void TimeBasedWidget::ConnectViewerNode(ViewerOutput *node) } // Call derivatives - ConnectNodeInternal(viewer_node_); + ConnectNodeEvent(viewer_node_); } UpdateMaximumScroll(); diff --git a/app/widget/timebased/timebasedwidget.h b/app/widget/timebased/timebasedwidget.h index 023ceb7b5..c327c24be 100644 --- a/app/widget/timebased/timebasedwidget.h +++ b/app/widget/timebased/timebasedwidget.h @@ -105,11 +105,11 @@ protected: virtual void ScaleChangedEvent(const double &) override; - virtual void ConnectedNodeChanged(ViewerOutput*){} + virtual void ConnectedNodeChangeEvent(ViewerOutput*){} - virtual void ConnectNodeInternal(ViewerOutput*){} + virtual void ConnectNodeEvent(ViewerOutput*){} - virtual void DisconnectNodeInternal(ViewerOutput*){} + virtual void DisconnectNodeEvent(ViewerOutput*){} void SetAutoMaxScrollBar(bool e); @@ -138,6 +138,8 @@ signals: void TimebaseChanged(const rational&); + void ConnectedNodeChanged(ViewerOutput* old, ViewerOutput* now); + private: class MarkerAddCommand : public UndoCommand { diff --git a/app/widget/timelinewidget/timelinewidget.cpp b/app/widget/timelinewidget/timelinewidget.cpp index db3cb0db4..22058a231 100644 --- a/app/widget/timelinewidget/timelinewidget.cpp +++ b/app/widget/timelinewidget/timelinewidget.cpp @@ -218,7 +218,7 @@ void TimelineWidget::ScaleChangedEvent(const double &scale) } } -void TimelineWidget::ConnectNodeInternal(ViewerOutput *n) +void TimelineWidget::ConnectNodeEvent(ViewerOutput *n) { Sequence* s = static_cast(n); @@ -246,7 +246,7 @@ void TimelineWidget::ConnectNodeInternal(ViewerOutput *n) } } -void TimelineWidget::DisconnectNodeInternal(ViewerOutput *n) +void TimelineWidget::DisconnectNodeEvent(ViewerOutput *n) { Sequence* s = static_cast(n); diff --git a/app/widget/timelinewidget/timelinewidget.h b/app/widget/timelinewidget/timelinewidget.h index 6aa32bfbc..d6d7b0b66 100644 --- a/app/widget/timelinewidget/timelinewidget.h +++ b/app/widget/timelinewidget/timelinewidget.h @@ -245,8 +245,8 @@ protected: virtual void TimeChangedEvent(const int64_t &) override; virtual void ScaleChangedEvent(const double &) override; - virtual void ConnectNodeInternal(ViewerOutput* n) override; - virtual void DisconnectNodeInternal(ViewerOutput* n) override; + virtual void ConnectNodeEvent(ViewerOutput* n) override; + virtual void DisconnectNodeEvent(ViewerOutput* n) override; virtual void CopyNodesToClipboardInternal(QXmlStreamWriter *writer, void* userdata) override; virtual void PasteNodesFromClipboardInternal(QXmlStreamReader *reader, XMLNodeData &xml_node_data, void* userdata) override; diff --git a/app/widget/viewer/footageviewer.cpp b/app/widget/viewer/footageviewer.cpp index a1971890e..7143e69e2 100644 --- a/app/widget/viewer/footageviewer.cpp +++ b/app/widget/viewer/footageviewer.cpp @@ -40,20 +40,20 @@ FootageViewerWidget::FootageViewerWidget(QWidget *parent) : connect(controls_, &PlaybackControls::AudioPressed, this, &FootageViewerWidget::StartAudioDrag); } -void FootageViewerWidget::ConnectNodeInternal(ViewerOutput *n) +void FootageViewerWidget::ConnectNodeEvent(ViewerOutput *n) { - super::ConnectNodeInternal(n); + super::ConnectNodeEvent(n); SetTimestamp(cached_timestamps_.value(n, 0)); } -void FootageViewerWidget::DisconnectNodeInternal(ViewerOutput *n) +void FootageViewerWidget::DisconnectNodeEvent(ViewerOutput *n) { // Cache timestamp in case this footage is opened again later cached_timestamps_.insert(n, GetTimestamp()); SetTimestamp(0); - super::DisconnectNodeInternal(n); + super::DisconnectNodeEvent(n); } void FootageViewerWidget::StartFootageDragInternal(bool enable_video, bool enable_audio) diff --git a/app/widget/viewer/footageviewer.h b/app/widget/viewer/footageviewer.h index c41378251..647447040 100644 --- a/app/widget/viewer/footageviewer.h +++ b/app/widget/viewer/footageviewer.h @@ -33,9 +33,9 @@ public: FootageViewerWidget(QWidget* parent = nullptr); protected: - virtual void ConnectNodeInternal(ViewerOutput *) override; + virtual void ConnectNodeEvent(ViewerOutput *) override; - virtual void DisconnectNodeInternal(ViewerOutput *) override; + virtual void DisconnectNodeEvent(ViewerOutput *) override; private: void StartFootageDragInternal(bool enable_video, bool enable_audio); diff --git a/app/widget/viewer/viewer.cpp b/app/widget/viewer/viewer.cpp index 24a14287a..cbd9a3b01 100644 --- a/app/widget/viewer/viewer.cpp +++ b/app/widget/viewer/viewer.cpp @@ -175,7 +175,7 @@ void ViewerWidget::TimeChangedEvent(const int64_t &i) last_time_ = i; } -void ViewerWidget::ConnectNodeInternal(ViewerOutput *n) +void ViewerWidget::ConnectNodeEvent(ViewerOutput *n) { connect(n, &ViewerOutput::SizeChanged, this, &ViewerWidget::SetViewerResolution); connect(n, &ViewerOutput::PixelAspectChanged, this, &ViewerWidget::SetViewerPixelAspect); @@ -217,7 +217,7 @@ void ViewerWidget::ConnectNodeInternal(ViewerOutput *n) ForceUpdate(); } -void ViewerWidget::DisconnectNodeInternal(ViewerOutput *n) +void ViewerWidget::DisconnectNodeEvent(ViewerOutput *n) { PauseInternal(); @@ -248,7 +248,7 @@ void ViewerWidget::DisconnectNodeInternal(ViewerOutput *n) QMetaObject::invokeMethod(this, "UpdateStack", Qt::QueuedConnection); } -void ViewerWidget::ConnectedNodeChanged(ViewerOutput *n) +void ViewerWidget::ConnectedNodeChangeEvent(ViewerOutput *n) { auto_cacher_.SetViewerNode(n); } diff --git a/app/widget/viewer/viewer.h b/app/widget/viewer/viewer.h index 7e3f4fab8..5eeb4f636 100644 --- a/app/widget/viewer/viewer.h +++ b/app/widget/viewer/viewer.h @@ -151,9 +151,9 @@ protected: virtual void TimebaseChangedEvent(const rational &) override; virtual void TimeChangedEvent(const int64_t &) override; - virtual void ConnectNodeInternal(ViewerOutput *) override; - virtual void DisconnectNodeInternal(ViewerOutput *) override; - virtual void ConnectedNodeChanged(ViewerOutput *) override; + virtual void ConnectNodeEvent(ViewerOutput *) override; + virtual void DisconnectNodeEvent(ViewerOutput *) override; + virtual void ConnectedNodeChangeEvent(ViewerOutput *) override; virtual void ScaleChangedEvent(const double& s) override; diff --git a/app/widget/viewer/viewersizer.cpp b/app/widget/viewer/viewersizer.cpp index e53ec1088..100e6d5a6 100644 --- a/app/widget/viewer/viewersizer.cpp +++ b/app/widget/viewer/viewersizer.cpp @@ -101,9 +101,10 @@ void ViewerSizer::UpdateSize() return; } - // If the aspect ratio is 0, the widget is always hidden + // If the aspect ratio is 0, default to taking all space if (!width_ || !height_) { - widget_->setVisible(false); + widget_->move(0, 0); + widget_->resize(width(), height()); return; } @@ -142,7 +143,6 @@ void ViewerSizer::UpdateSize() } // Size widget to the UI space we've calculated - widget_->setVisible(true); widget_->resize(available_width, available_height); // Adjust to aspect ratio