From 10ad55fcf59c6a89ed42c9a78024e184e153d81e Mon Sep 17 00:00:00 2001 From: David Robillard Date: Wed, 24 Dec 2014 18:39:15 -0500 Subject: Factor out instrument selector. --- gtk2_ardour/instrument_selector.cc | 92 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 gtk2_ardour/instrument_selector.cc (limited to 'gtk2_ardour/instrument_selector.cc') diff --git a/gtk2_ardour/instrument_selector.cc b/gtk2_ardour/instrument_selector.cc new file mode 100644 index 0000000000..5dfa091897 --- /dev/null +++ b/gtk2_ardour/instrument_selector.cc @@ -0,0 +1,92 @@ +/* + Copyright (C) 2003-2014 Paul Davis + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#include "ardour/plugin_manager.h" + +#include "instrument_selector.h" + +#include "i18n.h" + +using namespace Gtk; +using namespace ARDOUR; + +InstrumentSelector::InstrumentSelector() + : _reasonable_synth_id(0) +{ + build_instrument_list(); + set_model(_instrument_list); + pack_start(_instrument_list_columns.name); + set_active(_reasonable_synth_id); + set_button_sensitivity(Gtk::SENSITIVITY_AUTO); +} + +void +InstrumentSelector::build_instrument_list() +{ + PluginManager& manager = PluginManager::instance(); + + PluginInfoList all_plugs; + 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); + + TreeModel::Row row = *(_instrument_list->append()); + row[_instrument_list_columns.info_ptr] = PluginInfoPtr(); + 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; + } + + 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; + } + n++; + } + } +} + +PluginInfoPtr +InstrumentSelector::selected_instrument() +{ + TreeModel::iterator iter = get_active(); + if (!iter) { + return PluginInfoPtr(); + } + + const TreeModel::Row& row = (*iter); + return row[_instrument_list_columns.info_ptr]; +} -- cgit v1.2.3