changeset 211:e79f63161b41

Rework key shortcuts after issue #890: merge the octave up/down and candidate up/down functions and make all Tony pitch-editing functions have Ctrl modifier
author Chris Cannam
date Thu, 06 Mar 2014 14:31:04 +0000
parents 86bc160075c7
children d66256e86f79
files .hgsubstate src/MainWindow.cpp src/MainWindow.h
diffstat 3 files changed, 62 insertions(+), 90 deletions(-) [+]
line wrap: on
line diff
--- a/.hgsubstate	Thu Mar 06 14:28:08 2014 +0000
+++ b/.hgsubstate	Thu Mar 06 14:31:04 2014 +0000
@@ -2,4 +2,4 @@
 27d4e7152c954bf3c4387319db088fb3cd02436b sv-dependency-builds
 f32fbb05d48c30e1e37285c9e1755d83f6d8954a svapp
 0c8218b2d84a172049d966c82c2064f5aa59c503 svcore
-d26545a2a02dee4b8903b3d68aaa422a5042eda5 svgui
+a31c8ee2e17ed0da98d3dcc2a787579f3acb40fe svgui
--- a/src/MainWindow.cpp	Thu Mar 06 14:28:08 2014 +0000
+++ b/src/MainWindow.cpp	Thu Mar 06 14:31:04 2014 +0000
@@ -532,11 +532,14 @@
     m_rightButtonMenu->addAction(action);
 
     action = new QAction(tr("C&lear Selection"), this);
-    action->setShortcut(tr("Esc"));
-    action->setStatusTip(tr("Clear the selection"));
+    action->setShortcuts(QList<QKeySequence>()
+                         << QKeySequence(tr("Esc"))
+                         << QKeySequence(tr("Ctrl+Esc")));
+    action->setStatusTip(tr("Clear the selection and abandon any pending pitch choices in it"));
     connect(action, SIGNAL(triggered()), this, SLOT(abandonSelection()));
     connect(this, SIGNAL(canClearSelection(bool)), action, SLOT(setEnabled(bool)));
     m_keyReference->registerShortcut(action);
+    m_keyReference->registerAlternativeShortcut(action, QKeySequence(tr("Ctrl+Esc")));
     menu->addAction(action);
     m_rightButtonMenu->addAction(action);
 
@@ -544,6 +547,24 @@
     m_rightButtonMenu->addSeparator();
     
     m_keyReference->setCategory(tr("Pitch Track"));
+    
+    action = new QAction(tr("Choose Higher Pitch"), this);
+    action->setShortcut(tr("Ctrl+Up"));
+    action->setStatusTip(tr("Move pitches up an octave, or to the next higher pitch candidate"));
+    m_keyReference->registerShortcut(action);
+    connect(action, SIGNAL(triggered()), this, SLOT(switchPitchUp()));
+    connect(this, SIGNAL(canClearSelection(bool)), action, SLOT(setEnabled(bool)));
+    menu->addAction(action);
+    m_rightButtonMenu->addAction(action);
+    
+    action = new QAction(tr("Choose Lower Pitch"), this);
+    action->setShortcut(tr("Ctrl+Down"));
+    action->setStatusTip(tr("Move pitches down an octave, or to the next lower pitch candidate"));
+    m_keyReference->registerShortcut(action);
+    connect(action, SIGNAL(triggered()), this, SLOT(switchPitchDown()));
+    connect(this, SIGNAL(canClearSelection(bool)), action, SLOT(setEnabled(bool)));
+    menu->addAction(action);
+    m_rightButtonMenu->addAction(action);
 
     m_showCandidatesAction = new QAction(tr("Show Pitch Candidates"), this);
     m_showCandidatesAction->setShortcut(tr("Ctrl+Return"));
@@ -554,51 +575,9 @@
     menu->addAction(m_showCandidatesAction);
     m_rightButtonMenu->addAction(m_showCandidatesAction);
     
-    action = new QAction(tr("Pick Higher Pitch Candidate"), this);
-    action->setShortcut(tr("Ctrl+Up"));
-    action->setStatusTip(tr("Switch to the next higher pitch candidate in the selected region"));
-    m_keyReference->registerShortcut(action);
-    connect(action, SIGNAL(triggered()), this, SLOT(switchPitchUp()));
-    connect(this, SIGNAL(canChangeToHigherCandidate(bool)), action, SLOT(setEnabled(bool)));
-    menu->addAction(action);
-    m_rightButtonMenu->addAction(action);
-    
-    action = new QAction(tr("Pick Lower Pitch Candidate"), this);
-    action->setShortcut(tr("Ctrl+Down"));
-    action->setStatusTip(tr("Switch to the next lower pitch candidate in the selected region"));
-    m_keyReference->registerShortcut(action);
-    connect(action, SIGNAL(triggered()), this, SLOT(switchPitchDown()));
-    connect(this, SIGNAL(canChangeToLowerCandidate(bool)), action, SLOT(setEnabled(bool)));
-    menu->addAction(action);
-    m_rightButtonMenu->addAction(action);
-    
-    menu->addSeparator();
-    m_rightButtonMenu->addSeparator();
-    
-    action = new QAction(tr("Octave Shift Up"), this);
-    action->setShortcut(tr("PgUp"));
-    action->setStatusTip(tr("Move all pitches up an octave in the selected region"));    
-    m_keyReference->registerShortcut(action);
-    connect(action, SIGNAL(triggered()), this, SLOT(octaveShiftUp()));
-    connect(this, SIGNAL(canClearSelection(bool)), action, SLOT(setEnabled(bool)));
-    menu->addAction(action);
-    m_rightButtonMenu->addAction(action);
-
-    action = new QAction(tr("Octave Shift Down"), this);
-    action->setShortcut(tr("PgDown"));
-    action->setStatusTip(tr("Move all pitches down an octave in the selected region"));    
-    m_keyReference->registerShortcut(action);
-    connect(action, SIGNAL(triggered()), this, SLOT(octaveShiftDown()));
-    connect(this, SIGNAL(canClearSelection(bool)), action, SLOT(setEnabled(bool)));
-    menu->addAction(action);
-    m_rightButtonMenu->addAction(action);
-
-    menu->addSeparator();
-    m_rightButtonMenu->addSeparator();
-    
     action = new QAction(tr("Remove Pitches"), this);
     action->setShortcut(tr("Ctrl+Backspace"));
-    action->setStatusTip(tr("Remove all pitch estimates within the selected region (converting it to unvoiced)"));
+    action->setStatusTip(tr("Remove all pitch estimates within the selected region, making it unvoiced"));
     m_keyReference->registerShortcut(action);
     connect(action, SIGNAL(triggered()), this, SLOT(clearPitches()));
     connect(this, SIGNAL(canClearSelection(bool)), action, SLOT(setEnabled(bool)));
@@ -1071,10 +1050,6 @@
     emit canSpeedUpPlayback(v < m_playSpeed->maximum());
     emit canSlowDownPlayback(v > m_playSpeed->minimum());
 
-    emit canChangePitchCandidate(pitchCandidatesVisible && haveSelection);
-    emit canChangeToHigherCandidate(pitchCandidatesVisible && haveSelection && haveHigher);
-    emit canChangeToLowerCandidate(pitchCandidatesVisible && haveSelection && haveLower);
-
     if (pitchCandidatesVisible) {
         m_showCandidatesAction->setText(tr("Hide Pitch Candidates"));
         m_showCandidatesAction->setStatusTip(tr("Remove the display of alternate pitch candidates for the selected region"));
@@ -1885,23 +1860,12 @@
 }
 
 void
-MainWindow::octaveShiftUp()
-{
-    octaveShift(true);
-}
-
-void
-MainWindow::octaveShiftDown()
-{
-    octaveShift(false);
-}
-
-void
 MainWindow::octaveShift(bool up)
 {
     MultiSelection::SelectionList selections = m_viewManager->getSelections();
 
-    CommandHistory::getInstance()->startCompoundOperation(tr("Octave Shift"), true);
+    CommandHistory::getInstance()->startCompoundOperation
+        (up ? tr("Choose Higher Octave") : tr("Choose Lower Octave"), true);
 
     for (MultiSelection::SelectionList::iterator k = selections.begin();
          k != selections.end(); ++k) {
@@ -1927,33 +1891,48 @@
 void
 MainWindow::switchPitchUp()
 {
-    CommandHistory::getInstance()->startCompoundOperation
-        (tr("Switch Pitch Candidate"), true);
-
-    MultiSelection::SelectionList selections = m_viewManager->getSelections();
-
-    for (MultiSelection::SelectionList::iterator k = selections.begin();
-         k != selections.end(); ++k) {
-        m_analyser->switchPitchCandidate(*k, true);
+    if (m_analyser->arePitchCandidatesShown()) {
+        if (m_analyser->haveHigherPitchCandidate()) {
+
+            CommandHistory::getInstance()->startCompoundOperation
+                (tr("Choose Higher Pitch Candidate"), true);
+
+            MultiSelection::SelectionList selections = m_viewManager->getSelections();
+
+            for (MultiSelection::SelectionList::iterator k = selections.begin();
+                 k != selections.end(); ++k) {
+                m_analyser->switchPitchCandidate(*k, true);
+            }
+
+            CommandHistory::getInstance()->endCompoundOperation();
+
+        }
+    } else {
+        octaveShift(true);
     }
-
-    CommandHistory::getInstance()->endCompoundOperation();
 }
 
 void
 MainWindow::switchPitchDown()
 {
-    CommandHistory::getInstance()->startCompoundOperation
-        (tr("Switch Pitch Candidate"), true);
-
-    MultiSelection::SelectionList selections = m_viewManager->getSelections();
-
-    for (MultiSelection::SelectionList::iterator k = selections.begin();
-         k != selections.end(); ++k) {
-        m_analyser->switchPitchCandidate(*k, false);
+    if (m_analyser->arePitchCandidatesShown()) {
+        if (m_analyser->haveLowerPitchCandidate()) {
+
+            CommandHistory::getInstance()->startCompoundOperation
+                (tr("Choose Lower Pitch Candidate"), true);
+
+            MultiSelection::SelectionList selections = m_viewManager->getSelections();
+            
+            for (MultiSelection::SelectionList::iterator k = selections.begin();
+                 k != selections.end(); ++k) {
+                m_analyser->switchPitchCandidate(*k, false);
+            }
+
+            CommandHistory::getInstance()->endCompoundOperation();
+        }
+    } else {
+        octaveShift(false);
     }
-
-    CommandHistory::getInstance()->endCompoundOperation();
 }
 
 void
--- a/src/MainWindow.h	Thu Mar 06 14:28:08 2014 +0000
+++ b/src/MainWindow.h	Thu Mar 06 14:31:04 2014 +0000
@@ -30,11 +30,6 @@
                bool withOSCSupport = true);
     virtual ~MainWindow();
 
-signals:
-    virtual void canChangePitchCandidate(bool);
-    virtual void canChangeToHigherCandidate(bool);
-    virtual void canChangeToLowerCandidate(bool);
-
 public slots:
     virtual bool commitData(bool mayAskUser); // on session shutdown
 
@@ -55,8 +50,6 @@
     virtual void toolFreeEditSelected();
 
     virtual void clearPitches();
-    virtual void octaveShiftUp();
-    virtual void octaveShiftDown();
     virtual void togglePitchCandidates();
     virtual void switchPitchUp();
     virtual void switchPitchDown();