diff --git a/src/UI/DocumentViews/AudioVisualizer.cc b/src/UI/DocumentViews/AudioVisualizer.cc index 30970a2a9fec7df867b17cd0ab27e257081dde98..894a64125b32b0f23f5d2f279c265f7510bfbc11 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 8abf1d709ba1d881534ca9698a24d19460f7b1ad..d674234b120e394c6af7ae559b91e097febbeb5e 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 fff80a97c65b73d454de7746c8e675808b7476af..812f040d27d2c19f32e57b6cee226928f2a76671 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 b81e90c483b4c30fedc8a25667766fe1f6274246..c58afb16b62cf11c831a7a96a789ae5feb349b10 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 31f4b5484d19f970863c2dd6cdbaf719cfb3b0a2..67c8749aec1b9d08033d61dcab4c406c34793013 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 8da43146f31237066143e87c7516cc61f26b8ae0..0944c024955b84be365f922ac81a5da189126538 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 4c878ec6c62c2e491b440f2d344529118677626e..c9c8032d6161604361edafd57bdd30097d4f2dcb 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;