diff options
Diffstat (limited to 'muse2/awl')
-rw-r--r-- | muse2/awl/CMakeLists.txt | 2 | ||||
-rw-r--r-- | muse2/awl/floatentry.cpp | 2 | ||||
-rw-r--r-- | muse2/awl/pitchedit.cpp | 4 | ||||
-rw-r--r-- | muse2/awl/posedit.cpp | 22 | ||||
-rw-r--r-- | muse2/awl/posedit.h | 8 | ||||
-rw-r--r-- | muse2/awl/sigedit.cpp | 46 | ||||
-rw-r--r-- | muse2/awl/sigedit.h | 9 | ||||
-rw-r--r-- | muse2/awl/sigspinbox.cpp | 57 | ||||
-rw-r--r-- | muse2/awl/sigspinbox.h | 25 | ||||
-rw-r--r-- | muse2/awl/tcanvas.cpp | 2 |
10 files changed, 145 insertions, 32 deletions
diff --git a/muse2/awl/CMakeLists.txt b/muse2/awl/CMakeLists.txt index f84194a8..7586b1c2 100644 --- a/muse2/awl/CMakeLists.txt +++ b/muse2/awl/CMakeLists.txt @@ -45,6 +45,7 @@ QT4_WRAP_CPP (awl_mocs posedit.h # poslabel.h sigedit.h + sigspinbox.h slider.h # tcanvas.h tempoedit.h @@ -80,6 +81,7 @@ file (GLOB awl_source_files posedit.cpp # poslabel.cpp sigedit.cpp + sigspinbox.cpp slider.cpp # tcanvas.cpp tempoedit.cpp diff --git a/muse2/awl/floatentry.cpp b/muse2/awl/floatentry.cpp index 573420df..9b4b3e99 100644 --- a/muse2/awl/floatentry.cpp +++ b/muse2/awl/floatentry.cpp @@ -220,7 +220,7 @@ void FloatEntry::repeat() switch (button) { case Qt::LeftButton: - if (!MusEConfig::config.leftMouseButtonCanDecrease) + if (!MusEGlobal::config.leftMouseButtonCanDecrease) return; // else fall through case Qt::MidButton: diff --git a/muse2/awl/pitchedit.cpp b/muse2/awl/pitchedit.cpp index e0ede87b..3d9f1037 100644 --- a/muse2/awl/pitchedit.cpp +++ b/muse2/awl/pitchedit.cpp @@ -27,7 +27,9 @@ #include <QKeyEvent> +namespace MusEGlobal { extern QObject* song; // TODO FINDME this is a really dirty hack! +} namespace Awl { @@ -40,7 +42,7 @@ PitchEdit::PitchEdit(QWidget* parent) { setRange(0, 127); deltaMode = false; - connect(song, SIGNAL(midiNote(int, int)), SLOT(midiNote(int,int))); + connect(MusEGlobal::song, SIGNAL(midiNote(int, int)), SLOT(midiNote(int,int))); } //--------------------------------------------------------- diff --git a/muse2/awl/posedit.cpp b/muse2/awl/posedit.cpp index 5666f39f..049b59bd 100644 --- a/muse2/awl/posedit.cpp +++ b/muse2/awl/posedit.cpp @@ -32,7 +32,9 @@ #include <QLineEdit> #include <QStyle> +namespace MusEGlobal { extern int mtcType; +} namespace Awl { @@ -217,7 +219,7 @@ void PosEdit::setSmpte(bool f) // setValue //--------------------------------------------------------- -void PosEdit::setValue(const Pos& time) +void PosEdit::setValue(const MusECore::Pos& time) { if(_pos == time) return; @@ -227,13 +229,13 @@ void PosEdit::setValue(const Pos& time) void PosEdit::setValue(const QString& s) { - Pos time(s); + MusECore::Pos time(s); setValue(time); } void PosEdit::setValue(int t) { - Pos time(t); + MusECore::Pos time(t); setValue(time); } @@ -287,7 +289,7 @@ QAbstractSpinBox::StepEnabled PosEdit::stepEnabled() const else { int nf = 23; // 24 frames sec - switch(mtcType) { + switch(MusEGlobal::mtcType) { //case 0: // 24 frames sec // nf = 23; // break; @@ -398,7 +400,7 @@ QValidator::State PosEdit::validate(QString& s,int& /*i*/) const rv = state; int nf = 23; // 24 frames sec - switch(mtcType) { + switch(MusEGlobal::mtcType) { //case 0: // 24 frames sec // nf = 23; // break; @@ -541,7 +543,7 @@ void PosEdit::stepBy(int steps) case 2: { int nf = 23; // 24 frames sec - switch(mtcType) { + switch(MusEGlobal::mtcType) { //case 0: // 24 frames sec // nf = 23; // break; @@ -578,7 +580,7 @@ void PosEdit::stepBy(int steps) default: return; } - Pos newPos(minute, sec, frame, subframe); + MusECore::Pos newPos(minute, sec, frame, subframe); if (!(newPos == _pos)) { changed = true; _pos = newPos; @@ -623,7 +625,7 @@ void PosEdit::stepBy(int steps) default: return; } - Pos newPos(bar, beat, tick); + MusECore::Pos newPos(bar, beat, tick); if (!(newPos == _pos)) { changed = true; _pos = newPos; @@ -666,7 +668,7 @@ void PosEdit::finishEdit() return; } - Pos newPos(sl[0].toInt(), sl[1].toInt(), sl[2].toInt(), sl[3].toInt()); + MusECore::Pos newPos(sl[0].toInt(), sl[1].toInt(), sl[2].toInt(), sl[3].toInt()); if (!(newPos == _pos)) { changed = true; @@ -681,7 +683,7 @@ void PosEdit::finishEdit() return; } - Pos newPos(sl[0].toInt() - 1, sl[1].toInt() - 1, sl[2].toInt()); + MusECore::Pos newPos(sl[0].toInt() - 1, sl[1].toInt() - 1, sl[2].toInt()); if (!(newPos == _pos)) { changed = true; diff --git a/muse2/awl/posedit.h b/muse2/awl/posedit.h index 2da74d41..29692124 100644 --- a/muse2/awl/posedit.h +++ b/muse2/awl/posedit.h @@ -42,7 +42,7 @@ class PosEdit : public QAbstractSpinBox Q_PROPERTY(bool smpte READ smpte WRITE setSmpte) bool _smpte; - Pos _pos; + MusECore::Pos _pos; bool initialized; QIntValidator* validator; @@ -58,7 +58,7 @@ class PosEdit : public QAbstractSpinBox void finishEdit(); signals: - void valueChanged(const Pos&); + void valueChanged(const MusECore::Pos&); // Choose these three carefully, watch out for focusing recursion. void returnPressed(); @@ -67,7 +67,7 @@ class PosEdit : public QAbstractSpinBox void editingFinished(); public slots: - void setValue(const Pos& time); + void setValue(const MusECore::Pos& time); void setValue(int t); void setValue(const QString& s); @@ -76,7 +76,7 @@ class PosEdit : public QAbstractSpinBox ~PosEdit(); QSize sizeHint() const; - Pos pos() const { return _pos; } + MusECore::Pos pos() const { return _pos; } void setSmpte(bool); bool smpte() const { return _smpte; } // void* operator new(size_t); // What was this for? Tim. diff --git a/muse2/awl/sigedit.cpp b/muse2/awl/sigedit.cpp index 74e4b060..d3685a53 100644 --- a/muse2/awl/sigedit.cpp +++ b/muse2/awl/sigedit.cpp @@ -43,20 +43,26 @@ SigEdit::SigEdit(QWidget* parent) { initialized = false; slash = new QLabel("/",this); - zSpin = new QSpinBox(this); - nSpin = new QSpinBox(this); + zSpin = new SigSpinBox(this); + nSpin = new SigSpinBox(this); zSpin->setRange(1,100); - nSpin->setRange(1,100); + nSpin->setDenominator(); + nSpin->setRange(1,128); layout = new QHBoxLayout(this); layout->setContentsMargins(0,0,0,0); layout->setSpacing(1); layout->addWidget(zSpin); layout->addWidget(slash); layout->addWidget(nSpin); - layout->addSpacing(40); + layout->addSpacing(30); connect(zSpin, SIGNAL(valueChanged(int)), SLOT(setZ(int))); connect(nSpin, SIGNAL(valueChanged(int)), SLOT(setN(int))); + connect(nSpin, SIGNAL(returnPressed()), SIGNAL(returnPressed())); + connect(zSpin, SIGNAL(returnPressed()), SIGNAL(returnPressed())); + connect(zSpin, SIGNAL(moveFocus()), SLOT(moveFocus())); + connect(nSpin, SIGNAL(moveFocus()), SLOT(moveFocus())); + zSpin->selectAll(); } SigEdit::~SigEdit() @@ -68,18 +74,29 @@ SigEdit::~SigEdit() //--------------------------------------------------------- +// moveFocus +//--------------------------------------------------------- + +void SigEdit::moveFocus() +{ + if (zSpin->hasFocus()) { + nSpin->setFocus(); + nSpin->selectAll(); + } + else { + zSpin->setFocus(); + zSpin->selectAll(); + } +} + +//--------------------------------------------------------- // setZ //--------------------------------------------------------- void SigEdit::setZ(const int z) { _sig.z=z; - if (_sig.isValid()) { - zSpin->setStyleSheet(""); - emit valueChanged(_sig); - } - else - zSpin->setStyleSheet("QSpinBox { background-color: red; }"); + emit valueChanged(_sig); } //--------------------------------------------------------- // setN @@ -118,13 +135,18 @@ void SigEdit::updateValue() nSpin->setValue(_sig.n); } - void SigEdit::paintEvent(QPaintEvent* event) { +void SigEdit::paintEvent(QPaintEvent* event) { if (!initialized) updateValue(); initialized = true; QPainter p(this); - p.fillRect(event->rect(), Qt::white); + p.fillRect(event->rect(), p.background()); QWidget::paintEvent(event); } +void SigEdit::setFocus() +{ + zSpin->setFocus(); +} + } diff --git a/muse2/awl/sigedit.h b/muse2/awl/sigedit.h index acb0b9d8..5fe8186d 100644 --- a/muse2/awl/sigedit.h +++ b/muse2/awl/sigedit.h @@ -25,9 +25,9 @@ #include "al/sig.h" //#include "sig.h" +#include <awl/sigspinbox.h> #include <QWidget> -#include <QSpinBox> #include <QHBoxLayout> #include <QLabel> @@ -48,8 +48,8 @@ class SigEdit : public QWidget AL::TimeSignature _sig; bool initialized; QLabel *slash; - QSpinBox *zSpin; - QSpinBox *nSpin; + SigSpinBox *zSpin; + SigSpinBox *nSpin; QHBoxLayout *layout; virtual void paintEvent(QPaintEvent* event); @@ -57,13 +57,16 @@ class SigEdit : public QWidget signals: void valueChanged(const AL::TimeSignature&); + void returnPressed(); private slots: void setN(const int n); void setZ(const int z); + void moveFocus(); public slots: void setValue(const AL::TimeSignature&); + void setFocus(); public: SigEdit(QWidget* parent = 0); diff --git a/muse2/awl/sigspinbox.cpp b/muse2/awl/sigspinbox.cpp new file mode 100644 index 00000000..6e38b164 --- /dev/null +++ b/muse2/awl/sigspinbox.cpp @@ -0,0 +1,57 @@ +#include "sigspinbox.h" +#include "al/sig.h" +#include <QKeyEvent> +#include <stdio.h> + +SigSpinBox::SigSpinBox(QWidget *parent) : + QSpinBox(parent) +{ + _denominator=false; +} +void SigSpinBox::keyPressEvent(QKeyEvent*ev) +{ + switch (ev->key()) { + case Qt::Key_Return: + emit returnPressed(); + return; + break; + case Qt::Key_Left: + case Qt::Key_Right: + case Qt::Key_Slash: + emit moveFocus(); + return; + break; + default: + break; + } + QSpinBox::keyPressEvent(ev); +} + +void SigSpinBox::setDenominator() +{ + _denominator=true; +} + +void SigSpinBox::stepBy(int step) +{ + if (!_denominator) { + setValue(value() + step); + return; + } + + AL::TimeSignature sig(4, value()); + if (step == 1) { + // make sure that sig is valid then increase + if (sig.isValid()) + setValue(value() * 2); + } + else if (step == -1) { + // make sure that sig is valid then increase + if (sig.isValid()) { + int v = value() / 2; + if (v < 2) + v = 2; + setValue(v); + } + } +} diff --git a/muse2/awl/sigspinbox.h b/muse2/awl/sigspinbox.h new file mode 100644 index 00000000..92fd1cbc --- /dev/null +++ b/muse2/awl/sigspinbox.h @@ -0,0 +1,25 @@ +#ifndef SIGSPINBOX_H +#define SIGSPINBOX_H + +#include <QSpinBox> + +class SigSpinBox : public QSpinBox +{ + Q_OBJECT + bool _denominator; +protected: + virtual void keyPressEvent(QKeyEvent*); + virtual void stepBy(int); +public: + explicit SigSpinBox(QWidget *parent = 0); + void setDenominator(); + +signals: + void returnPressed(); + void moveFocus(); + +public slots: + +}; + +#endif // SIGSPINBOX_H diff --git a/muse2/awl/tcanvas.cpp b/muse2/awl/tcanvas.cpp index d39080e2..70fe909f 100644 --- a/muse2/awl/tcanvas.cpp +++ b/muse2/awl/tcanvas.cpp @@ -300,7 +300,7 @@ bool TimeCanvas::eventFilter(QObject* obj, QEvent* event) //else if (b & Qt::RightButton) // i = 2; else if (b & Qt::RightButton) { - if ((MusEConfig::config.rangeMarkerWithoutMMB) && (event->modifiers() & Qt::ControlModifier)) + if ((MusEGlobal::config.rangeMarkerWithoutMMB) && (event->modifiers() & Qt::ControlModifier)) i = 1; else i = 2; |