diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2007-08-30 20:25:47 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2007-08-30 20:25:47 +0000 |
commit | 6c2728f9815bcdbf1cbd702f271344e295ddb074 (patch) | |
tree | a4eb8f84e4b2b1430f1a3aa62be4e4dcefd27cee | |
parent | cc455e0d0a270bb20db85f750c7df07a96bb352e (diff) |
more upgrades to the import dialog
git-svn-id: svn://localhost/ardour2/branches/2.0-ongoing@2358 d708f5d6-7413-0410-9779-e7cbd77b26cf
-rw-r--r-- | gtk2_ardour/editing.cc | 21 | ||||
-rw-r--r-- | gtk2_ardour/editing.h | 34 | ||||
-rw-r--r-- | gtk2_ardour/editing_syms.h | 12 | ||||
-rw-r--r-- | gtk2_ardour/editor.h | 18 | ||||
-rw-r--r-- | gtk2_ardour/editor_audio_import.cc | 240 | ||||
-rw-r--r-- | gtk2_ardour/editor_canvas.cc | 11 | ||||
-rw-r--r-- | gtk2_ardour/editor_region_list.cc | 4 | ||||
-rw-r--r-- | gtk2_ardour/sfdb_ui.cc | 65 | ||||
-rw-r--r-- | gtk2_ardour/sfdb_ui.h | 3 |
9 files changed, 267 insertions, 141 deletions
diff --git a/gtk2_ardour/editing.cc b/gtk2_ardour/editing.cc index c9efa1feb2..f0b65cdbd1 100644 --- a/gtk2_ardour/editing.cc +++ b/gtk2_ardour/editing.cc @@ -161,5 +161,26 @@ const char *importmodestrs[] = { #undef IMPORTMODE #define IMPORTMODE(a) /*empty*/ +//IMPORTPOSITION +#undef IMPORTPOSITION +#define IMPORTPOSITION(s) N_(#s), +const char *importpositionstrs[] = { + #include "editing_syms.h" + 0 +}; +#undef IMPORTPOSITION +#define IMPORTPOSITION(a) /*empty*/ + +//IMPORTCHANNEL +#undef IMPORTCHANNEL +#define IMPORTCHANNEL(s) N_(#s), +const char *importchannelstrs[] = { + #include "editing_syms.h" + 0 +}; +#undef IMPORTCHANNEL +#define IMPORTCHANNEL(a) /*empty*/ + + } // namespace Editing diff --git a/gtk2_ardour/editing.h b/gtk2_ardour/editing.h index 0d1078cf16..4145806877 100644 --- a/gtk2_ardour/editing.h +++ b/gtk2_ardour/editing.h @@ -33,6 +33,8 @@ #define ZOOMFOCUS(a) /*empty*/ #define DISPLAYCONTROL(a) /*empty*/ #define IMPORTMODE(a) /*empty*/ +#define IMPORTPOSITION(a) /*empty*/ +#define IMPORTCHANNEL(a) /*empty*/ namespace Editing { @@ -127,13 +129,37 @@ enum ImportMode { #include "editing_syms.h" }; -extern const char *importmodestrs[]; -inline const char* enum2str(ImportMode m) {return importmodestrs[m];} -ImportMode str2importmode (const std::string &); - #undef IMPORTMODE #define IMPORTMODE(a) /*empty*/ +// IMPORTPOSITION +#undef IMPORTPOSITION +#define IMPORTPOSITION(a) a, +enum ImportPosition { + #include "editing_syms.h" +}; + +extern const char *importpositionstrs[]; +inline const char* enum2str(ImportPosition m) {return importpositionstrs[m];} +ImportPosition str2importposition (const std::string &); + +#undef IMPORTPOSITION +#define IMPORTPOSITION(a) /*empty*/ + +// IMPORTCHANNEL +#undef IMPORTCHANNEL +#define IMPORTCHANNEL(a) a, +enum ImportChannel { + #include "editing_syms.h" +}; + +extern const char *importchannelstrs[]; +inline const char* enum2str(ImportChannel m) {return importchannelstrs[m];} +ImportPosition str2importchannel (const std::string &); + +#undef IMPORTCHANNEL +#define IMPORTCHANNEL(a) /*empty*/ + ///////////////////// // These don't need their state saved. yet... enum CutCopyOp { diff --git a/gtk2_ardour/editing_syms.h b/gtk2_ardour/editing_syms.h index f415e2c49c..8971f79995 100644 --- a/gtk2_ardour/editing_syms.h +++ b/gtk2_ardour/editing_syms.h @@ -78,3 +78,15 @@ IMPORTMODE(ImportAsRegion=0) IMPORTMODE(ImportToTrack=1) IMPORTMODE(ImportAsTrack=2) IMPORTMODE(ImportAsTapeTrack=3) + +// if this is changed, remember to update the string table in sfdb_ui.cc +IMPORTPOSITION(ImportAtTimestamp=0) +IMPORTPOSITION(ImportAtEditCursor=1) +IMPORTPOSITION(ImportAtPlayhead=2) +IMPORTPOSITION(ImportAtStart=3) + +// if this is changed, remember to update the string table in sfdb_ui.cc +IMPORTCHANNEL(ImportThingPerFile=0) +IMPORTCHANNEL(ImportThingPerChannel=1) +IMPORTCHANNEL(ImportThingForAll=2) + diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h index 42790fb42a..715ca04b41 100644 --- a/gtk2_ardour/editor.h +++ b/gtk2_ardour/editor.h @@ -965,17 +965,17 @@ class Editor : public PublicEditor void external_audio_dialog (); bool check_multichannel_status (const std::vector<Glib::ustring>& paths); - void bring_in_external_audio (Editing::ImportMode mode, ARDOUR::AudioTrack*, nframes_t& pos); - void do_import (vector<Glib::ustring> paths, bool split, Editing::ImportMode mode, ARDOUR::AudioTrack*, nframes_t&); + void bring_in_external_audio (Editing::ImportMode mode, ARDOUR::AudioTrack*, nframes64_t& pos); + void do_import (vector<Glib::ustring> paths, Editing::ImportChannel, Editing::ImportMode mode, ARDOUR::AudioTrack*, nframes64_t&); - void _do_embed (vector<Glib::ustring> paths, bool split, Editing::ImportMode mode, ARDOUR::AudioTrack*, nframes_t&); - void do_embed (vector<Glib::ustring> paths, bool split, Editing::ImportMode mode, ARDOUR::AudioTrack*, nframes_t&); - bool idle_do_embed (vector<Glib::ustring> paths, bool split, Editing::ImportMode mode, ARDOUR::AudioTrack*, nframes_t&); + void _do_embed (vector<Glib::ustring> paths, Editing::ImportChannel, Editing::ImportMode mode, ARDOUR::AudioTrack*, nframes64_t&); + void do_embed (vector<Glib::ustring> paths, Editing::ImportChannel, Editing::ImportMode mode, ARDOUR::AudioTrack*, nframes64_t&); + bool idle_do_embed (vector<Glib::ustring> paths, Editing::ImportChannel, Editing::ImportMode mode, ARDOUR::AudioTrack*, nframes64_t&); - int import_sndfile (vector<Glib::ustring> paths, Editing::ImportMode mode, ARDOUR::AudioTrack* track, nframes_t& pos); - int embed_sndfile (vector<Glib::ustring> paths, bool split, bool multiple_files, bool& check_sample_rate, Editing::ImportMode mode, - ARDOUR::AudioTrack* track, nframes_t& pos); - int finish_bringing_in_audio (boost::shared_ptr<ARDOUR::AudioRegion> region, uint32_t, uint32_t, ARDOUR::AudioTrack* track, nframes_t& pos, Editing::ImportMode mode); + int import_sndfile (vector<Glib::ustring> paths, Editing::ImportMode mode, ARDOUR::AudioTrack* track, nframes64_t& pos); + int embed_sndfile (vector<Glib::ustring> paths, Editing::ImportChannel, bool multiple_files, bool& check_sample_rate, Editing::ImportMode mode, + ARDOUR::AudioTrack* track, nframes64_t& pos); + int finish_bringing_in_audio (boost::shared_ptr<ARDOUR::AudioRegion> region, uint32_t, uint32_t, ARDOUR::AudioTrack* track, nframes64_t& pos, Editing::ImportMode mode); /* generic interthread progress window */ diff --git a/gtk2_ardour/editor_audio_import.cc b/gtk2_ardour/editor_audio_import.cc index b7c7c391b0..0f05b27449 100644 --- a/gtk2_ardour/editor_audio_import.cc +++ b/gtk2_ardour/editor_audio_import.cc @@ -66,20 +66,8 @@ using Glib::ustring; void Editor::add_external_audio_action (ImportMode mode) { - nframes_t& pos = edit_cursor->current_frame; - AudioTrack* track = 0; - - if (!selection->tracks.empty()) { - AudioTimeAxisView* atv = dynamic_cast<AudioTimeAxisView*>(selection->tracks.front()); - if (atv) { - track = atv->audio_track(); - } - } - - bring_in_external_audio (mode, track, pos); } - void Editor::external_audio_dialog () { @@ -119,27 +107,46 @@ Editor::external_audio_dialog () } paths = browser.get_paths (); + ImportPosition pos = browser.get_position (); + ImportMode mode = browser.get_mode (); + ImportChannel chns = browser.get_channel_disposition (); + nframes64_t where; + + switch (pos) { + case ImportAtEditCursor: + where = edit_cursor->current_frame; + break; + case ImportAtTimestamp: + where = -1; + break; + case ImportAtPlayhead: + where = playhead_cursor->current_frame; + break; + case ImportAtStart: + where = session->current_start_frame(); + break; + } + if (browser.import.get_active()) { - do_import (paths, browser.split_files.get_active(), browser.get_mode(), track, edit_cursor->current_frame); + do_import (paths, chns, mode, track, where); } else { - do_embed (paths, browser.split_files.get_active(), browser.get_mode(), track, edit_cursor->current_frame); + do_embed (paths, chns, mode, track, where); } } void -Editor::bring_in_external_audio (ImportMode mode, AudioTrack* track, nframes_t& pos) +Editor::do_import (vector<ustring> paths, ImportChannel chns, ImportMode mode, AudioTrack* track, nframes64_t& pos) { -} + switch (chns) { + case Editing::ImportThingPerFile: + case Editing::ImportThingForAll: + import_status.multichan = true; + break; -void -Editor::do_import (vector<ustring> paths, bool split, ImportMode mode, AudioTrack* track, nframes_t& pos) -{ - /* SFDB sets "multichan" to true to indicate "split channels" - so reverse the setting to match the way libardour - interprets it. - */ - - import_status.multichan = !split; + case Editing::ImportThingPerChannel: + import_status.multichan = false; + break; + } if (interthread_progress_window == 0) { build_interthread_progress_window (); @@ -159,112 +166,62 @@ Editor::do_import (vector<ustring> paths, bool split, ImportMode mode, AudioTrac } bool -Editor::idle_do_embed (vector<ustring> paths, bool split, ImportMode mode, AudioTrack* track, nframes_t& pos) +Editor::idle_do_embed (vector<ustring> paths, ImportChannel chns, ImportMode mode, AudioTrack* track, nframes64_t& pos) { - _do_embed (paths, split, mode, track, pos); + _do_embed (paths, chns, mode, track, pos); return false; } void -Editor::do_embed (vector<ustring> paths, bool split, ImportMode mode, AudioTrack* track, nframes_t& pos) +Editor::do_embed (vector<ustring> paths, ImportChannel chns, ImportMode mode, AudioTrack* track, nframes64_t& pos) { #ifdef GTKOSX - Glib::signal_idle().connect (bind (mem_fun (*this, &Editor::idle_do_embed), paths, split, mode, track, pos)); + Glib::signal_idle().connect (bind (mem_fun (*this, &Editor::idle_do_embed), paths, chns, mode, track, pos)); #else - _do_embed (paths, split, mode, track, pos); + _do_embed (paths, chns, mode, track, pos); #endif } void -Editor::_do_embed (vector<ustring> paths, bool split, ImportMode mode, AudioTrack* track, nframes_t& pos) +Editor::_do_embed (vector<ustring> paths, ImportChannel chns, ImportMode mode, AudioTrack* track, nframes64_t& pos) { bool multiple_files = paths.size() > 1; bool check_sample_rate = true; - vector<ustring>::iterator a; - - for (a = paths.begin(); a != paths.end(); ) { - - Glib::ustring path = *a; - Glib::ustring pair_base; - vector<ustring> to_embed; - - to_embed.push_back (path); - a = paths.erase (a); - - if (path_is_paired (path, pair_base)) { - - ustring::size_type len = pair_base.length(); - - for (vector<Glib::ustring>::iterator b = paths.begin(); b != paths.end(); ) { - - if (((*b).substr (0, len) == pair_base) && ((*b).length() == path.length())) { + bool ok = false; + vector<ustring> to_embed; + - to_embed.push_back (*b); - - /* don't process this one again */ + switch (chns) { + case Editing::ImportThingPerFile: + case Editing::ImportThingPerChannel: + for (vector<ustring>::iterator a = paths.begin(); a != paths.end(); ++a) { - b = paths.erase (b); - break; + to_embed.clear (); + to_embed.push_back (*a); - } else { - ++b; - } + if (embed_sndfile (to_embed, chns, multiple_files, check_sample_rate, mode, track, pos) < -1) { + goto out; } } + break; - if (to_embed.size() > 1) { - - vector<string> choices; - - choices.push_back (string_compose (_("Import as a %1 region"), - to_embed.size() > 2 ? _("multichannel") : _("stereo"))); - choices.push_back (_("Import as multiple regions")); - - Choice chooser (string_compose (_("Paired files detected (%1, %2 ...).\nDo you want to:"), - to_embed[0], - to_embed[1]), - choices); - - if (chooser.run () == 0) { - - /* keep them paired */ - - if (embed_sndfile (to_embed, split, multiple_files, check_sample_rate, mode, track, pos) < -1) { - break; - } - - } else { - - /* one thing per file */ - - vector<ustring> foo; - - for (vector<ustring>::iterator x = to_embed.begin(); x != to_embed.end(); ++x) { - - foo.clear (); - foo.push_back (*x); - - if (embed_sndfile (foo, split, multiple_files, check_sample_rate, mode, track, pos) < -1) { - break; - } - } - } - - } else { - - if (embed_sndfile (to_embed, split, multiple_files, check_sample_rate, mode, track, pos) < -1) { - break; - } + case Editing::ImportThingForAll: + if (embed_sndfile (paths, chns, multiple_files, check_sample_rate, mode, track, pos) < -1) { + goto out; } + break; } + + ok = true; - if (a == paths.end()) { + out: + if (ok) { session->save_state (""); } } int -Editor::import_sndfile (vector<ustring> paths, ImportMode mode, AudioTrack* track, nframes_t& pos) +Editor::import_sndfile (vector<ustring> paths, ImportMode mode, AudioTrack* track, nframes64_t& pos) { WindowTitle title = string_compose (_("importing %1"), paths.front()); @@ -315,8 +272,8 @@ Editor::import_sndfile (vector<ustring> paths, ImportMode mode, AudioTrack* trac } int -Editor::embed_sndfile (vector<Glib::ustring> paths, bool split, bool multiple_files, bool& check_sample_rate, ImportMode mode, - AudioTrack* track, nframes_t& pos) +Editor::embed_sndfile (vector<Glib::ustring> paths, Editing::ImportChannel chns, bool multiple_files, bool& check_sample_rate, ImportMode mode, + AudioTrack* track, nframes64_t& pos) { boost::shared_ptr<AudioFileSource> source; SourceList sources; @@ -470,22 +427,71 @@ Editor::embed_sndfile (vector<Glib::ustring> paths, bool split, bool multiple_fi goto out; } - if (sources[0]->natural_position() != 0) { - pos = sources[0]->natural_position(); - } - region_name = region_name_from_path (paths.front(), (sources.size() > 1)); - - region = boost::dynamic_pointer_cast<AudioRegion> (RegionFactory::create (sources, 0, sources[0]->length(), region_name, 0, - Region::Flag (Region::DefaultFlags|Region::WholeFile|Region::External))); + if (pos == -1) { // "use timestamp" + if (sources[0]->natural_position() != 0) { + pos = sources[0]->natural_position(); + } else { + // XXX is this the best alternative ? + pos = edit_cursor->current_frame; + } + } + + if (chns == Editing::ImportThingPerFile || chns == Editing::ImportThingForAll) { - if (Config->get_output_auto_connect() & AutoConnectMaster) { - output_chan = (session->master_out() ? session->master_out()->n_inputs() : input_chan); + /* 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<AudioRegion> (RegionFactory::create (sources, 0, sources[0]->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, input_chan, output_chan, track, pos, mode); + } else { - output_chan = input_chan; + + /* take each source and create a region for each one */ + + SourceList just_one; + SourceList::iterator x; + vector<Glib::ustring>::iterator p = paths.begin(); + vector<Glib::ustring>::iterator next_path; + + for (x = sources.begin(); x != sources.end(); ++x) { + + just_one.clear (); + just_one.push_back (*x); + + region_name = region_name_from_path ((*p), false); + + region = boost::dynamic_pointer_cast<AudioRegion> (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, track, pos, mode); + + /* don't run out of paths */ + + next_path = p; + next_path++; + + if (next_path != paths.end()) { + p = next_path; + } + } } - finish_bringing_in_audio (region, input_chan, output_chan, track, pos, mode); out: track_canvas.get_window()->set_cursor (*current_canvas_cursor); @@ -493,7 +499,7 @@ Editor::embed_sndfile (vector<Glib::ustring> paths, bool split, bool multiple_fi } int -Editor::finish_bringing_in_audio (boost::shared_ptr<AudioRegion> region, uint32_t in_chans, uint32_t out_chans, AudioTrack* track, nframes_t& pos, ImportMode mode) +Editor::finish_bringing_in_audio (boost::shared_ptr<AudioRegion> region, uint32_t in_chans, uint32_t out_chans, AudioTrack* track, nframes64_t& pos, ImportMode mode) { switch (mode) { case ImportAsRegion: @@ -520,6 +526,7 @@ Editor::finish_bringing_in_audio (boost::shared_ptr<AudioRegion> region, uint32_ list<boost::shared_ptr<AudioTrack> > at (session->new_audio_track (in_chans, out_chans, Normal, 1)); if (!at.empty()) { boost::shared_ptr<AudioRegion> copy (boost::dynamic_pointer_cast<AudioRegion> (RegionFactory::create (region))); + at.front()->set_name (basename_nosuffix (copy->name()), this); at.front()->diskstream()->playlist()->add_region (copy, pos); } break; @@ -530,6 +537,7 @@ Editor::finish_bringing_in_audio (boost::shared_ptr<AudioRegion> region, uint32_ list<boost::shared_ptr<AudioTrack> > at (session->new_audio_track (in_chans, out_chans, Destructive)); if (!at.empty()) { boost::shared_ptr<AudioRegion> copy (boost::dynamic_pointer_cast<AudioRegion> (RegionFactory::create (region))); + at.front()->set_name (basename_nosuffix (copy->name()), this); at.front()->diskstream()->playlist()->add_region (copy, pos); } break; diff --git a/gtk2_ardour/editor_canvas.cc b/gtk2_ardour/editor_canvas.cc index 2cbd6f2c55..0e381921e1 100644 --- a/gtk2_ardour/editor_canvas.cc +++ b/gtk2_ardour/editor_canvas.cc @@ -435,7 +435,7 @@ Editor::drop_paths (const RefPtr<Gdk::DragContext>& context, vector<ustring> paths; string spath; GdkEvent ev; - nframes_t frame; + nframes64_t frame; if (convert_drop_to_paths (paths, context, x, y, data, info, time)) { goto out; @@ -463,15 +463,16 @@ Editor::drop_paths (const RefPtr<Gdk::DragContext>& context, /* drop onto canvas background: create new tracks */ - nframes_t pos = 0; - do_embed (paths, false, ImportAsTrack, 0, pos); + frame = 0; + + do_embed (paths, Editing::ImportThingPerFile, ImportAsTrack, 0, frame); } else if ((tv = dynamic_cast<AudioTimeAxisView*>(tvp)) != 0) { /* check that its an audio track, not a bus */ - + if (tv->get_diskstream()) { - do_embed (paths, false, ImportToTrack, tv->audio_track(), frame); + do_embed (paths, Editing::ImportThingPerFile, ImportToTrack, tv->audio_track(), frame); } } diff --git a/gtk2_ardour/editor_region_list.cc b/gtk2_ardour/editor_region_list.cc index 11ffb544fc..87c006c339 100644 --- a/gtk2_ardour/editor_region_list.cc +++ b/gtk2_ardour/editor_region_list.cc @@ -620,8 +620,8 @@ Editor::region_list_display_drag_data_received (const RefPtr<Gdk::DragContext>& vector<ustring> paths; if (convert_drop_to_paths (paths, context, x, y, data, info, time) == 0) { - nframes_t pos = 0; - do_embed (paths, false, ImportAsRegion, 0, pos); + nframes64_t pos = 0; + do_embed (paths, Editing::ImportThingPerFile, ImportAsRegion, 0, pos); context->drag_finish (true, false, time); } } diff --git a/gtk2_ardour/sfdb_ui.cc b/gtk2_ardour/sfdb_ui.cc index 91afbeae74..819d13aa5b 100644 --- a/gtk2_ardour/sfdb_ui.cc +++ b/gtk2_ardour/sfdb_ui.cc @@ -293,8 +293,6 @@ SoundFileBrowser::SoundFileBrowser (Gtk::Window& parent, string title, ARDOUR::S found_list (ListStore::create(found_list_columns)), chooser (FILE_CHOOSER_ACTION_OPEN), found_list_view (found_list), - split_files (_("Split non-mono files")), - merge_stereo (_("Use files as single stereo track")), import (rgroup2, _("Copy to Ardour-native files")), embed (rgroup2, _("Use file without copying")), mode (ImportAsTrack), @@ -346,14 +344,24 @@ SoundFileBrowser::SoundFileBrowser (Gtk::Window& parent, string title, ARDOUR::S vbox->pack_start (*hbox, false, false); options.pack_start (*vbox, false, false); + + l = manage (new Label); + l->set_text (_("Mapping:")); + + hbox = manage (new HBox); + hbox->set_border_width (12); + hbox->set_spacing (6); + hbox->pack_start (*l, false, false); + hbox->pack_start (channel_combo, false, false); + vbox = manage (new VBox); + vbox->pack_start (*hbox, false, false); + options.pack_start (*vbox, false, false); + reset_options (); - block_three.pack_start (merge_stereo, false, false); - block_three.pack_start (split_files, false, false); block_four.pack_start (import, false, false); block_four.pack_start (embed, false, false); - options.pack_start (block_three, false, false); options.pack_start (block_four, false, false); get_vbox()->pack_start (*hpacker, true, true); @@ -524,6 +532,7 @@ SoundFileBrowser::reset_options () vector<string> action_strings; vector<string> where_strings; + vector<string> channel_strings; action_strings.push_back (_("as new tracks")); if (selected_track_cnt > 0) { @@ -532,6 +541,7 @@ SoundFileBrowser::reset_options () action_strings.push_back (_("to the region list")); action_strings.push_back (_("as new tape tracks")); + set_popdown_strings (action_combo, action_strings); action_combo.set_active_text (action_strings.front()); @@ -543,6 +553,23 @@ SoundFileBrowser::reset_options () set_popdown_strings (where_combo, where_strings); where_combo.set_active_text (where_strings.front()); + if (mode == ImportAsTrack) { + channel_strings.push_back (_("one file per track")); + + if (selection_includes_multichannel) { + channel_strings.push_back (_("one channel per track")); + } + if (paths.size() > 1) { + channel_strings.push_back (_("all files in one track")); + } + channel_combo.show(); + } else { + channel_combo.hide(); + } + + set_popdown_strings (channel_combo, channel_strings); + channel_combo.set_active_text (channel_strings.front()); + if (Profile->get_sae()) { if (selection_can_be_embedded_with_links) { block_four.show (); @@ -674,4 +701,32 @@ SoundFileBrowser::get_mode () const } } +ImportPosition +SoundFileBrowser::get_position() const +{ + Glib::ustring str = where_combo.get_active_text(); + + if (str == _("use file timestamp")) { + return ImportAtTimestamp; + } else if (str == _("at edit cursor")) { + return ImportAtEditCursor; + } else if (str == _("at playhead")) { + return ImportAtPlayhead; + } else { + return ImportAtStart; + } +} + +ImportChannel +SoundFileBrowser::get_channel_disposition () const +{ + Glib::ustring str = channel_combo.get_active_text(); + if (str == _("one file per track")) { + return ImportThingPerFile; + } else if (str == _("one channel per track")) { + return ImportThingPerChannel; + } else { + return ImportThingForAll; + } +} diff --git a/gtk2_ardour/sfdb_ui.h b/gtk2_ardour/sfdb_ui.h index a58341d66c..de1e9d617b 100644 --- a/gtk2_ardour/sfdb_ui.h +++ b/gtk2_ardour/sfdb_ui.h @@ -122,11 +122,14 @@ class SoundFileBrowser : public ArdourDialog Gtk::ComboBoxText action_combo; Gtk::ComboBoxText where_combo; + Gtk::ComboBoxText channel_combo; Gtk::RadioButton import; Gtk::RadioButton embed; Editing::ImportMode get_mode() const; + Editing::ImportPosition get_position() const; + Editing::ImportChannel get_channel_disposition() const; protected: Editing::ImportMode mode; |