viewer: folded waveform view into base viewer widget class
This commit is contained in:
@@ -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());
|
||||
|
||||
@@ -27,8 +27,6 @@ private:
|
||||
|
||||
ViewerOutput* viewer_node_;
|
||||
|
||||
QWidget* waveform_view_;
|
||||
|
||||
private slots:
|
||||
void StartFootageDrag();
|
||||
|
||||
|
||||
@@ -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()) {
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user