changeset 142:edff2113260c

Add octave up/down editing
author Chris Cannam
date Fri, 10 Jan 2014 15:21:13 +0000
parents 585fe1be1ac0
children b5e46f9bceb8
files .hgsubstate src/MainWindow.cpp src/MainWindow.h
diffstat 3 files changed, 78 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- 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
--- 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);
--- 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();