MuseScore/awl/poslabel.cpp
2012-05-26 14:49:10 +02:00

123 lines
3.5 KiB
C++

//=============================================================================
// 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 "libmscore/pos.h"
namespace Awl {
//---------------------------------------------------------
// PosLabel
//---------------------------------------------------------
PosLabel::PosLabel(TempoMap* tl, TimeSigMap* sl, QWidget* parent)
: QLabel(parent), pos(tl, sl)
{
_smpte = false;
setFrameStyle(WinPanel | Sunken);
setLineWidth(2);
setMidLineWidth(3);
int fw = style()->pixelMetric(QStyle::PM_DefaultFrameWidth);
setIndent(fw);
updateValue();
}
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();
}
//---------------------------------------------------------
// setContext
//---------------------------------------------------------
void PosLabel::setContext(TempoMap* tl, TimeSigMap* sl)
{
pos.setContext(tl, sl);
}
//---------------------------------------------------------
// 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()
{
if (!pos.valid())
return;
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 Pos& val)
{
pos = val;
setEnabled(pos.valid());
updateValue();
}
//---------------------------------------------------------
// setSmpte
//---------------------------------------------------------
void PosLabel::setSmpte(bool val)
{
_smpte = val;
updateValue();
}
}