Skip to content
Extraits de code Groupes Projets
Valider b58c9f59 rédigé par Elliu's avatar Elliu
Parcourir les fichiers

WIP: adding slider and connecting slider to axis

Still need to connect slider to image width, clean up pointers for
shared/weak_ptr
parent c56c7fa9
Aucune branche associée trouvée
Aucune étiquette associée trouvée
1 requête de fusion!14Draft: improve the audio vizualiser
......@@ -77,8 +77,18 @@ 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);
}
......@@ -9,6 +9,7 @@
#include "../../Lib/Audio.hh"
#include <QWidget>
#include <QString>
#include <QSlider>
namespace Vivy
{
......
......@@ -13,7 +13,7 @@
using namespace Vivy;
TimingAxis::TimingAxis(qreal audioLength_, int x0_, int x1_, int y_) noexcept
: QGraphicsItem(),
: QGraphicsObject(),
audioLength(audioLength_),
x0(x0_),
x1(x1_),
......@@ -30,6 +30,7 @@ QRectF TimingAxis::boundingRect() const {
* For intended results, this function should only be called when scene() returns a valid QGraphicsScene (so not in the constructors)
*/
void TimingAxis::refreshTicks() {
qDebug() << "Refreshing ticks...";
int nbAvailableTicks = availableTicks.size();
int minorTicksIndex = 0;
QGraphicsScene *parentScene = scene();
......
......@@ -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 = default;
......
......@@ -27,7 +27,7 @@ TimingScene::TimingScene(QImage img_, qreal soundLength_, QWidget *parent) noexc
{
QPixmap pixmap(QPixmap::fromImage(img));
backgroundImg = addPixmap(pixmap);
TimingAxis* ax = new TimingAxis(soundLength, 0, pixmap.width(), 10);
ax = new TimingAxis(soundLength, 0, pixmap.width(), 10);
addItem(ax);
ax->refreshTicks();
}
......@@ -83,3 +83,7 @@ TimingScene::bg() noexcept
{
return backgroundImg;
}
TimingAxis* TimingScene::getAxis(){
return ax;
}
......@@ -36,11 +36,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:
qreal timeFromPos(qreal x);
......
......@@ -18,7 +18,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() + horizontalScrollBar()->height());
setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
......@@ -29,7 +29,7 @@ TimingView::TimingView(QImage img, qreal soundLength, QWidget *parent) noexcept
verticalScrollBar()->setValue(verticalScrollBar()->maximum());
horizontalScrollBar()->setValue(horizontalScrollBar()->minimum());
setScene(scene);
setScene(currentScene);
}
void
......@@ -47,9 +47,9 @@ 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),
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));
}
......@@ -61,3 +61,9 @@ TimingView::moveScrollBarToBottom(int, int max) noexcept
{
verticalScrollBar()->setValue(max);
}
TimingScene*
TimingView::getTimingScene() const
{
return static_cast<TimingScene *>(scene());
}
......@@ -29,10 +29,12 @@ public:
explicit TimingView(QImage, qreal, QWidget * = nullptr) noexcept;
~TimingView() noexcept = default;
TimingScene* getTimingScene() const;
void wheelEvent(QWheelEvent *) noexcept override;
private:
TimingScene *scene{ nullptr };
TimingScene *currentScene{ nullptr };
public slots:
void mousePressEvent(QMouseEvent *event) noexcept override;
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter