# HG changeset patch # User Chris Cannam # Date 1385485171 0 # Node ID 5310637392f67c7655995f8bbd8998633b4ce95d # Parent 045360070b66af257ac57c130d1ee0416a6e51c4 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. diff -r 045360070b66 -r 5310637392f6 src/Analyser.cpp --- 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); + } } diff -r 045360070b66 -r 5310637392f6 src/MainWindow.cpp --- 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 #include -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(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(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 diff -r 045360070b66 -r 5310637392f6 src/MainWindow.h --- 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(); diff -r 045360070b66 -r 5310637392f6 src/main.cpp --- 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 #include @@ -39,16 +40,21 @@ #include 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; }