From 56c86c148d6d1bb12d91ac5e7d1f5fa39c82b095 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Tue, 4 Sep 2007 15:01:49 +0000 Subject: [PATCH] more improvements and fixes for the import dialog git-svn-id: svn://localhost/ardour2/branches/2.0-ongoing@2415 d708f5d6-7413-0410-9779-e7cbd77b26cf --- gtk2_ardour/editor.h | 11 +- gtk2_ardour/editor_audio_import.cc | 179 +++++++++++++++++++---------- gtk2_ardour/sfdb_ui.cc | 10 +- 3 files changed, 125 insertions(+), 75 deletions(-) diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h index a1424ff143..9f12110102 100644 --- a/gtk2_ardour/editor.h +++ b/gtk2_ardour/editor.h @@ -975,10 +975,13 @@ class Editor : public PublicEditor void do_embed (vector paths, Editing::ImportDisposition, Editing::ImportMode mode, nframes64_t&); bool idle_do_embed (vector paths, Editing::ImportDisposition, Editing::ImportMode mode, nframes64_t&); - int import_sndfiles (vector paths, Editing::ImportDisposition, Editing::ImportMode mode, nframes64_t& pos); - int embed_sndfiles (vector paths, Editing::ImportDisposition, bool multiple_files, bool& check_sample_rate, Editing::ImportMode mode, - nframes64_t& pos); - int add_sources (vector paths, ARDOUR::SourceList& sources, nframes64_t pos, Editing::ImportDisposition, Editing::ImportMode); + int import_sndfiles (vector paths, Editing::ImportMode mode, nframes64_t& pos, + int target_regions, int target_tracks, boost::shared_ptr&); + int embed_sndfiles (vector paths, bool multiple_files, bool& check_sample_rate, Editing::ImportMode mode, + nframes64_t& pos, int target_regions, int target_tracks, boost::shared_ptr&); + + int add_sources (vector paths, ARDOUR::SourceList& sources, nframes64_t& pos, Editing::ImportMode, + int target_regions, int target_tracks, boost::shared_ptr&); int finish_bringing_in_audio (boost::shared_ptr region, uint32_t, uint32_t, nframes64_t& pos, Editing::ImportMode mode, boost::shared_ptr& existing_track, int nth); diff --git a/gtk2_ardour/editor_audio_import.cc b/gtk2_ardour/editor_audio_import.cc index 5a0a9f447a..71c64bf033 100644 --- a/gtk2_ardour/editor_audio_import.cc +++ b/gtk2_ardour/editor_audio_import.cc @@ -87,6 +87,8 @@ Editor::external_audio_dialog () int response = sfbrowser->run (); + sfbrowser->hide (); + switch (response) { case RESPONSE_OK: break; @@ -94,8 +96,6 @@ Editor::external_audio_dialog () // cancel from the browser - we are done return; } - - sfbrowser->hide (); /* lets do it */ @@ -131,6 +131,7 @@ Editor::external_audio_dialog () void Editor::do_import (vector paths, ImportDisposition chns, ImportMode mode, nframes64_t& pos) { + boost::shared_ptr track; vector to_import; bool ok = false; @@ -140,24 +141,65 @@ Editor::do_import (vector paths, ImportDisposition chns, ImportMode mod switch (chns) { case Editing::ImportDistinctFiles: + for (vector::iterator a = paths.begin(); a != paths.end(); ++a) { + + to_import.clear (); + to_import.push_back (*a); + + /* create 1 region from this path, add to 1 track, + ignore "track" + */ + + if (import_sndfiles (to_import, mode, pos, 1, -1, track)) { + goto out; + } + + } + break; + case Editing::ImportDistinctChannels: for (vector::iterator a = paths.begin(); a != paths.end(); ++a) { to_import.clear (); to_import.push_back (*a); - if (import_sndfiles (to_import, chns, mode, pos)) { + /* 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; } + } break; case Editing::ImportMergeFiles: - case Editing::ImportSerializeFiles: - if (import_sndfiles (paths, chns, mode, pos)) { + /* create 1 region from all paths, add to 1 track, + ignore "track" + */ + if (import_sndfiles (paths, mode, pos, 1, 1, track)) { goto out; } break; + + case Editing::ImportSerializeFiles: + for (vector::iterator a = paths.begin(); a != paths.end(); ++a) { + + to_import.clear (); + to_import.push_back (*a); + + /* create 1 region from this path, add to 1 track, + reuse "track" across paths + */ + + if (import_sndfiles (to_import, mode, pos, 1, 1, track)) { + goto out; + } + + } + break; } ok = true; @@ -190,31 +232,54 @@ Editor::do_embed (vector paths, ImportDisposition chns, ImportMode mode void Editor::_do_embed (vector paths, ImportDisposition chns, ImportMode mode, nframes64_t& pos) { - bool multiple_files = paths.size() > 1; + boost::shared_ptr track; bool check_sample_rate = true; bool ok = false; vector to_embed; - + bool multi = paths.size() > 1; + switch (chns) { case Editing::ImportDistinctFiles: + for (vector::iterator a = paths.begin(); a != paths.end(); ++a) { + + to_embed.clear (); + to_embed.push_back (*a); + + if (embed_sndfiles (to_embed, multi, check_sample_rate, mode, pos, 1, -1, track) < -1) { + goto out; + } + } + break; + case Editing::ImportDistinctChannels: for (vector::iterator a = paths.begin(); a != paths.end(); ++a) { to_embed.clear (); to_embed.push_back (*a); - if (embed_sndfiles (to_embed, chns, multiple_files, check_sample_rate, mode, pos) < -1) { + if (embed_sndfiles (to_embed, multi, check_sample_rate, mode, pos, -1, -1, track) < -1) { goto out; } } break; case Editing::ImportMergeFiles: - case Editing::ImportSerializeFiles: - if (embed_sndfiles (paths, chns, multiple_files, check_sample_rate, mode, pos) < -1) { + if (embed_sndfiles (paths, multi, check_sample_rate, mode, pos, 1, 1, track) < -1) { goto out; } break; + + case Editing::ImportSerializeFiles: + for (vector::iterator a = paths.begin(); a != paths.end(); ++a) { + + to_embed.clear (); + to_embed.push_back (*a); + + if (embed_sndfiles (to_embed, multi, check_sample_rate, mode, pos, 1, 1, track) < -1) { + goto out; + } + } + break; } ok = true; @@ -226,7 +291,8 @@ Editor::_do_embed (vector paths, ImportDisposition chns, ImportMode mod } int -Editor::import_sndfiles (vector paths, ImportDisposition chns, ImportMode mode, nframes64_t& pos) +Editor::import_sndfiles (vector paths, ImportMode mode, nframes64_t& pos, + int target_regions, int target_tracks, boost::shared_ptr& track) { WindowTitle title = string_compose (_("importing %1"), paths.front()); @@ -267,14 +333,13 @@ Editor::import_sndfiles (vector paths, ImportDisposition chns, ImportMo /* import thread finished - see if we should build a new track */ - boost::shared_ptr track; boost::shared_ptr r; if (import_status.cancel || import_status.sources.empty()) { goto out; } - if (add_sources (paths, import_status.sources, pos, chns, mode) == 0) { + if (add_sources (paths, import_status.sources, pos, mode, target_regions, target_tracks, track) == 0) { session->save_state (""); } @@ -284,8 +349,9 @@ Editor::import_sndfiles (vector paths, ImportDisposition chns, ImportMo } int -Editor::embed_sndfiles (vector paths, Editing::ImportDisposition chns, bool multiple_files, - bool& check_sample_rate, ImportMode mode, nframes64_t& pos) +Editor::embed_sndfiles (vector paths, bool multifile, + bool& check_sample_rate, ImportMode mode, nframes64_t& pos, int target_regions, int target_tracks, + boost::shared_ptr& track) { boost::shared_ptr source; SourceList sources; @@ -343,7 +409,7 @@ Editor::embed_sndfiles (vector paths, Editing::ImportDisposition if (check_sample_rate && (finfo.samplerate != (int) session->frame_rate())) { vector choices; - if (multiple_files) { + if (multifile) { choices.push_back (_("Cancel entire import")); choices.push_back (_("Don't embed it")); choices.push_back (_("Embed all without questions")); @@ -429,7 +495,7 @@ Editor::embed_sndfiles (vector paths, Editing::ImportDisposition goto out; } - ret = add_sources (paths, sources, pos, chns, mode); + ret = add_sources (paths, sources, pos, mode, target_regions, target_tracks, track); out: track_canvas.get_window()->set_cursor (*current_canvas_cursor); @@ -437,10 +503,10 @@ Editor::embed_sndfiles (vector paths, Editing::ImportDisposition } int -Editor::add_sources (vector paths, SourceList& sources, nframes64_t pos, ImportDisposition chns, ImportMode mode) +Editor::add_sources (vector paths, SourceList& sources, nframes64_t& pos, ImportMode mode, + int target_regions, int target_tracks, boost::shared_ptr& track) { - boost::shared_ptr track; - boost::shared_ptr region; + vector > regions; ustring region_name; uint32_t input_chan = 0; uint32_t output_chan = 0; @@ -454,71 +520,58 @@ Editor::add_sources (vector paths, SourceList& sources, nframes64 } } - if (chns == Editing::ImportMergeFiles) { + 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)); - region = boost::dynamic_pointer_cast (RegionFactory::create (sources, 0, sources[0]->length(), region_name, 0, - Region::Flag (Region::DefaultFlags|Region::WholeFile|Region::External))); - - input_chan = sources.size(); - - if (Config->get_output_auto_connect() & AutoConnectMaster) { - output_chan = (session->master_out() ? session->master_out()->n_inputs() : input_chan); - } else { - output_chan = input_chan; - } - - finish_bringing_in_audio (region, input_chan, output_chan, pos, mode, track, 0); + regions.push_back (boost::dynamic_pointer_cast + (RegionFactory::create (sources, 0, sources[0]->length(), region_name, 0, + Region::Flag (Region::DefaultFlags|Region::WholeFile|Region::External)))); - } else { // SerializeFiles, DistinctFiles, DistinctChannels + } else if (target_regions == -1) { /* take each source and create a region for each one */ SourceList just_one; SourceList::iterator x; - vector::iterator p = paths.begin(); - vector::iterator next_path; - int nth; - for (nth = 0, x = sources.begin(); x != sources.end(); ++x, ++nth) { + for (x = sources.begin(); x != sources.end(); ++x) { just_one.clear (); just_one.push_back (*x); - region_name = region_name_from_path ((*p), false); + boost::shared_ptr afs = boost::dynamic_pointer_cast (*x); + + region_name = region_name_from_path (afs->path(), false); - region = boost::dynamic_pointer_cast (RegionFactory::create (just_one, 0, (*x)->length(), region_name, 0, - Region::Flag (Region::DefaultFlags|Region::WholeFile|Region::External))); + regions.push_back (boost::dynamic_pointer_cast + (RegionFactory::create (just_one, 0, (*x)->length(), region_name, 0, + Region::Flag (Region::DefaultFlags|Region::WholeFile|Region::External)))); - if (Config->get_output_auto_connect() & AutoConnectMaster) { - output_chan = (session->master_out() ? session->master_out()->n_inputs() : input_chan); - } else { - output_chan = input_chan; - } - - finish_bringing_in_audio (region, 1, output_chan, pos, mode, track, nth); + } + } - if (chns == ImportSerializeFiles) { - pos += region->length(); - } + input_chan = sources.size(); - if (chns == ImportDistinctChannels || chns == ImportDistinctFiles) { - /* make a new track for the next region */ - track.reset (); - } + if (Config->get_output_auto_connect() & AutoConnectMaster) { + output_chan = (session->master_out() ? session->master_out()->n_inputs() : input_chan); + } else { + output_chan = input_chan; + } - /* don't run out of paths */ - - next_path = p; - next_path++; + int n = 0; - if (next_path != paths.end()) { - p = next_path; - } - } + for (vector >::iterator r = regions.begin(); r != regions.end(); ++r, ++n) { + + finish_bringing_in_audio (*r, input_chan, output_chan, pos, mode, track, n); + + if (target_tracks != 1) { + track.reset (); + } else { + pos += (*r)->length(); + } } return 0; diff --git a/gtk2_ardour/sfdb_ui.cc b/gtk2_ardour/sfdb_ui.cc index f96e958877..7c5947e767 100644 --- a/gtk2_ardour/sfdb_ui.cc +++ b/gtk2_ardour/sfdb_ui.cc @@ -73,8 +73,6 @@ SoundFileBox::SoundFileBox () { set_name (X_("SoundFileBox")); - // set_size_request (250, 250); - preview_label.set_markup (_("Soundfile Info")); border_frame.set_label_widget (preview_label); @@ -315,12 +313,6 @@ SoundFileBox::tags_changed () return; } - cerr << "save new tags: "; - for (vector::iterator x = tags.begin(); x != tags.end(); ++x) { - cerr << (*x) << ' '; - } - cerr << endl; - Library->set_tags (string ("//") + path, tags); Library->save_changes (); } @@ -349,6 +341,8 @@ SoundFileBrowser::SoundFileBrowser (Gtk::Window& parent, string title, ARDOUR::S HBox* hbox; HBox* hpacker; + set_size_request (-1, 450); + set_session (s); resetting_ourselves = false; -- 2.30.2