diff options
author | Tim E. Real <termtech@rogers.com> | 2013-02-20 01:16:45 +0000 |
---|---|---|
committer | Tim E. Real <termtech@rogers.com> | 2013-02-20 01:16:45 +0000 |
commit | c3650bf9b2302e1a20853f0cadc7833370e3d0dd (patch) | |
tree | fa1a229b0928290a00f974a14104e385d42c5905 /muse2/muse/arranger/arranger.cpp | |
parent | 612acc2cd3979edf441d2f33403f6b3403c1cf05 (diff) |
MASSIVE FIXES: MANY editor, usability, operation fixes and changes.
See ChangeLog.
Diffstat (limited to 'muse2/muse/arranger/arranger.cpp')
-rw-r--r-- | muse2/muse/arranger/arranger.cpp | 94 |
1 files changed, 63 insertions, 31 deletions
diff --git a/muse2/muse/arranger/arranger.cpp b/muse2/muse/arranger/arranger.cpp index 90a7e8f3..e5f22daf 100644 --- a/muse2/muse/arranger/arranger.cpp +++ b/muse2/muse/arranger/arranger.cpp @@ -24,6 +24,7 @@ #include <stdio.h> #include <limits.h> +#include <math.h> #include <QComboBox> #include <QGridLayout> @@ -77,6 +78,10 @@ namespace MusEGui { std::vector<Arranger::custom_col_t> Arranger::custom_columns; //FINDMICH TODO: eliminate all usage of new_custom_columns std::vector<Arranger::custom_col_t> Arranger::new_custom_columns; //and instead let the arranger update without restarting muse! QByteArray Arranger::header_state; +static const char* gArrangerRasterStrings[] = { + QT_TRANSLATE_NOOP("MusEGui::Arranger", "Off"), QT_TRANSLATE_NOOP("MusEGui::Arranger", "Bar"), "1/2", "1/4", "1/8", "1/16" + }; +static int gArrangerRasterTable[] = { 1, 0, 768, 384, 192, 96 }; void Arranger::writeCustomColumns(int level, MusECore::Xml& xml) { @@ -238,22 +243,19 @@ Arranger::Arranger(ArrangerView* parent, const char* name) cursorPos->setFixedHeight(22); toolbar->addWidget(cursorPos); - const char* rastval[] = { - QT_TRANSLATE_NOOP("MusEGui::Arranger", "Off"), QT_TRANSLATE_NOOP("MusEGui::Arranger", "Bar"), "1/2", "1/4", "1/8", "1/16" - }; label = new QLabel(tr("Snap")); label->setAlignment(Qt::AlignRight|Qt::AlignVCenter); label->setIndent(3); toolbar->addWidget(label); - QComboBox* raster = new QComboBox(); + _rasterCombo = new QComboBox(); for (int i = 0; i < 6; i++) - raster->insertItem(i, tr(rastval[i])); - raster->setCurrentIndex(1); + _rasterCombo->insertItem(i, tr(gArrangerRasterStrings[i]), gArrangerRasterTable[i]); + _rasterCombo->setCurrentIndex(1); // Set the audio record part snapping. Set to 0 (bar), the same as this combo box intial raster. MusEGlobal::song->setArrangerRaster(0); - toolbar->addWidget(raster); - connect(raster, SIGNAL(activated(int)), SLOT(_setRaster(int))); - raster->setFocusPolicy(Qt::TabFocus); + toolbar->addWidget(_rasterCombo); + connect(_rasterCombo, SIGNAL(activated(int)), SLOT(rasterChanged(int))); + _rasterCombo->setFocusPolicy(Qt::TabFocus); // Song len label = new QLabel(tr("Len")); @@ -477,7 +479,8 @@ Arranger::Arranger(ArrangerView* parent, const char* name) connect(list, SIGNAL(keyPressExt(QKeyEvent*)), canvas, SLOT(redirKeypress(QKeyEvent*))); connect(canvas, SIGNAL(selectTrackAbove()), list, SLOT(selectTrackAbove())); connect(canvas, SIGNAL(selectTrackBelow()), list, SLOT(selectTrackBelow())); - connect(canvas, SIGNAL(horizontalZoom(bool,int)), SLOT(horizontalZoom(bool,int))); + connect(canvas, SIGNAL(horizontalZoom(bool, const QPoint&)), SLOT(horizontalZoom(bool, const QPoint&))); + connect(canvas, SIGNAL(horizontalZoom(int, const QPoint&)), SLOT(horizontalZoom(int, const QPoint&))); connect(lenEntry, SIGNAL(returnPressed()), SLOT(focusCanvas())); connect(lenEntry, SIGNAL(escapePressed()), SLOT(focusCanvas())); connect(globalPitchSpinBox, SIGNAL(returnPressed()), SLOT(focusCanvas())); @@ -732,6 +735,7 @@ void Arranger::trackSelectionChanged() void Arranger::writeStatus(int level, MusECore::Xml& xml) { xml.tag(level++, "arranger"); + xml.intTag(level, "raster", _raster); xml.intTag(level, "info", ib->isChecked()); split->writeStatus(level, xml); @@ -785,6 +789,7 @@ void Arranger::readConfiguration(MusECore::Xml& xml) void Arranger::readStatus(MusECore::Xml& xml) { + int rast = -1; for (;;) { MusECore::Xml::Token token(xml.parse()); const QString& tag(xml.s1()); @@ -793,7 +798,9 @@ void Arranger::readStatus(MusECore::Xml& xml) case MusECore::Xml::End: return; case MusECore::Xml::TagStart: - if (tag == "info") + if (tag == "raster") + rast = xml.parseInt(); + else if (tag == "info") showTrackinfoFlag = xml.parseInt(); else if (tag == split->objectName()) split->readStatus(xml); @@ -811,6 +818,8 @@ void Arranger::readStatus(MusECore::Xml& xml) case MusECore::Xml::TagEnd: if (tag == "arranger") { ib->setChecked(showTrackinfoFlag); + if(rast != -1) + setRasterVal(rast); return; } default: @@ -820,15 +829,12 @@ void Arranger::readStatus(MusECore::Xml& xml) } //--------------------------------------------------------- -// setRaster +// rasterChanged //--------------------------------------------------------- -void Arranger::_setRaster(int index) +void Arranger::rasterChanged(int index) { - static int rasterTable[] = { - 1, 0, 768, 384, 192, 96 - }; - _raster = rasterTable[index]; + _raster = gArrangerRasterTable[index]; // Set the audio record part snapping. MusEGlobal::song->setArrangerRaster(_raster); canvas->redraw(); @@ -836,6 +842,30 @@ void Arranger::_setRaster(int index) } //--------------------------------------------------------- +// setRasterVal +//--------------------------------------------------------- + +bool Arranger::setRasterVal(int val) +{ + if(_raster == val) + return true; + int idx = _rasterCombo->findData(val); + if(idx == -1) + { + fprintf(stderr, "Arranger::setRasterVal raster:%d not found\n", val); + return false; + } + _raster = val; + _rasterCombo->blockSignals(true); + _rasterCombo->setCurrentIndex(idx); + _rasterCombo->blockSignals(false); + // Set the audio record part snapping. + MusEGlobal::song->setArrangerRaster(_raster); + canvas->redraw(); + return true; +} + +//--------------------------------------------------------- // reset //--------------------------------------------------------- @@ -1207,28 +1237,18 @@ void Arranger::keyPressEvent(QKeyEvent* event) key+= Qt::CTRL; if (key == shortcuts[SHRT_ZOOM_IN].key) { - int offset = 0; - QPoint cp = canvas->mapFromGlobal(QCursor::pos()); - QPoint sp = editor->mapFromGlobal(QCursor::pos()); - if(cp.x() >= 0 && cp.x() < canvas->width() && sp.y() >= 0 && sp.y() < editor->height()) - offset = cp.x(); - horizontalZoom(true, offset); + horizontalZoom(true, QCursor::pos()); return; } else if (key == shortcuts[SHRT_ZOOM_OUT].key) { - int offset = 0; - QPoint cp = canvas->mapFromGlobal(QCursor::pos()); - QPoint sp = editor->mapFromGlobal(QCursor::pos()); - if(cp.x() >= 0 && cp.x() < canvas->width() && sp.y() >= 0 && sp.y() < editor->height()) - offset = cp.x(); - horizontalZoom(false, offset); + horizontalZoom(false, QCursor::pos()); return; } QWidget::keyPressEvent(event); } -void Arranger::horizontalZoom(bool zoom_in, int pos_offset) +void Arranger::horizontalZoom(bool zoom_in, const QPoint& glob_pos) { int mag = hscroll->mag(); int zoomlvl = ScrollScale::getQuickZoomLevel(mag); @@ -1243,7 +1263,19 @@ void Arranger::horizontalZoom(bool zoom_in, int pos_offset) zoomlvl--; } int newmag = ScrollScale::convertQuickZoomLevelToMag(zoomlvl); - hscroll->setMag(newmag, pos_offset); + + QPoint cp = canvas->mapFromGlobal(glob_pos); + QPoint sp = editor->mapFromGlobal(glob_pos); + if(cp.x() >= 0 && cp.x() < canvas->width() && sp.y() >= 0 && sp.y() < editor->height()) + hscroll->setMag(newmag, cp.x()); +} + +void Arranger::horizontalZoom(int mag, const QPoint& glob_pos) +{ + QPoint cp = canvas->mapFromGlobal(glob_pos); + QPoint sp = editor->mapFromGlobal(glob_pos); + if(cp.x() >= 0 && cp.x() < canvas->width() && sp.y() >= 0 && sp.y() < editor->height()) + hscroll->setMag(hscroll->mag() + mag, cp.x()); } } // namespace MusEGui |