int MixerStrip::scrollbar_height = 0;
MixerStrip::MixerStrip (Mixer_UI& mx, Session& sess, bool in_mixer)
- : AxisView(sess)
+ : AxisView(sess)
, RouteUI (sess)
,_mixer(mx)
, _mixer_owned (in_mixer)
- , processor_box (sess, mx.plugin_selector(), mx.selection(), this, in_mixer)
+ , processor_box (sess, sigc::mem_fun(*this, &MixerStrip::plugin_selector), mx.selection(), this, in_mixer)
, gpm (sess)
, panners (sess)
, _mono_button (_("Mono"))
, button_table (3, 2)
, middle_button_table (1, 2)
- , bottom_button_table (1, 2)
+ , bottom_button_table (1, 2)
, meter_point_label (_("pre"))
- , comment_button (_("Comments"))
-
+ , comment_button (_("Comments"))
{
init ();
}
MixerStrip::MixerStrip (Mixer_UI& mx, Session& sess, boost::shared_ptr<Route> rt, bool in_mixer)
- : AxisView(sess)
+ : AxisView(sess)
, RouteUI (sess)
,_mixer(mx)
, _mixer_owned (in_mixer)
- , processor_box (sess, mx.plugin_selector(), mx.selection(), this, in_mixer)
+ , processor_box (sess, sigc::mem_fun(*this, &MixerStrip::plugin_selector), mx.selection(), this, in_mixer)
, gpm (sess)
, panners (sess)
, button_table (3, 2)
, middle_button_table (1, 2)
- , bottom_button_table (1, 2)
+ , bottom_button_table (1, 2)
, meter_point_label (_("pre"))
- , comment_button (_("Comments"))
-
+ , comment_button (_("Comments"))
{
init ();
set_button_names ();
{
panners.set_mono (_mono_button.get_active ());
}
+
+PluginSelector&
+MixerStrip::plugin_selector()
+{
+ return _mixer.plugin_selector();
+}
Width get_width_enum () const { return _width; }
void* width_owner () const { return _width_owner; }
- GainMeter& gain_meter() { return gpm; }
- PannerUI& panner_ui() { return panners; }
+ GainMeter& gain_meter() { return gpm; }
+ PannerUI& panner_ui() { return panners; }
+ PluginSelector& plugin_selector();
void fast_update ();
void set_embedded (bool);
Mixer_UI::Mixer_UI ()
: Window (Gtk::WINDOW_TOPLEVEL)
+ , _plugin_selector (0)
{
session = 0;
_strip_width = Config->get_default_narrow_ms() ? Narrow : Wide;
Route::SyncOrderKeys.connect (mem_fun (*this, &Mixer_UI::sync_order_keys));
- scroller_base.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK);
- scroller_base.set_name ("MixerWindow");
- scroller_base.signal_button_release_event().connect (mem_fun(*this, &Mixer_UI::strip_scroller_button_release));
+ scroller_base.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK);
+ scroller_base.set_name ("MixerWindow");
+ scroller_base.signal_button_release_event().connect (mem_fun(*this, &Mixer_UI::strip_scroller_button_release));
// add as last item of strip packer
strip_packer.pack_end (scroller_base, true, true);
signal_delete_event().connect (mem_fun (*this, &Mixer_UI::hide_window));
add_events (Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK);
- _plugin_selector = new PluginSelector (PluginManager::the_manager());
-
signal_configure_event().connect (mem_fun (*ARDOUR_UI::instance(), &ARDOUR_UI::configure_handler));
_selection.RoutesChanged.connect (mem_fun(*this, &Mixer_UI::follow_strip_selection));
route_groups_changed ();
- _plugin_selector->set_session (session);
+ if (_plugin_selector)
+ _plugin_selector->set_session (session);
if (_visible) {
show_window();
g->set_active (a, this);
}
+PluginSelector&
+Mixer_UI::plugin_selector()
+{
+ if (!_plugin_selector) {
+ _plugin_selector = new PluginSelector (PluginManager::the_manager());
+ _plugin_selector->set_session (session);
+ }
+ return *_plugin_selector;
+}
void connect_to_session (ARDOUR::Session *);
- PluginSelector& plugin_selector() { return *_plugin_selector; }
+ PluginSelector& plugin_selector();
void set_strip_width (Width);
Width get_strip_width () const { return _strip_width; }
Gdk::Color* ProcessorBox::active_processor_color;
Gdk::Color* ProcessorBox::inactive_processor_color;
-ProcessorBox::ProcessorBox (Session& sess, PluginSelector &plugsel,
- RouteRedirectSelection & rsel, MixerStrip* parent, bool owner_is_mixer)
+ProcessorBox::ProcessorBox (ARDOUR::Session& sess, sigc::slot<PluginSelector&> get_plugin_selector,
+ RouteRedirectSelection& rsel, MixerStrip* parent, bool owner_is_mixer)
: _session(sess)
, _parent_strip (parent)
, _owner_is_mixer (owner_is_mixer)
+ , _get_plugin_selector (get_plugin_selector)
, _placement(PreFader)
- , _plugin_selector(plugsel)
, _rr_selection(rsel)
{
if (get_colors) {
Gtk::MenuItem* plugin_menu_item = dynamic_cast<Gtk::MenuItem*>(ActionManager::get_widget("/processormenu/newplugin"));
if (plugin_menu_item) {
- plugin_menu_item->set_submenu (_plugin_selector.plugin_menu());
+ plugin_menu_item->set_submenu (_get_plugin_selector().plugin_menu());
}
paste_action->set_sensitive (!_rr_selection.processors.empty());
} else if (!processor && ev->button == 1 && ev->type == GDK_2BUTTON_PRESS) {
choose_plugin ();
- _plugin_selector.show_manager ();
+ _get_plugin_selector().show_manager ();
}
void
ProcessorBox::choose_plugin ()
{
- _plugin_selector.set_interested_object (*this);
+ _get_plugin_selector().set_interested_object (*this);
}
void
class ProcessorBox : public Gtk::HBox, public PluginInterestedObject
{
public:
- ProcessorBox (ARDOUR::Session&, PluginSelector &, RouteRedirectSelection &, MixerStrip* parent, bool owner_is_mixer = false);
+ ProcessorBox (ARDOUR::Session&, sigc::slot<PluginSelector&> get_plugin_selector,
+ RouteRedirectSelection&, MixerStrip* parent, bool owner_is_mixer = false);
~ProcessorBox ();
void set_route (boost::shared_ptr<ARDOUR::Route>);
bool ab_direction;
std::vector<sigc::connection> connections;
+ sigc::slot<PluginSelector&> _get_plugin_selector;
+
boost::shared_ptr<ARDOUR::Processor> _processor_being_created;
- ARDOUR::Placement _placement;
+ ARDOUR::Placement _placement;
- PluginSelector & _plugin_selector;
- RouteRedirectSelection & _rr_selection;
+ RouteRedirectSelection& _rr_selection;
void route_going_away ();
: ArdourDialog ("track/bus inspector"),
latency_apply_button (Stock::APPLY),
track_menu(0)
-
{
insert_box = 0;
_input_iosel = 0;
cleanup_processor_boxes();
// construct new redirect boxes
- insert_box = new ProcessorBox(*session, *_plugin_selector, _rr_selection, 0);
- insert_box->set_route (_route);
+ insert_box = new ProcessorBox(*session,
+ sigc::mem_fun(*this, &RouteParams_UI::plugin_selector), _rr_selection, 0);
+ insert_box->set_route (_route);
- redir_hpane.pack1 (*insert_box);
+ redir_hpane.pack1 (*insert_box);
insert_box->ProcessorSelected.connect (mem_fun(*this, &RouteParams_UI::redirect_selected));
insert_box->ProcessorUnselected.connect (mem_fun(*this, &RouteParams_UI::redirect_selected));
Gtk::ScrolledWindow route_select_scroller;
Gtk::Notebook notebook;
- Gtk::Frame input_frame;
- Gtk::Frame output_frame;
+ Gtk::Frame input_frame;
+ Gtk::Frame output_frame;
Gtk::HPaned redir_hpane;
- Gtk::Frame route_select_frame;
+ Gtk::Frame route_select_frame;
Gtk::HBox route_hpacker;
Gtk::VBox route_vpacker;
Gtk::HPaned right_hpane;
- Gtk::Frame route_choice_frame;
+ Gtk::Frame route_choice_frame;
- Gtk::Frame route_param_frame;
+ Gtk::Frame route_param_frame;
Gtk::VBox choice_vpacker;
/* treeview */
- struct RouteDisplayModelColumns : public Gtk::TreeModel::ColumnRecord {
+ struct RouteDisplayModelColumns : public Gtk::TreeModel::ColumnRecord {
RouteDisplayModelColumns() {
add(text);
add(route);
AUPluginCachedInfo cache;
- static PluginInfoList discover ();
+ static PluginInfoList* discover ();
static void get_names (CAComponentDescription&, std::string& name, Glib::ustring& maker);
static std::string stringify_descriptor (const CAComponentDescription&);
SLV2Value srate;
SLV2Value gtk_gui;
SLV2Value external_gui;
- SLV2Value logarithmic;
+ SLV2Value logarithmic;
};
public:
LV2PluginInfo (void* slv2_world, void* slv2_plugin);;
~LV2PluginInfo ();;
- static PluginInfoList discover (void* slv2_world);
+ static PluginInfoList* discover (void* slv2_world);
PluginPtr load (Session& session);
PluginManager ();
~PluginManager ();
- /* realtime plugin APIs */
-
- ARDOUR::PluginInfoList &vst_plugin_info () { return _vst_plugin_info; }
- ARDOUR::PluginInfoList &ladspa_plugin_info () { return _ladspa_plugin_info; }
- ARDOUR::PluginInfoList &lv2_plugin_info () { return _lv2_plugin_info; }
- ARDOUR::PluginInfoList &au_plugin_info () { return _au_plugin_info; }
+ ARDOUR::PluginInfoList &vst_plugin_info ();
+ ARDOUR::PluginInfoList &ladspa_plugin_info ();
+ ARDOUR::PluginInfoList &lv2_plugin_info ();
+ ARDOUR::PluginInfoList &au_plugin_info ();
void refresh ();
typedef std::set<FavoritePlugin> FavoritePluginList;
FavoritePluginList favorites;
- ARDOUR::PluginInfoList _vst_plugin_info;
- ARDOUR::PluginInfoList _ladspa_plugin_info;
- ARDOUR::PluginInfoList _lv2_plugin_info;
- ARDOUR::PluginInfoList _au_plugin_info;
+ ARDOUR::PluginInfoList _empty_plugin_info;
+ ARDOUR::PluginInfoList* _vst_plugin_info;
+ ARDOUR::PluginInfoList* _ladspa_plugin_info;
+ ARDOUR::PluginInfoList* _lv2_plugin_info;
+ ARDOUR::PluginInfoList* _au_plugin_info;
#ifdef HAVE_SLV2
LV2World* _lv2_world;
void add_vst_presets ();
void add_presets (std::string domain);
- int au_discover ();
void au_refresh ();
- int lv2_discover ();
void lv2_refresh ();
int vst_discover_from_path (std::string path);
return Glib::build_filename (ARDOUR::get_user_ardour_path(), "au_cache");
}
-PluginInfoList
+PluginInfoList*
AUPluginInfo::discover ()
{
XMLTree tree;
ARDOUR::BootMessage (_("Discovering AudioUnit plugins (could take some time ...)"));
}
- PluginInfoList plugs;
+ PluginInfoList* plugs = new PluginInfoList ();
discover_fx (plugs);
discover_music (plugs);
return PluginPtr();
}
-PluginInfoList
+PluginInfoList*
LV2PluginInfo::discover (void* lv2_world)
{
- PluginInfoList plugs;
+ PluginInfoList* plugs = new PluginInfoList;
LV2World* world = (LV2World*)lv2_world;
SLV2Plugins plugins = slv2_world_get_all_plugins(world->world);
- cerr << "LV2: Discovered " << slv2_plugins_size (plugins) << " plugins\n";
+ cerr << "LV2: Discovering " << slv2_plugins_size (plugins) << " plugins" << endl;
for (unsigned i=0; i < slv2_plugins_size(plugins); ++i) {
SLV2Plugin p = slv2_plugins_get_at(plugins, i);
info->unique_id = slv2_value_as_uri(slv2_plugin_get_uri(p));
info->index = 0; // Meaningless for LV2
- plugs.push_back (info);
+ plugs->push_back (info);
}
+ cerr << "Done LV2 discovery" << endl;
+
return plugs;
}
PluginManager* PluginManager::_manager = 0;
PluginManager::PluginManager ()
+ : _vst_plugin_info(0)
+ , _ladspa_plugin_info(0)
+ , _lv2_plugin_info(0)
+ , _au_plugin_info(0)
{
char* s;
string lrdf_path;
#endif
BootMessage (_("Discovering Plugins"));
-
- refresh ();
}
void
void
PluginManager::ladspa_refresh ()
{
- _ladspa_plugin_info.clear ();
+ if (_ladspa_plugin_info)
+ _ladspa_plugin_info->clear ();
+ else
+ _ladspa_plugin_info = new ARDOUR::PluginInfoList ();
static const char *standard_paths[] = {
"/usr/local/lib64/ladspa",
return ret;
}
-static bool rdf_filter (const string &str, void */*arg*/)
+static bool rdf_filter (const string &str, void* /*arg*/)
{
return str[0] != '.' &&
((str.find(".rdf") == (str.length() - 4)) ||
(str.find(".rdfs") == (str.length() - 5)) ||
- (str.find(".n3") == (str.length() - 3)));
+ (str.find(".n3") == (str.length() - 3)) ||
+ (str.find(".ttl") == (str.length() - 4)));
}
void
}
}
- if(_ladspa_plugin_info.empty()){
- _ladspa_plugin_info.push_back (info);
+ if(_ladspa_plugin_info->empty()){
+ _ladspa_plugin_info->push_back (info);
}
//Ensure that the plugin is not already in the plugin list.
bool found = false;
- for (PluginInfoList::const_iterator i = _ladspa_plugin_info.begin(); i != _ladspa_plugin_info.end(); ++i) {
+ for (PluginInfoList::const_iterator i = _ladspa_plugin_info->begin(); i != _ladspa_plugin_info->end(); ++i) {
if(0 == info->unique_id.compare((*i)->unique_id)){
found = true;
}
}
if(!found){
- _ladspa_plugin_info.push_back (info);
+ _ladspa_plugin_info->push_back (info);
}
}
void
PluginManager::lv2_refresh ()
{
- lv2_discover();
-}
-
-int
-PluginManager::lv2_discover ()
-{
+ delete _lv2_plugin_info;
_lv2_plugin_info = LV2PluginInfo::discover(_lv2_world);
- return 0;
}
#endif
void
PluginManager::au_refresh ()
{
- au_discover();
-}
-
-int
-PluginManager::au_discover ()
-{
+ delete _au_plugin_info;
_au_plugin_info = AUPluginInfo::discover();
- return 0;
}
#endif
void
PluginManager::vst_refresh ()
{
- _vst_plugin_info.clear ();
+ if (_vst_plugin_info)
+ _vst_plugin_info->clear ();
+ else
+ _vst_plugin_info = new ARDOUR::PluginInfoList();
if (vst_path.length() == 0) {
vst_path = "/usr/local/lib/vst:/usr/lib/vst";
info->n_outputs.set_audio (finfo->numOutputs);
info->type = ARDOUR::VST;
- _vst_plugin_info.push_back (info);
+ _vst_plugin_info->push_back (info);
fst_free_info (finfo);
return 0;
FavoritePlugin fp (t, id);
favorites.erase (fp);
}
+
+ARDOUR::PluginInfoList&
+PluginManager::vst_plugin_info ()
+{
+#ifdef VST_SUPPORT
+ if (!_vst_plugin_info)
+ vst_refresh();
+ return *_vst_plugin_info;
+#else
+ return _empty_plugin_info;
+#endif
+}
+
+ARDOUR::PluginInfoList&
+PluginManager::ladspa_plugin_info ()
+{
+ if (!_ladspa_plugin_info)
+ ladspa_refresh();
+ return *_ladspa_plugin_info;
+}
+
+ARDOUR::PluginInfoList&
+PluginManager::lv2_plugin_info ()
+{
+#ifdef HAVE_SLV2
+ if (!_lv2_plugin_info)
+ lv2_refresh();
+ return *_lv2_plugin_info;
+#else
+ return _empty_plugin_info;
+#endif
+}
+
+ARDOUR::PluginInfoList&
+PluginManager::au_plugin_info ()
+{
+#ifdef HAVE_AUDIOUNITS
+ if (!_au_plugin_info)
+ au_refresh();
+ return *_au_plugin_info;
+#else
+ return _empty_plugin_info;
+#endif
+}