diff options
Diffstat (limited to 'gtk2_ardour/plugin_selector.cc')
-rw-r--r-- | gtk2_ardour/plugin_selector.cc | 276 |
1 files changed, 111 insertions, 165 deletions
diff --git a/gtk2_ardour/plugin_selector.cc b/gtk2_ardour/plugin_selector.cc index c6b41a6603..f2a32321d0 100644 --- a/gtk2_ardour/plugin_selector.cc +++ b/gtk2_ardour/plugin_selector.cc @@ -23,7 +23,6 @@ #include <gtkmm/table.h> #include <gtkmm/button.h> #include <gtkmm/notebook.h> -#include <gtkmm/ctree.h> #include <ardour/plugin_manager.h> #include <ardour/plugin.h> @@ -37,35 +36,8 @@ using namespace ARDOUR; -static const gchar *i_titles[] = { - N_("Available LADSPA plugins"), - N_("Type"), - N_("# Inputs"), - N_("# Outputs"), - 0 -}; - -#ifdef VST_SUPPORT -static const gchar *vst_titles[] = { - N_("Available VST plugins"), - N_("# Inputs"), - N_("# Outputs"), - 0 -}; -#endif - -static const gchar *o_titles[] = { - N_("To be added"), - 0 -}; - PluginSelector::PluginSelector (PluginManager *mgr) - : ArdourDialog ("plugin selector"), - ladspa_display (_input_refiller, this, internationalize (i_titles), false, true), -#ifdef VST_SUPPORT - vst_display (_vst_refiller, this, internationalize (vst_titles), false, true), -#endif - o_selector (_output_refiller, this, internationalize (o_titles), false, true) + : ArdourDialog ("plugin selector") { set_position (Gtk::WIN_POS_MOUSE); set_name ("PluginSelectorWindow"); @@ -78,6 +50,41 @@ PluginSelector::PluginSelector (PluginManager *mgr) o_selected_plug = -1; i_selected_plug = 0; + lmodel = Gtk::ListStore::create(lcols); + ladspa_display.set_model (lmodel); + ladspa_display.append_column (_("Available LADSPA plugins"), lcols.name); + ladspa_display.append_column (_("Type"), lcols.type); + ladspa_display.append_column (_("# Inputs"),lcols.ins); + ladspa_display.append_column (_("# Outputs"), lcols.outs); + ladspa_display.set_headers_visible (true); + ladspa_display.set_reorderable (false); + + amodel = Gtk::ListStore::create(acols); + added_list.set_model (amodel); + added_list.append_column (_("To be added"), acols.text); + added_list.set_headers_visible (true); + added_list.set_reorderable (false); + + for (int i = 0; i <=3; i++) { + Gtk::TreeView::Column* column = ladspa_display.get_column(i); + column->set_sort_column(i); + } + +#ifdef VST_SUPPORT + vmodel = ListStore::create(vcols); + vst_display.set_model (vmodel); + vst_display.append_column (_("Available plugins"), vcols.name); + vst_display.append_column (_("# Inputs"), vcols.ins); + vst_display.append_column (_("# Outputs"), vcols.outs); + vst_display.set_headers_visible (true); + vst_display.set_reorderable (false); + + for (int i = 0; i <=2; i++) { + column = vst_display.get_column(i); + column->set_sort_column(i); + } +#endif + Gtk::Button *btn_add = manage(new Gtk::Button(_("Add"))); ARDOUR_UI::instance()->tooltips().set_tip(*btn_add, _("Add a plugin to the effect list")); Gtk::Button *btn_remove = manage(new Gtk::Button(_("Remove"))); @@ -101,7 +108,7 @@ PluginSelector::PluginSelector (PluginManager *mgr) table->attach(*btn_remove, 3, 4, 5, 6, Gtk::FILL, Gtk::FILL, 5, 5); table->attach(*btn_update, 5, 6, 5, 6, Gtk::FILL, Gtk::FILL, 5, 5); - table->attach(o_selector, 0, 7, 7, 9); + table->attach(added_list, 0, 7, 7, 9); table->attach(*btn_ok, 1, 3, 9, 10, Gtk::FILL, Gtk::FILL, 5, 5); table->attach(*btn_cancel, 3, 4, 9, 10, Gtk::FILL, Gtk::FILL, 5, 5); add (*table); @@ -116,30 +123,24 @@ PluginSelector::PluginSelector (PluginManager *mgr) table->set_name("PluginSelectorTable"); //ladspa_display.set_name("PluginSelectorDisplay"); - ladspa_display.clist().set_name("PluginSelectorList"); - o_selector.clist().set_name("PluginSelectorList"); + ladspa_display.set_name("PluginSelectorList"); + added_list.set_name("PluginSelectorList"); - ladspa_display.clist().column_titles_active(); - ladspa_display.clist().column(0).set_auto_resize (false); - ladspa_display.clist().column(0).set_width(470); + //ladspa_display.clist().column(0).set_auto_resize (false); + //ladspa_display.clist().column(0).set_width(470); - ladspa_display.clist().column(1).set_auto_resize (true); - o_selector.clist().column(0).set_auto_resize (true); + //ladspa_display.clist().column(1).set_auto_resize (true); + //o_selector.clist().column(0).set_auto_resize (true); - ladspa_display.selection_made.connect (mem_fun(*this, &PluginSelector::i_plugin_selected)); - ladspa_display.choice_made.connect(mem_fun(*this, &PluginSelector::i_plugin_chosen)); - ladspa_display.clist().click_column.connect(bind (mem_fun(*this, &PluginSelector::column_clicked), ladspa_display.clist().gobj())); + ladspa_display.signal_button_press_event().connect_notify (mem_fun(*this, &PluginSelector::row_clicked)); #ifdef VST_SUPPORT if (Config->get_use_vst()) { - vst_display.selection_made.connect (mem_fun(*this, &PluginSelector::i_plugin_selected)); - vst_display.choice_made.connect(mem_fun(*this, &PluginSelector::i_plugin_chosen)); - vst_display.clist().click_column.connect(bind (mem_fun(*this, &PluginSelector::column_clicked), vst_display.clist().gobj())); + vst_display.signal_button_press_event().connect_notify (mem_fun(*this, &PluginSelector::row_clicked)); } #endif - o_selector.selection_made.connect(mem_fun(*this, &PluginSelector::o_plugin_selected)); - o_selector.choice_made.connect(mem_fun(*this,&PluginSelector::o_plugin_chosen)); + btn_update->signal_clicked().connect (mem_fun(*this, &PluginSelector::btn_update_clicked)); - btn_add->clicked.connect(mem_fun(*this, &PluginSelector::btn_add_clicked)); + btn_add->signal_clicked().connect(mem_fun(*this, &PluginSelector::btn_add_clicked)); btn_remove->signal_clicked().connect(mem_fun(*this, &PluginSelector::btn_remove_clicked)); btn_ok->signal_clicked().connect(mem_fun(*this, &PluginSelector::btn_ok_clicked)); btn_cancel->signal_clicked().connect(mem_fun(*this,&PluginSelector::btn_cancel_clicked)); @@ -148,6 +149,13 @@ PluginSelector::PluginSelector (PluginManager *mgr) } void +PluginSelector::row_clicked(GdkEventButton* event) +{ + if (event->type == GDK_2BUTTON_PRESS) + btn_add_clicked(); +} + +void PluginSelector::set_session (Session* s) { ENSURE_GUI_THREAD(bind (mem_fun(*this, &PluginSelector::set_session), s)); @@ -160,16 +168,18 @@ PluginSelector::set_session (Session* s) } void -PluginSelector::_input_refiller (Gtk::CList &list, void *arg) +PluginSelector::_input_refiller (void *arg) { - ((PluginSelector *) arg)->input_refiller (list); + ((PluginSelector *) arg)->input_refiller (); } +/* void -PluginSelector::_output_refiller (Gtk::CList &list, void *arg) +PluginSelector::_output_refiller (void *arg) { - ((PluginSelector *) arg)->output_refiller (list); + ((PluginSelector *) arg)->output_refiller (); } +*/ int compare(const void *left, const void *right) { @@ -177,9 +187,9 @@ int compare(const void *left, const void *right) } void -PluginSelector::input_refiller (Gtk::CList &clist) +PluginSelector::input_refiller () { - const gchar *rowdata[4]; + //const gchar *rowdata[4]; guint row; list<PluginInfo *> &plugs = manager->ladspa_plugin_info (); list<PluginInfo *>::iterator i; @@ -187,64 +197,65 @@ PluginSelector::input_refiller (Gtk::CList &clist) // Insert into GTK list for (row = 0, i=plugs.begin(); i != plugs.end(); ++i, ++row) { - rowdata[0] = (*i)->name.c_str(); - rowdata[1] = (*i)->category.c_str(); + //rowdata[0] = (*i)->name.c_str(); + //rowdata[1] = (*i)->category.c_str(); snprintf (ibuf, sizeof(ibuf)-1, "%d", (*i)->n_inputs); snprintf (obuf, sizeof(obuf)-1, "%d", (*i)->n_outputs); - rowdata[2] = ibuf; - rowdata[3] = obuf; - clist.insert_row (row, rowdata); - clist.rows().back().set_data (*i); + Gtk::TreeModel::Row newrow = *(lmodel->append()); + newrow[lcols.name] = (*i)->name.c_str(); + newrow[lcols.type] = (*i)->category.c_str(); + newrow[lcols.ins] = ibuf; + newrow[lcols.outs] = obuf; + newrow[lcols.plugin] = *i; + //clist.insert_row (row, rowdata); + //clist.rows().back().set_data (*i); } - clist.set_sort_column (0); - clist.sort (); + //clist.set_sort_column (0); + //clist.sort (); } #ifdef VST_SUPPORT void -PluginSelector::_vst_refiller (Gtk::CList &list, void *arg) +PluginSelector::_vst_refiller (void *arg) { - ((PluginSelector *) arg)->vst_refiller (list); + ((PluginSelector *) arg)->vst_refiller (); } void -PluginSelector::vst_refiller (Gtk::CList &clist) +PluginSelector::vst_refiller () { - const gchar *rowdata[3]; guint row; list<PluginInfo *> &plugs = manager->vst_plugin_info (); list<PluginInfo *>::iterator i; char ibuf[16], obuf[16]; - if (!Config->get_use_vst()) { - return; - } - // Insert into GTK list - - for (row = 0, i = plugs.begin(); i != plugs.end(); ++i, ++row) { - rowdata[0] = (*i)->name.c_str(); + for (row = 0, i=plugs.begin(); i != plugs.end(); ++i, ++row) { + //rowdata[0] = (*i)->name.c_str(); + //rowdata[1] = (*i)->category.c_str(); snprintf (ibuf, sizeof(ibuf)-1, "%d", (*i)->n_inputs); snprintf (obuf, sizeof(obuf)-1, "%d", (*i)->n_outputs); - rowdata[1] = ibuf; - rowdata[2] = obuf; - clist.insert_row (row, rowdata); - clist.rows().back().set_data (*i); + Gtk::TreeModel::Row newrow = *(vmodel->append()); + newrow[vcols.name] = (*i)->name.c_str(); + newrow[vcols.ins] = ibuf; + newrow[vcols.outs] = obuf; + newrow[vcols.plugin] = i; } - clist.set_sort_column (0); - clist.sort (); + //clist.set_sort_column (0); + //clist.sort (); } #endif +/* void -PluginSelector::output_refiller (Gtk::CList &clist) +PluginSelector::output_refiller () { const gchar *rowdata[2]; guint row; @@ -258,59 +269,7 @@ PluginSelector::output_refiller (Gtk::CList &clist) clist.rows().back().set_data (*i); } } - -void -PluginSelector::i_plugin_chosen (Gtkmm2ext::Selector *selector, - Gtkmm2ext::SelectionResult *res) -{ - if (res) { - // get text for name column (0) - i_selected_plug = static_cast<PluginInfo*> (selector->clist().row(res->row).get_data()); - //i_selected_plug = *res->text; - } else { - i_selected_plug = 0; - } -} - -void -PluginSelector::i_plugin_selected (Gtkmm2ext::Selector *selector, - Gtkmm2ext::SelectionResult *res) -{ - if (res) { - added_plugins.push_back (static_cast<PluginInfo*> (selector->clist().row(res->row).get_data())); - //added_plugins.push_back(*(res->text)); - o_selector.rescan(); - } -} - -void -PluginSelector::o_plugin_chosen (Gtkmm2ext::Selector *selector, - Gtkmm2ext::SelectionResult *res) -{ - if (res && res->text) { - o_selected_plug = res->row; - } else { - o_selected_plug = -1; - } - -} - -void -PluginSelector::o_plugin_selected (Gtkmm2ext::Selector *selector, - Gtkmm2ext::SelectionResult *res) -{ - if(res && res->text){ - gint row = 0; - list<PluginInfo*>::iterator i = added_plugins.begin(); - while (row < res->row){ - i++; - row++; - } - added_plugins.erase(i); - o_selector.rescan(); - o_selected_plug = -1; - } -} +*/ void PluginSelector::use_plugin (PluginInfo* pi) @@ -331,10 +290,26 @@ PluginSelector::use_plugin (PluginInfo* pi) void PluginSelector::btn_add_clicked() { - if (i_selected_plug) { - added_plugins.push_back (i_selected_plug); - o_selector.rescan(); + bool vst = notebook.get_current_page(); // 0 = LADSPA, 1 = VST + std::string name; + ARDOUR::PluginInfo *pi; + Gtk::TreeModel::Row newrow = *(amodel->append()); + + if (vst) { +#ifdef VST_SUPPORT + Gtk::TreeModel::Row row = *(vst_display.get_selection()->get_selected()); + name = row[vcols.name]; + pi = row[vcols.plugin]; + added_plugins.push_back (row[vcols.plugin]); +#endif + } else { + Gtk::TreeModel::Row row = *(ladspa_display.get_selection()->get_selected()); + name = row[lcols.name]; + pi = row[lcols.plugin]; + added_plugins.push_back (row[lcols.plugin]); } + newrow[acols.text] = name; + newrow[acols.plugin] = pi; } void @@ -348,7 +323,7 @@ PluginSelector::btn_remove_clicked() row++; } added_plugins.erase(i); - o_selector.rescan(); + //o_selector.rescan(); o_selected_plug = -1; } } @@ -357,8 +332,6 @@ PluginSelector::btn_remove_clicked() void PluginSelector::btn_ok_clicked() { - using namespace Gtk::CList_Helpers; - list<PluginInfo*>::iterator i; for (i = added_plugins.begin(); i != added_plugins.end(); ++i){ @@ -367,23 +340,6 @@ PluginSelector::btn_ok_clicked() hide(); added_plugins.clear(); - o_selector.rescan(); - i_selected_plug = 0; - o_selected_plug = -1; - - SelectionList s_list = ladspa_display.clist().selection(); - SelectionList::iterator s = s_list.begin(); - if (s != s_list.end()) { - (*s).unselect(); - } - -#ifdef VST_SUPPORT - SelectionList v_list = vst_display.clist().selection(); - SelectionList::iterator v = v_list.begin(); - if (v != v_list.end()) { - (*v).unselect(); - } -#endif } void @@ -391,16 +347,13 @@ PluginSelector::btn_cancel_clicked() { hide(); added_plugins.clear(); - o_selector.rescan(); - i_selected_plug = 0; - o_selected_plug = -1; } void PluginSelector::btn_update_clicked() { manager->refresh (); - ladspa_display.rescan (); + input_refiller (); } gint @@ -409,10 +362,3 @@ PluginSelector::wm_close(GdkEventAny* ev) btn_cancel_clicked(); return TRUE; } - -void -PluginSelector::column_clicked (int column, GtkCList* clist) -{ - gtk_clist_set_sort_column (clist, column); - gtk_clist_sort (clist); -} |