# HG changeset patch # User Chris Cannam # Date 1389367273 0 # Node ID edff2113260c8c339fc1ff431c193aee262eac0e # Parent 585fe1be1ac04409c11fc534c7af3f9cedeec7fa Add octave up/down editing diff -r 585fe1be1ac0 -r edff2113260c .hgsubstate --- a/.hgsubstate Fri Jan 10 14:43:21 2014 +0000 +++ b/.hgsubstate Fri Jan 10 15:21:13 2014 +0000 @@ -1,5 +1,5 @@ 236814e07bd07473958c1ff89103124536a0c3c8 dataquay 27d4e7152c954bf3c4387319db088fb3cd02436b sv-dependency-builds ccd3c927638be6c68aaa396fce24b6974d073447 svapp -0b15c9328003255e8afff5a1d9276860105a1bc6 svcore +afeb580b1b578ba2e5cb5b12a487a4f2f62d70d8 svcore 137d3ff48f73b9a6bac722491e8628f1721b8f3d svgui diff -r 585fe1be1ac0 -r edff2113260c src/MainWindow.cpp --- 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); diff -r 585fe1be1ac0 -r edff2113260c src/MainWindow.h --- a/src/MainWindow.h Fri Jan 10 14:43:21 2014 +0000 +++ b/src/MainWindow.h Fri Jan 10 15:21:13 2014 +0000 @@ -50,6 +50,9 @@ virtual void toolEditSelected(); virtual void toolFreeEditSelected(); + virtual void octaveShiftUp(); + virtual void octaveShiftDown(); + virtual void cycleWaveform(); virtual void cyclePitch(); virtual void cycleNotes(); @@ -150,6 +153,8 @@ virtual void setupHelpMenu(); virtual void setupToolbars(); + virtual void octaveShift(bool up); + virtual void closeEvent(QCloseEvent *e); bool checkSaveModified();