From 9e4b972286c5aa9b161afd09b58635eaa4973c40 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Wed, 14 Dec 2016 12:31:16 +0000 Subject: [PATCH] GUI changes to allow user to specify how/if to use SMF track/instrument names during import --- gtk2_ardour/editor.h | 1 + gtk2_ardour/editor_audio_import.cc | 3 +- gtk2_ardour/editor_canvas.cc | 8 +++--- gtk2_ardour/editor_regions.cc | 2 +- gtk2_ardour/public_editor.h | 8 ++++-- gtk2_ardour/sfdb_ui.cc | 44 ++++++++++++++++++++++++++---- gtk2_ardour/sfdb_ui.h | 2 ++ 7 files changed, 55 insertions(+), 13 deletions(-) diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h index 677c0927c9..84d4bd90d4 100644 --- a/gtk2_ardour/editor.h +++ b/gtk2_ardour/editor.h @@ -428,6 +428,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD Editing::ImportDisposition disposition, Editing::ImportMode mode, ARDOUR::SrcQuality quality, + ARDOUR::MidiTrackNameSource mts, framepos_t& pos, boost::shared_ptr instrument = boost::shared_ptr()); diff --git a/gtk2_ardour/editor_audio_import.cc b/gtk2_ardour/editor_audio_import.cc index 822cb7b9de..0348a80072 100644 --- a/gtk2_ardour/editor_audio_import.cc +++ b/gtk2_ardour/editor_audio_import.cc @@ -266,6 +266,7 @@ Editor::do_import (vector paths, ImportDisposition disposition, ImportMode mode, SrcQuality quality, + MidiTrackNameSource midi_track_name_source, framepos_t& pos, ARDOUR::PluginInfoPtr instrument) { @@ -278,7 +279,7 @@ Editor::do_import (vector paths, import_status.current = 1; import_status.total = paths.size (); import_status.all_done = false; - import_status.midi_track_name_source = SMFTrackName; + import_status.midi_track_name_source = midi_track_name_source; ImportProgressWindow ipw (&import_status, _("Import"), _("Cancel Import")); diff --git a/gtk2_ardour/editor_canvas.cc b/gtk2_ardour/editor_canvas.cc index 6f0e26aef6..53ab840ed8 100644 --- a/gtk2_ardour/editor_canvas.cc +++ b/gtk2_ardour/editor_canvas.cc @@ -411,10 +411,10 @@ Editor::drop_paths_part_two (const vector& paths, framepos_t frame, doub frame = 0; InstrumentSelector is; // instantiation builds instrument-list and sets default. - do_import (midi_paths, Editing::ImportDistinctFiles, ImportAsTrack, SrcBest, frame, is.selected_instrument()); + do_import (midi_paths, Editing::ImportDistinctFiles, ImportAsTrack, SrcBest, SMFTrackName, frame, is.selected_instrument()); if (UIConfiguration::instance().get_only_copy_imported_files() || copy) { - do_import (audio_paths, Editing::ImportDistinctFiles, Editing::ImportAsTrack, SrcBest, frame); + do_import (audio_paths, Editing::ImportDistinctFiles, Editing::ImportAsTrack, SrcBest, SMFTrackName, frame); } else { do_embed (audio_paths, Editing::ImportDistinctFiles, ImportAsTrack, frame); } @@ -427,10 +427,10 @@ Editor::drop_paths_part_two (const vector& paths, framepos_t frame, doub /* select the track, then embed/import */ selection->set (tv); - do_import (midi_paths, Editing::ImportSerializeFiles, ImportToTrack, SrcBest, frame); + do_import (midi_paths, Editing::ImportSerializeFiles, ImportToTrack, SrcBest, SMFTrackName, frame); if (UIConfiguration::instance().get_only_copy_imported_files() || copy) { - do_import (audio_paths, Editing::ImportSerializeFiles, Editing::ImportToTrack, SrcBest, frame); + do_import (audio_paths, Editing::ImportSerializeFiles, Editing::ImportToTrack, SrcBest, SMFTrackName, frame); } else { do_embed (audio_paths, Editing::ImportSerializeFiles, ImportToTrack, frame); } diff --git a/gtk2_ardour/editor_regions.cc b/gtk2_ardour/editor_regions.cc index 845e56fdec..b66845eb0d 100644 --- a/gtk2_ardour/editor_regions.cc +++ b/gtk2_ardour/editor_regions.cc @@ -1322,7 +1322,7 @@ EditorRegions::drag_data_received (const RefPtr& context, bool copy = ((context->get_actions() & (Gdk::ACTION_COPY | Gdk::ACTION_LINK | Gdk::ACTION_MOVE)) == Gdk::ACTION_COPY); if (UIConfiguration::instance().get_only_copy_imported_files() || copy) { - _editor->do_import (paths, Editing::ImportDistinctFiles, Editing::ImportAsRegion, SrcBest, pos); + _editor->do_import (paths, Editing::ImportDistinctFiles, Editing::ImportAsRegion, SrcBest, SMFTrackName, pos); } else { _editor->do_embed (paths, Editing::ImportDistinctFiles, ImportAsRegion, pos); } diff --git a/gtk2_ardour/public_editor.h b/gtk2_ardour/public_editor.h index fb6da74dbf..d20e44e6c4 100644 --- a/gtk2_ardour/public_editor.h +++ b/gtk2_ardour/public_editor.h @@ -220,8 +220,12 @@ class PublicEditor : public Gtkmm2ext::Tabbable { virtual Editing::MouseMode effective_mouse_mode () const = 0; /** Import existing media */ - virtual void do_import (std::vector paths, Editing::ImportDisposition, Editing::ImportMode mode, ARDOUR::SrcQuality, framepos_t&, boost::shared_ptr instrument=boost::shared_ptr()) = 0; - virtual void do_embed (std::vector paths, Editing::ImportDisposition, Editing::ImportMode mode, framepos_t&, boost::shared_ptr instrument=boost::shared_ptr()) = 0; + virtual void do_import (std::vector paths, Editing::ImportDisposition, Editing::ImportMode mode, ARDOUR::SrcQuality, + ARDOUR::MidiTrackNameSource, framepos_t&, + boost::shared_ptr instrument=boost::shared_ptr()) = 0; + virtual void do_embed (std::vector paths, Editing::ImportDisposition, Editing::ImportMode mode, + framepos_t&, + boost::shared_ptr instrument=boost::shared_ptr()) = 0; /** Open main export dialog */ virtual void export_audio () = 0; diff --git a/gtk2_ardour/sfdb_ui.cc b/gtk2_ardour/sfdb_ui.cc index 2039983ad3..c1c889e362 100644 --- a/gtk2_ardour/sfdb_ui.cc +++ b/gtk2_ardour/sfdb_ui.cc @@ -84,8 +84,24 @@ using std::string; string SoundFileBrowser::persistent_folder; typedef TreeView::Selection::ListHandle_Path ListPath; +static MidiTrackNameSource +string2miditracknamesource (string const & str) +{ + if (str == _("by track number")) { + return SMFTrackNumber; + } else if (str == _("by track name")) { + return SMFTrackName; + } else if (str == _("by instrument name")) { + return SMFInstrumentName; + } + + warning << string_compose (_("programming error: unknown midi track name source string %1"), str) << endmsg; + + return SMFTrackNumber; +} + static ImportMode -string2importmode (string str) +string2importmode (string const & str) { if (str == _("as new tracks")) { return ImportAsTrack; @@ -1730,9 +1746,14 @@ SoundFileOmega::SoundFileOmega (string title, ARDOUR::Session* s, options.attach (src_combo, 1, 2, 4, 5, FILL, SHRINK, 8, 0); l = manage (new Label); - l->set_markup (_("Instrument")); + l->set_markup (_("MIDI Track Names")); options.attach (*l, 3, 4, 0, 1, FILL, SHRINK, 8, 0); - options.attach (instrument_combo, 3, 4, 1, 2, FILL, SHRINK, 8, 0); + options.attach (midi_track_name_combo, 3, 4, 1, 2, FILL, SHRINK, 8, 0); + + l = manage (new Label); + l->set_markup (_("Instrument")); + options.attach (*l, 3, 4, 2, 3, FILL, SHRINK, 8, 0); + options.attach (instrument_combo, 3, 4, 3, 4, FILL, SHRINK, 8, 0); Alignment *hspace = manage (new Alignment ()); hspace->set_size_request (2, 2); @@ -1742,6 +1763,13 @@ SoundFileOmega::SoundFileOmega (string title, ARDOUR::Session* s, vspace->set_size_request (2, 2); options.attach (*vspace, 2, 3, 0, 3, EXPAND, SHRINK, 0, 0); + str.clear (); + str.push_back (_("by track number")); + str.push_back (_("by track name")); + str.push_back (_("by instrument name")); + set_popdown_strings (midi_track_name_combo, str); + midi_track_name_combo.set_active_text (str.front()); + str.clear (); str.push_back (_("one track per file")); set_popdown_strings (channel_combo, str); @@ -1881,6 +1909,12 @@ SoundFileOmega::where_combo_changed() preview.set_import_position(get_position()); } +MidiTrackNameSource +SoundFileOmega::get_midi_track_name_source () const +{ + return string2miditracknamesource (midi_track_name_combo.get_active_text()); +} + ImportDisposition SoundFileOmega::get_channel_disposition () const { @@ -1953,6 +1987,7 @@ SoundFileOmega::do_something (int action) ImportDisposition chns = get_channel_disposition (); PluginInfoPtr instrument = instrument_combo.selected_instrument(); framepos_t where; + MidiTrackNameSource mts = get_midi_track_name_source (); switch (pos) { case ImportAtEditPoint: @@ -1974,7 +2009,7 @@ SoundFileOmega::do_something (int action) _import_active = true; if (copy_files_btn.get_active()) { - PublicEditor::instance().do_import (paths, chns, mode, quality, where, instrument); + PublicEditor::instance().do_import (paths, chns, mode, quality, mts, where, instrument); } else { PublicEditor::instance().do_embed (paths, chns, mode, where, instrument); } @@ -1986,4 +2021,3 @@ SoundFileOmega::do_something (int action) reset_options (); } } - diff --git a/gtk2_ardour/sfdb_ui.h b/gtk2_ardour/sfdb_ui.h index f070d36ab6..499867036a 100644 --- a/gtk2_ardour/sfdb_ui.h +++ b/gtk2_ardour/sfdb_ui.h @@ -283,12 +283,14 @@ class SoundFileOmega : public SoundFileBrowser Gtk::ComboBoxText where_combo; Gtk::ComboBoxText channel_combo; Gtk::ComboBoxText src_combo; + Gtk::ComboBoxText midi_track_name_combo; InstrumentSelector instrument_combo; Gtk::CheckButton copy_files_btn; void set_mode (Editing::ImportMode); Editing::ImportMode get_mode() const; + ARDOUR::MidiTrackNameSource get_midi_track_name_source () const; Editing::ImportPosition get_position() const; Editing::ImportDisposition get_channel_disposition() const; ARDOUR::SrcQuality get_src_quality() const;