From 88f09c8357d4f2499bb9890f97aaa78e30dae588 Mon Sep 17 00:00:00 2001 From: Elliu <goyard.louis@gmail.com> Date: Sun, 1 Aug 2021 23:41:19 +0200 Subject: [PATCH] WIP: adding slider and connecting slider to axis Still need to connect slider to image width, clean up pointers for shared/weak_ptr --- src/UI/DocumentViews/AudioVisualizer.cc | 13 ++++++++++++- src/UI/DocumentViews/TimingAxis.cc | 9 +++++---- src/UI/DocumentViews/TimingAxis.hh | 4 +++- src/UI/DocumentViews/TimingScene.cc | 10 ++++++++-- src/UI/DocumentViews/TimingScene.hh | 3 +++ src/UI/DocumentViews/TimingView.cc | 18 ++++++++++++------ src/UI/DocumentViews/TimingView.hh | 4 +++- 7 files changed, 46 insertions(+), 15 deletions(-) diff --git a/src/UI/DocumentViews/AudioVisualizer.cc b/src/UI/DocumentViews/AudioVisualizer.cc index 30970a2a..894a6412 100644 --- a/src/UI/DocumentViews/AudioVisualizer.cc +++ b/src/UI/DocumentViews/AudioVisualizer.cc @@ -66,8 +66,19 @@ void AudioVisualizer::printSpectrum(QImage pixmap, qreal audioLength) noexcept { TimingView *timer = new TimingView(pixmap, audioLength, this); - QVBoxLayout *layout = new QVBoxLayout; + QHBoxLayout *layout = new QHBoxLayout; + + QSlider *slider = new QSlider(Qt::Vertical); + slider->setMinimum(0); + slider->setMaximum(100); + slider->setSingleStep(0); + slider->setPageStep(0); + slider->setValue(0); + + connect(slider, &QSlider::valueChanged, timer->getTimingScene()->getAxis(), + &TimingAxis::refreshTicks); layout->addWidget(timer); + layout->addWidget(slider); setLayout(layout); } diff --git a/src/UI/DocumentViews/TimingAxis.cc b/src/UI/DocumentViews/TimingAxis.cc index 8abf1d70..d674234b 100644 --- a/src/UI/DocumentViews/TimingAxis.cc +++ b/src/UI/DocumentViews/TimingAxis.cc @@ -12,9 +12,9 @@ using namespace Vivy; -TimingAxis::TimingAxis(qreal soundLength_, int x0_, int x1_, int y_) noexcept - : QGraphicsItem() - , audioLength(soundLength_) +TimingAxis::TimingAxis(qreal audioLength_, int x0_, int x1_, int y_) noexcept + : QGraphicsObject() + , audioLength(audioLength_) , x0(x0_) , x1(x1_) , y(y_) @@ -34,6 +34,7 @@ TimingAxis::boundingRect() const void TimingAxis::refreshTicks() { + qDebug() << "Refreshing ticks..."; int nbAvailableTicks = availableTicks.size(); int minorTicksIndex = 0; QGraphicsScene *parentScene = scene(); @@ -57,7 +58,7 @@ TimingAxis::refreshTicks() } void -TimingAxis::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) +TimingAxis::paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *) { if (audioLength == 0) return; diff --git a/src/UI/DocumentViews/TimingAxis.hh b/src/UI/DocumentViews/TimingAxis.hh index fff80a97..812f040d 100644 --- a/src/UI/DocumentViews/TimingAxis.hh +++ b/src/UI/DocumentViews/TimingAxis.hh @@ -12,7 +12,9 @@ namespace Vivy { -class TimingAxis final : public QGraphicsItem { +class TimingAxis final : public QGraphicsObject { + Q_OBJECT + public: explicit TimingAxis(qreal audioLength, int x0, int x1, int y) noexcept; ~TimingAxis() noexcept override = default; diff --git a/src/UI/DocumentViews/TimingScene.cc b/src/UI/DocumentViews/TimingScene.cc index b81e90c4..c58afb16 100644 --- a/src/UI/DocumentViews/TimingScene.cc +++ b/src/UI/DocumentViews/TimingScene.cc @@ -26,8 +26,8 @@ TimingScene::TimingScene(QImage img_, qreal soundLength_, QWidget *parent) noexc , soundLength(soundLength_) { QPixmap pixmap(QPixmap::fromImage(img)); - backgroundImg = addPixmap(pixmap); - TimingAxis *ax = new TimingAxis(soundLength, 0, pixmap.width(), 10); + backgroundImg = addPixmap(pixmap); + ax = new TimingAxis(soundLength, 0, pixmap.width(), 10); addItem(ax); ax->refreshTicks(); } @@ -91,3 +91,9 @@ TimingScene::bg() noexcept { return backgroundImg; } + +TimingAxis * +TimingScene::getAxis() +{ + return ax; +} diff --git a/src/UI/DocumentViews/TimingScene.hh b/src/UI/DocumentViews/TimingScene.hh index 31f4b548..67c8749a 100644 --- a/src/UI/DocumentViews/TimingScene.hh +++ b/src/UI/DocumentViews/TimingScene.hh @@ -28,11 +28,14 @@ private: qreal soundLength{ 0 }; Ass::LineWeakPtr currentLine{}; TimingMode timingMode{ TimingMode::Line }; + TimingAxis *ax; public: QGraphicsPixmapItem *bg() noexcept; void mousePressEvent(QGraphicsSceneMouseEvent *event) noexcept override; + TimingAxis *getAxis(); + private: void handleMousePressEventLine(QGraphicsSceneMouseEvent *, Ass::LinePtr) noexcept; void handleMousePressEventSyl(QGraphicsSceneMouseEvent *, Ass::LinePtr) noexcept; diff --git a/src/UI/DocumentViews/TimingView.cc b/src/UI/DocumentViews/TimingView.cc index 8da43146..0944c024 100644 --- a/src/UI/DocumentViews/TimingView.cc +++ b/src/UI/DocumentViews/TimingView.cc @@ -5,7 +5,7 @@ using namespace Vivy; TimingView::TimingView(QImage img, qreal soundLength, QWidget *parent) noexcept : QGraphicsView(parent) { - scene = new TimingScene(img, soundLength, this); + currentScene = new TimingScene(img, soundLength, this); setFixedHeight(img.height()); setMaximumHeight(img.height()); setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn); @@ -16,7 +16,7 @@ TimingView::TimingView(QImage img, qreal soundLength, QWidget *parent) noexcept verticalScrollBar()->setValue(verticalScrollBar()->maximum()); horizontalScrollBar()->setValue(horizontalScrollBar()->minimum()); - setScene(scene); + setScene(currentScene); } void @@ -34,10 +34,10 @@ TimingView::mousePressEvent(QMouseEvent *event) noexcept int x = event->pos().x() + horizontalScrollBar()->value(); QGraphicsItem *got; - if ((got = scene->itemAt(pos, QTransform())) == nullptr || got == scene->bg()) { - const int height = static_cast<int>(scene->height()); - scene->addItem(new TimingBar(QLine(x, 0, x, height), - event->button() == Qt::LeftButton ? startColour : endColour)); + if ((got = currentScene->itemAt(pos, QTransform())) == nullptr || got == currentScene->bg()) { + const int height = static_cast<int>(currentScene->height()); + currentScene->addItem(new TimingBar( + QLine(x, 0, x, height), event->button() == Qt::LeftButton ? startColour : endColour)); } QGraphicsView::mousePressEvent(event); @@ -48,3 +48,9 @@ TimingView::moveScrollBarToBottom(int, int max) noexcept { verticalScrollBar()->setValue(max); } + +TimingScene * +TimingView::getTimingScene() const +{ + return static_cast<TimingScene *>(scene()); +} diff --git a/src/UI/DocumentViews/TimingView.hh b/src/UI/DocumentViews/TimingView.hh index 4c878ec6..c9c8032d 100644 --- a/src/UI/DocumentViews/TimingView.hh +++ b/src/UI/DocumentViews/TimingView.hh @@ -23,10 +23,12 @@ public: explicit TimingView(QImage, qreal, QWidget * = nullptr) noexcept; ~TimingView() noexcept override = default; + TimingScene *getTimingScene() const; + void wheelEvent(QWheelEvent *) noexcept override; private: - TimingScene *scene{ nullptr }; + TimingScene *currentScene{ nullptr }; public slots: void mousePressEvent(QMouseEvent *event) noexcept override; -- GitLab