diff --git a/src/AudioVisualizer.cc b/src/AudioVisualizer.cc index 3e820031254f21bc6be024021a9b071199915020..8ab587011ca885103f6b8e31b8b778b726fc950c 100644 --- a/src/AudioVisualizer.cc +++ b/src/AudioVisualizer.cc @@ -1,5 +1,4 @@ #include "AudioVisualizer.h" -#include "Timer.h" #include <QLabel> #include <QScrollArea> @@ -16,7 +15,7 @@ AudioVisualizer::AudioVisualizer(QWidget *parent) noexcept void AudioVisualizer::printSpectrum(QImage pixmap) noexcept { - Timer *timer = new Timer(pixmap); + TimingView *timer = new TimingView(pixmap); QVBoxLayout *layout = new QVBoxLayout; layout->addWidget(timer); diff --git a/src/AudioVisualizer.h b/src/AudioVisualizer.h index ef363395c163d4e8550f2f1e32b8f631fb590d68..a6f8b598ef0807b63309842f2435e2f342fd94e4 100644 --- a/src/AudioVisualizer.h +++ b/src/AudioVisualizer.h @@ -1,7 +1,7 @@ #ifndef VIVY_AUDIOVISUALIZER_H #define VIVY_AUDIOVISUALIZER_H -#include "Timer.h" +#include "TimingView.hpp" #include <QWidget> class AudioVisualizer final : public QWidget { diff --git a/src/TimingScene.cc b/src/TimingScene.cc new file mode 100644 index 0000000000000000000000000000000000000000..f82d0a048592317a839d8a62f96630bf7d297aef --- /dev/null +++ b/src/TimingScene.cc @@ -0,0 +1,25 @@ +#include "TimingScene.hpp" + +#include <QLabel> +#include <QGraphicsLineItem> +#include <QGraphicsView> +#include <QGraphicsPixmapItem> +#include <QScrollArea> +#include <QVBoxLayout> +#include <QScrollBar> +#include <QMessageBox> +#include <QMouseEvent> +#include <QPainter> + +TimingScene::TimingScene(QWidget *parent) noexcept + : QGraphicsScene(parent) +{ +} + +TimingScene::TimingScene(QImage img, QWidget *parent) noexcept + : QGraphicsScene(parent) + , img(img) +{ + QPixmap pixmap(QPixmap::fromImage(img)); + backgroundImg = addPixmap(pixmap); +} diff --git a/src/TimingScene.hpp b/src/TimingScene.hpp new file mode 100644 index 0000000000000000000000000000000000000000..d72dc097b4ab7cb6c26511ddc5e695835a654d7c --- /dev/null +++ b/src/TimingScene.hpp @@ -0,0 +1,36 @@ +#ifndef VIVY_TIMING_SCENE_H +#define VIVY_TIMING_SCENE_H + +#include "TimingBar.h" + +#include <QWidget> +#include <QColor> +#include <QVector> +#include <QGraphicsView> +#include <QGraphicsScene> + +class QGraphicsPixmapItem; + +class TimingScene final : public QGraphicsScene { + Q_OBJECT + +public: + static inline constexpr QColor startColour = QColor(127, 0, 127); + static inline constexpr QColor endColour = QColor(0, 127, 0); + + explicit TimingScene(QWidget *parent = nullptr) noexcept; + TimingScene(QImage img, QWidget *parent = nullptr) noexcept; + ~TimingScene() noexcept = default; + +private: + QGraphicsPixmapItem *backgroundImg = nullptr; + QImage img; + QVector<QLine> lines; + +public: + inline QGraphicsPixmapItem* bg() { return backgroundImg; }; + +public slots: +}; + +#endif // VIVY_TIMING_SCENE_H diff --git a/src/Timer.cc b/src/TimingView.cc similarity index 68% rename from src/Timer.cc rename to src/TimingView.cc index 0015b078952c2faf853a1f291acdbe5a1b9d0649..cfb1d3f5becc681c4745053550ac031b7b7eab3e 100644 --- a/src/Timer.cc +++ b/src/TimingView.cc @@ -1,4 +1,4 @@ -#include "Timer.h" +#include "TimingView.hpp" #include <QLabel> #include <QGraphicsLineItem> @@ -10,30 +10,30 @@ #include <QMessageBox> #include <QMouseEvent> #include <QPainter> +#include <QAbstractScrollArea> #define TO_ADD_TO_IMAGE_HEIGHT 2 /* Used for alignement */ -Timer::Timer(QImage img, QWidget *parent) noexcept +TimingView::TimingView(QImage img, QWidget *parent) noexcept : QGraphicsView(parent) - , img(img) { - QPixmap pixmap(QPixmap::fromImage(img)); - bg = scene->addPixmap(pixmap); - setFixedHeight(pixmap.height()); + scene = new TimingScene(img); + setFixedHeight(img.height()); setMaximumHeight(img.height() + horizontalScrollBar()->height() - TO_ADD_TO_IMAGE_HEIGHT); + setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn); setScene(scene); } void -Timer::mousePressEvent(QMouseEvent *event) noexcept +TimingView::mousePressEvent(QMouseEvent *event) noexcept { QPoint pos = event->pos(); pos.rx() += horizontalScrollBar()->value(); int x = event->pos().x() + horizontalScrollBar()->value(); QGraphicsItem *got; - if ((got = scene->itemAt(pos, QTransform())) == nullptr || got == bg) { - scene->addItem(new TimingBar(QLine(x, 0, x, img.height() - TO_ADD_TO_IMAGE_HEIGHT), + if ((got = scene->itemAt(pos, QTransform())) == nullptr || got == scene->bg()) { + scene->addItem(new TimingBar(QLine(x, 0, x, scene->height()), event->button() == Qt::LeftButton ? startColour : endColour)); } diff --git a/src/Timer.h b/src/TimingView.hpp similarity index 53% rename from src/Timer.h rename to src/TimingView.hpp index 12aba57e8957307cf4bb8502e619251283342b5f..7c7971645aba2feddb746b0f18f461c113e759e1 100644 --- a/src/Timer.h +++ b/src/TimingView.hpp @@ -1,7 +1,8 @@ -#ifndef VIVY_TIMER_H -#define VIVY_TIMER_H +#ifndef VIVY_TIMING_VIEW_H +#define VIVY_TIMING_VIEW_H #include "TimingBar.h" +#include "TimingScene.hpp" #include <QWidget> #include <QColor> @@ -10,25 +11,22 @@ class QGraphicsPixmapItem; -class Timer final : public QGraphicsView { +class TimingView final : public QGraphicsView { Q_OBJECT public: static inline constexpr QColor startColour = QColor(127, 0, 127); static inline constexpr QColor endColour = QColor(0, 127, 0); - Timer(QImage img, QWidget *parent = nullptr) noexcept; - ~Timer() noexcept = default; + TimingView(QImage img, QWidget *parent = nullptr) noexcept; + ~TimingView() noexcept = default; private: - QGraphicsPixmapItem *bg = nullptr; - QGraphicsScene *scene = new QGraphicsScene; - QImage img; - QVector<QLine> lines; + TimingScene* scene; void mousePressEvent(QMouseEvent *event) noexcept; public slots: }; -#endif // VIVY_TIMER_H +#endif // VIVY_TIMING_VIEW_H