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);