: ArdourDialog (_("Plugin Manager"), true, false)
, search_clear_button (Stock::CLEAR)
, manager (mgr)
: ArdourDialog (_("Plugin Manager"), true, false)
, search_clear_button (Stock::CLEAR)
, manager (mgr)
manager.PluginListChanged.connect (plugin_list_changed_connection, invalidator (*this), boost::bind (&PluginSelector::build_plugin_menu, this), gui_context());
manager.PluginListChanged.connect (plugin_list_changed_connection, invalidator (*this), boost::bind (&PluginSelector::build_plugin_menu, this), gui_context());
- manager.PluginListChanged.connect (plugin_list_changed_connection, invalidator (*this), boost::bind (&PluginSelector::refill, this), gui_context());
- manager.PluginStatusesChanged.connect (plugin_list_changed_connection, invalidator (*this), boost::bind (&PluginSelector::plugin_status_changed, this, _1, _2, _3), gui_context());
- manager.PluginTagsChanged.connect(plugin_list_changed_connection, invalidator (*this), boost::bind (&PluginSelector::tags_changed, this, _1, _2, _3), gui_context());
+
+ //these are used to update the info of specific entries, while they are being edited
+ manager.PluginStatusChanged.connect (plugin_list_changed_connection, invalidator (*this), boost::bind (&PluginSelector::plugin_status_changed, this, _1, _2, _3), gui_context());
+ manager.PluginTagChanged.connect(plugin_list_changed_connection, invalidator (*this), boost::bind (&PluginSelector::tags_changed, this, _1, _2, _3), gui_context());
_search_ignore_checkbox->set_active(true);
_search_ignore_checkbox->set_name ("pluginlist filter button");
_search_ignore_checkbox->set_active(true);
_search_ignore_checkbox->set_name ("pluginlist filter button");
- Gtk::Label* search_help_label = manage (new Label(
- _("All search terms must be matched.\n"
- "Ex: \"ess dyn\" will find \"dynamic de-esser\" but not \"de-esser\"."
- ), Gtk::ALIGN_LEFT));
+ Gtk::Label* search_help_label1 = manage (new Label(
+ _("All search terms must be matched."), Gtk::ALIGN_LEFT));
+
+ Gtk::Label* search_help_label2 = manage (new Label(
+ _("Ex: \"ess dyn\" will find \"dynamic de-esser\" but not \"de-esser\"."), Gtk::ALIGN_LEFT));
search_table->attach (search_entry, 0, 3, 0, 1, FILL|EXPAND, FILL);
search_table->attach (search_clear_button, 3, 4, 0, 1, FILL, FILL);
search_table->attach (*_search_name_checkbox, 0, 1, 1, 2, FILL, FILL);
search_table->attach (*_search_tags_checkbox, 1, 2, 1, 2, FILL, FILL);
search_table->attach (*_search_ignore_checkbox,2, 3, 1, 2, FILL, FILL);
search_table->attach (search_entry, 0, 3, 0, 1, FILL|EXPAND, FILL);
search_table->attach (search_clear_button, 3, 4, 0, 1, FILL, FILL);
search_table->attach (*_search_name_checkbox, 0, 1, 1, 2, FILL, FILL);
search_table->attach (*_search_tags_checkbox, 1, 2, 1, 2, FILL, FILL);
search_table->attach (*_search_ignore_checkbox,2, 3, 1, 2, FILL, FILL);
- search_table->attach (*search_help_label, 0, 3, 2, 3, FILL, FILL);
+ search_table->attach (*search_help_label1, 0, 3, 2, 3, FILL, FILL);
+ search_table->attach (*search_help_label2, 0, 3, 3, 4, FILL, FILL);
_fil_creator_combo.set_text_ellipsize (Pango::ELLIPSIZE_END);
_fil_creator_combo.set_layout_ellipsize_width (PANGO_SCALE * 160 * UIConfiguration::instance ().get_ui_scale ());
_fil_creator_combo.set_text_ellipsize (Pango::ELLIPSIZE_END);
_fil_creator_combo.set_layout_ellipsize_width (PANGO_SCALE * 160 * UIConfiguration::instance ().get_ui_scale ());
- _fil_channel_combo.append_text_item (_("Audio I/O"));
- _fil_channel_combo.append_text_item (_("Mono Audio I/O"));
- _fil_channel_combo.append_text_item (_("Stereo Audio I/O"));
- _fil_channel_combo.append_text_item (_("MIDI I/O (only)"));
- _fil_channel_combo.append_text_item (_("Show All I/O"));
-#ifdef MIXBUS
- _fil_channel_combo.set_text (_("Audio I/O"));
-#else
- _fil_channel_combo.set_text (_("Show All I/O"));
-#endif
-
VBox* filter_vbox = manage (new VBox);
filter_vbox->pack_start (*_fil_effects_radio, false, false);
filter_vbox->pack_start (*_fil_instruments_radio, false, false);
VBox* filter_vbox = manage (new VBox);
filter_vbox->pack_start (*_fil_effects_radio, false, false);
filter_vbox->pack_start (*_fil_instruments_radio, false, false);
filter_vbox->pack_start (*_fil_all_radio, false, false);
filter_vbox->pack_start (_fil_type_combo, false, false);
filter_vbox->pack_start (_fil_creator_combo, false, false);
filter_vbox->pack_start (*_fil_all_radio, false, false);
filter_vbox->pack_start (_fil_type_combo, false, false);
filter_vbox->pack_start (_fil_creator_combo, false, false);
_fil_type_combo.StateChanged.connect (sigc::mem_fun (*this, &PluginSelector::refill));
_fil_creator_combo.StateChanged.connect (sigc::mem_fun (*this, &PluginSelector::refill));
_fil_type_combo.StateChanged.connect (sigc::mem_fun (*this, &PluginSelector::refill));
_fil_creator_combo.StateChanged.connect (sigc::mem_fun (*this, &PluginSelector::refill));
tag_reset_button = manage (new Button (_("Reset")));
tag_reset_button->signal_clicked().connect (sigc::mem_fun (*this, &PluginSelector::tag_reset_button_clicked));
tag_reset_button = manage (new Button (_("Reset")));
tag_reset_button->signal_clicked().connect (sigc::mem_fun (*this, &PluginSelector::tag_reset_button_clicked));
- Gtk::Label* tagging_help_label = manage (new Label(
- _("Enter space-separated, one-word Tags for the selected plugin.\n"
- "You can include dashes, colons or underscores in a Tag.\n"
- "Ex: \"dynamic de-esser vocal\" applies 3 Tags."
- ), Gtk::ALIGN_LEFT));
+ Gtk::Label* tagging_help_label1 = manage (new Label(
+ _("Enter space-separated, one-word Tags for the selected plugin."), Gtk::ALIGN_LEFT));
+
+ Gtk::Label* tagging_help_label2 = manage (new Label(
+ _("You can include dashes, colons or underscores in a Tag."), Gtk::ALIGN_LEFT));
+
+ Gtk::Label* tagging_help_label3 = manage (new Label(
+ _("Ex: \"dynamic de-esser vocal\" applies 3 Tags."), Gtk::ALIGN_LEFT));
int p = 0;
tagging_table->attach (*tag_entry, 0, 1, p, p+1, FILL|EXPAND, FILL);
tagging_table->attach (*tag_reset_button, 1, 2, p, p+1, FILL, FILL); p++;
int p = 0;
tagging_table->attach (*tag_entry, 0, 1, p, p+1, FILL|EXPAND, FILL);
tagging_table->attach (*tag_reset_button, 1, 2, p, p+1, FILL, FILL); p++;
- tagging_table->attach (*tagging_help_label, 0, 2, p, p+1, FILL, FILL); p++;
+ tagging_table->attach (*tagging_help_label1, 0, 2, p, p+1, FILL, FILL); p++;
+ tagging_table->attach (*tagging_help_label2, 0, 2, p, p+1, FILL, FILL); p++;
+ tagging_table->attach (*tagging_help_label3, 0, 2, p, p+1, FILL, FILL); p++;
- /* Filter "I/O" combobox */
-
- if (_fil_channel_combo.get_text() != _("Show All I/O") || info->reconfigurable_io ()) {
-
-#if 0
- if (info->reconfigurable_io ()) {
- return true; // who knows.... ?
- }
-#endif
-
- if (_fil_channel_combo.get_text() == _("Audio I/O")) {
- if ((info->n_inputs.n_audio() == 0 || info->n_outputs.n_audio() == 0)) {
- return false;
- }
- }
-
- if (_fil_channel_combo.get_text() == _("Mono Audio I/O")) {
- if (info->n_inputs.n_audio() != 1 || info->n_outputs.n_audio() != 1) {
- return false;
- }
- }
-
- if (_fil_channel_combo.get_text() == _("Stereo Audio I/O")) {
- if (info->n_inputs.n_audio() != 2 || info->n_outputs.n_audio() != 2) {
- return false;
- }
- }
-
- if (_fil_channel_combo.get_text() == _("MIDI I/O (only)")) {
- if ((info->n_inputs.n_audio() != 0 || info->n_outputs.n_audio() == 0)) {
- return false;
- }
- }
-
- }
-
_fil_favorites_radio->set_sensitive(false);
_fil_hidden_radio->set_sensitive(false);
_fil_all_radio->set_sensitive(false);
_fil_favorites_radio->set_sensitive(false);
_fil_hidden_radio->set_sensitive(false);
_fil_all_radio->set_sensitive(false);
_fil_favorites_radio->set_sensitive(true);
_fil_hidden_radio->set_sensitive(true);
_fil_all_radio->set_sensitive(true);
_fil_favorites_radio->set_sensitive(true);
_fil_hidden_radio->set_sensitive(true);
_fil_all_radio->set_sensitive(true);
+ plugin_display.set_model (Glib::RefPtr<Gtk::TreeStore>(0));
+
+ int sort_col;
+ SortType sort_type;
+ bool sorted = plugin_model->get_sort_column_id (sort_col, sort_type);
+
+ /* Disable sorting to gain performance */
+ plugin_model->set_sort_column (-2, SORT_ASCENDING);
+
} else {
snprintf (buf, sizeof(buf), "%d / %d", (*i)->n_inputs.n_audio(), (*i)->n_outputs.n_audio());
newrow[plugin_columns.audio_io] = buf;
} else {
snprintf (buf, sizeof(buf), "%d / %d", (*i)->n_inputs.n_audio(), (*i)->n_outputs.n_audio());
newrow[plugin_columns.audio_io] = buf;
- snprintf (buf, sizeof(buf), "%d / %d", (*i)->n_inputs.n_audio(), (*i)->n_outputs.n_audio());
+ snprintf (buf, sizeof(buf), "%d / %d", (*i)->n_inputs.n_midi(), (*i)->n_outputs.n_midi());
TreeModel::Row row = *(plugin_display.get_selection()->get_selected());
ARDOUR::PluginInfoPtr pi = row[plugin_columns.plugin];
TreeModel::Row row = *(plugin_display.get_selection()->get_selected());
ARDOUR::PluginInfoPtr pi = row[plugin_columns.plugin];
- manager.set_tags (pi->type, pi->unique_id, tag_entry->get_text(), false);
+ manager.set_tags (pi->type, pi->unique_id, tag_entry->get_text(), pi->name, PluginManager::FromGui);
_fil_creator_combo.clear_items ();
_fil_creator_combo.append_text_item (_("Show All Creators"));
_fil_creator_combo.set_text (_("Show All Creators"));
_fil_creator_combo.clear_items ();
_fil_creator_combo.append_text_item (_("Show All Creators"));
_fil_creator_combo.set_text (_("Show All Creators"));
+ string typ = GetPluginTypeStr(*i);
+ MenuElem elem ((*i)->name + typ, (sigc::bind (sigc::mem_fun (*this, &PluginSelector::plugin_chosen_from_menu), *i)));
+ elem.get_child()->set_use_underline (false);
+ submenu->items().push_back (elem);
- string typ = GetPluginTypeStr(*i);
- MenuElem elem ((*i)->name + typ, (sigc::bind (sigc::mem_fun (*this, &PluginSelector::plugin_chosen_from_menu), *i)));
- elem.get_child()->set_use_underline (false);
- submenu->items().push_back (elem);
manager.set_status (pi->type, pi->unique_id, status);
_need_status_save = true;
manager.set_status (pi->type, pi->unique_id, status);
_need_status_save = true;
manager.set_status (pi->type, pi->unique_id, status);
_need_status_save = true;
manager.set_status (pi->type, pi->unique_id, status);
_need_status_save = true;