diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2007-09-04 21:01:32 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2007-09-04 21:01:32 +0000 |
commit | 2b3716526bdf34a051cf960dca826fcc428fb76a (patch) | |
tree | a160a4caeb754ce772f22de925c648ca9a81788f /gtk2_ardour/editor_audio_import.cc | |
parent | 56c86c148d6d1bb12d91ac5e7d1f5fa39c82b095 (diff) |
sort of make to-selected-tracks import/embed work
git-svn-id: svn://localhost/ardour2/branches/2.0-ongoing@2416 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/editor_audio_import.cc')
-rw-r--r-- | gtk2_ardour/editor_audio_import.cc | 90 |
1 files changed, 63 insertions, 27 deletions
diff --git a/gtk2_ardour/editor_audio_import.cc b/gtk2_ardour/editor_audio_import.cc index 71c64bf033..f2873f3f0b 100644 --- a/gtk2_ardour/editor_audio_import.cc +++ b/gtk2_ardour/editor_audio_import.cc @@ -81,6 +81,8 @@ Editor::external_audio_dialog () if (sfbrowser == 0) { sfbrowser = new SoundFileBrowser (*this, _("Add existing audio"), session, selection->tracks.size()); + } else { + sfbrowser->reset (selection->tracks.size()); } sfbrowser->show_all (); @@ -128,12 +130,38 @@ Editor::external_audio_dialog () } } +boost::shared_ptr<AudioTrack> +Editor::get_nth_selected_audio_track (int nth) const +{ + AudioTimeAxisView* atv; + TrackSelection::iterator x; + + for (x = selection->tracks.begin(); nth > 0 && x != selection->tracks.end(); ++x) { + if (dynamic_cast<AudioTimeAxisView*>(*x)) { + --nth; + } + } + + if (x == selection->tracks.end()) { + atv = dynamic_cast<AudioTimeAxisView*>(selection->tracks.back()); + } else { + atv = dynamic_cast<AudioTimeAxisView*>(*x); + } + + if (!atv) { + return boost::shared_ptr<AudioTrack>(); + } + + return atv->audio_track(); +} + void Editor::do_import (vector<ustring> paths, ImportDisposition chns, ImportMode mode, nframes64_t& pos) { boost::shared_ptr<AudioTrack> track; vector<ustring> to_import; bool ok = false; + int nth = 0; if (interthread_progress_window == 0) { build_interthread_progress_window (); @@ -146,9 +174,9 @@ Editor::do_import (vector<ustring> paths, ImportDisposition chns, ImportMode mod to_import.clear (); to_import.push_back (*a); - /* create 1 region from this path, add to 1 track, - ignore "track" - */ + if (mode == Editing::ImportToTrack) { + track = get_nth_selected_audio_track (nth++); + } if (import_sndfiles (to_import, mode, pos, 1, -1, track)) { goto out; @@ -163,11 +191,6 @@ Editor::do_import (vector<ustring> paths, ImportDisposition chns, ImportMode mod to_import.clear (); to_import.push_back (*a); - /* create as many regions as there are channels, add them - to that many tracks, ignore "track" - */ - - if (import_sndfiles (to_import, mode, pos, -1, -1, track)) { goto out; } @@ -237,6 +260,7 @@ Editor::_do_embed (vector<ustring> paths, ImportDisposition chns, ImportMode mod bool ok = false; vector<ustring> to_embed; bool multi = paths.size() > 1; + int nth = 0; switch (chns) { case Editing::ImportDistinctFiles: @@ -245,6 +269,10 @@ Editor::_do_embed (vector<ustring> paths, ImportDisposition chns, ImportMode mod to_embed.clear (); to_embed.push_back (*a); + if (mode == Editing::ImportToTrack) { + track = get_nth_selected_audio_track (nth++); + } + if (embed_sndfiles (to_embed, multi, check_sample_rate, mode, pos, 1, -1, track) < -1) { goto out; } @@ -267,7 +295,7 @@ Editor::_do_embed (vector<ustring> paths, ImportDisposition chns, ImportMode mod if (embed_sndfiles (paths, multi, check_sample_rate, mode, pos, 1, 1, track) < -1) { goto out; } - break; + break; case Editing::ImportSerializeFiles: for (vector<ustring>::iterator a = paths.begin(); a != paths.end(); ++a) { @@ -553,7 +581,15 @@ Editor::add_sources (vector<Glib::ustring> paths, SourceList& sources, nframes64 } } - input_chan = sources.size(); + 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() : input_chan); @@ -561,11 +597,9 @@ Editor::add_sources (vector<Glib::ustring> paths, SourceList& sources, nframes64 output_chan = input_chan; } - int n = 0; + for (vector<boost::shared_ptr<AudioRegion> >::iterator r = regions.begin(); r != regions.end(); ++r) { - for (vector<boost::shared_ptr<AudioRegion> >::iterator r = regions.begin(); r != regions.end(); ++r, ++n) { - - finish_bringing_in_audio (*r, input_chan, output_chan, pos, mode, track, n); + finish_bringing_in_audio (*r, input_chan, output_chan, pos, mode, track); if (target_tracks != 1) { track.reset (); @@ -579,9 +613,8 @@ Editor::add_sources (vector<Glib::ustring> paths, SourceList& sources, nframes64 int Editor::finish_bringing_in_audio (boost::shared_ptr<AudioRegion> region, uint32_t in_chans, uint32_t out_chans, nframes64_t& pos, - ImportMode mode, boost::shared_ptr<AudioTrack>& existing_track, int nth) + ImportMode mode, boost::shared_ptr<AudioTrack>& existing_track) { - boost::shared_ptr<AudioTrack> track; switch (mode) { case ImportAsRegion: @@ -590,19 +623,22 @@ Editor::finish_bringing_in_audio (boost::shared_ptr<AudioRegion> region, uint32_ case ImportToTrack: { - if (selection->tracks.empty()) { - return -1; - } + if (!existing_track) { + + if (selection->tracks.empty()) { + return -1; + } - AudioTimeAxisView* atv = dynamic_cast<AudioTimeAxisView*>(selection->tracks.front()); - - if (!atv) { - return -1; + AudioTimeAxisView* atv = dynamic_cast<AudioTimeAxisView*>(selection->tracks.front()); + + if (!atv) { + return -1; + } + + existing_track = atv->audio_track(); } - - track = atv->audio_track(); - - boost::shared_ptr<Playlist> playlist = track->diskstream()->playlist(); + + boost::shared_ptr<Playlist> playlist = existing_track->diskstream()->playlist(); boost::shared_ptr<AudioRegion> copy (boost::dynamic_pointer_cast<AudioRegion> (RegionFactory::create (region))); begin_reversible_command (_("insert sndfile")); XMLNode &before = playlist->get_state(); |