From e2fe9ad548cd56989bc0ac5574f1ef863af9426c Mon Sep 17 00:00:00 2001 From: itsmattkc Date: Fri, 13 Mar 2020 15:48:09 +1100 Subject: [PATCH] viewer: folded waveform view into base viewer widget class --- app/widget/viewer/footageviewer.cpp | 17 +++++------------ app/widget/viewer/footageviewer.h | 2 -- app/widget/viewer/viewer.cpp | 28 ++++++++++++++++++++++------ app/widget/viewer/viewer.h | 6 ++++-- 4 files changed, 31 insertions(+), 22 deletions(-) diff --git a/app/widget/viewer/footageviewer.cpp b/app/widget/viewer/footageviewer.cpp index 8e3f7ec8d..926806f3d 100644 --- a/app/widget/viewer/footageviewer.cpp +++ b/app/widget/viewer/footageviewer.cpp @@ -13,14 +13,6 @@ FootageViewerWidget::FootageViewerWidget(QWidget *parent) : audio_node_ = new AudioInput(); viewer_node_ = new ViewerOutput(); - waveform_view_ = new QWidget(); - waveform_view_->setAutoFillBackground(true); - waveform_view_->setStyleSheet("background: black;"); - stack()->addWidget(waveform_view_); - - NodeParam::ConnectEdge(video_node_->output(), viewer_node_->texture_input()); - NodeParam::ConnectEdge(audio_node_->output(), viewer_node_->samples_input()); - connect(gl_widget_, &ViewerGLWidget::DragStarted, this, &FootageViewerWidget::StartFootageDrag); } @@ -33,6 +25,9 @@ void FootageViewerWidget::SetFootage(Footage *footage) { if (footage_) { ConnectViewerNode(nullptr); + + NodeParam::DisconnectEdge(video_node_->output(), viewer_node_->texture_input()); + NodeParam::DisconnectEdge(audio_node_->output(), viewer_node_->samples_input()); } footage_ = footage; @@ -59,15 +54,13 @@ void FootageViewerWidget::SetFootage(Footage *footage) if (video_stream) { video_node_->SetFootage(video_stream); viewer_node_->set_video_params(VideoParams(video_stream->width(), video_stream->height(), video_stream->frame_rate().flipped())); - - stack()->setCurrentWidget(gl_widget_); - } else { - stack()->setCurrentWidget(waveform_view_); + NodeParam::ConnectEdge(video_node_->output(), viewer_node_->texture_input()); } if (audio_stream) { audio_node_->SetFootage(audio_stream); viewer_node_->set_audio_params(AudioParams(audio_stream->sample_rate(), audio_stream->channel_layout())); + NodeParam::ConnectEdge(audio_node_->output(), viewer_node_->samples_input()); } ConnectViewerNode(viewer_node_, footage->project()->color_manager()); diff --git a/app/widget/viewer/footageviewer.h b/app/widget/viewer/footageviewer.h index 055906bd5..dc1634291 100644 --- a/app/widget/viewer/footageviewer.h +++ b/app/widget/viewer/footageviewer.h @@ -27,8 +27,6 @@ private: ViewerOutput* viewer_node_; - QWidget* waveform_view_; - private slots: void StartFootageDrag(); diff --git a/app/widget/viewer/viewer.cpp b/app/widget/viewer/viewer.cpp index 6f42faaae..0853868f7 100644 --- a/app/widget/viewer/viewer.cpp +++ b/app/widget/viewer/viewer.cpp @@ -51,7 +51,7 @@ ViewerWidget::ViewerWidget(QWidget *parent) : stack_ = new QStackedWidget(); layout->addWidget(stack_); - // Create main OpenGL-based view + // Create main OpenGL-based view and sizer sizer_ = new ViewerSizer(); stack_->addWidget(sizer_); @@ -59,6 +59,12 @@ ViewerWidget::ViewerWidget(QWidget *parent) : connect(gl_widget_, &ViewerGLWidget::customContextMenuRequested, this, &ViewerWidget::ShowContextMenu); sizer_->SetWidget(gl_widget_); + // Create waveform view when audio is connected and video isn't + waveform_view_ = new QWidget(); + waveform_view_->setAutoFillBackground(true); + waveform_view_->setStyleSheet("background: black;"); + stack_->addWidget(waveform_view_); + // Create time ruler layout->addWidget(ruler()); @@ -128,6 +134,8 @@ void ViewerWidget::ConnectNodeInternal(ViewerOutput *n) connect(n, &ViewerOutput::LengthChanged, this, &ViewerWidget::LengthChangedSlot); connect(n, &ViewerOutput::VideoParamsChanged, this, &ViewerWidget::UpdateRendererParameters); connect(n, &ViewerOutput::VisibleInvalidated, this, &ViewerWidget::InvalidateVisible); + connect(n, &ViewerOutput::VideoGraphChanged, this, &ViewerWidget::UpdateStack); + connect(n, &ViewerOutput::AudioGraphChanged, this, &ViewerWidget::UpdateStack); SizeChangedSlot(n->video_params().width(), n->video_params().height()); LengthChangedSlot(n->Length()); @@ -143,6 +151,8 @@ void ViewerWidget::ConnectNodeInternal(ViewerOutput *n) divider_ = CalculateDivider(); UpdateRendererParameters(); + + UpdateStack(); } void ViewerWidget::DisconnectNodeInternal(ViewerOutput *n) @@ -156,6 +166,8 @@ void ViewerWidget::DisconnectNodeInternal(ViewerOutput *n) disconnect(n, &ViewerOutput::LengthChanged, this, &ViewerWidget::LengthChangedSlot); disconnect(n, &ViewerOutput::VideoParamsChanged, this, &ViewerWidget::UpdateRendererParameters); disconnect(n, &ViewerOutput::VisibleInvalidated, this, &ViewerWidget::InvalidateVisible); + disconnect(n, &ViewerOutput::VideoGraphChanged, this, &ViewerWidget::UpdateStack); + disconnect(n, &ViewerOutput::AudioGraphChanged, this, &ViewerWidget::UpdateStack); // Effectively disables the viewer and clears the state SizeChangedSlot(0, 0); @@ -181,11 +193,6 @@ void ViewerWidget::resizeEvent(QResizeEvent *event) } } -QStackedWidget *ViewerWidget::stack() const -{ - return stack_; -} - void ViewerWidget::TogglePlayPause() { if (IsPlaying()) { @@ -306,6 +313,15 @@ int ViewerWidget::CalculateDivider() return divider_; } +void ViewerWidget::UpdateStack() +{ + if (!GetConnectedNode() || GetConnectedNode()->texture_input()->IsConnected()) { + stack_->setCurrentWidget(gl_widget_); + } else { + stack_->setCurrentWidget(waveform_view_); + } +} + void ViewerWidget::UpdateRendererParameters() { if (!GetConnectedNode()) { diff --git a/app/widget/viewer/viewer.h b/app/widget/viewer/viewer.h index a5e38febe..697ef7cbc 100644 --- a/app/widget/viewer/viewer.h +++ b/app/widget/viewer/viewer.h @@ -115,8 +115,6 @@ protected: virtual void resizeEvent(QResizeEvent *event) override; - QStackedWidget* stack() const; - OpenGLBackend* video_renderer_; AudioBackend* audio_renderer_; @@ -156,6 +154,8 @@ private: bool time_changed_from_timer_; + QWidget* waveform_view_; + private slots: void PlaybackTimerUpdate(); @@ -188,6 +188,8 @@ private slots: void InvalidateVisible(); + void UpdateStack(); + }; #endif // VIEWER_WIDGET_H