mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-15 19:16:40 +01:00
Factor out instrument selector.
This commit is contained in:
parent
49b7a46805
commit
10ad55fcf5
6 changed files with 161 additions and 77 deletions
92
gtk2_ardour/instrument_selector.cc
Normal file
92
gtk2_ardour/instrument_selector.cc
Normal file
|
|
@ -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];
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue