X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Feditor_pt_import.cc;h=2b659e0369d509417f7a6ffe179acaaeb08a79d0;hb=7f280e2bed51cfa56fedeaf08f28b6040c93b5b1;hp=c1ae3a3bb150aeff216ba8d2e8612196fa2973c0;hpb=1d6e8f6681bb1f9ef16904016bf515c23e93efc9;p=ardour.git diff --git a/gtk2_ardour/editor_pt_import.cc b/gtk2_ardour/editor_pt_import.cc index c1ae3a3bb1..2b659e0369 100644 --- a/gtk2_ardour/editor_pt_import.cc +++ b/gtk2_ardour/editor_pt_import.cc @@ -60,7 +60,7 @@ #include "mouse_cursors.h" #include "editor_cursors.h" -#include "i18n.h" +#include "pbd/i18n.h" using namespace std; using namespace ARDOUR; @@ -121,6 +121,7 @@ Editor::do_ptimport (std::string ptpath, vector to_import; string fullpath; bool ok = false; + bool onefailed = false; PTFFormat ptf; framepos_t pos = -1; @@ -128,11 +129,18 @@ Editor::do_ptimport (std::string ptpath, vector ptfregpair; if (ptf.load(ptpath, _session->frame_rate()) == -1) { - MessageDialog msg (_("Doesn't seem to be a valid PT session file (.ptf only currently supported)")); + MessageDialog msg (_("Doesn't seem to be a valid PT session file")); msg.run (); return; - } + } else { + MessageDialog msg (string_compose (_("PT v%1 Session @ %2Hz\n\n%3 audio files\n%4 regions\n%5 active regions\n\nContinue..."), (int)ptf.version, ptf.sessionrate, ptf.audiofiles.size(), ptf.regions.size(), ptf.tracks.size())); + msg.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL); + int result = msg.run (); + if (result != Gtk::RESPONSE_OK) { + return; + } + } current_interthread_info = &import_status; import_status.current = 1; import_status.total = ptf.audiofiles.size (); @@ -158,9 +166,19 @@ Editor::do_ptimport (std::string ptpath, ptfwavpair.push_back(p); imported.push_back(import_status.sources.back()); + } else { + onefailed = true; } } + if (onefailed) { + MessageDialog msg (_("Failed to load one or more of the audio files, but continuing to attempt import.")); + msg.run (); + } else { + MessageDialog msg (_("Success! Import should complete soon.")); + msg.run (); + } + for (vector::iterator a = ptf.regions.begin(); a != ptf.regions.end(); ++a) { for (vector::iterator p = ptfwavpair.begin(); @@ -206,7 +224,7 @@ Editor::do_ptimport (std::string ptpath, for (vector::iterator p = ptfregpair.begin(); p != ptfregpair.end(); ++p) { - if ((p->index1 == a->reg.index)) { + if (p->index1 == a->reg.index) { // Matched a ptf active region to an ardour region utr.index1 = a->index; utr.index2 = nth; @@ -226,12 +244,27 @@ Editor::do_ptimport (std::string ptpath, } else { // Put on a new track DEBUG_TRACE (DEBUG::FileUtils, string_compose ("\twav(%1) reg(%2) new_tr(%3)\n", a->reg.wave.filename.c_str(), a->reg.index, nth)); - list > at (_session->new_audio_track (1, 2, Normal, 0, 1)); + list > at (_session->new_audio_track (1, 2, 0, 1, string(), PresentationInfo::max_order, Normal)); if (at.empty()) { return; } existing_track = at.back(); - existing_track->set_name (a->name); + std::string trackname; + try { + trackname = Glib::convert_with_fallback (a->name, "UTF-8", "UTF-8", "_"); + } catch (Glib::ConvertError& err) { + trackname = string_compose ("Invalid %1", a->index); + } + // TODO legalize track name (no slashes, no colons) +#if 0 // TODO -- "find_route_name" is currently private + /* generate a unique name by adding a number if needed */ + uint32_t id = 0; + if (!_session->find_route_name (trackname.c_str (), id, trackname, false)) { + fatal << _("PTImport: UINT_MAX routes? impossible!") << endmsg; + abort(); /*NOTREACHED*/ + } +#endif + existing_track->set_name (trackname); boost::shared_ptr playlist = existing_track->playlist(); boost::shared_ptr copy (RegionFactory::create (r, true)); playlist->clear_changes ();