Mercurial > hg > tony
diff src/MainWindow.cpp @ 142:edff2113260c
Add octave up/down editing
author | Chris Cannam |
---|---|
date | Fri, 10 Jan 2014 15:21:13 +0000 |
parents | e7f2da26c9ac |
children | b5e46f9bceb8 |
line wrap: on
line diff
--- a/src/MainWindow.cpp Fri Jan 10 14:43:21 2014 +0000 +++ b/src/MainWindow.cpp Fri Jan 10 15:21:13 2014 +0000 @@ -390,6 +390,21 @@ group->addAction(action); m_keyReference->registerShortcut(action); */ + + menu->addSeparator(); + + //!!! shortcuts, status tip etc + action = new QAction(tr("Octave Shift Up"), this); + action->setShortcut(tr("PgUp")); + connect(action, SIGNAL(triggered()), this, SLOT(octaveShiftUp())); + connect(this, SIGNAL(canClearSelection(bool)), action, SLOT(setEnabled(bool))); + menu->addAction(action); + + action = new QAction(tr("Octave Shift Down"), this); + action->setShortcut(tr("PgDown")); + connect(action, SIGNAL(triggered()), this, SLOT(octaveShiftDown())); + connect(this, SIGNAL(canClearSelection(bool)), action, SLOT(setEnabled(bool))); + menu->addAction(action); } void @@ -555,7 +570,6 @@ QAction *m_rwdAction = toolbar->addAction(il.load("rewind"), tr("Rewind")); - m_rwdAction->setShortcut(tr("PgUp")); m_rwdAction->setStatusTip(tr("Rewind to the previous time instant or time ruler notch")); connect(m_rwdAction, SIGNAL(triggered()), this, SLOT(rewind())); connect(this, SIGNAL(canRewind(bool)), m_rwdAction, SLOT(setEnabled(bool))); @@ -572,7 +586,6 @@ m_ffwdAction = toolbar->addAction(il.load("ffwd"), tr("Fast Forward")); - m_ffwdAction->setShortcut(tr("PgDown")); m_ffwdAction->setStatusTip(tr("Fast-forward to the next time instant or time ruler notch")); connect(m_ffwdAction, SIGNAL(triggered()), this, SLOT(ffwd())); connect(this, SIGNAL(canFfwd(bool)), m_ffwdAction, SLOT(setEnabled(bool))); @@ -1382,6 +1395,63 @@ } void +MainWindow::octaveShiftUp() +{ + octaveShift(true); +} + +void +MainWindow::octaveShiftDown() +{ + octaveShift(false); +} + +void +MainWindow::octaveShift(bool up) +{ + float factor = (up ? 2.f : 0.5f); + + MultiSelection::SelectionList selections = m_viewManager->getSelections(); + + CommandHistory::getInstance()->startCompoundOperation(tr("Octave Shift"), true); + + for (int i = 0; i < m_paneStack->getPaneCount(); ++i) { + + Pane *pane = m_paneStack->getPane(i); + if (!pane) continue; + + for (int j = 0; j < pane->getLayerCount(); ++j) { + + Layer *layer = pane->getLayer(j); + if (!layer) continue; + + for (MultiSelection::SelectionList::iterator k = selections.begin(); + k != selections.end(); ++k) { + + Clipboard clip; + layer->copy(pane, *k, clip); + layer->deleteSelection(*k); + + Clipboard shifted; + foreach (Clipboard::Point p, clip.getPoints()) { + if (p.haveValue()) { + Clipboard::Point sp = + p.withValue(p.getValue() * factor); + shifted.addPoint(sp); + } else { + shifted.addPoint(p); + } + } + + layer->paste(pane, shifted, 0, false); + } + } + } + + CommandHistory::getInstance()->endCompoundOperation(); +} + +void MainWindow::playSpeedChanged(int position) { PlaySpeedRangeMapper mapper(0, 200);