summaryrefslogtreecommitdiff
path: root/muse_qt4_evolution/muse/widgets/bigtime.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'muse_qt4_evolution/muse/widgets/bigtime.cpp')
-rw-r--r--muse_qt4_evolution/muse/widgets/bigtime.cpp267
1 files changed, 267 insertions, 0 deletions
diff --git a/muse_qt4_evolution/muse/widgets/bigtime.cpp b/muse_qt4_evolution/muse/widgets/bigtime.cpp
new file mode 100644
index 00000000..3d1c7b21
--- /dev/null
+++ b/muse_qt4_evolution/muse/widgets/bigtime.cpp
@@ -0,0 +1,267 @@
+//=============================================================================
+// MusE
+// Linux Music Editor
+// $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 "globals.h"
+#include "bigtime.h"
+#include "song.h"
+#include "gconfig.h"
+
+#include "al/al.h"
+#include "al/sig.h"
+#include "al/tempo.h"
+
+//
+// the bigtime widget
+// display is split into several parts to avoid flickering.
+//
+
+//---------------------------------------------------------
+// BigTime
+//---------------------------------------------------------
+
+BigTime::BigTime(QWidget* parent)
+ : QWidget(parent)
+ {
+ setWindowFlags(Qt::WindowStaysOnTopHint);
+
+ barLabel = new QLabel(this);
+ beatLabel = new QLabel(this);
+ tickLabel = new QLabel(this);
+ hourLabel = new QLabel(this);
+ minLabel = new QLabel(this);
+ secLabel = new QLabel(this);
+ frameLabel = new QLabel(this);
+ sep1 = new QLabel(QString("."), this);
+ sep2 = new QLabel(QString("."), this);
+ sep3 = new QLabel(QString(":"), this);
+ sep4 = new QLabel(QString(":"), this);
+ sep5 = new QLabel(QString(":"), this);
+
+ oldbar = oldbeat = oldtick = oldhour = oldmin = oldsec = oldframe = -1;
+
+ setString(song->cPos());
+
+ configChanged();
+
+ QFont f(QString("Courier"));
+ f.setPixelSize(10);
+ setFont(f);
+ setWindowTitle(tr("MusE: Bigtime"));
+ }
+
+//---------------------------------------------------------
+// configChanged
+//---------------------------------------------------------
+
+void BigTime::configChanged()
+ {
+ setBgColor(config.bigTimeBackgroundColor);
+ setFgColor(config.bigTimeForegroundColor);
+ }
+
+//---------------------------------------------------------
+// closeEvent
+//---------------------------------------------------------
+
+void BigTime::closeEvent(QCloseEvent *ev)
+ {
+ emit closed();
+ QWidget::closeEvent(ev);
+ }
+
+//---------------------------------------------------------
+// setString
+//---------------------------------------------------------
+
+bool BigTime::setString(AL::Pos pos)
+ {
+ int bar, beat, tick;
+ pos.mbt(&bar, &beat, &tick);
+ int min, sec, hour, frame, subframe;
+ pos.msf(&min, &sec, &frame, &subframe);
+
+ hour = min / 60;
+ min %= 60;
+
+ QString s;
+
+ if(oldbar != bar) {
+ s.sprintf("%04d", bar+1);
+ barLabel->setText(s);
+ oldbar = bar;
+ }
+
+ if(oldbeat != beat) {
+ s.sprintf("%02d", beat+1);
+ beatLabel->setText(s);
+ oldbeat = beat;
+ }
+
+ if(oldtick != tick) {
+ s.sprintf("%03d", tick);
+ tickLabel->setText(s);
+ oldtick = tick;
+ }
+
+ if(oldhour != hour) {
+ s.sprintf("%02d", hour);
+ hourLabel->setText(s);
+ oldhour = hour;
+ }
+
+ if(oldmin != min) {
+ s.sprintf("%02d", min);
+ minLabel->setText(s);
+ oldmin = min;
+ }
+
+ if(oldsec != sec) {
+ s.sprintf("%02d", sec);
+ secLabel->setText(s);
+ oldsec = sec;
+ }
+
+ if(oldframe != frame) {
+ s.sprintf("%02d", frame);
+ frameLabel->setText(s);
+ oldframe = frame;
+ }
+
+ return false;
+ }
+
+//---------------------------------------------------------
+// setPos
+//---------------------------------------------------------
+
+void BigTime::setPos(int idx, AL::Pos pos, bool)
+ {
+ if (idx == 0)
+ setString(pos);
+ }
+
+//---------------------------------------------------------
+// resizeEvent
+//---------------------------------------------------------
+
+void BigTime::resizeEvent(QResizeEvent *ev)
+ {
+ QFont f = font();
+ QFontMetrics fm(f);
+ int fs = f.pixelSize();
+ int hspace = 20;
+ int tw = fm.width(QString("00:00:00:00"));
+ fs = ((ev->size().width() - hspace*2)*fs) / tw;
+
+// printf("resize BigTime %d -> %d, w %d\n", fs, nfs, ev->size().width());
+
+ // set min/max
+ if (fs < 10)
+ fs = 10;
+ else if (fs > 256)
+ fs = 256;
+ f.setPixelSize(fs);
+ setFont(f);
+
+ int digitWidth = fontMetrics().width(QString("0"));
+
+ int vspace = (ev->size().height() - (fs*2)) / 3;
+ int tickY = vspace;
+ int timeY = vspace*2 + fs;
+
+ barLabel->resize(digitWidth*4, fs);
+ beatLabel->resize(digitWidth*2, fs);
+ tickLabel->resize(digitWidth*3, fs);
+ hourLabel->resize(digitWidth*2, fs);
+ minLabel->resize(digitWidth*2, fs);
+ secLabel->resize(digitWidth*2, fs);
+ frameLabel->resize(digitWidth*2, fs);
+
+ sep1->resize(digitWidth, fs);
+ sep2->resize(digitWidth, fs);
+ sep3->resize(digitWidth, fs);
+ sep4->resize(digitWidth, fs);
+ sep5->resize(digitWidth, fs);
+
+ barLabel->move( hspace + (digitWidth*0), tickY);
+ sep1->move( hspace + (digitWidth*4), tickY);
+ beatLabel->move( hspace + (digitWidth*5), tickY);
+ sep2->move( hspace + (digitWidth*7), tickY);
+ tickLabel->move( hspace + (digitWidth*8), tickY);
+
+ hourLabel->move( hspace + (digitWidth*0), timeY);
+ sep3->move( hspace + (digitWidth*2), timeY);
+ minLabel->move( hspace + (digitWidth*3), timeY);
+ sep4->move( hspace + (digitWidth*5), timeY);
+ secLabel->move( hspace + (digitWidth*6), timeY);
+ sep5->move( hspace + (digitWidth*8), timeY);
+ frameLabel->move( hspace + (digitWidth*9), timeY);
+ }
+
+//---------------------------------------------------------
+// setForegroundColor
+//---------------------------------------------------------
+
+void BigTime::setFgColor(QColor c)
+ {
+ QPalette cg = palette();
+ cg.setColor(QPalette::Foreground, c);
+ setPalette(cg);
+
+ barLabel->setPalette(cg);
+ beatLabel->setPalette(cg);
+ tickLabel->setPalette(cg);
+ hourLabel->setPalette(cg);
+ minLabel->setPalette(cg);
+ secLabel->setPalette(cg);
+ frameLabel->setPalette(cg);
+
+ sep1->setPalette(cg);
+ sep2->setPalette(cg);
+ sep3->setPalette(cg);
+ sep4->setPalette(cg);
+ sep5->setPalette(cg);
+ }
+
+//---------------------------------------------------------
+// setBackgroundColor
+//---------------------------------------------------------
+
+void BigTime::setBgColor(QColor c)
+ {
+ QPalette cg = palette();
+ cg.setColor(QPalette::Background, c);
+ setPalette(cg);
+
+ barLabel->setPalette(cg);
+ beatLabel->setPalette(cg);
+ tickLabel->setPalette(cg);
+ hourLabel->setPalette(cg);
+ minLabel->setPalette(cg);
+ secLabel->setPalette(cg);
+ frameLabel->setPalette(cg);
+
+ sep1->setPalette(cg);
+ sep2->setPalette(cg);
+ sep3->setPalette(cg);
+ sep4->setPalette(cg);
+ sep5->setPalette(cg);
+ }
+