+
+ ret = add_sources (paths, sources, pos, mode, target_regions, target_tracks, track, true);
+
+ out:
+ track_canvas->get_window()->set_cursor (*current_canvas_cursor);
+ return ret;
+}
+
+int
+Editor::add_sources (vector<Glib::ustring> paths, SourceList& sources, nframes64_t& pos, ImportMode mode,
+ int target_regions, int target_tracks, boost::shared_ptr<Track>& track, bool /*add_channel_suffix*/)
+{
+ vector<boost::shared_ptr<Region> > regions;
+ ustring region_name;
+ uint32_t input_chan = 0;
+ uint32_t output_chan = 0;
+ bool use_timestamp;
+
+ use_timestamp = (pos == -1);
+
+ // kludge (for MIDI we're abusing "channel" for "track" here)
+ if (SMFSource::safe_midi_file_extension (paths.front())) {
+ target_regions = -1;
+ }
+
+ if (target_regions == 1) {
+
+ /* take all the sources we have and package them up as a region */
+
+ region_name = region_name_from_path (paths.front(), (sources.size() > 1), false);
+
+ PropertyList plist;
+
+ plist.add (ARDOUR::Properties::start, 0);
+ plist.add (ARDOUR::Properties::length, sources[0]->length (pos));
+ plist.add (ARDOUR::Properties::name, region_name);
+ plist.add (ARDOUR::Properties::layer, 0);
+ plist.add (ARDOUR::Properties::whole_file, true);
+ plist.add (ARDOUR::Properties::external, true);
+
+ boost::shared_ptr<Region> r = RegionFactory::create (sources, plist);
+
+ if (use_timestamp && boost::dynamic_pointer_cast<AudioRegion>(r)) {
+ boost::dynamic_pointer_cast<AudioRegion>(r)->special_set_position(sources[0]->natural_position());
+ }
+
+ regions.push_back (r);
+
+
+ } else if (target_regions == -1 || target_regions > 1) {
+
+ /* take each source and create a region for each one */
+
+ SourceList just_one;
+ SourceList::iterator x;
+ uint32_t n;
+
+ for (n = 0, x = sources.begin(); x != sources.end(); ++x, ++n) {
+
+ just_one.clear ();
+ just_one.push_back (*x);
+
+ region_name = region_name_from_path ((*x)->path(), false, false, sources.size(), n);
+
+ PropertyList plist;
+
+ plist.add (ARDOUR::Properties::start, 0);
+ plist.add (ARDOUR::Properties::length, (*x)->length (pos));
+ plist.add (ARDOUR::Properties::name, region_name);
+ plist.add (ARDOUR::Properties::layer, 0);
+ plist.add (ARDOUR::Properties::whole_file, true);
+ plist.add (ARDOUR::Properties::external, true);
+
+ boost::shared_ptr<Region> r = RegionFactory::create (just_one, plist);
+
+ if (use_timestamp && boost::dynamic_pointer_cast<AudioRegion>(r)) {
+ boost::dynamic_pointer_cast<AudioRegion>(r)->special_set_position((*x)->natural_position());
+ }
+
+ regions.push_back (r);
+ }
+ }
+
+ if (target_regions == 1) {
+ input_chan = regions.front()->n_channels();
+ } else {
+ if (target_tracks == 1) {
+ input_chan = regions.size();
+ } else {
+ input_chan = 1;
+ }
+ }
+
+ if (Config->get_output_auto_connect() & AutoConnectMaster) {
+ output_chan = (_session->master_out() ? _session->master_out()->n_inputs().n_audio() : input_chan);