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
|
//=============================================================================
// Awl
// Audio Widget Library
// $Id:$
//
// Copyright (C) 2002-2006 by Werner Schweer and others
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License version 2.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//=============================================================================
#include "poslabel.h"
#include "al/pos.h"
namespace Awl {
//---------------------------------------------------------
// PosLabel
//---------------------------------------------------------
PosLabel::PosLabel(QWidget* parent)
: QLabel(parent)
{
_smpte = false;
setFrameStyle(WinPanel | Sunken);
setLineWidth(2);
setMidLineWidth(3);
int fw = style()->pixelMetric(QStyle::PM_DefaultFrameWidth);
setIndent(fw);
updateValue();
}
//---------------------------------------------------------
// sizeHint
//---------------------------------------------------------
QSize PosLabel::sizeHint() const
{
QFontMetrics fm(font());
int fw = style()->pixelMetric(QStyle::PM_DefaultFrameWidth);
int h = fm.height() + fw * 2;
int w;
if (_smpte)
w = 2 + fm.width('9') * 9 + fm.width(':') * 3 + fw * 4;
else
w = 2 + fm.width('9') * 9 + fm.width('.') * 2 + fw * 4;
return QSize(w, h).expandedTo(QApplication::globalStrut());
}
//---------------------------------------------------------
// updateValue
//---------------------------------------------------------
void PosLabel::updateValue()
{
QString s;
if (_smpte) {
int min, sec, frame, subframe;
pos.msf(&min, &sec, &frame, &subframe);
s.sprintf("%03d:%02d:%02d:%02d", min, sec, frame, subframe);
}
else {
int measure, beat, tick;
pos.mbt(&measure, &beat, &tick);
s.sprintf("%04d.%02d.%03u", measure+1, beat+1, tick);
}
setText(s);
}
//---------------------------------------------------------
// setValue
//---------------------------------------------------------
void PosLabel::setValue(const AL::Pos& val, bool enable)
{
setEnabled(enable);
pos = val;
updateValue();
}
//---------------------------------------------------------
// setSmpte
//---------------------------------------------------------
void PosLabel::setSmpte(bool val)
{
_smpte = val;
updateValue();
}
}
|