diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2012-02-02 04:12:23 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2012-02-02 04:12:23 +0000 |
commit | af90dc2bae772cd63d6078e24fb5ead6832bb7eb (patch) | |
tree | 105e16bfa7f9a7bd2eab5bfdbf1e6fd3dc444d5f /gtk2_ardour/add_route_dialog.cc | |
parent | e9a6d86b9b046374a9f0d669e97fe4249756fa9d (diff) |
add a way to create a new MIDI track with an instrument pre-selected
git-svn-id: svn://localhost/ardour2/branches/3.0@11421 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/add_route_dialog.cc')
-rw-r--r-- | gtk2_ardour/add_route_dialog.cc | 90 |
1 files changed, 88 insertions, 2 deletions
diff --git a/gtk2_ardour/add_route_dialog.cc b/gtk2_ardour/add_route_dialog.cc index 2de735245a..07d5662a50 100644 --- a/gtk2_ardour/add_route_dialog.cc +++ b/gtk2_ardour/add_route_dialog.cc @@ -28,6 +28,8 @@ #include "pbd/error.h" #include "pbd/convert.h" #include "gtkmm2ext/utils.h" + +#include "ardour/plugin_manager.h" #include "ardour/profile.h" #include "ardour/template_utils.h" #include "ardour/route_group.h" @@ -50,7 +52,9 @@ AddRouteDialog::AddRouteDialog (Session* s) : ArdourDialog (_("Add Track or Bus")) , routes_adjustment (1, 1, 128, 1, 4) , routes_spinner (routes_adjustment) + , configuration_label (_("Configuration:")) , mode_label (_("Track mode:")) + , instrument_label (_("Instrument:")) { set_session (s); @@ -76,6 +80,12 @@ AddRouteDialog::AddRouteDialog (Session* s) track_bus_combo.append_text (_("Busses")); track_bus_combo.set_active (0); + build_instrument_list (); + instrument_combo.set_model (instrument_list); + instrument_combo.pack_start (instrument_list_columns.name); + instrument_combo.set_active (0); + instrument_combo.set_button_sensitivity (Gtk::SENSITIVITY_AUTO); + VBox* vbox = manage (new VBox); Gtk::Label* l; @@ -119,8 +129,8 @@ AddRouteDialog::AddRouteDialog (Session* s) /* Route configuration */ - l = manage (new Label (_("Configuration:"), Gtk::ALIGN_LEFT, Gtk::ALIGN_CENTER, false)); - table2->attach (*l, 1, 2, n, n + 1, Gtk::FILL, Gtk::EXPAND, 0, 0); + configuration_label.set_alignment (Gtk::ALIGN_LEFT, Gtk::ALIGN_CENTER); + table2->attach (configuration_label, 1, 2, n, n + 1, Gtk::FILL, Gtk::EXPAND, 0, 0); table2->attach (channel_combo, 2, 3, n, n + 1, Gtk::FILL, Gtk::EXPAND | Gtk::FILL, 0, 0); ++n; @@ -135,6 +145,11 @@ AddRouteDialog::AddRouteDialog (Session* s) } + instrument_label.set_alignment (Gtk::ALIGN_LEFT, Gtk::ALIGN_CENTER); + table2->attach (instrument_label, 1, 2, n, n + 1, Gtk::FILL, Gtk::EXPAND, 0, 0); + table2->attach (instrument_combo, 2, 3, n, n + 1, Gtk::FILL, Gtk::EXPAND | Gtk::FILL, 0, 0); + ++n; + /* Group choice */ l = manage (new Label (_("Group:"), Gtk::ALIGN_LEFT, Gtk::ALIGN_CENTER, false)); @@ -202,12 +217,24 @@ AddRouteDialog::track_type_chosen () if (midi_tracks_wanted()) { channel_combo.set_sensitive (false); mode_combo.set_sensitive (false); + instrument_combo.set_sensitive (true); + configuration_label.set_sensitive (false); + mode_label.set_sensitive (false); + instrument_label.set_sensitive (true); } else if (audio_tracks_wanted()) { mode_combo.set_sensitive (true); channel_combo.set_sensitive (true); + instrument_combo.set_sensitive (false); + configuration_label.set_sensitive (true); + mode_label.set_sensitive (true); + instrument_label.set_sensitive (false); } else { mode_combo.set_sensitive (false); channel_combo.set_sensitive (true); + instrument_combo.set_sensitive (false); + configuration_label.set_sensitive (true); + mode_label.set_sensitive (true); + instrument_label.set_sensitive (false); } maybe_update_name_template_entry (); @@ -457,3 +484,62 @@ AddRouteDialog::route_separator (const Glib::RefPtr<Gtk::TreeModel> &, const Gtk return route_group_combo.get_active_text () == "separator"; } +void +AddRouteDialog::build_instrument_list () +{ + PluginInfoList all_plugs; + PluginManager& manager (PluginManager::instance()); + TreeModel::Row row; + + all_plugs.insert (all_plugs.end(), manager.ladspa_plugin_info().begin(), manager.ladspa_plugin_info().end()); +#ifdef WINDOWS_VST_SUPPORT + all_plugs.insert (all_plugs.end(), manager.windows_vst_plugin_info().begin(), manager.windows_vst_plugin_info().end()); +#endif +#ifdef LXVST_SUPPORT + all_plugs.insert (all_plugs.end(), manager.lxvst_plugin_info().begin(), manager.lxvst_plugin_info().end()); +#endif +#ifdef AUDIOUNIT_SUPPORT + all_plugs.insert (all_plugs.end(), manager.au_plugin_info().begin(), manager.au_plugin_info().end()); +#endif +#ifdef LV2_SUPPORT + all_plugs.insert (all_plugs.end(), manager.lv2_plugin_info().begin(), manager.lv2_plugin_info().end()); +#endif + + + instrument_list = ListStore::create (instrument_list_columns); + + row = *(instrument_list->append()); + row[instrument_list_columns.info_ptr] = PluginInfoPtr (); + row[instrument_list_columns.name] = _("-none-"); + + for (PluginInfoList::const_iterator i = all_plugs.begin(); i != all_plugs.end(); ++i) { + + if (manager.get_status (*i) == PluginManager::Hidden) continue; + + string category = (*i)->category; + + /* XXX more finesse is possible here. VST plugins have a + a specific "instrument" flag, for example. + */ + + if ((*i)->n_inputs.n_midi() != 0 && (*i)->n_outputs.n_audio() > 0) { + row = *(instrument_list->append()); + row[instrument_list_columns.name] = (*i)->name; + row[instrument_list_columns.info_ptr] = *i; + } + } +} + +PluginInfoPtr +AddRouteDialog::requested_instrument () +{ + TreeModel::iterator iter = instrument_combo.get_active (); + TreeModel::Row row; + + if (iter) { + row = (*iter); + return row[instrument_list_columns.info_ptr]; + } + + return PluginInfoPtr(); +} |