summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2007-07-31 16:03:53 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2007-07-31 16:03:53 +0000
commit84b45aefded6de0aaa1bc8fe9f3632ada686e6e0 (patch)
treeac8125b2edc81892c4854e8912744013296ba4e6
parente57dd28f3316cc026c11725ff6da52f8d559d079 (diff)
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
-rw-r--r--gtk2_ardour/plugin_selector.cc148
-rw-r--r--gtk2_ardour/plugin_selector.h4
-rw-r--r--libs/ardour/ardour/plugin.h6
-rw-r--r--libs/ardour/plugin_manager.cc2
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();
@@ -351,12 +361,6 @@ PluginSelector::ladspa_refiller ()
#ifdef VST_SUPPORT
void
-PluginSelector::_vst_refiller (void *arg)
-{
- ((PluginSelector *) arg)->vst_refiller ();
-}
-
-void
PluginSelector::vst_refiller ()
{
guint row;
@@ -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);
}
@@ -397,12 +405,6 @@ PluginSelector::vst_display_selection_changed()
#ifdef HAVE_AUDIOUNIT
void
-PluginSelector::_au_refiller (void *arg)
-{
- ((PluginSelector *) arg)->au_refiller ();
-}
-
-void
PluginSelector::au_refiller ()
{
guint row;
@@ -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<Gtk::ListStore> vmodel;
Glib::RefPtr<Gtk::TreeSelection> 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<Gtk::ListStore> aumodel;
Glib::RefPtr<Gtk::TreeSelection> 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 <boost/shared_ptr.hpp>
#include <sigc++/signal.h>
+#include <glibmm/ustring.h>
#include <pbd/statefuldestructible.h>
#include <pbd/controllable.h>
@@ -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;