Fix some erroneous resizing of port matrices.
[ardour.git] / gtk2_ardour / editor_audio_import.cc
index 9b36ea69a14c3d2bf95714afa02a3760a1c918ec..2145b24352ba4a48c34fddb48072ab355b96c491 100644 (file)
@@ -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<ustring> paths, ImportDisposition chns, ImportMode mod
        vector<ustring> 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<ustring> 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<ustring>::size_type total = paths.size();
 
                for (vector<ustring>::iterator a = paths.begin(); a != paths.end(); ++a) {
 
@@ -385,7 +388,7 @@ Editor::do_import (vector<ustring> 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<ustring> 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<ustring> 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<ustring> paths, ImportDisposition chns, ImportMode mod
                         }
                 }
        }
-
-       interthread_progress_window->hide_all ();
 }
 
 void
@@ -482,14 +483,8 @@ Editor::do_embed (vector<ustring> paths, ImportDisposition chns, ImportMode mode
 
 int
 Editor::import_sndfiles (vector<ustring> paths, ImportMode mode, SrcQuality quality, nframes64_t& pos,
-                        int target_regions, int target_tracks, boost::shared_ptr<Track>& track, bool replace, uint32_t total)
+                        int target_regions, int target_tracks, boost::shared_ptr<Track>& 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<ustring> 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<ustring> 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<ustring> 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<Glib::ustring> 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> region, uint32_t
                        }
                }
 
-               boost::shared_ptr<Playlist> playlist = existing_track->diskstream()->playlist();
+               boost::shared_ptr<Playlist> playlist = existing_track->playlist();
                boost::shared_ptr<Region> 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> region, uint32_t
                }
 
                boost::shared_ptr<Region> 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> region, uint32_t
                if (!at.empty()) {
                        boost::shared_ptr<Region> 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);
-       }
-}
-