X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fsfdb_ui.cc;h=f94c584019393c7c1fb29f38912e317ca5c7336b;hb=4203e7c9035e98987519fac3c6058d1a3279791b;hp=8011268335938569bfe7c31583df7221556f687f;hpb=f5602071ce046df06094222e4c69863c225e4cfd;p=ardour.git diff --git a/gtk2_ardour/sfdb_ui.cc b/gtk2_ardour/sfdb_ui.cc index 8011268335..f94c584019 100644 --- a/gtk2_ardour/sfdb_ui.cc +++ b/gtk2_ardour/sfdb_ui.cc @@ -21,7 +21,7 @@ #include "gtk2ardour-config.h" #endif -#include "i18n.h" +#include "pbd/i18n.h" #include #include @@ -29,12 +29,11 @@ #include #include -#include #include #include -#include +#include "pbd/gstdio_compat.h" #include #include "pbd/convert.h" @@ -51,6 +50,7 @@ #include "ardour/auditioner.h" #include "ardour/audioregion.h" #include "ardour/audiofilesource.h" +#include "ardour/midi_region.h" #include "ardour/smf_source.h" #include "ardour/region_factory.h" #include "ardour/source_factory.h" @@ -64,10 +64,11 @@ #include "prompter.h" #include "sfdb_ui.h" #include "editing.h" -#include "utils.h" #include "gain_meter.h" #include "main_clock.h" #include "public_editor.h" +#include "timers.h" +#include "ui_config.h" #include "sfdb_freesound_mootcher.h" @@ -114,7 +115,7 @@ importmode2string (ImportMode mode) case ImportAsTapeTrack: return _("as new tape tracks"); } - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ return _("as new tracks"); } @@ -281,12 +282,17 @@ SoundFileBox::setup_labels (const string& filename) string error_msg; - if (SMFSource::safe_midi_file_extension (path)) { + if (SMFSource::valid_midi_file (path)) { - boost::shared_ptr ms = - boost::dynamic_pointer_cast ( - SourceFactory::createExternal (DataType::MIDI, *_session, - path, 0, Source::Flag (0), false)); + boost::shared_ptr ms; + try { + ms = boost::dynamic_pointer_cast ( + SourceFactory::createExternal (DataType::MIDI, *_session, + path, 0, Source::Flag (0), false)); + } catch (const std::exception& e) { + error << string_compose(_("Could not read file: %1 (%2)."), + path, e.what()) << endmsg; + } preview_label.set_markup (_("Midi File Information")); @@ -406,7 +412,7 @@ SoundFileBox::audition () boost::shared_ptr r; - if (SMFSource::safe_midi_file_extension (path)) { + if (SMFSource::valid_midi_file (path)) { boost::shared_ptr ms = boost::dynamic_pointer_cast ( @@ -440,7 +446,7 @@ SoundFileBox::audition () afs = boost::dynamic_pointer_cast ( SourceFactory::createExternal (DataType::AUDIO, *_session, path, n, - Source::Flag (0), false)); + Source::Flag (ARDOUR::AudioFileSource::NoPeakFile), false)); if (afs->sample_rate() != _session->nominal_frame_rate()) { boost::shared_ptr sfs (new SrcFileSource(*_session, afs, _src_quality)); srclist.push_back(sfs); @@ -549,35 +555,40 @@ SoundFileBrowser::SoundFileBrowser (string title, ARDOUR::Session* s, bool persi , matches (0) , _status (0) , _done (false) - , ok_button (Stock::OK) - , cancel_button (Stock::CANCEL) - , apply_button (Stock::APPLY) + , import_button (_("Import")) + , close_button (Stock::CLOSE) , gm (0) { -#ifdef GTKOSX - chooser.add_shortcut_folder_uri("file:///Library/GarageBand/Apple Loops"); - chooser.add_shortcut_folder_uri("file:///Library/Audio/Apple Loops"); - chooser.add_shortcut_folder_uri("file:///Library/Application Support/GarageBand/Instrument Library/Sampler/Sampler Files"); - chooser.add_shortcut_folder_uri("file:///Volumes"); +#ifdef __APPLE__ + try { + /* add_shortcut_folder throws an exception if the folder being added already has a shortcut */ + chooser.add_shortcut_folder_uri("file:///Library/GarageBand/Apple Loops"); + chooser.add_shortcut_folder_uri("file:///Library/Audio/Apple Loops"); + chooser.add_shortcut_folder_uri("file:///Library/Application Support/GarageBand/Instrument Library/Sampler/Sampler Files"); + } + catch (Glib::Error & e) { + std::cerr << "sfdb.add_shortcut_folder() threw Glib::Error " << e.what() << std::endl; + } #endif + Gtkmm2ext::add_volume_shortcuts (chooser); //add the file chooser chooser.set_border_width (12); - + audio_and_midi_filter.add_custom (FILE_FILTER_FILENAME, sigc::mem_fun (*this, &SoundFileBrowser::on_audio_and_midi_filter)); audio_and_midi_filter.set_name (_("Audio and MIDI files")); - + audio_filter.add_custom (FILE_FILTER_FILENAME, sigc::mem_fun(*this, &SoundFileBrowser::on_audio_filter)); audio_filter.set_name (_("Audio files")); - + midi_filter.add_custom (FILE_FILTER_FILENAME, sigc::mem_fun(*this, &SoundFileBrowser::on_midi_filter)); midi_filter.set_name (_("MIDI files")); - + matchall_filter.add_pattern ("*.*"); matchall_filter.set_name (_("All files")); - + chooser.add_filter (audio_and_midi_filter); chooser.add_filter (audio_filter); chooser.add_filter (midi_filter); @@ -586,17 +597,17 @@ SoundFileBrowser::SoundFileBrowser (string title, ARDOUR::Session* s, bool persi chooser.signal_update_preview().connect(sigc::mem_fun(*this, &SoundFileBrowser::update_preview)); chooser.signal_file_activated().connect (sigc::mem_fun (*this, &SoundFileBrowser::chooser_file_activated)); -#ifdef GTKOSX +#ifdef __APPLE__ /* some broken redraw behaviour - this is a bandaid */ chooser.signal_selection_changed().connect (mem_fun (chooser, &Widget::queue_draw)); #endif - + if (!persistent_folder.empty()) { chooser.set_current_folder (persistent_folder); } notebook.append_page (chooser, _("Browse Files")); - + hpacker.set_spacing (6); hpacker.pack_start (notebook, true, true); hpacker.pack_start (preview, false, false); @@ -610,52 +621,53 @@ SoundFileBrowser::SoundFileBrowser (string title, ARDOUR::Session* s, bool persi VBox* vbox; HBox* hbox; - - + + hbox = manage(new HBox); hbox->pack_start (found_entry); hbox->pack_start (found_search_btn); - + Gtk::ScrolledWindow *scroll = manage(new ScrolledWindow); scroll->add(found_list_view); scroll->set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC); - + vbox = manage(new VBox); vbox->pack_start (*hbox, PACK_SHRINK); vbox->pack_start (*scroll); - + found_list_view.append_column(_("Paths"), found_list_columns.pathname); - + found_list_view.get_selection()->signal_changed().connect(sigc::mem_fun(*this, &SoundFileBrowser::found_list_view_selected)); - + found_list_view.signal_row_activated().connect (sigc::mem_fun (*this, &SoundFileBrowser::found_list_view_activated)); - + found_search_btn.signal_clicked().connect(sigc::mem_fun(*this, &SoundFileBrowser::found_search_clicked)); found_entry.signal_activate().connect(sigc::mem_fun(*this, &SoundFileBrowser::found_search_clicked)); - + notebook.append_page (*vbox, _("Search Tags")); //add freesound search +#ifdef FREESOUND_GOT_FIXED HBox* passbox; Label* label; - + passbox = manage(new HBox); passbox->set_spacing (6); - + label = manage (new Label); label->set_text (_("Tags:")); passbox->pack_start (*label, false, false); passbox->pack_start (freesound_entry, true, true); - + label = manage (new Label); label->set_text (_("Sort:")); passbox->pack_start (*label, false, false); passbox->pack_start (freesound_sort, false, false); freesound_sort.clear_items(); - + // Order of the following must correspond with enum sortMethod - // in sfdb_freesound_mootcher.h + // in sfdb_freesound_mootcher.h freesound_sort.append_text(_("None")); freesound_sort.append_text(_("Longest")); freesound_sort.append_text(_("Shortest")); @@ -666,7 +678,7 @@ SoundFileBrowser::SoundFileBrowser (string title, ARDOUR::Session* s, bool persi freesound_sort.append_text(_("Highest rated")); freesound_sort.append_text(_("Lowest rated")); freesound_sort.set_active(0); - + passbox->pack_start (freesound_search_btn, false, false); passbox->pack_start (freesound_more_btn, false, false); freesound_more_btn.set_label(_("More")); @@ -675,11 +687,11 @@ SoundFileBrowser::SoundFileBrowser (string title, ARDOUR::Session* s, bool persi passbox->pack_start (freesound_similar_btn, false, false); freesound_similar_btn.set_label(_("Similar")); freesound_similar_btn.set_sensitive(false); - + scroll = manage(new ScrolledWindow); scroll->add(freesound_list_view); scroll->set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC); - + vbox = manage(new VBox); vbox->set_spacing (3); vbox->pack_start (*passbox, PACK_SHRINK); @@ -699,7 +711,7 @@ SoundFileBrowser::SoundFileBrowser (string title, ARDOUR::Session* s, bool persi freesound_list_view.get_column(3)->set_alignment(0.5); freesound_list_view.get_column(4)->set_alignment(0.5); freesound_list_view.get_column(5)->set_alignment(0.5); - + freesound_list_view.get_selection()->signal_changed().connect(sigc::mem_fun(*this, &SoundFileBrowser::freesound_list_view_selected)); freesound_list_view.set_tooltip_column(1); @@ -710,6 +722,7 @@ SoundFileBrowser::SoundFileBrowser (string title, ARDOUR::Session* s, bool persi freesound_more_btn.signal_clicked().connect(sigc::mem_fun(*this, &SoundFileBrowser::freesound_more_clicked)); freesound_similar_btn.signal_clicked().connect(sigc::mem_fun(*this, &SoundFileBrowser::freesound_similar_clicked)); notebook.append_page (*vbox, _("Search Freesound")); +#endif notebook.set_size_request (500, -1); notebook.signal_switch_page().connect (sigc::hide_return (sigc::hide (sigc::hide (sigc::mem_fun (*this, &SoundFileBrowser::reset_options))))); @@ -719,19 +732,14 @@ SoundFileBrowser::SoundFileBrowser (string title, ARDOUR::Session* s, bool persi Gtk::HButtonBox* button_box = manage (new HButtonBox); button_box->set_layout (BUTTONBOX_END); - button_box->pack_start (cancel_button, false, false); - cancel_button.signal_clicked().connect (sigc::bind (sigc::mem_fun (*this, &SoundFileBrowser::do_something), RESPONSE_CANCEL)); - if (persistent) { - button_box->pack_start (apply_button, false, false); - apply_button.signal_clicked().connect (sigc::bind (sigc::mem_fun (*this, &SoundFileBrowser::do_something), RESPONSE_APPLY)); - } + button_box->pack_start (close_button, false, false); + close_button.signal_clicked().connect (sigc::bind (sigc::mem_fun (*this, &SoundFileBrowser::do_something), RESPONSE_CLOSE)); - button_box->pack_start (ok_button, false, false); - ok_button.signal_clicked().connect (sigc::bind (sigc::mem_fun (*this, &SoundFileBrowser::do_something), RESPONSE_OK)); + button_box->pack_start (import_button, false, false); + import_button.signal_clicked().connect (sigc::bind (sigc::mem_fun (*this, &SoundFileBrowser::do_something), RESPONSE_OK)); - Gtkmm2ext::UI::instance()->set_tip (ok_button, _("Press to import selected files and close this window")); - Gtkmm2ext::UI::instance()->set_tip (apply_button, _("Press to import selected files and leave this window open")); - Gtkmm2ext::UI::instance()->set_tip (cancel_button, _("Press to close this window without importing any files")); + Gtkmm2ext::UI::instance()->set_tip (import_button, _("Press to import selected files")); + Gtkmm2ext::UI::instance()->set_tip (close_button, _("Press to close this window without importing any files")); vpacker.pack_end (*button_box, false, false); @@ -762,8 +770,7 @@ SoundFileBrowser::run () void SoundFileBrowser::set_action_sensitive (bool yn) { - ok_button.set_sensitive (yn); - apply_button.set_sensitive (yn); + import_button.set_sensitive (yn); } void @@ -827,7 +834,7 @@ SoundFileBrowser::add_gain_meter () boost::shared_ptr r = _session->the_auditioner (); - gm->set_controls (r, r->shared_peak_meter(), r->amp()); + gm->set_controls (r, r->shared_peak_meter(), r->amp(), r->gain_control()); gm->set_fader_name (X_("GainFader")); meter_packer.set_border_width (12); @@ -851,7 +858,7 @@ SoundFileBrowser::remove_gain_meter () void SoundFileBrowser::start_metering () { - metering_connection = ARDOUR_UI::instance()->SuperRapidScreenUpdate.connect (sigc::mem_fun(*this, &SoundFileBrowser::meter)); + metering_connection = Timers::super_rapid_connect (sigc::mem_fun(*this, &SoundFileBrowser::meter)); } void @@ -1018,7 +1025,7 @@ SoundFileBrowser::refresh_display(std::string ID, std::string file) // there's a single item selected in the freesound list //XXX make a function to be used to construct the actual file name both here and in the mootcher Gtk::TreeIter row = freesound_list->get_iter(*rows.begin()); - std::string selected_ID = (*row)[freesound_list_columns.id]; + std::string selected_ID = (*row)[freesound_list_columns.id]; if (ID == selected_ID) { // the selected item in the freesound list is the item that has just finished downloading chooser.set_filename(file); @@ -1062,9 +1069,9 @@ SoundFileBrowser::freesound_similar_clicked () prev_cursor = gdk_window_get_cursor (get_window()->gobj()); gdk_window_set_cursor (get_window()->gobj(), gdk_cursor_new(GDK_WATCH)); gdk_flush(); - + std::string theString = mootcher.searchSimilar(id); - + gdk_window_set_cursor (get_window()->gobj(), prev_cursor); handle_freesound_results(theString); } @@ -1084,9 +1091,9 @@ SoundFileBrowser::freesound_search() gdk_flush(); std::string theString = mootcher.searchText( - search_string, + search_string, freesound_page, -#ifdef GTKOSX +#ifdef __APPLE__ "", // OSX eats anything incl mp3 #else "type:wav OR type:aiff OR type:flac OR type:aif OR type:ogg OR type:oga", @@ -1249,8 +1256,8 @@ SoundFileBrowser::get_paths () vector::iterator i; for (i = filenames.begin(); i != filenames.end(); ++i) { - struct stat buf; - if ((!stat((*i).c_str(), &buf)) && S_ISREG(buf.st_mode)) { + GStatBuf buf; + if ((!g_stat((*i).c_str(), &buf)) && S_ISREG(buf.st_mode)) { results.push_back (*i); } } @@ -1288,6 +1295,11 @@ SoundFileOmega::reset_options_noret () bool SoundFileOmega::reset_options () { + if (_import_active) { + _reset_post_import = true; + return true; + } + vector paths = get_paths (); if (paths.empty()) { @@ -1311,7 +1323,7 @@ SoundFileOmega::reset_options () to do embedding (or if we are importing a MIDI file). */ - if (Config->get_only_copy_imported_files()) { + if (UIConfiguration::instance().get_only_copy_imported_files()) { copy_files_btn.set_sensitive (false); } else { copy_files_btn.set_sensitive (false); @@ -1326,7 +1338,7 @@ SoundFileOmega::reset_options () /* See if we are thinking about importing any MIDI files */ vector::iterator i = paths.begin (); - while (i != paths.end() && SMFSource::safe_midi_file_extension (*i) == false) { + while (i != paths.end() && SMFSource::valid_midi_file (*i) == false) { ++i; } bool const have_a_midi_file = (i != paths.end ()); @@ -1348,28 +1360,28 @@ SoundFileOmega::reset_options () if (selected_audio_track_cnt > 0) { if (channel_combo.get_active_text().length()) { ImportDisposition id = get_channel_disposition(); - + switch (id) { case Editing::ImportDistinctFiles: if (selected_audio_track_cnt == paths.size()) { action_strings.push_back (importmode2string (ImportToTrack)); } break; - + case Editing::ImportDistinctChannels: /* XXX it would be nice to allow channel-per-selected track but its too hard we don't want to deal with all the different per-file + per-track channel configurations. */ break; - + default: action_strings.push_back (importmode2string (ImportToTrack)); break; } } } - + } else { /* MIDI ONLY */ @@ -1484,8 +1496,8 @@ SoundFileOmega::reset_options () /* We must copy MIDI files or those from Freesound * or any file if we are under nsm control */ bool const must_copy = _session->get_nsm_state() || have_a_midi_file || notebook.get_current_page() == 2; - - if (Config->get_only_copy_imported_files()) { + + if (UIConfiguration::instance().get_only_copy_imported_files()) { if (selection_can_be_embedded_with_links && !must_copy) { copy_files_btn.set_sensitive (true); @@ -1500,7 +1512,7 @@ SoundFileOmega::reset_options () if (must_copy) { copy_files_btn.set_active (true); - } + } copy_files_btn.set_sensitive (!must_copy); } @@ -1554,7 +1566,7 @@ SoundFileOmega::check_info (const vector& paths, bool& same_size, bool& src_needed = true; } - } else if (SMFSource::safe_midi_file_extension (*i)) { + } else if (SMFSource::valid_midi_file (*i)) { Evoral::SMF reader; reader.open(*i); @@ -1584,7 +1596,7 @@ SoundFileOmega::check_link_status (const Session* s, const vector& paths std::string tmpdir(Glib::build_filename (s->session_directory().sound_path(), "linktest")); bool ret = false; - if (mkdir (tmpdir.c_str(), 0744)) { + if (g_mkdir (tmpdir.c_str(), 0744)) { if (errno != EEXIST) { return false; } @@ -1608,7 +1620,7 @@ SoundFileOmega::check_link_status (const Session* s, const vector& paths ret = true; out: - rmdir (tmpdir.c_str()); + g_rmdir (tmpdir.c_str()); return ret; #endif } @@ -1650,83 +1662,67 @@ SoundFileChooser::get_filename () return paths.front(); } -SoundFileOmega::SoundFileOmega (string title, ARDOUR::Session* s, - uint32_t selected_audio_tracks, - uint32_t selected_midi_tracks, +SoundFileOmega::SoundFileOmega (string title, ARDOUR::Session* s, + uint32_t selected_audio_tracks, + uint32_t selected_midi_tracks, bool persistent, Editing::ImportMode mode_hint) : SoundFileBrowser (title, s, persistent) , copy_files_btn ( _("Copy files to session")) , selected_audio_track_cnt (selected_audio_tracks) , selected_midi_track_cnt (selected_midi_tracks) + , _import_active (false) + , _reset_post_import (false) { - VBox* vbox; - HBox* hbox; vector str; - set_size_request (-1, 450); + set_size_request (-1, 550); block_two.set_border_width (12); block_three.set_border_width (12); block_four.set_border_width (12); - options.set_spacing (12); - str.clear (); str.push_back (_("file timestamp")); str.push_back (_("edit point")); str.push_back (_("playhead")); str.push_back (_("session start")); set_popdown_strings (where_combo, str); - where_combo.set_active_text (str.front()); + where_combo.set_active_text (str.back()); where_combo.signal_changed().connect (sigc::mem_fun (*this, &SoundFileOmega::where_combo_changed)); Label* l = manage (new Label); - l->set_markup (_("Add files as ...")); - - vbox = manage (new VBox); - vbox->set_border_width (12); - vbox->set_spacing (6); - vbox->pack_start (*l, false, false); - vbox->pack_start (action_combo, false, false); - hbox = manage (new HBox); - hbox->pack_start (*vbox, false, false); - options.pack_start (*hbox, false, false); - - /* dummy entry for action combo so that it doesn't look odd if we - come up with no tracks selected. - */ - - str.clear (); - str.push_back (importmode2string (mode_hint)); - set_popdown_strings (action_combo, str); - action_combo.set_active_text (str.front()); - action_combo.set_sensitive (false); + l->set_markup (_("Add files ...")); + options.attach (*l, 0, 1, 0, 1, FILL, SHRINK, 8, 0); + options.attach (action_combo, 0, 1, 1, 2, FILL, SHRINK, 8, 0); l = manage (new Label); l->set_markup (_("Insert at")); + options.attach (*l, 0, 1, 3, 4, FILL, SHRINK, 8, 0); + options.attach (where_combo, 0, 1, 4, 5, FILL, SHRINK, 8, 0); - vbox = manage (new VBox); - vbox->set_border_width (12); - vbox->set_spacing (6); - vbox->pack_start (*l, false, false); - vbox->pack_start (where_combo, false, false); - hbox = manage (new HBox); - hbox->pack_start (*vbox, false, false); - options.pack_start (*hbox, false, false); + l = manage (new Label); + l->set_markup (_("Mapping")); + options.attach (*l, 1, 2, 0, 1, FILL, SHRINK, 8, 0); + options.attach (channel_combo, 1, 2, 1, 2, FILL, SHRINK, 8, 0); + l = manage (new Label); + l->set_markup (_("Conversion quality")); + options.attach (*l, 1, 2, 3, 4, FILL, SHRINK, 8, 0); + options.attach (src_combo, 1, 2, 4, 5, FILL, SHRINK, 8, 0); l = manage (new Label); - l->set_markup (_("Mapping")); + l->set_markup (_("Instrument")); + options.attach (*l, 3, 4, 0, 1, FILL, SHRINK, 8, 0); + options.attach (instrument_combo, 3, 4, 1, 2, FILL, SHRINK, 8, 0); + + Alignment *hspace = manage (new Alignment ()); + hspace->set_size_request (2, 2); + options.attach (*hspace, 0, 3, 2, 3, FILL, SHRINK, 0, 8); - vbox = manage (new VBox); - vbox->set_border_width (12); - vbox->set_spacing (6); - vbox->pack_start (*l, false, false); - vbox->pack_start (channel_combo, false, false); - hbox = manage (new HBox); - hbox->pack_start (*vbox, false, false); - options.pack_start (*hbox, false, false); + Alignment *vspace = manage (new Alignment ()); + vspace->set_size_request (2, 2); + options.attach (*vspace, 2, 3, 0, 3, EXPAND, SHRINK, 0, 0); str.clear (); str.push_back (_("one track per file")); @@ -1734,18 +1730,6 @@ SoundFileOmega::SoundFileOmega (string title, ARDOUR::Session* s, channel_combo.set_active_text (str.front()); channel_combo.set_sensitive (false); - l = manage (new Label); - l->set_markup (_("Conversion quality")); - - vbox = manage (new VBox); - vbox->set_border_width (12); - vbox->set_spacing (6); - vbox->pack_start (*l, false, false); - vbox->pack_start (src_combo, false, false); - hbox = manage (new HBox); - hbox->pack_start (*vbox, false, false); - options.pack_start (*hbox, false, false); - str.clear (); str.push_back (_("Best")); str.push_back (_("Good")); @@ -1758,8 +1742,6 @@ SoundFileOmega::SoundFileOmega (string title, ARDOUR::Session* s, src_combo.set_sensitive (false); src_combo.signal_changed().connect (sigc::mem_fun (*this, &SoundFileOmega::src_combo_changed)); - reset_options (); - action_combo.signal_changed().connect (sigc::mem_fun (*this, &SoundFileOmega::reset_options_noret)); channel_combo.signal_changed().connect (sigc::mem_fun (*this, &SoundFileOmega::reset_options_noret)); @@ -1773,10 +1755,9 @@ SoundFileOmega::SoundFileOmega (string title, ARDOUR::Session* s, } block_four.pack_start (copy_files_btn, false, false); + options.attach (block_four, 3, 4, 4, 5, FILL, SHRINK, 8, 0); - options.pack_start (block_four, false, false); - - vpacker.pack_start (options, false, false); + vpacker.pack_start (options, false, true); /* setup disposition map */ @@ -1797,19 +1778,22 @@ SoundFileOmega::SoundFileOmega (string title, ARDOUR::Session* s, selects a file to import, which in turn prevents the size of the dialog from jumping around. */ - vector t; - t.push_back (_("one track per file")); - t.push_back (_("one track per channel")); - t.push_back (_("sequence files")); - t.push_back (_("all files in one region")); - set_popdown_strings (channel_combo, t); + str.clear (); + str.push_back (_("one track per file")); + str.push_back (_("one track per channel")); + str.push_back (_("sequence files")); + str.push_back (_("all files in one region")); + set_popdown_strings (channel_combo, str); + + str.clear (); + str.push_back (importmode2string (ImportAsTrack)); + str.push_back (importmode2string (ImportToTrack)); + str.push_back (importmode2string (ImportAsRegion)); + str.push_back (importmode2string (ImportAsTapeTrack)); + set_popdown_strings (action_combo, str); + action_combo.set_active_text (importmode2string(mode_hint)); - t.clear (); - t.push_back (importmode2string (ImportAsTrack)); - t.push_back (importmode2string (ImportToTrack)); - t.push_back (importmode2string (ImportAsRegion)); - t.push_back (importmode2string (ImportAsTapeTrack)); - set_popdown_strings (action_combo, t); + reset (selected_audio_tracks, selected_midi_tracks); } void @@ -1892,7 +1876,7 @@ SoundFileOmega::get_channel_disposition () const if (x == disposition_map.end()) { fatal << string_compose (_("programming error: %1 (%2)"), "unknown string for import disposition", str) << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } return x->second; @@ -1938,19 +1922,20 @@ SoundFileOmega::do_something (int action) { SoundFileBrowser::do_something (action); - if (action == RESPONSE_CANCEL) { + if (action == RESPONSE_CLOSE) { hide (); return; } /* lets do it */ - + vector paths = get_paths (); ImportPosition pos = get_position (); ImportMode mode = get_mode (); ImportDisposition chns = get_channel_disposition (); + PluginInfoPtr instrument = instrument_combo.selected_instrument(); framepos_t where; - + switch (pos) { case ImportAtEditPoint: where = PublicEditor::instance().get_preferred_edit_position (); @@ -1965,17 +1950,22 @@ SoundFileOmega::do_something (int action) where = _session->current_start_frame(); break; } - + SrcQuality quality = get_src_quality(); - + + _import_active = true; + if (copy_files_btn.get_active()) { - PublicEditor::instance().do_import (paths, chns, mode, quality, where); + PublicEditor::instance().do_import (paths, chns, mode, quality, where, instrument); } else { - PublicEditor::instance().do_embed (paths, chns, mode, where); + PublicEditor::instance().do_embed (paths, chns, mode, where, instrument); } - - if (action == RESPONSE_OK) { - hide (); + + _import_active = false; + + if (_reset_post_import) { + _reset_post_import = false; + reset_options (); } } - +