extend filtering to VST + AU, tweak details, add filter-by-creator and by library
git-svn-id: svn://localhost/ardour2/trunk@2199 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
bb33e5d9f8
commit
41c0847c57
|
@ -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 ()
|
||||
{
|
||||
|
@ -297,44 +336,14 @@ PluginSelector::ladspa_refiller ()
|
|||
char ibuf[16], obuf[16];
|
||||
|
||||
lmodel->clear();
|
||||
|
||||
std::string filterstr;
|
||||
setup_filter_string (filterstr);
|
||||
|
||||
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
|
||||
|
||||
for (row = 0, i=plugs.begin(); i != plugs.end(); ++i, ++row) {
|
||||
snprintf (ibuf, sizeof(ibuf)-1, "%u", (*i)->n_inputs.n_total());
|
||||
snprintf (obuf, sizeof(obuf)-1, "%u", (*i)->n_outputs.n_total());
|
||||
|
||||
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, "%u", (*i)->n_inputs.n_total());
|
||||
snprintf (obuf, sizeof(obuf)-1, "%u", (*i)->n_outputs.n_total());
|
||||
|
||||
TreeModel::Row newrow = *(lmodel->append());
|
||||
newrow[lcols.name] = (*i)->name.c_str();
|
||||
|
@ -350,12 +359,6 @@ PluginSelector::ladspa_refiller ()
|
|||
|
||||
#ifdef VST_SUPPORT
|
||||
|
||||
void
|
||||
PluginSelector::_vst_refiller (void *arg)
|
||||
{
|
||||
((PluginSelector *) arg)->vst_refiller ();
|
||||
}
|
||||
|
||||
void
|
||||
PluginSelector::vst_refiller ()
|
||||
{
|
||||
|
@ -365,17 +368,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 +403,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 +412,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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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();
|
||||
};
|
||||
|
|
|
@ -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>
|
||||
|
@ -59,22 +60,23 @@ 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;
|
||||
ChanCount n_inputs;
|
||||
ChanCount n_outputs;
|
||||
ARDOUR::PluginType type;
|
||||
|
||||
|
||||
long unique_id;
|
||||
|
||||
virtual PluginPtr load (Session& session) = 0;
|
||||
|
||||
protected:
|
||||
friend class PluginManager;
|
||||
string path;
|
||||
uint32_t index;
|
||||
};
|
||||
|
||||
|
|
|
@ -251,6 +251,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 = ChanCount();
|
||||
|
@ -396,6 +397,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;
|
||||
|
|
Loading…
Reference in New Issue
Block a user