From da480d55405a1adc3f60fd33830dd6cebe1a83a5 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Mon, 14 Nov 2016 01:14:52 +0100 Subject: Suffix plugin type in instrument-list to avoid ambiguities --- gtk2_ardour/instrument_selector.cc | 51 ++++++++++++++++++++++++++++++-------- 1 file changed, 41 insertions(+), 10 deletions(-) diff --git a/gtk2_ardour/instrument_selector.cc b/gtk2_ardour/instrument_selector.cc index 6b0590964b..f692a902b4 100644 --- a/gtk2_ardour/instrument_selector.cc +++ b/gtk2_ardour/instrument_selector.cc @@ -17,6 +17,7 @@ */ #include "pbd/convert.h" +#include "pbd/enumwriter.h" #include "ardour/plugin_manager.h" #include "gtkmm2ext/gui_thread.h" #include "instrument_selector.h" @@ -71,6 +72,15 @@ pluginsort (const PluginInfoPtr& a, const PluginInfoPtr& b) return PBD::downcase(a->name) < PBD::downcase(b->name); } +static bool +invalid_instrument (PluginInfoPtr p) { + const PluginManager& manager = PluginManager::instance(); + if (manager.get_status(p) == PluginManager::Hidden) { + return true; + } + return !p->is_instrument(); +} + void InstrumentSelector::build_instrument_list() { @@ -95,6 +105,7 @@ InstrumentSelector::build_instrument_list() all_plugs.insert(all_plugs.end(), manager.lv2_plugin_info().begin(), manager.lv2_plugin_info().end()); #endif + all_plugs.remove_if (invalid_instrument); all_plugs.sort (pluginsort); _instrument_list = ListStore::create(_instrument_list_columns); @@ -104,20 +115,40 @@ InstrumentSelector::build_instrument_list() row[_instrument_list_columns.name] = _("-none-"); uint32_t n = 1; - for (PluginInfoList::const_iterator i = all_plugs.begin(); i != all_plugs.end(); ++i) { - if (manager.get_status(*i) == PluginManager::Hidden) { - continue; + std::string prev; + for (PluginInfoList::const_iterator i = all_plugs.begin(); i != all_plugs.end();) { + PluginInfoPtr p = *i; + ++i; + bool suffix_type = prev == p->name; + if (!suffix_type && i != all_plugs.end() && (*i)->name == p->name) { + suffix_type = true; } - if ((*i)->is_instrument()) { - row = *(_instrument_list->append()); - row[_instrument_list_columns.name] = (*i)->name; - row[_instrument_list_columns.info_ptr] = *i; - if ((*i)->unique_id == "https://community.ardour.org/node/7596") { - _reasonable_synth_id = n; + row = *(_instrument_list->append()); + if (suffix_type) { + std::string pt; + switch (p->type) { + case AudioUnit: + pt = "AU"; + break; + case Windows_VST: + case LXVST: + case MacVST: + pt = "VST"; + break; + default: + pt = enum_2_string (p->type); } - n++; + row[_instrument_list_columns.name] = p->name + " (" + pt + ")"; + } else { + row[_instrument_list_columns.name] = p->name; + } + row[_instrument_list_columns.info_ptr] = p; + if (p->unique_id == "https://community.ardour.org/node/7596") { + _reasonable_synth_id = n; } + prev = p->name; + n++; } } -- cgit v1.2.3