From 84b45aefded6de0aaa1bc8fe9f3632ada686e6e0 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Tue, 31 Jul 2007 16:03:53 +0000 Subject: extend filtering to VST + AU, tweak details, add filter-by-creator and by library git-svn-id: svn://localhost/ardour2/branches/2.0-ongoing@2200 d708f5d6-7413-0410-9779-e7cbd77b26cf --- gtk2_ardour/plugin_selector.cc | 148 ++++++++++++++++++++++------------------- gtk2_ardour/plugin_selector.h | 4 +- libs/ardour/ardour/plugin.h | 6 +- libs/ardour/plugin_manager.cc | 2 + 4 files changed, 86 insertions(+), 74 deletions(-) diff --git a/gtk2_ardour/plugin_selector.cc b/gtk2_ardour/plugin_selector.cc index e0f0be6e0c..6a2b334013 100644 --- a/gtk2_ardour/plugin_selector.cc +++ b/gtk2_ardour/plugin_selector.cc @@ -47,15 +47,16 @@ using namespace Gtk; using namespace std; static const char* _filter_mode_strings[] = { - N_("Plugin name"), - N_("Plugin type"), - N_("Plugin creator"), + N_("Name contains"), + N_("Type contains"), + N_("Author contains"), + N_("Library contains"), 0 }; PluginSelector::PluginSelector (PluginManager *mgr) : ArdourDialog (_("ardour: plugins"), true, false), - filter_button (_("Clear")) + filter_button (Stock::CLEAR) { set_position (Gtk::WIN_POS_MOUSE); set_name ("PluginSelectorWindow"); @@ -81,7 +82,7 @@ PluginSelector::PluginSelector (PluginManager *mgr) amodel = Gtk::ListStore::create(acols); added_list.set_model (amodel); - added_list.append_column (_("Plugins to be Connected to Insert"), acols.text); + added_list.append_column (_("Plugins to be connected"), acols.text); added_list.set_headers_visible (true); added_list.set_reorderable (false); @@ -170,7 +171,7 @@ PluginSelector::PluginSelector (PluginManager *mgr) table->attach(*btn_add, 1, 2, 6, 7, FILL, FILL, 5, 5); table->attach(*btn_remove, 3, 4, 6, 7, FILL, FILL, 5, 5); - table->attach(*btn_update, 5, 6, 7, 8, FILL, FILL, 5, 5); + table->attach(*btn_update, 5, 6, 6, 7, FILL, FILL, 5, 5); table->attach(ascroller, 0, 7, 8, 10); @@ -288,6 +289,44 @@ PluginSelector::set_session (Session* s) } } +bool +PluginSelector::show_this_plugin (PluginInfoPtr& info, const std::string& filterstr) +{ + std::string compstr; + std::string mode = filter_mode.get_active_text (); + + if (!filterstr.empty()) { + + if (mode == _("Name contains")) { + compstr = info->name; + } else if (mode == _("Type contains")) { + compstr = info->category; + } else if (mode == _("Author contains")) { + compstr = info->creator; + } else if (mode == _("Library contains")) { + compstr = info->path; + } + + transform (compstr.begin(), compstr.end(), compstr.begin(), ::toupper); + + if (compstr.find (filterstr) != string::npos) { + return true; + } else { + return false; + } + + } + + return true; +} + +void +PluginSelector::setup_filter_string (string& filterstr) +{ + filterstr = filter_entry.get_text (); + transform (filterstr.begin(), filterstr.end(), filterstr.begin(), ::toupper); +} + void PluginSelector::ladspa_refiller () { @@ -298,44 +337,15 @@ PluginSelector::ladspa_refiller () lmodel->clear(); - string mode = filter_mode.get_active_text (); - std::string compstr; - std::string filterstr = filter_entry.get_text (); - - transform (filterstr.begin(), filterstr.end(), filterstr.begin(), ::toupper); - - // Insert into GTK list + std::string filterstr; + setup_filter_string (filterstr); for (row = 0, i=plugs.begin(); i != plugs.end(); ++i, ++row) { - snprintf (ibuf, sizeof(ibuf)-1, "%d", (*i)->n_inputs); - snprintf (obuf, sizeof(obuf)-1, "%d", (*i)->n_outputs); - bool add; - - add = false; - - if (!filterstr.empty()) { - - if (mode == _("Plugin name")) { - compstr = (*i)->name; - } else if (mode == _("Plugin type")) { - compstr = (*i)->category; - } else if (mode == _("Plugin creator")) { - compstr == "foo"; - } - - transform (compstr.begin(), compstr.end(), compstr.begin(), ::toupper); - - if (compstr.find (filterstr) != string::npos) { - add = true; - } - - } else { - add = true; - } - - if (add) { + if (show_this_plugin (*i, filterstr)) { + snprintf (ibuf, sizeof(ibuf)-1, "%d", (*i)->n_inputs); + snprintf (obuf, sizeof(obuf)-1, "%d", (*i)->n_outputs); TreeModel::Row newrow = *(lmodel->append()); newrow[lcols.name] = (*i)->name.c_str(); newrow[lcols.type] = (*i)->category.c_str(); @@ -350,12 +360,6 @@ PluginSelector::ladspa_refiller () #ifdef VST_SUPPORT -void -PluginSelector::_vst_refiller (void *arg) -{ - ((PluginSelector *) arg)->vst_refiller (); -} - void PluginSelector::vst_refiller () { @@ -365,17 +369,21 @@ PluginSelector::vst_refiller () char ibuf[16], obuf[16]; vmodel->clear(); - // Insert into GTK list + std::string filterstr; + setup_filter_string (filterstr); + for (row = 0, i=plugs.begin(); i != plugs.end(); ++i, ++row) { - snprintf (ibuf, sizeof(ibuf)-1, "%d", (*i)->n_inputs); - snprintf (obuf, sizeof(obuf)-1, "%d", (*i)->n_outputs); - - TreeModel::Row newrow = *(vmodel->append()); - newrow[vcols.name] = (*i)->name.c_str(); - newrow[vcols.ins] = ibuf; - newrow[vcols.outs] = obuf; - newrow[vcols.plugin] = *i; + if (show_this_plugin (*i, filterstr)) { + snprintf (ibuf, sizeof(ibuf)-1, "%d", (*i)->n_inputs); + snprintf (obuf, sizeof(obuf)-1, "%d", (*i)->n_outputs); + + TreeModel::Row newrow = *(vmodel->append()); + newrow[vcols.name] = (*i)->name.c_str(); + newrow[vcols.ins] = ibuf; + newrow[vcols.outs] = obuf; + newrow[vcols.plugin] = *i; + } } vmodel->set_sort_column (0, SORT_ASCENDING); } @@ -396,12 +404,6 @@ PluginSelector::vst_display_selection_changed() #ifdef HAVE_AUDIOUNIT -void -PluginSelector::_au_refiller (void *arg) -{ - ((PluginSelector *) arg)->au_refiller (); -} - void PluginSelector::au_refiller () { @@ -411,18 +413,24 @@ PluginSelector::au_refiller () char ibuf[16], obuf[16]; aumodel->clear(); - // Insert into GTK list + std::string filterstr; + setup_filter_string (filterstr); + for (row = 0, i=plugs.begin(); i != plugs.end(); ++i, ++row) { - snprintf (ibuf, sizeof(ibuf)-1, "%d", (*i)->n_inputs); - snprintf (obuf, sizeof(obuf)-1, "%d", (*i)->n_outputs); - - TreeModel::Row newrow = *(aumodel->append()); - newrow[aucols.name] = (*i)->name.c_str(); - newrow[aucols.ins] = ibuf; - newrow[aucols.outs] = obuf; - newrow[aucols.plugin] = *i; + if (show_this_plugin (*i, filterstr)) { + + snprintf (ibuf, sizeof(ibuf)-1, "%d", (*i)->n_inputs); + snprintf (obuf, sizeof(obuf)-1, "%d", (*i)->n_outputs); + + TreeModel::Row newrow = *(aumodel->append()); + newrow[aucols.name] = (*i)->name.c_str(); + newrow[aucols.ins] = ibuf; + newrow[aucols.outs] = obuf; + newrow[aucols.plugin] = *i; + } } + aumodel->set_sort_column (0, SORT_ASCENDING); } diff --git a/gtk2_ardour/plugin_selector.h b/gtk2_ardour/plugin_selector.h index 54b4b006a4..5994e7b3ef 100644 --- a/gtk2_ardour/plugin_selector.h +++ b/gtk2_ardour/plugin_selector.h @@ -113,7 +113,6 @@ class PluginSelector : public ArdourDialog Glib::RefPtr vmodel; Glib::RefPtr vselection; Gtk::TreeView vst_display; - static void _vst_refiller (void *); void vst_refiller (); void vst_display_selection_changed(); #endif // VST_SUPPORT @@ -136,7 +135,6 @@ class PluginSelector : public ArdourDialog Glib::RefPtr aumodel; Glib::RefPtr auselection; Gtk::TreeView au_display; - static void _au_refiller (void *); void au_refiller (); void au_display_selection_changed(); #endif //HAVE_AUDIOUNIT @@ -156,6 +154,8 @@ class PluginSelector : public ArdourDialog void use_plugin (ARDOUR::PluginInfoPtr); void cleanup (); void refill (); + bool show_this_plugin (ARDOUR::PluginInfoPtr&, const std::string&); + void setup_filter_string (std::string&); void set_correct_focus(); }; diff --git a/libs/ardour/ardour/plugin.h b/libs/ardour/ardour/plugin.h index c7708e3690..256549526e 100644 --- a/libs/ardour/ardour/plugin.h +++ b/libs/ardour/ardour/plugin.h @@ -22,6 +22,7 @@ #include #include +#include #include #include @@ -53,11 +54,13 @@ class PluginInfo { PluginInfo () { } PluginInfo (const PluginInfo &o) : name(o.name), n_inputs(o.n_inputs), n_outputs(o.n_outputs), - unique_id(o.unique_id), path (o.path), index(o.index) {} + path (o.path), unique_id(o.unique_id), index(o.index) {} virtual ~PluginInfo () { } string name; string category; + Glib::ustring creator; + Glib::ustring path; uint32_t n_inputs; uint32_t n_outputs; ARDOUR::PluginType type; @@ -68,7 +71,6 @@ class PluginInfo { protected: friend class PluginManager; - string path; uint32_t index; }; diff --git a/libs/ardour/plugin_manager.cc b/libs/ardour/plugin_manager.cc index 5fa04c41f1..bfb92cec2b 100644 --- a/libs/ardour/plugin_manager.cc +++ b/libs/ardour/plugin_manager.cc @@ -248,6 +248,7 @@ PluginManager::ladspa_discover (string path) PluginInfoPtr info(new LadspaPluginInfo); info->name = descriptor->Name; info->category = get_ladspa_category(descriptor->UniqueID); + info->creator = descriptor->Maker; info->path = path; info->index = i; info->n_inputs = 0; @@ -393,6 +394,7 @@ PluginManager::vst_discover (string path) info->category = "VST"; info->path = path; + // need to set info->creator but FST doesn't provide it info->index = 0; info->n_inputs = finfo->numInputs; info->n_outputs = finfo->numOutputs; -- cgit v1.2.3