summaryrefslogtreecommitdiff
path: root/gtk2_ardour/editor_audio_import.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2007-09-04 21:01:32 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2007-09-04 21:01:32 +0000
commit2b3716526bdf34a051cf960dca826fcc428fb76a (patch)
treea160a4caeb754ce772f22de925c648ca9a81788f /gtk2_ardour/editor_audio_import.cc
parent56c86c148d6d1bb12d91ac5e7d1f5fa39c82b095 (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.cc90
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();