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