X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Feditor_audio_import.cc;h=2145b24352ba4a48c34fddb48072ab355b96c491;hb=a4664d68c031c77c5e436fe97a92005b7d2019d8;hp=9b36ea69a14c3d2bf95714afa02a3760a1c918ec;hpb=df5081c4c0f867ee38bbd1c909f49a7a9487326e;p=ardour.git diff --git a/gtk2_ardour/editor_audio_import.cc b/gtk2_ardour/editor_audio_import.cc index 9b36ea69a1..2145b24352 100644 --- a/gtk2_ardour/editor_audio_import.cc +++ b/gtk2_ardour/editor_audio_import.cc @@ -47,6 +47,7 @@ #include "ardour/region_factory.h" #include "ardour/source_factory.h" #include "ardour/session.h" +#include "ardour/smf_source.h" #include "pbd/memento_command.h" #include "ardour_ui.h" @@ -58,6 +59,7 @@ #include "session_import_dialog.h" #include "utils.h" #include "gui_thread.h" +#include "interthread_progress_window.h" #include "i18n.h" @@ -326,9 +328,11 @@ Editor::do_import (vector paths, ImportDisposition chns, ImportMode mod vector to_import; int nth = 0; - if (interthread_progress_window == 0) { - build_interthread_progress_window (); - } + current_interthread_info = &import_status; + import_status.current = 1; + import_status.total = paths.size (); + + ImportProgressWindow ipw (&import_status, _("Import"), _("Cancel Import")); if (chns == Editing::ImportMergeFiles) { @@ -346,14 +350,13 @@ Editor::do_import (vector paths, ImportDisposition chns, ImportMode mod } if (!cancel) { - import_sndfiles (paths, mode, quality, pos, 1, 1, track, false, paths.size()); + import_sndfiles (paths, mode, quality, pos, 1, 1, track, false); } } else { bool replace = false; bool ok = true; - vector::size_type total = paths.size(); for (vector::iterator a = paths.begin(); a != paths.end(); ++a) { @@ -385,7 +388,7 @@ Editor::do_import (vector paths, ImportDisposition chns, ImportMode mod track = get_nth_selected_audio_track (nth++); } - ok = (import_sndfiles (to_import, mode, quality, pos, 1, -1, track, replace, total) == 0); + ok = (import_sndfiles (to_import, mode, quality, pos, 1, -1, track, replace) == 0); break; case Editing::ImportDistinctChannels: @@ -393,7 +396,7 @@ Editor::do_import (vector paths, ImportDisposition chns, ImportMode mod to_import.clear (); to_import.push_back (*a); - ok = (import_sndfiles (to_import, mode, quality, pos, -1, -1, track, replace, total) == 0); + ok = (import_sndfiles (to_import, mode, quality, pos, -1, -1, track, replace) == 0); break; case Editing::ImportSerializeFiles: @@ -401,7 +404,7 @@ Editor::do_import (vector paths, ImportDisposition chns, ImportMode mod to_import.clear (); to_import.push_back (*a); - ok = (import_sndfiles (to_import, mode, quality, pos, 1, 1, track, replace, total) == 0); + ok = (import_sndfiles (to_import, mode, quality, pos, 1, 1, track, replace) == 0); break; case Editing::ImportMergeFiles: @@ -410,8 +413,6 @@ Editor::do_import (vector paths, ImportDisposition chns, ImportMode mod } } } - - interthread_progress_window->hide_all (); } void @@ -482,14 +483,8 @@ Editor::do_embed (vector paths, ImportDisposition chns, ImportMode mode int Editor::import_sndfiles (vector paths, ImportMode mode, SrcQuality quality, nframes64_t& pos, - int target_regions, int target_tracks, boost::shared_ptr& track, bool replace, uint32_t total) + int target_regions, int target_tracks, boost::shared_ptr& track, bool replace) { - interthread_progress_window->set_title (string_compose (_("Importing %1"), paths.front())); - interthread_progress_window->set_position (Gtk::WIN_POS_MOUSE); - interthread_progress_bar.set_fraction (0.0f); - interthread_cancel_label.set_text (_("Cancel Import")); - current_interthread_info = &import_status; - import_status.paths = paths; import_status.done = false; import_status.cancel = false; @@ -497,7 +492,6 @@ Editor::import_sndfiles (vector paths, ImportMode mode, SrcQuality qual import_status.done = 0.0; import_status.quality = quality; import_status.replace_existing_source = replace; - import_status.total = total; import_status.mode = mode; import_status.pos = pos; @@ -505,8 +499,6 @@ Editor::import_sndfiles (vector paths, ImportMode mode, SrcQuality qual import_status.target_regions = target_regions; import_status.track = track; import_status.replace = replace; - interthread_progress_connection = Glib::signal_timeout().connect - (sigc::bind (sigc::mem_fun(*this, &Editor::import_progress_timeout), (gpointer) 0), 500); track_canvas->get_window()->set_cursor (Gdk::Cursor (Gdk::WATCH)); gdk_flush (); @@ -523,9 +515,7 @@ Editor::import_sndfiles (vector paths, ImportMode mode, SrcQuality qual gtk_main_iteration (); } - interthread_progress_window->hide (); import_status.done = true; - interthread_progress_connection.disconnect (); if (!import_status.cancel && !import_status.sources.empty()) { if (add_sources (import_status.paths, @@ -732,13 +722,14 @@ Editor::add_sources (vector paths, SourceList& sources, nframes64 if (sources[0]->natural_position() != 0) { pos = sources[0]->natural_position(); } else { - pos = get_preferred_edit_position (); + pos = _session->current_start_frame(); } } // kludge (for MIDI we're abusing "channel" for "track" here) - if (paths.front().rfind(".mid") != Glib::ustring::npos) + if (SMFSource::safe_midi_file_extension (paths.front())) { target_regions = -1; + } if (target_regions == 1) { @@ -863,7 +854,7 @@ Editor::finish_bringing_in_material (boost::shared_ptr region, uint32_t } } - boost::shared_ptr playlist = existing_track->diskstream()->playlist(); + boost::shared_ptr playlist = existing_track->playlist(); boost::shared_ptr copy (RegionFactory::create (region, region->properties())); begin_reversible_command (_("insert file")); playlist->clear_history (); @@ -898,7 +889,7 @@ Editor::finish_bringing_in_material (boost::shared_ptr region, uint32_t } boost::shared_ptr copy (RegionFactory::create (region)); - existing_track->diskstream()->playlist()->add_region (copy, pos); + existing_track->playlist()->add_region (copy, pos); break; } @@ -912,7 +903,7 @@ Editor::finish_bringing_in_material (boost::shared_ptr region, uint32_t if (!at.empty()) { boost::shared_ptr copy (RegionFactory::create (region)); at.front()->set_name (basename_nosuffix (copy->name())); - at.front()->diskstream()->playlist()->add_region (copy, pos); + at.front()->playlist()->add_region (copy, pos); } break; } @@ -938,43 +929,3 @@ Editor::import_thread () /*NOTREACHED*/ return 0; } - -gint -Editor::import_progress_timeout (void */*arg*/) -{ - bool reset = false; - - if (!interthread_progress_window->is_visible()) { - interthread_progress_window->show_all (); - reset = true; - } - - interthread_progress_label.set_text (import_status.doing_what); - - if (import_status.freeze) { - interthread_cancel_button.set_sensitive(false); - } else { - interthread_cancel_button.set_sensitive(true); - } - - if (import_status.doing_what == "building peak files") { - interthread_progress_bar.pulse (); - return FALSE; - } else { - float val = import_status.progress; - interthread_progress_bar.set_fraction (min (max (0.0f, val), 1.0f)); - } - - if (reset) { - - /* the window is now visible, speed up the updates */ - - interthread_progress_connection.disconnect (); - interthread_progress_connection = Glib::signal_timeout().connect - (sigc::bind (sigc::mem_fun(*this, &Editor::import_progress_timeout), (gpointer) 0), 100); - return false; - } else { - return !(import_status.done || import_status.cancel); - } -} -