1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
#pragma once
#include <QPainter>
#include <QPointer>
#include <QQuickItem>
#include <QQuickPaintedItem>
#include <QtQml>
#include "track/track.h"
namespace mixxx {
namespace skin {
namespace qml {
class QmlPlayerProxy;
class QmlWaveformOverview : public QQuickPaintedItem {
Q_OBJECT
Q_FLAGS(Channels)
Q_PROPERTY(mixxx::skin::qml::QmlPlayerProxy* player READ getPlayer
WRITE setPlayer NOTIFY playerChanged)
Q_PROPERTY(Channels channels READ getChannels WRITE setChannels NOTIFY channelsChanged)
Q_PROPERTY(Renderer renderer MEMBER m_renderer NOTIFY rendererChanged)
Q_PROPERTY(QColor colorHigh MEMBER m_colorHigh NOTIFY colorHighChanged)
Q_PROPERTY(QColor colorMid MEMBER m_colorMid NOTIFY colorMidChanged)
Q_PROPERTY(QColor colorLow MEMBER m_colorLow NOTIFY colorLowChanged)
public:
enum class ChannelFlag : int {
LeftChannel = 1,
RightChannel = 2,
BothChannels = LeftChannel | RightChannel,
};
Q_DECLARE_FLAGS(Channels, ChannelFlag)
enum class Renderer {
RGB = 1,
Filtered = 2,
};
Q_ENUM(Renderer)
QmlWaveformOverview(QQuickItem* parent = nullptr);
void paint(QPainter* painter);
void setPlayer(QmlPlayerProxy* player);
QmlPlayerProxy* getPlayer() const;
void setChannels(Channels channels);
Channels getChannels() const;
private slots:
void slotTrackLoaded(TrackPointer pLoadedTrack);
void slotTrackLoading(TrackPointer pNewTrack, TrackPointer pOldTrack);
void slotTrackUnloaded();
void slotWaveformUpdated();
signals:
void playerChanged();
void channelsChanged(mixxx::skin::qml::QmlWaveformOverview::Channels channels);
void rendererChanged(mixxx::skin::qml::QmlWaveformOverview::Renderer renderer);
void colorHighChanged(const QColor& color);
void colorMidChanged(const QColor& color);
void colorLowChanged(const QColor& color);
private:
void setCurrentTrack(TrackPointer pTrack);
void drawFiltered(QPainter* pPainter,
Channels channels,
ConstWaveformPointer pWaveform,
int completion) const;
void drawRgb(QPainter* pPainter,
Channels channels,
ConstWaveformPointer pWaveform,
int completion) const;
QColor getRgbPenColor(ConstWaveformPointer pWaveform, int completion) const;
QPointer<QmlPlayerProxy> m_pPlayer;
TrackPointer m_pCurrentTrack;
Channels m_channels;
Renderer m_renderer;
QColor m_colorHigh;
QColor m_colorMid;
QColor m_colorLow;
};
} // namespace qml
} // namespace skin
} // namespace mixxx
|