correct msg in fatal error
[ardour.git] / gtk2_ardour / editor_audio_import.cc
index 3cb2d378c219dff0599a0559764f7fda4b1352ac..e5ac8c6c725231b2666186f1742e9020e7d6d0aa 100644 (file)
@@ -52,7 +52,6 @@
 #include "audio_time_axis.h"
 #include "midi_time_axis.h"
 #include "session_import_dialog.h"
-#include "utils.h"
 #include "gui_thread.h"
 #include "interthread_progress_window.h"
 #include "mouse_cursors.h"
@@ -159,7 +158,6 @@ Editor::check_whether_and_how_to_import(string path, bool all_or_nothing)
 {
        string wave_name (Glib::path_get_basename(path));
 
-       SourceMap all_sources = _session->get_sources();
        bool already_exists = false;
        uint32_t existing;
 
@@ -529,8 +527,8 @@ Editor::embed_sndfiles (vector<string> paths, bool multifile,
        SoundFileInfo finfo;
        int ret = 0;
 
-       set_canvas_cursor (_cursors->wait);
-       gdk_flush ();
+        push_canvas_cursor (_cursors->wait);
+        gdk_flush ();
 
        for (vector<string>::iterator p = paths.begin(); p != paths.end(); ++p) {
 
@@ -602,8 +600,6 @@ Editor::embed_sndfiles (vector<string> paths, bool multifile,
                        }
                }
 
-               set_canvas_cursor (_cursors->wait);
-
                for (int n = 0; n < finfo.channels; ++n) {
 
                        try {
@@ -612,7 +608,7 @@ Editor::embed_sndfiles (vector<string> paths, bool multifile,
 
                                boost::shared_ptr<Source> s;
 
-                               if ((s = _session->source_by_path_and_channel (path, n)) == 0) {
+                               if ((s = _session->audio_source_by_path_and_channel (path, n)) == 0) {
 
                                        source = boost::dynamic_pointer_cast<AudioFileSource> (
                                                SourceFactory::createExternal (DataType::AUDIO, *_session,
@@ -633,7 +629,7 @@ Editor::embed_sndfiles (vector<string> paths, bool multifile,
                                goto out;
                        }
 
-                       ARDOUR_UI::instance()->flush_pending ();
+                       gtk_main_iteration();
                }
        }
 
@@ -645,7 +641,7 @@ Editor::embed_sndfiles (vector<string> paths, bool multifile,
        ret = add_sources (paths, sources, pos, disposition, mode, target_regions, target_tracks, track, true);
 
   out:
-       set_canvas_cursor (current_canvas_cursor);
+       pop_canvas_cursor ();
        return ret;
 }
 
@@ -658,7 +654,8 @@ Editor::add_sources (vector<string> paths, SourceList& sources, framepos_t& pos,
        uint32_t input_chan = 0;
        uint32_t output_chan = 0;
        bool use_timestamp;
-       
+       vector<string> track_names;
+
        use_timestamp = (pos == -1);
 
        // kludge (for MIDI we're abusing "channel" for "track" here)
@@ -695,6 +692,11 @@ Editor::add_sources (vector<string> paths, SourceList& sources, framepos_t& pos,
 
                regions.push_back (r);
 
+               /* if we're creating a new track, name it after the cleaned-up
+                * and "merged" region name.
+                */
+
+               track_names.push_back (region_name);
 
        } else if (target_regions == -1 || target_regions > 1) {
 
@@ -725,29 +727,31 @@ Editor::add_sources (vector<string> paths, SourceList& sources, framepos_t& pos,
                                        region_name = (*x)->name();
                                }
                                
-                               switch (sources.size()) {
-                                       /* zero and one channel handled
-                                          by previous if() condition
-                                       */
-                               case 2:
+                               if (sources.size() == 2) {
                                        if (n == 0) {
                                                region_name += "-L";
                                        } else {
                                                region_name += "-R";
                                        }
-                                       break;
-                               default:
-                                       region_name += (char) '-';
-                                       region_name += (char) ('1' + n);
-                                       break;
+                               } else if (sources.size() > 2) {
+                                       region_name += string_compose ("-%1", n+1);
                                }
                                
+                               track_names.push_back (region_name);
+                               
                        } else {
                                if (fs) {
                                        region_name = region_name_from_path (fs->path(), false, false, sources.size(), n);
-                               } else{
+                               } else {
                                        region_name = (*x)->name();
                                }
+
+                               if (SMFSource::safe_midi_file_extension (paths.front())) {
+                                       string track_name = string_compose ("%1-t%2", PBD::basename_nosuffix (fs->path()), (n + 1));
+                                       track_names.push_back (track_name);
+                               } else {
+                                       track_names.push_back (PBD::basename_nosuffix (paths[n]));
+                               }
                        }
 
                        PropertyList plist;
@@ -799,6 +803,12 @@ Editor::add_sources (vector<string> paths, SourceList& sources, framepos_t& pos,
        framepos_t rlen = 0;
 
        begin_reversible_command (Operations::insert_file);
+
+       /* we only use tracks names when importing to new tracks, but we
+        * require that one is defined for every region, just to keep
+        * the API simpler.
+        */
+       assert (regions.size() == track_names.size());
        
        for (vector<boost::shared_ptr<Region> >::iterator r = regions.begin(); r != regions.end(); ++r, ++n) {
                boost::shared_ptr<AudioRegion> ar = boost::dynamic_pointer_cast<AudioRegion> (*r);
@@ -831,9 +841,8 @@ Editor::add_sources (vector<string> paths, SourceList& sources, framepos_t& pos,
                                 pos = get_preferred_edit_position ();
                         }
                 }
-
-
-               finish_bringing_in_material (*r, input_chan, output_chan, pos, mode, track);
+               
+               finish_bringing_in_material (*r, input_chan, output_chan, pos, mode, track, track_names[n]);
 
                rlen = (*r)->length();
 
@@ -860,7 +869,7 @@ Editor::add_sources (vector<string> paths, SourceList& sources, framepos_t& pos,
 
 int
 Editor::finish_bringing_in_material (boost::shared_ptr<Region> region, uint32_t in_chans, uint32_t out_chans, framepos_t& pos,
-                                    ImportMode mode, boost::shared_ptr<Track>& existing_track)
+                                    ImportMode mode, boost::shared_ptr<Track>& existing_track, const string& new_track_name)
 {
        boost::shared_ptr<AudioRegion> ar = boost::dynamic_pointer_cast<AudioRegion>(region);
        boost::shared_ptr<MidiRegion> mr = boost::dynamic_pointer_cast<MidiRegion>(region);
@@ -889,6 +898,9 @@ Editor::finish_bringing_in_material (boost::shared_ptr<Region> region, uint32_t
                boost::shared_ptr<Region> copy (RegionFactory::create (region, region->properties()));
                playlist->clear_changes ();
                playlist->add_region (copy, pos);
+               if (Config->get_edit_mode() == Ripple)
+                       playlist->ripple (pos, copy->length(), copy);
+
                _session->add_command (new StatefulDiffCommand (playlist));
                break;
        }
@@ -917,7 +929,11 @@ Editor::finish_bringing_in_material (boost::shared_ptr<Region> region, uint32_t
                                existing_track = mt.front();
                        }
 
-                       existing_track->set_name (region->name());
+                       if (!new_track_name.empty()) {
+                               existing_track->set_name (new_track_name);
+                       } else {
+                               existing_track->set_name (region->name());
+                       }
                }
 
                boost::shared_ptr<Playlist> playlist = existing_track->playlist();
@@ -962,7 +978,5 @@ void *
 Editor::import_thread ()
 {
        _session->import_files (import_status);
-       pthread_exit_pbd (0);
-       /*NOTREACHED*/
        return 0;
 }