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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
|
/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
/*
Rosegarden
A MIDI and audio sequencer and musical notation editor.
This program is Copyright 2000-2008
Guillaume Laurent <[email protected]>,
Chris Cannam <[email protected]>,
Richard Bown <[email protected]>
The moral rights of Guillaume Laurent, Chris Cannam, and Richard
Bown to claim authorship of this work have been asserted.
Other copyrights also apply to some parts of this work. Please
see the AUTHORS file and individual file headers for details.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version. See the file
COPYING included with this distribution for more information.
*/
#ifndef _RG_VUMETER_H_
#define _RG_VUMETER_H_
#include <tqcolor.h>
#include <tqlabel.h>
class TQWidget;
class TQTimer;
class TQPaintEvent;
class TQPainter;
namespace Rosegarden
{
class VelocityColour;
class VUMeter : public QLabel
{
Q_OBJECT
public:
typedef enum
{
Plain,
PeakHold,
AudioPeakHoldShort,
AudioPeakHoldLong,
AudioPeakHoldIEC,
AudioPeakHoldIECLong,
FixedHeightVisiblePeakHold
} VUMeterType;
typedef enum
{
Horizontal,
Vertical
} VUAlignment;
// Mono and stereo level setting. The AudioPeakHold meter types
// expect levels in dB; other types expect levels between 0 and 1.
//
void setLevel(double level);
void setLevel(double leftLevel, double rightLevel);
// Mono and stereo record level setting. Same units. Only
// applicable if hasRecord true in constructor.
//
void setRecordLevel(double level);
void setRecordLevel(double leftLevel, double rightLevel);
virtual void paintEvent(TQPaintEvent*);
protected:
// Constructor is protected - we can only create an object
// from a sub-class of this type from a sub-class.
//
VUMeter(TQWidget *parent = 0,
VUMeterType type = Plain,
bool stereo = false,
bool hasRecord = false,
int width = 0,
int height = 0,
VUAlignment alignment = Horizontal,
const char *name = 0);
~VUMeter();
virtual void meterStart() = 0;
virtual void meterStop() = 0;
int m_originalHeight;
bool m_active;
void setLevel(double leftLevel, double rightLevel, bool record);
private slots:
void slotReduceLevelLeft();
void slotStopShowingPeakLeft();
void slotReduceLevelRight();
void slotStopShowingPeakRight();
private:
void drawMeterLevel(TQPainter *paint);
void drawColouredBar(TQPainter *paint, int channel,
int x, int y, int w, int h);
VUMeterType m_type;
VUAlignment m_alignment;
TQColor m_background;
short m_maxLevel;
short m_levelLeft;
short m_recordLevelLeft;
short m_peakLevelLeft;
short m_levelStepLeft;
short m_recordLevelStepLeft;
TQTimer *m_fallTimerLeft;
TQTimer *m_peakTimerLeft;
short m_levelRight;
short m_recordLevelRight;
short m_peakLevelRight;
short m_levelStepRight;
short m_recordLevelStepRight;
TQTimer *m_fallTimerRight;
TQTimer *m_peakTimerRight;
bool m_showPeakLevel;
short m_baseLevelStep;
bool m_stereo;
bool m_hasRecord;
// We use this to work out our colours
//
VelocityColour *m_velocityColour;
};
}
#endif
|