summaryrefslogtreecommitdiff
path: root/muse2/muse/arranger/arranger.cpp
diff options
context:
space:
mode:
authorTim E. Real <termtech@rogers.com>2013-02-20 01:16:45 +0000
committerTim E. Real <termtech@rogers.com>2013-02-20 01:16:45 +0000
commitc3650bf9b2302e1a20853f0cadc7833370e3d0dd (patch)
treefa1a229b0928290a00f974a14104e385d42c5905 /muse2/muse/arranger/arranger.cpp
parent612acc2cd3979edf441d2f33403f6b3403c1cf05 (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.cpp94
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