/* * Copyright (C) 2015-2019 Damien Zammit * Copyright (C) 2016-2017 Paul Davis * Copyright (C) 2016-2018 Robin Gareus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include #include #include #include "pbd/pthread_utils.h" #include "pbd/basename.h" #include "pbd/shortpath.h" #include "pbd/stateful_diff_command.h" #include "ardour/audio_track.h" #include "ardour/audiofilesource.h" #include "ardour/audioregion.h" #include "ardour/midi_region.h" #include "ardour/midi_track.h" #include "ardour/midi_model.h" #include "ardour/operations.h" #include "ardour/region_factory.h" #include "ardour/smf_source.h" #include "ardour/source_factory.h" #include "ardour/utils.h" #include "ardour/playlist.h" #include "ardour/session.h" #include "pbd/memento_command.h" #include "ptformat/ptformat.h" #include "ardour_ui.h" #include "cursor_context.h" #include "editor.h" #include "sfdb_ui.h" #include "editing.h" #include "audio_time_axis.h" #include "midi_time_axis.h" #include "session_import_dialog.h" #include "gui_thread.h" #include "interthread_progress_window.h" #include "mouse_cursors.h" #include "editor_cursors.h" #include "pt_import_selector.h" #include "pbd/i18n.h" using namespace std; using namespace ARDOUR; using namespace PBD; using namespace Gtk; using namespace Gtkmm2ext; using namespace Editing; using std::string; /* Editor dialogs supporting the incorporation of PT sessions into ardour */ void Editor::external_pt_dialog () { if (_session == 0) { MessageDialog msg (_("You can't import a PT session until you have a session loaded.")); msg.run (); return; } PTImportSelector dialog (import_ptf); dialog.set_session (_session); if (dialog.run () != Gtk::RESPONSE_ACCEPT) { return; } import_pt_status.all_done = false; import_pt_status.clear(); ImportProgressWindow ipw (&import_pt_status, _("PT Import"), _("Cancel Import")); pthread_create_and_store ("import_pt", &import_pt_status.thread, _import_pt_thread, this); pthread_detach (import_pt_status.thread); ipw.show(); while (!import_pt_status.all_done && !import_pt_status.cancel) { gtk_main_iteration (); } // wait for thread to terminate while (!import_pt_status.done && !import_pt_status.cancel) { gtk_main_iteration (); } if (import_pt_status.cancel) { MessageDialog msg (_("PT import cancelled")); msg.run (); } else { import_pt_status.progress = 1.0; _session->import_pt_rest (import_ptf); MessageDialog msg (_("PT import completed!\nSee log for specifics")); msg.run (); } } void * Editor::_import_pt_thread (void *arg) { SessionEvent::create_per_thread_pool ("import pt events", 64); Editor *ed = (Editor *) arg; return ed->import_pt_thread (); } void * Editor::import_pt_thread () { _session->import_pt_sources (import_ptf, import_pt_status); return 0; }