From 481cdd43de1629d3cee34f9541ca98a069614c6c Mon Sep 17 00:00:00 2001 From: Elliu <elliu@hashi.re> Date: Tue, 19 Jul 2022 20:19:09 +0200 Subject: [PATCH] AudioVisualizer: correctly always display ASS lines Display the ASS lines on the AudioVisualizer no matter the construction order of AudioVisualizer and AssDocumentView (connect it to assSubDocumentChanged()) --- src/UI/DocumentViews/AudioVisualizer.cc | 6 ++++++ .../DocumentViews/AudioVisualizer/TimingScene.cc | 16 +++++++++------- src/UI/VivyDocumentView.cc | 2 ++ src/UI/VivyDocumentView.hh | 6 ++++++ 4 files changed, 23 insertions(+), 7 deletions(-) diff --git a/src/UI/DocumentViews/AudioVisualizer.cc b/src/UI/DocumentViews/AudioVisualizer.cc index 74df942f..6e6dabd0 100644 --- a/src/UI/DocumentViews/AudioVisualizer.cc +++ b/src/UI/DocumentViews/AudioVisualizer.cc @@ -85,4 +85,10 @@ AudioVisualizer::printSpectrum(QImage pixmap, AudioContext::StreamPtr stream) no &TimingAxis::refreshTicks); connect(params->getRebuildSceneButton(), &QPushButton::released, timingScene, &TimingScene::rebuildScene); + // FIXME: should we replace rootView with a shared_ptr + // or is this expected weak_ptr usage? + if (auto p = rootView.lock()) + if (auto sp = p.get()) + connect(sp, &VivyDocumentView::assSubDocumentChanged, timingScene, + &TimingScene::rebuildScene); } diff --git a/src/UI/DocumentViews/AudioVisualizer/TimingScene.cc b/src/UI/DocumentViews/AudioVisualizer/TimingScene.cc index 3f16407d..3aee8bbc 100644 --- a/src/UI/DocumentViews/AudioVisualizer/TimingScene.cc +++ b/src/UI/DocumentViews/AudioVisualizer/TimingScene.cc @@ -38,13 +38,6 @@ TimingScene::TimingScene(QImage img_, AudioContext::StreamPtr stream, , audioStream(stream) { rebuildScene(); - - if (auto p = rootView.lock()) { - if (auto assLinesView = p->getAssLinesView()) { - connect(assLinesView, &AssLinesView::updateSelectedLines, this, - &TimingScene::updateSelectedLines); - } - } } void @@ -105,6 +98,15 @@ TimingScene::rebuildScene() } } } + + // FIXME: do we need to "disconnect" it when assLinesView or *this is destroyed, + // or is this taken care of by Qt alone? + if (auto p = rootView.lock()) { + if (auto assLinesView = p->getAssLinesView()) { + connect(assLinesView, &AssLinesView::updateSelectedLines, this, + &TimingScene::updateSelectedLines); + } + } } void diff --git a/src/UI/VivyDocumentView.cc b/src/UI/VivyDocumentView.cc index 0e977afe..dcc34cde 100644 --- a/src/UI/VivyDocumentView.cc +++ b/src/UI/VivyDocumentView.cc @@ -125,6 +125,8 @@ VivyDocumentView::loadAssView() noexcept assModel.reset(new AssLinesModel(document->getAssSubDocument()->getLines())); Utils::deleteInternalWidget(assLines); assLines->setWidget(new AssLinesView(assModel.get(), assLines)); + + emit assSubDocumentChanged(); } void diff --git a/src/UI/VivyDocumentView.hh b/src/UI/VivyDocumentView.hh index c0dab04d..54adc495 100644 --- a/src/UI/VivyDocumentView.hh +++ b/src/UI/VivyDocumentView.hh @@ -65,5 +65,11 @@ public: } AssLinesModel *getAssLinesModel() const noexcept { return assModel.get(); } + +signals: + // FIXME: fix default value or just send void? + void audioSubDocumentChanged(std::shared_ptr<AudioSubDocument> = nullptr); + void videoSubDocumentChanged(std::shared_ptr<VideoSubDocument> = nullptr); + void assSubDocumentChanged(std::shared_ptr<AssSubDocument> = nullptr); }; } -- GitLab