From 7f060cb76e44101812d988f0f98b4dc954bd0a80 Mon Sep 17 00:00:00 2001 From: Elliu <elliu@hashi.re> Date: Sat, 15 Jan 2022 15:27:47 +0100 Subject: [PATCH] TimingScene: move things away from constructor --- src/UI/DocumentViews/AudioVisualizer.cc | 2 ++ .../AudioVisualizer/TimingAxis.cc | 8 +++---- .../AudioVisualizer/TimingParams.cc | 21 +++++++++++++---- .../AudioVisualizer/TimingParams.hh | 3 +++ .../AudioVisualizer/TimingScene.cc | 23 +++++++++++++++++-- .../AudioVisualizer/TimingScene.hh | 4 +++- 6 files changed, 50 insertions(+), 11 deletions(-) diff --git a/src/UI/DocumentViews/AudioVisualizer.cc b/src/UI/DocumentViews/AudioVisualizer.cc index 3a243415..e34843b8 100644 --- a/src/UI/DocumentViews/AudioVisualizer.cc +++ b/src/UI/DocumentViews/AudioVisualizer.cc @@ -81,4 +81,6 @@ AudioVisualizer::printSpectrum(QImage pixmap, AudioContext::StreamPtr stream) no connect(params->getZoomSlider(), &QSlider::valueChanged, timingScene->getAxis(), &TimingAxis::refreshTicks); + connect(params->getRebuildSceneButton(), &QPushButton::released, timingScene, + &TimingScene::rebuildScene); } diff --git a/src/UI/DocumentViews/AudioVisualizer/TimingAxis.cc b/src/UI/DocumentViews/AudioVisualizer/TimingAxis.cc index 94b1c7f1..248dd011 100644 --- a/src/UI/DocumentViews/AudioVisualizer/TimingAxis.cc +++ b/src/UI/DocumentViews/AudioVisualizer/TimingAxis.cc @@ -30,7 +30,7 @@ TimingAxis::TimingAxis(AudioContext::StreamPtr stream, int height_, int width_) QRectF TimingAxis::boundingRect() const { - return QRectF(0, penWidth, width + 2*penWidth, -height - penWidth); + return QRectF(0, penWidth, width + 2 * penWidth, -height - penWidth); } /* @@ -40,10 +40,10 @@ TimingAxis::boundingRect() const void TimingAxis::refreshTicks() { - int nbAvailableTicks = availableTicks.size(); - int minorTicksIndex = 0; + int nbAvailableTicks = availableTicks.size(); + int minorTicksIndex = 0; int length{ int(audioStream->getLength()) }; - if (width != 0 && length != 0){ + if (width != 0 && length != 0) { for (minorTicksIndex = 0; minorTicksIndex < nbAvailableTicks; minorTicksIndex++) { if (width * availableTicks[minorTicksIndex] / length >= minBetweenMinor) { break; diff --git a/src/UI/DocumentViews/AudioVisualizer/TimingParams.cc b/src/UI/DocumentViews/AudioVisualizer/TimingParams.cc index c50397b1..83baf547 100644 --- a/src/UI/DocumentViews/AudioVisualizer/TimingParams.cc +++ b/src/UI/DocumentViews/AudioVisualizer/TimingParams.cc @@ -5,7 +5,9 @@ using namespace Vivy; TimingParams::TimingParams(QWidget *parent) noexcept : QWidget(parent) { - QHBoxLayout *layout = new QHBoxLayout; + QVBoxLayout *vlayout = new QVBoxLayout; + QHBoxLayout *hlayout = new QHBoxLayout; + vlayout->addLayout(hlayout); zoomSlider = std::make_unique<QSlider>(new QSlider(Qt::Vertical)); if (QSlider *slider = zoomSlider.get()) { @@ -14,7 +16,7 @@ TimingParams::TimingParams(QWidget *parent) noexcept slider->setSingleStep(0); slider->setPageStep(0); slider->setValue(0); - layout->addWidget(slider); + hlayout->addWidget(slider); } sensibilitySlider = std::make_unique<QSlider>(new QSlider(Qt::Vertical)); if (QSlider *slider = sensibilitySlider.get()) { @@ -23,10 +25,15 @@ TimingParams::TimingParams(QWidget *parent) noexcept slider->setSingleStep(0); slider->setPageStep(0); slider->setValue(0); - layout->addWidget(slider); + hlayout->addWidget(slider); } - setLayout(layout); + rebuildSceneButton = std::make_unique<QPushButton>(new QPushButton(QString("Rebuild scene"))); + if (QPushButton *button = rebuildSceneButton.get()) { + vlayout->addWidget(button); + } + + setLayout(vlayout); } QSlider * @@ -40,3 +47,9 @@ TimingParams::getSensibilitySlider() const noexcept { return sensibilitySlider.get(); } + +QPushButton * +TimingParams::getRebuildSceneButton() const noexcept +{ + return rebuildSceneButton.get(); +} diff --git a/src/UI/DocumentViews/AudioVisualizer/TimingParams.hh b/src/UI/DocumentViews/AudioVisualizer/TimingParams.hh index 5b9e8c38..09d56ce2 100644 --- a/src/UI/DocumentViews/AudioVisualizer/TimingParams.hh +++ b/src/UI/DocumentViews/AudioVisualizer/TimingParams.hh @@ -10,6 +10,7 @@ #include <QWidget> #include <QSlider> #include <QLayout> +#include <QPushButton> namespace Vivy { @@ -22,10 +23,12 @@ public: private: std::unique_ptr<QSlider> zoomSlider; std::unique_ptr<QSlider> sensibilitySlider; + std::unique_ptr<QPushButton> rebuildSceneButton; public: QSlider *getZoomSlider() const noexcept; QSlider *getSensibilitySlider() const noexcept; + QPushButton *getRebuildSceneButton() const noexcept; }; } diff --git a/src/UI/DocumentViews/AudioVisualizer/TimingScene.cc b/src/UI/DocumentViews/AudioVisualizer/TimingScene.cc index 230827e0..a99fd4b0 100644 --- a/src/UI/DocumentViews/AudioVisualizer/TimingScene.cc +++ b/src/UI/DocumentViews/AudioVisualizer/TimingScene.cc @@ -30,14 +30,33 @@ TimingScene::TimingScene(QImage img_, AudioContext::StreamPtr stream, QWidget *p , img(img_) , audioStream(stream) { - int timingAxisHeight = 30; + rebuildScene(); +} + +void +TimingScene::updateScene(QImage img_, AudioContext::StreamPtr stream_) +{ + img = img_; + audioStream = stream_; + rebuildScene(); +} + +void +TimingScene::rebuildScene() +{ + for (auto &item : items()) { + removeItem(item); + delete (item); + } // We put a common origin for the items at the bottom of the axis + int timingAxisHeight = 30; + QPixmap pixmap(QPixmap::fromImage(img)); backgroundImg = addPixmap(pixmap); backgroundImg->setPos(0, timingAxisHeight); - ax = new TimingAxis(stream, timingAxisHeight, pixmap.width()); + ax = new TimingAxis(audioStream, timingAxisHeight, pixmap.width()); addItem(ax); ax->setPos(0, timingAxisHeight); diff --git a/src/UI/DocumentViews/AudioVisualizer/TimingScene.hh b/src/UI/DocumentViews/AudioVisualizer/TimingScene.hh index 306a7655..87779e0c 100644 --- a/src/UI/DocumentViews/AudioVisualizer/TimingScene.hh +++ b/src/UI/DocumentViews/AudioVisualizer/TimingScene.hh @@ -28,7 +28,7 @@ private: AudioContext::StreamPtr audioStream; Ass::LineWeakPtr currentLine{}; TimingMode timingMode{ TimingMode::Line }; - TimingAxis *ax; + TimingAxis *ax{ nullptr }; public: QGraphicsPixmapItem *bg() noexcept; @@ -46,6 +46,8 @@ private: inline int posFromTime(int t) const noexcept; public slots: + void updateScene(QImage, AudioContext::StreamPtr); + void rebuildScene(); }; } -- GitLab