From 8eca219d579c614a997b8a85ec896cdf8d37cc42 Mon Sep 17 00:00:00 2001 From: Paul Licameli Date: Mon, 24 Jun 2019 22:18:23 -0400 Subject: [PATCH] Separate versions of DoImportMIDI that do and don't assume a project --- src/Menus.h | 3 +++ src/ProjectFileManager.cpp | 2 +- src/ProjectManager.cpp | 2 +- src/menus/FileMenus.cpp | 50 +++++++++++++++++++++++--------------- 4 files changed, 35 insertions(+), 22 deletions(-) diff --git a/src/Menus.h b/src/Menus.h index b8b1faa80..f8dcca3f7 100644 --- a/src/Menus.h +++ b/src/Menus.h @@ -106,6 +106,9 @@ public: /// Namespace for functions for File menu namespace FileActions { +// Import into existing project +bool DoImportMIDI( AudacityProject &project, const FilePath &fileName ); +// Import file, creating a project if the first argument is null AudacityProject *DoImportMIDI( AudacityProject *pProject, const FilePath &fileName ); } diff --git a/src/ProjectFileManager.cpp b/src/ProjectFileManager.cpp index 54050de53..d570ff2c9 100644 --- a/src/ProjectFileManager.cpp +++ b/src/ProjectFileManager.cpp @@ -1303,7 +1303,7 @@ void ProjectFileManager::OpenFile(const FilePath &fileNameArg, bool addtohistory { #ifdef USE_MIDI if (FileNames::IsMidi(fileName)) - FileActions::DoImportMIDI( &project, fileName ); + FileActions::DoImportMIDI( project, fileName ); else #endif Import( fileName ); diff --git a/src/ProjectManager.cpp b/src/ProjectManager.cpp index f3ecf1a59..15eae84da 100644 --- a/src/ProjectManager.cpp +++ b/src/ProjectManager.cpp @@ -326,7 +326,7 @@ public: for (const auto &name : sortednames) { #ifdef USE_MIDI if (FileNames::IsMidi(name)) - FileActions::DoImportMIDI(mProject, name); + FileActions::DoImportMIDI( *mProject, name); else #endif ProjectFileManager::Get( *mProject ).Import(name); diff --git a/src/menus/FileMenus.cpp b/src/menus/FileMenus.cpp index 26c5b54dc..789de0820 100644 --- a/src/menus/FileMenus.cpp +++ b/src/menus/FileMenus.cpp @@ -112,36 +112,46 @@ namespace FileActions { // exported helper functions #ifdef USE_MIDI +// Given an existing project, try to import into it, return true on success +bool DoImportMIDI( AudacityProject &project, const FilePath &fileName ) +{ + auto &tracks = TrackList::Get( project ); + auto newTrack = TrackFactory::Get( project ).NewNoteTrack(); + + if (::ImportMIDI(fileName, newTrack.get())) { + + SelectUtilities::SelectNone( project ); + auto pTrack = tracks.Add( newTrack ); + pTrack->SetSelected(true); + + ProjectHistory::Get( project ) + .PushState( + wxString::Format(_("Imported MIDI from '%s'"), + fileName), + _("Import MIDI") + ); + + ProjectWindow::Get( project ).ZoomAfterImport(pTrack); + FileHistory::Global().AddFileToHistory(fileName); + return true; + } + else + return false; +} + // return null on failure; if success, return the given project, or a NEW // one, if the given was null; create no NEW project if failure AudacityProject *DoImportMIDI( AudacityProject *pProject, const FilePath &fileName) { - auto &tracks = TrackList::Get( *pProject ); - AudacityProject *pNewProject {}; if ( !pProject ) pProject = pNewProject = ProjectManager::New(); auto cleanup = finally( [&] { if ( pNewProject ) GetProjectFrame( *pNewProject ).Close(true); } ); - - auto newTrack = TrackFactory::Get( *pProject ).NewNoteTrack(); - - if (::ImportMIDI(fileName, newTrack.get())) { - - SelectUtilities::SelectNone( *pProject ); - auto pTrack = tracks.Add( newTrack ); - pTrack->SetSelected(true); - - ProjectHistory::Get( *pProject ) - .PushState(wxString::Format(_("Imported MIDI from '%s'"), - fileName), _("Import MIDI")); - - ProjectWindow::Get( *pProject ).ZoomAfterImport(pTrack); + + if ( DoImportMIDI( *pProject, fileName ) ) { pNewProject = nullptr; - - FileHistory::Global().AddFileToHistory(fileName); - return pProject; } else @@ -512,7 +522,7 @@ void OnImportMIDI(const CommandContext &context) &window); // Parent if (!fileName.empty()) - DoImportMIDI(&project, fileName); + DoImportMIDI(project, fileName); } #endif