changeset 70:5310637392f6

Revert to using three separate tool modes (more like SV). This is less like the proposed design for Tony but better than the previous situation with two incomprehensible toggle buttons.
author Chris Cannam
date Tue, 26 Nov 2013 16:59:31 +0000
parents 045360070b66
children fc3b62262443
files src/Analyser.cpp src/MainWindow.cpp src/MainWindow.h src/main.cpp
diffstat 4 files changed, 103 insertions(+), 26 deletions(-) [+]
line wrap: on
line diff
--- a/src/Analyser.cpp	Tue Nov 26 14:54:22 2013 +0000
+++ b/src/Analyser.cpp	Tue Nov 26 16:59:31 2013 +0000
@@ -170,5 +170,7 @@
 Analyser::setIntelligentActions(bool on) 
 {
     std::cerr << "toggle setIntelligentActions " << on << std::endl;
-    m_flexiNoteLayer->setIntelligentActions(on);
+    if (m_flexiNoteLayer) {
+        m_flexiNoteLayer->setIntelligentActions(on);
+    }
 }
--- a/src/MainWindow.cpp	Tue Nov 26 14:54:22 2013 +0000
+++ b/src/MainWindow.cpp	Tue Nov 26 16:59:31 2013 +0000
@@ -74,9 +74,6 @@
 #include <cstdio>
 #include <errno.h>
 
-using std::cerr;
-using std::endl;
-
 using std::vector;
 
 
@@ -583,6 +580,47 @@
     toolbar->addWidget(m_playSpeed);
     toolbar->addWidget(m_fader);
 
+    toolbar = addToolBar(tr("Tools Toolbar"));
+    
+    CommandHistory::getInstance()->registerToolbar(toolbar);
+
+    m_keyReference->setCategory(tr("Tool Selection"));
+
+    toolbar = addToolBar(tr("Tools Toolbar"));
+    QActionGroup *group = new QActionGroup(this);
+
+    QAction *action = toolbar->addAction(il.load("navigate"),
+                                         tr("Navigate"));
+    action->setCheckable(true);
+    action->setChecked(true);
+    action->setShortcut(tr("1"));
+    action->setStatusTip(tr("Navigate"));
+    connect(action, SIGNAL(triggered()), this, SLOT(toolNavigateSelected()));
+    connect(this, SIGNAL(replacedDocument()), action, SLOT(trigger()));
+    group->addAction(action);
+    m_keyReference->registerShortcut(action);
+
+    action = toolbar->addAction(il.load("move"),
+				tr("Edit"));
+    action->setCheckable(true);
+    action->setShortcut(tr("2"));
+    action->setStatusTip(tr("Edit with Note Intelligence"));
+    connect(action, SIGNAL(triggered()), this, SLOT(toolEditSelected()));
+    connect(this, SIGNAL(canEditLayer(bool)), action, SLOT(setEnabled(bool)));
+    group->addAction(action);
+    m_keyReference->registerShortcut(action);
+
+    action = toolbar->addAction(il.load("notes"),
+				tr("Free Edit"));
+    action->setCheckable(true);
+    action->setShortcut(tr("3"));
+    action->setStatusTip(tr("Free Edit"));
+    connect(action, SIGNAL(triggered()), this, SLOT(toolFreeEditSelected()));
+    group->addAction(action);
+    m_keyReference->registerShortcut(action);
+
+
+    /*
     toolbar = addToolBar(tr("Test actions toolbar")); // GF: temporary toolbar for triggering actions manually
     
     // GF: TEMP : this created a menu item
@@ -601,11 +639,35 @@
     m_toggleIntelligenceAction->setStatusTip(tr("Toggle note edit boundary constraints and automation"));
     m_toggleIntelligenceAction->setEnabled(true);
     connect(m_toggleIntelligenceAction, SIGNAL(triggered()), this, SLOT(toggleNoteEditIntelligence()));
-
+    */
     Pane::registerShortcuts(*m_keyReference);
 }
 
 void
+MainWindow::toolNavigateSelected()
+{
+    m_viewManager->setToolMode(ViewManager::NavigateMode);
+    m_intelligentActionOn = true;
+}
+
+void
+MainWindow::toolEditSelected()
+{
+    m_viewManager->setToolMode(ViewManager::EditMode);
+    m_intelligentActionOn = true;
+    m_analyser->setIntelligentActions(m_intelligentActionOn);
+}
+
+void
+MainWindow::toolFreeEditSelected()
+{
+    m_viewManager->setToolMode(ViewManager::EditMode);
+    m_intelligentActionOn = false;
+    m_analyser->setIntelligentActions(m_intelligentActionOn);
+}
+
+/*
+void
 MainWindow::selectNoteEditMode()   
 {
     IconLoader il;
@@ -613,7 +675,7 @@
         m_viewManager->setToolMode(ViewManager::NavigateMode);
         m_editSelectAction->setIcon(il.load("move"));
     } else {
-        std::cerr << "NoteEdit mode selected" << std::endl;
+        cerr << "NoteEdit mode selected" << endl;
         m_viewManager->setToolMode(ViewManager::NoteEditMode);
         m_editSelectAction->setIcon(il.load("navigate"));
     }
@@ -633,6 +695,7 @@
         m_analyser->setIntelligentActions(true);
     }
 }
+*/
 
 void
 MainWindow::updateMenuStates()
@@ -838,8 +901,8 @@
     QAction *action = qobject_cast<QAction *>(obj);
     
     if (!action) {
-    std::cerr << "WARNING: MainWindow::openRecentFile: sender is not an action"
-          << std::endl;
+    cerr << "WARNING: MainWindow::openRecentFile: sender is not an action"
+          << endl;
     return;
     }
 
@@ -922,7 +985,7 @@
 void
 MainWindow::configureNewPane(Pane *pane)
 {
-    std::cerr << "MainWindow::configureNewPane(" << pane << ")" << std::endl;
+    cerr << "MainWindow::configureNewPane(" << pane << ")" << endl;
 
     if (!pane) {
         pane = m_paneStack->addPane();
@@ -934,16 +997,16 @@
 void
 MainWindow::closeEvent(QCloseEvent *e)
 {
-//    std::cerr << "MainWindow::closeEvent" << std::endl;
+//    cerr << "MainWindow::closeEvent" << endl;
 
     if (m_openingAudioFile) {
-//        std::cerr << "Busy - ignoring close event" << std::endl;
+//        cerr << "Busy - ignoring close event" << endl;
     e->ignore();
     return;
     }
 
     if (!m_abandoning && !checkSaveModified()) {
-//        std::cerr << "Ignoring close event" << std::endl;
+//        cerr << "Ignoring close event" << endl;
     e->ignore();
     return;
     }
@@ -1199,7 +1262,7 @@
     float percent = m_playSpeed->mappedValue();
     float factor = mapper.getFactorForValue(percent);
 
-    std::cerr << "speed = " << position << " percent = " << percent << " factor = " << factor << std::endl;
+    cerr << "speed = " << position << " percent = " << percent << " factor = " << factor << endl;
 
     bool something = (position != 100);
 
@@ -1379,7 +1442,7 @@
     MainWindowBase::modelAdded(model);
     DenseTimeValueModel *dtvm = qobject_cast<DenseTimeValueModel *>(model);
     if (dtvm) {
-        std::cerr << "A dense time-value model (such as an audio file) has been loaded" << std::endl;
+        cerr << "A dense time-value model (such as an audio file) has been loaded" << endl;
     }
 }
 
@@ -1474,7 +1537,7 @@
 void
 MainWindow::rightButtonMenuRequested(Pane *pane, QPoint position)
 {
-//    std::cerr << "MainWindow::rightButtonMenuRequested(" << pane << ", " << position.x() << ", " << position.y() << ")" << std::endl;
+//    cerr << "MainWindow::rightButtonMenuRequested(" << pane << ", " << position.x() << ", " << position.y() << ")" << endl;
     m_paneStack->setCurrentPane(pane);
     m_rightButtonMenu->popup(position);
 }
@@ -1482,7 +1545,7 @@
 void
 MainWindow::handleOSCMessage(const OSCMessage &message)
 {
-    std::cerr << "MainWindow::handleOSCMessage: Not implemented" << std::endl;
+    cerr << "MainWindow::handleOSCMessage: Not implemented" << endl;
 }
 
 void
--- a/src/MainWindow.h	Tue Nov 26 14:54:22 2013 +0000
+++ b/src/MainWindow.h	Tue Nov 26 16:59:31 2013 +0000
@@ -44,6 +44,10 @@
 
     virtual void renameCurrentLayer();
 
+    virtual void toolNavigateSelected();
+    virtual void toolEditSelected();
+    virtual void toolFreeEditSelected();
+
     virtual void paneAdded(Pane *);
     virtual void paneHidden(Pane *);
     virtual void paneAboutToBeDeleted(Pane *);
@@ -98,11 +102,6 @@
     virtual void about();
     virtual void keyReference();
 
-   // GF: function for switching to NoteEditMode (perhaps temporary, as we may want this to be triggered in some other way...)
-   virtual void selectNoteEditMode();
-   virtual void toggleNoteEditIntelligence();
-
-
 protected:
     Analyser      *m_analyser;
 
@@ -126,7 +125,6 @@
     QAction       *m_toggleIntelligenceAction;
     bool           m_intelligentActionOn; // GF: !!! temporary
     
-
     KeyReference  *m_keyReference;
 
     virtual void setupMenus();
--- a/src/main.cpp	Tue Nov 26 14:54:22 2013 +0000
+++ b/src/main.cpp	Tue Nov 26 16:59:31 2013 +0000
@@ -21,6 +21,7 @@
 #include "base/PropertyContainer.h"
 #include "base/Preferences.h"
 #include "widgets/TipDialog.h"
+#include "transform/TransformFactory.h"
 
 #include <QMetaType>
 #include <QApplication>
@@ -39,16 +40,21 @@
 #include <signal.h>
 
 static QMutex cleanupMutex;
+static bool cleanedUp = false;
 
 static void
 signalHandler(int /* signal */)
 {
     // Avoid this happening more than once across threads
 
+    cerr << "signalHandler: cleaning up and exiting" << endl;
     cleanupMutex.lock();
-    std::cerr << "signalHandler: cleaning up and exiting" << std::endl;
-    TempDirectory::getInstance()->cleanup();
-    exit(0); // without releasing mutex
+    if (!cleanedUp) {
+        TempDirectory::getInstance()->cleanup();
+        cleanedUp = true;
+    }
+    cleanupMutex.unlock();
+    exit(0);
 }
 
 class TonyApplication : public QApplication
@@ -241,11 +247,19 @@
     gui->hide();
 
     cleanupMutex.lock();
-    TempDirectory::getInstance()->cleanup();
+
+    if (!cleanedUp) {
+        TransformFactory::deleteInstance();
+        TempDirectory::getInstance()->cleanup();
+        cleanedUp = true;
+    }
+
     application.releaseMainWindow();
 
     delete gui;
 
+    cleanupMutex.unlock();
+
     return rv;
 }