update windows installer finish page text & link
[ardour.git] / gtk2_ardour / editor_audio_import.cc
index 313624d21b85071758fdd405b1479b7c5a3315ec..6be0a7813618c002476a418775c831ee8b2dc45d 100644 (file)
@@ -46,6 +46,7 @@
 #include "pbd/memento_command.h"
 
 #include "ardour_ui.h"
+#include "cursor_context.h"
 #include "editor.h"
 #include "sfdb_ui.h"
 #include "editing.h"
@@ -135,7 +136,6 @@ void
 Editor::session_import_dialog ()
 {
        SessionImportDialog dialog (_session);
-       ensure_float (dialog);
        dialog.run ();
 }
 
@@ -262,7 +262,12 @@ Editor::get_nth_selected_midi_track (int nth) const
 }
 
 void
-Editor::do_import (vector<string> paths, ImportDisposition disposition, ImportMode mode, SrcQuality quality, framepos_t& pos)
+Editor::do_import (vector<string>        paths,
+                   ImportDisposition     disposition,
+                   ImportMode            mode,
+                   SrcQuality            quality,
+                   framepos_t&           pos,
+                   ARDOUR::PluginInfoPtr instrument)
 {
        boost::shared_ptr<Track> track;
        vector<string> to_import;
@@ -297,7 +302,7 @@ Editor::do_import (vector<string> paths, ImportDisposition disposition, ImportMo
                        ok = false;
                } else {
                        ipw.show ();
-                       ok = (import_sndfiles (paths, disposition, mode, quality, pos, 1, 1, track, false) == 0);
+                       ok = (import_sndfiles (paths, disposition, mode, quality, pos, 1, 1, track, false, instrument) == 0);
                }
 
        } else {
@@ -314,14 +319,14 @@ Editor::do_import (vector<string> paths, ImportDisposition disposition, ImportMo
                                continue;
                        case 0:
                                fatal << "Updating existing sources should be disabled!" << endmsg;
-                               /* NOTREACHED*/
+                               abort(); /* NOTREACHED*/
                                break;
                        case 1:
                                replace = false;
                                break;
                        default:
                                fatal << "Illegal return " << check <<  " from check_whether_and_how_to_import()!" << endmsg;
-                               /* NOTREACHED*/
+                               abort(); /* NOTREACHED*/
                        }
 
                        /* have to reset this for every file we handle */
@@ -342,7 +347,7 @@ Editor::do_import (vector<string> paths, ImportDisposition disposition, ImportMo
                                        track = get_nth_selected_audio_track (nth++);
                                }
 
-                               ok = (import_sndfiles (to_import, disposition, mode, quality, pos, 1, -1, track, replace) == 0);
+                               ok = (import_sndfiles (to_import, disposition, mode, quality, pos, 1, -1, track, replace, instrument) == 0);
                                break;
 
                        case Editing::ImportDistinctChannels:
@@ -350,7 +355,7 @@ Editor::do_import (vector<string> paths, ImportDisposition disposition, ImportMo
                                to_import.clear ();
                                to_import.push_back (*a);
 
-                               ok = (import_sndfiles (to_import, disposition, mode, quality, pos, -1, -1, track, replace) == 0);
+                               ok = (import_sndfiles (to_import, disposition, mode, quality, pos, -1, -1, track, replace, instrument) == 0);
                                break;
 
                        case Editing::ImportSerializeFiles:
@@ -358,7 +363,7 @@ Editor::do_import (vector<string> paths, ImportDisposition disposition, ImportMo
                                to_import.clear ();
                                to_import.push_back (*a);
 
-                               ok = (import_sndfiles (to_import, disposition, mode, quality, pos, 1, 1, track, replace) == 0);
+                               ok = (import_sndfiles (to_import, disposition, mode, quality, pos, 1, 1, track, replace, instrument) == 0);
                                break;
 
                        case Editing::ImportMergeFiles:
@@ -376,7 +381,7 @@ Editor::do_import (vector<string> paths, ImportDisposition disposition, ImportMo
 }
 
 void
-Editor::do_embed (vector<string> paths, ImportDisposition import_as, ImportMode mode, framepos_t& pos)
+Editor::do_embed (vector<string> paths, ImportDisposition import_as, ImportMode mode, framepos_t& pos, ARDOUR::PluginInfoPtr instrument)
 {
        boost::shared_ptr<Track> track;
        bool check_sample_rate = true;
@@ -402,7 +407,7 @@ Editor::do_embed (vector<string> paths, ImportDisposition import_as, ImportMode
                                track = get_nth_selected_audio_track (nth++);
                        }
 
-                       if (embed_sndfiles (to_embed, multi, check_sample_rate, import_as, mode, pos, 1, -1, track) < -1) {
+                       if (embed_sndfiles (to_embed, multi, check_sample_rate, import_as, mode, pos, 1, -1, track, instrument) < -1) {
                                goto out;
                        }
                }
@@ -419,14 +424,14 @@ Editor::do_embed (vector<string> paths, ImportDisposition import_as, ImportMode
                        to_embed.clear ();
                        to_embed.push_back (*a);
 
-                       if (embed_sndfiles (to_embed, multi, check_sample_rate, import_as, mode, pos, -1, -1, track) < -1) {
+                       if (embed_sndfiles (to_embed, multi, check_sample_rate, import_as, mode, pos, -1, -1, track, instrument) < -1) {
                                goto out;
                        }
                }
                break;
 
        case Editing::ImportMergeFiles:
-               if (embed_sndfiles (paths, multi, check_sample_rate, import_as, mode, pos, 1, 1, track) < -1) {
+               if (embed_sndfiles (paths, multi, check_sample_rate, import_as, mode, pos, 1, 1, track, instrument) < -1) {
                        goto out;
                }
                break;
@@ -442,7 +447,7 @@ Editor::do_embed (vector<string> paths, ImportDisposition import_as, ImportMode
                        to_embed.clear ();
                        to_embed.push_back (*a);
 
-                       if (embed_sndfiles (to_embed, multi, check_sample_rate, import_as, mode, pos, 1, 1, track) < -1) {
+                       if (embed_sndfiles (to_embed, multi, check_sample_rate, import_as, mode, pos, 1, 1, track, instrument) < -1) {
                                goto out;
                        }
                }
@@ -458,8 +463,16 @@ Editor::do_embed (vector<string> paths, ImportDisposition import_as, ImportMode
 }
 
 int
-Editor::import_sndfiles (vector<string> paths, ImportDisposition disposition, ImportMode mode, SrcQuality quality, framepos_t& pos,
-                        int target_regions, int target_tracks, boost::shared_ptr<Track>& track, bool replace)
+Editor::import_sndfiles (vector<string>            paths,
+                         ImportDisposition         disposition,
+                         ImportMode                mode,
+                         SrcQuality                quality,
+                         framepos_t&               pos,
+                         int                       target_regions,
+                         int                       target_tracks,
+                         boost::shared_ptr<Track>& track,
+                         bool                      replace,
+                         ARDOUR::PluginInfoPtr     instrument)
 {
        import_status.paths = paths;
        import_status.done = false;
@@ -475,7 +488,7 @@ Editor::import_sndfiles (vector<string> paths, ImportDisposition disposition, Im
        import_status.track = track;
        import_status.replace = replace;
 
-       set_canvas_cursor (_cursors->wait);
+       CursorContext::Handle cursor_ctx = CursorContext::create(*this, _cursors->wait);
        gdk_flush ();
 
        /* start import thread for this spec. this will ultimately call Session::import_files()
@@ -503,7 +516,7 @@ Editor::import_sndfiles (vector<string> paths, ImportDisposition disposition, Im
                        import_status.mode,
                        import_status.target_regions,
                        import_status.target_tracks,
-                       track, false
+                       track, false, instrument
                        );
 
                /* update position from results */
@@ -511,23 +524,28 @@ Editor::import_sndfiles (vector<string> paths, ImportDisposition disposition, Im
                pos = import_status.pos;
        }
 
-       set_canvas_cursor (current_canvas_cursor);
+       import_status.sources.clear();
        return result;
 }
 
 int
-Editor::embed_sndfiles (vector<string> paths, bool multifile,
-                       bool& check_sample_rate, ImportDisposition disposition, ImportMode mode, 
-                       framepos_t& pos, int target_regions, int target_tracks,
-                       boost::shared_ptr<Track>& track)
+Editor::embed_sndfiles (vector<string>            paths,
+                        bool                      multifile,
+                        bool&                     check_sample_rate,
+                        ImportDisposition         disposition,
+                        ImportMode                mode,
+                        framepos_t&               pos,
+                        int                       target_regions,
+                        int                       target_tracks,
+                        boost::shared_ptr<Track>& track,
+                        ARDOUR::PluginInfoPtr     instrument)
 {
        boost::shared_ptr<AudioFileSource> source;
        SourceList sources;
        string linked_path;
        SoundFileInfo finfo;
-       int ret = 0;
 
-        push_canvas_cursor (_cursors->wait);
+       CursorContext::Handle cursor_ctx = CursorContext::create(*this, _cursors->wait);
         gdk_flush ();
 
        for (vector<string>::iterator p = paths.begin(); p != paths.end(); ++p) {
@@ -539,7 +557,7 @@ Editor::embed_sndfiles (vector<string> paths, bool multifile,
 
                if (!AudioFileSource::get_soundfile_info (path, finfo, error_msg)) {
                        error << string_compose(_("Editor: cannot open file \"%1\", (%2)"), path, error_msg ) << endmsg;
-                       goto out;
+                       return -3;
                }
 
                if (check_sample_rate  && (finfo.samplerate != (int) _session->frame_rate())) {
@@ -561,19 +579,16 @@ Editor::embed_sndfiles (vector<string> paths, bool multifile,
 
                                switch (resx) {
                                case 0: /* stop a multi-file import */
-                                       ret = -2;
-                                       goto out;
+                                       return -2;
                                case 1: /* don't embed this one */
-                                       ret = -1;
-                                       goto out;
+                                       return -1;
                                case 2: /* do it, and the rest without asking */
                                        check_sample_rate = false;
                                        break;
                                case 3: /* do it */
                                        break;
                                default:
-                                       ret = -2;
-                                       goto out;
+                                       return -2;
                                }
                        } else {
                                choices.push_back (_("Cancel"));
@@ -589,13 +604,11 @@ Editor::embed_sndfiles (vector<string> paths, bool multifile,
 
                                switch (resx) {
                                case 0: /* don't import */
-                                       ret = -1;
-                                       goto out;
+                                       return -1;
                                case 1: /* do it */
                                        break;
                                default:
-                                       ret = -2;
-                                       goto out;
+                                       return -2;
                                }
                        }
                }
@@ -626,28 +639,31 @@ Editor::embed_sndfiles (vector<string> paths, bool multifile,
 
                        catch (failed_constructor& err) {
                                error << string_compose(_("could not open %1"), path) << endmsg;
-                               goto out;
+                               return -3;
                        }
 
                        gtk_main_iteration();
                }
        }
 
-       if (sources.empty()) {
-               goto out;
+       if (!sources.empty()) {
+               return add_sources (paths, sources, pos, disposition, mode, target_regions, target_tracks, track, true, instrument);
        }
 
-
-       ret = add_sources (paths, sources, pos, disposition, mode, target_regions, target_tracks, track, true);
-
-  out:
-       pop_canvas_cursor ();
-       return ret;
+       return 0;
 }
 
 int
-Editor::add_sources (vector<string> paths, SourceList& sources, framepos_t& pos, ImportDisposition disposition, ImportMode mode,
-                    int target_regions, int target_tracks, boost::shared_ptr<Track>& track, bool /*add_channel_suffix*/)
+Editor::add_sources (vector<string>            paths,
+                     SourceList&               sources,
+                     framepos_t&               pos,
+                     ImportDisposition         disposition,
+                     ImportMode                mode,
+                     int                       target_regions,
+                     int                       target_tracks,
+                     boost::shared_ptr<Track>& track,
+                     bool                      /*add_channel_suffix*/,
+                     ARDOUR::PluginInfoPtr     instrument)
 {
        vector<boost::shared_ptr<Region> > regions;
        string region_name;
@@ -747,7 +763,7 @@ Editor::add_sources (vector<string> paths, SourceList& sources, framepos_t& pos,
                                }
 
                                if (SMFSource::safe_midi_file_extension (paths.front())) {
-                                       string track_name = string_compose ("%1-c%2", PBD::basename_nosuffix (fs->path()), (n + 1));
+                                       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]));
@@ -842,7 +858,7 @@ Editor::add_sources (vector<string> paths, SourceList& sources, framepos_t& pos,
                         }
                 }
                
-               finish_bringing_in_material (*r, input_chan, output_chan, pos, mode, track, track_names[n]);
+               finish_bringing_in_material (*r, input_chan, output_chan, pos, mode, track, track_names[n], instrument);
 
                rlen = (*r)->length();
 
@@ -868,8 +884,14 @@ 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, const string& new_track_name)
+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,
+                                     const string&             new_track_name,
+                                     ARDOUR::PluginInfoPtr     instrument)
 {
        boost::shared_ptr<AudioRegion> ar = boost::dynamic_pointer_cast<AudioRegion>(region);
        boost::shared_ptr<MidiRegion> mr = boost::dynamic_pointer_cast<MidiRegion>(region);
@@ -917,10 +939,11 @@ Editor::finish_bringing_in_material (boost::shared_ptr<Region> region, uint32_t
 
                                existing_track = at.front();
                        } else if (mr) {
-                               list<boost::shared_ptr<MidiTrack> > mt (_session->new_midi_track (ChanCount (DataType::MIDI, 1),
-                                                                                                 ChanCount (DataType::MIDI, 1),
-                                                                                                 boost::shared_ptr<PluginInfo>(), 
-                                                                                                 Normal, 0, 1));
+                               list<boost::shared_ptr<MidiTrack> > mt (
+                                       _session->new_midi_track (ChanCount (DataType::MIDI, 1),
+                                                                 ChanCount (DataType::MIDI, 1),
+                                                                 instrument,
+                                                                 Normal, 0, 1));
 
                                if (mt.empty()) {
                                        return -1;