From 48c1e3e74a76b5d061241d8cfb734f2664db10cb Mon Sep 17 00:00:00 2001 From: rj Date: Thu, 10 Oct 2013 14:26:42 +0200 Subject: added visual metronome to bigtime --- muse2/muse/widgets/bigtime.cpp | 319 ++++++++++++++++++++--------------------- 1 file changed, 156 insertions(+), 163 deletions(-) (limited to 'muse2/muse/widgets/bigtime.cpp') diff --git a/muse2/muse/widgets/bigtime.cpp b/muse2/muse/widgets/bigtime.cpp index 5adf4966..e7a6478a 100644 --- a/muse2/muse/widgets/bigtime.cpp +++ b/muse2/muse/widgets/bigtime.cpp @@ -22,10 +22,12 @@ //========================================================= #include #include +#include #include #include #include +#include #include "globals.h" #include "bigtime.h" @@ -51,59 +53,56 @@ namespace MusEGui { BigTime::BigTime(QWidget* parent) : QWidget(parent, Qt::Window | Qt::WindowStaysOnTopHint) // Possibly also Qt::X11BypassWindowManagerHint - { - - tickmode = true; - dwin = new QWidget(this, Qt::WindowStaysOnTopHint); // Possibly also Qt::X11BypassWindowManagerHint - dwin->setObjectName("bigtime-dwin"); - dwin->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding)); - fmtButton = new QCheckBox(QString(""), this); - fmtButton->resize(18,18); - fmtButton->setChecked(true); - fmtButton->setToolTip(tr("format display")); - fmtButton->setFocusPolicy(Qt::NoFocus); - barLabel = new QLabel(dwin); - beatLabel = new QLabel(dwin); - tickLabel = new QLabel(dwin); - //hourLabel = new QLabel(dwin); - minLabel = new QLabel(dwin); - secLabel = new QLabel(dwin); - frameLabel = new QLabel(dwin); - subFrameLabel = new QLabel(dwin); - sep1 = new QLabel(QString("."), dwin); - sep2 = new QLabel(QString("."), dwin); - sep3 = new QLabel(QString(":"), dwin); - sep4 = new QLabel(QString(":"), dwin); - sep5 = new QLabel(QString(":"), dwin); - absTickLabel = new QLabel(dwin); - absFrameLabel = new QLabel(dwin); - barLabel->setToolTip(tr("bar")); - beatLabel->setToolTip(tr("beat")); - tickLabel->setToolTip(tr("tick")); - //hourLabel->setToolTip(tr("hour")); - minLabel->setToolTip(tr("minute")); - secLabel->setToolTip(tr("second")); - frameLabel->setToolTip(tr("frame")); - subFrameLabel->setToolTip(tr("subframe")); - absTickLabel->setToolTip(tr("tick")); - absFrameLabel->setToolTip(tr("frame")); - fmtButtonToggled(true); - connect(fmtButton, SIGNAL(toggled(bool)), SLOT(fmtButtonToggled(bool))); - //oldbar = oldbeat = oldtick = oldhour = oldmin = oldsec = oldframe = -1; - oldbar = oldbeat = oldtick = oldmin = oldsec = oldframe = oldsubframe = -1; - oldAbsTick = oldAbsFrame = -1; - setString(INT_MAX); - - dwin->setStyleSheet("font-size:10px; font-family:'Courier'; "); // Tim p4.0.8 - - configChanged(); - - //QFont f(QString("Courier")); - //f.setPixelSize(10); - //dwin->setFont(f); +{ - setWindowTitle(tr("MusE: Bigtime")); - } + tickmode = true; + dwin = new QWidget(this, Qt::WindowStaysOnTopHint); // Possibly also Qt::X11BypassWindowManagerHint + dwin->setObjectName("bigtime-dwin"); + dwin->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding)); + dwin->setStyleSheet("font-size:10px; font-family:'Courier'; "); // Tim p4.0.8 + + fmtButton = new QCheckBox(QString(""), this); + fmtButton->resize(18,18); + fmtButton->setChecked(true); + fmtButton->setToolTip(tr("format display")); + fmtButton->setFocusPolicy(Qt::NoFocus); + barLabel = new QLabel(dwin); + beatLabel = new QLabel(dwin); + tickLabel = new QLabel(dwin); + //hourLabel = new QLabel(dwin); + minLabel = new QLabel(dwin); + secLabel = new QLabel(dwin); + frameLabel = new QLabel(dwin); + subFrameLabel = new QLabel(dwin); + sep1 = new QLabel(QString("."), dwin); + sep2 = new QLabel(QString("."), dwin); + sep3 = new QLabel(QString(":"), dwin); + sep4 = new QLabel(QString(":"), dwin); + sep5 = new QLabel(QString(":"), dwin); + absTickLabel = new QLabel(dwin); + absFrameLabel = new QLabel(dwin); + barLabel->setToolTip(tr("bar")); + beatLabel->setToolTip(tr("beat")); + tickLabel->setToolTip(tr("tick")); + //hourLabel->setToolTip(tr("hour")); + minLabel->setToolTip(tr("minute")); + secLabel->setToolTip(tr("second")); + frameLabel->setToolTip(tr("frame")); + subFrameLabel->setToolTip(tr("subframe")); + absTickLabel->setToolTip(tr("tick")); + absFrameLabel->setToolTip(tr("frame")); + fmtButtonToggled(true); + connect(fmtButton, SIGNAL(toggled(bool)), SLOT(fmtButtonToggled(bool))); + //oldbar = oldbeat = oldtick = oldhour = oldmin = oldsec = oldframe = -1; + oldbar = oldbeat = oldtick = oldmin = oldsec = oldframe = oldsubframe = -1; + oldAbsTick = oldAbsFrame = -1; + setString(INT_MAX); + metronome = new VerticalMetronomeWidget(dwin); + + configChanged(); + + setWindowTitle(tr("MusE: Bigtime")); +} //--------------------------------------------------------- // fmtButtonToggled @@ -212,23 +211,23 @@ void BigTime::closeEvent(QCloseEvent *ev) bool BigTime::setString(unsigned v) { if (v == INT_MAX) { - barLabel->setText(QString("----")); - beatLabel->setText(QString("--")); - tickLabel->setText(QString("---")); - //hourLabel->setText(QString("--")); - //minLabel->setText(QString("--")); - minLabel->setText(QString("---")); - secLabel->setText(QString("--")); - frameLabel->setText(QString("--")); - subFrameLabel->setText(QString("--")); - + barLabel->setText(QString("----")); + beatLabel->setText(QString("--")); + tickLabel->setText(QString("---")); + //hourLabel->setText(QString("--")); + //minLabel->setText(QString("--")); + minLabel->setText(QString("---")); + secLabel->setText(QString("--")); + frameLabel->setText(QString("--")); + subFrameLabel->setText(QString("--")); + absTickLabel->setText(QString("----------")); absFrameLabel->setText(QString("----------")); oldAbsTick = oldAbsFrame = -1; - //oldbar = oldbeat = oldtick = oldhour = oldmin = oldsec = oldframe = -1; + //oldbar = oldbeat = oldtick = oldhour = oldmin = oldsec = oldframe = -1; oldbar = oldbeat = oldtick = oldmin = oldsec = oldframe = oldsubframe = -1; - return true; - } + return true; + } // Quick fix: Not much to do but ignore the supplied tick: We need the exact frame here. unsigned absFrame = MusEGlobal::audio->pos().frame(); @@ -325,86 +324,76 @@ bool BigTime::setString(unsigned v) //--------------------------------------------------------- // setPos //--------------------------------------------------------- - +#define PI 3.14159265 void BigTime::setPos(int idx, unsigned v, bool) - { - if (idx == 0) - setString(v); - } +{ + if (idx == 0) + { + int calcV = v%(MusEGlobal::config.midiDivision*2); + double rangeAdjuster = PI/double(MusEGlobal::config.midiDivision); + metronome->setMetronome(sin(double(calcV)*rangeAdjuster)); + //printf("calcV=%d rangeAdjuster %f metronomePosition=%f midiDivision=%d\n",v,rangeAdjuster, metronomePosition, MusEGlobal::config.midiDivision); + setString(v); + } + metronome->update(); +} //--------------------------------------------------------- // resizeEvent //--------------------------------------------------------- void BigTime::resizeEvent(QResizeEvent *ev) - { +{ QWidget::resizeEvent(ev); dwin->resize(ev->size()); QFont f = dwin->font(); - QFontMetrics fm(f); - int fs = f.pixelSize(); - int hspace = 20; - //int tw = fm.width(QString("00:00:00:00")); - int tw = fm.width(QString("000:00:00:00")); + QFontMetrics fm(f); + int fs = f.pixelSize(); + int hspace = 20; + int tw = fm.width(QString("000:00:00:00")); - fs = ((ev->size().width() - hspace*2)*fs) / tw; + fs = ((ev->size().width() - hspace*2)*fs) / tw; - // set min/max - if (fs < 10) - fs = 10; - else if (fs > 256) - fs = 256; + // set min/max + if (fs < 10) + fs = 10; + else if (fs > 256) + fs = 256; - //if(debugMsg) - // printf("resize BigTime: Font name:%s CurSize:%d NewSize:%d, NewWidth:%d\n", - // f.family().toLatin1().constData(), fs, nfs, ev->size().width()); - - //f.setPixelSize(fs); - - //dwin->setFont(f); QString fstr = QString("font-size:%1px; font-family:'Courier'; ").arg(fs); // Tim p4.0.8 dwin->setStyleSheet(fstr); setBgColor(MusEGlobal::config.bigTimeBackgroundColor); setFgColor(MusEGlobal::config.bigTimeForegroundColor); int digitWidth = dwin->fontMetrics().width(QString("0")); - int vspace = (ev->size().height() - (fs*2)) / 3; + int vspace = (ev->size().height() - (fs*2)) / 3; int tickY = vspace; - int timeY = vspace*2 + fs; + int timeY = vspace*2 + fs; int absTickY = tickY; int absFrameY = timeY; - 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); + barLabel->resize(digitWidth*4, fs); + beatLabel->resize(digitWidth*2, fs); + tickLabel->resize(digitWidth*3, fs); minLabel->resize(digitWidth*3, fs); - secLabel->resize(digitWidth*2, fs); - frameLabel->resize(digitWidth*2, fs); + secLabel->resize(digitWidth*2, fs); + frameLabel->resize(digitWidth*2, fs); subFrameLabel->resize(digitWidth*2, fs); absTickLabel->resize(digitWidth*10, fs); absFrameLabel->resize(digitWidth*10, 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); + 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); + minLabel->move( hspace + (digitWidth*0), timeY); sep3->move( hspace + (digitWidth*3), timeY); secLabel->move( hspace + (digitWidth*4), timeY); @@ -415,64 +404,68 @@ void BigTime::resizeEvent(QResizeEvent *ev) absTickLabel->move( hspace + (digitWidth*0), absTickY); absFrameLabel->move( hspace + (digitWidth*0), absFrameY); - } + + metronome->move(0,dwin->height() - dwin->height()/10); + metronome->resize(dwin->width(),dwin->height()/10); +} //--------------------------------------------------------- // setForegroundColor //--------------------------------------------------------- void BigTime::setFgColor(QColor c) - { - QPalette newpalette(palette()); - newpalette.setColor(QPalette::Foreground, c); - setPalette(newpalette); - - barLabel->setPalette(newpalette); - beatLabel->setPalette(newpalette); - tickLabel->setPalette(newpalette); - //hourLabel->setPalette(newpalette); - minLabel->setPalette(newpalette); - secLabel->setPalette(newpalette); - frameLabel->setPalette(newpalette); - subFrameLabel->setPalette(newpalette); - - absTickLabel->setPalette(newpalette); - absFrameLabel->setPalette(newpalette); - sep1->setPalette(newpalette); - sep2->setPalette(newpalette); - sep3->setPalette(newpalette); - sep4->setPalette(newpalette); - sep5->setPalette(newpalette); - } +{ + QPalette newpalette(palette()); + newpalette.setColor(QPalette::Foreground, c); + setPalette(newpalette); + + barLabel->setPalette(newpalette); + beatLabel->setPalette(newpalette); + tickLabel->setPalette(newpalette); + //hourLabel->setPalette(newpalette); + minLabel->setPalette(newpalette); + secLabel->setPalette(newpalette); + frameLabel->setPalette(newpalette); + subFrameLabel->setPalette(newpalette); + + absTickLabel->setPalette(newpalette); + absFrameLabel->setPalette(newpalette); + sep1->setPalette(newpalette); + sep2->setPalette(newpalette); + sep3->setPalette(newpalette); + sep4->setPalette(newpalette); + sep5->setPalette(newpalette); +} //--------------------------------------------------------- // setBackgroundColor //--------------------------------------------------------- void BigTime::setBgColor(QColor c) - { - QPalette newpalette(palette()); - newpalette.setColor(QPalette::Window, c); - setPalette(newpalette); - - barLabel->setPalette(newpalette); - beatLabel->setPalette(newpalette); - tickLabel->setPalette(newpalette); - //hourLabel->setPalette(newpalette); - minLabel->setPalette(newpalette); - secLabel->setPalette(newpalette); - frameLabel->setPalette(newpalette); - subFrameLabel->setPalette(newpalette); - - absTickLabel->setPalette(newpalette); - absFrameLabel->setPalette(newpalette); - sep1->setPalette(newpalette); - sep2->setPalette(newpalette); - sep3->setPalette(newpalette); - sep4->setPalette(newpalette); - sep5->setPalette(newpalette); - - setPalette(newpalette); - } +{ + QPalette newpalette(palette()); + newpalette.setColor(QPalette::Window, c); + setPalette(newpalette); + + barLabel->setPalette(newpalette); + beatLabel->setPalette(newpalette); + tickLabel->setPalette(newpalette); + //hourLabel->setPalette(newpalette); + minLabel->setPalette(newpalette); + secLabel->setPalette(newpalette); + frameLabel->setPalette(newpalette); + subFrameLabel->setPalette(newpalette); + + absTickLabel->setPalette(newpalette); + absFrameLabel->setPalette(newpalette); + sep1->setPalette(newpalette); + sep2->setPalette(newpalette); + sep3->setPalette(newpalette); + sep4->setPalette(newpalette); + sep5->setPalette(newpalette); + + setPalette(newpalette); +} + } // namespace MusEGui -- cgit v1.2.3