// plugin manager instance
STATIC(PluginListChanged, &(PluginManager::instance().PluginListChanged), 0)
-STATIC(PluginStatusesChanged, &(PluginManager::instance().PluginStatusesChanged), 3)
+STATIC(PluginStatusChanged, &(PluginManager::instance().PluginStatusChanged), 3)
//STATIC(PluginStatusesChanged, &(PluginManager::instance().PluginTagsChanged), 3)
// Diskstream static global
#else
#error implement deferred Plugin-Favorite list
#endif
- PluginManager::instance ().PluginListChanged.connect (*this, invalidator (*this), boost::bind (&Mixer_UI::refill_favorite_plugins, this), gui_context());
- PluginManager::instance ().PluginStatusesChanged.connect (*this, invalidator (*this), boost::bind (&Mixer_UI::plugin_status_changed, this, _1, _2, _3), gui_context());
- ARDOUR::Plugin::PresetsChanged.connect (*this, invalidator (*this), boost::bind (&Mixer_UI::refill_favorite_plugins, this), gui_context());
- PluginManager::instance ().PluginTagsChanged.connect(*this, invalidator (*this), boost::bind (&Mixer_UI::tags_changed, this, _1, _2, _3), gui_context());
+ PluginManager::instance ().PluginListChanged.connect (*this, invalidator (*this), boost::bind (&Mixer_UI::plugin_list_changed, this), gui_context());
+ ARDOUR::Plugin::PresetsChanged.connect (*this, invalidator (*this), boost::bind (&Mixer_UI::refill_favorite_plugins, this), gui_context());
}
Mixer_UI::~Mixer_UI ()
}
void
-Mixer_UI::plugin_status_changed (PluginType, std::string, PluginManager::PluginStatusType)
+Mixer_UI::plugin_list_changed ()
{
refill_favorite_plugins();
refill_tag_combo();
}
-void
-Mixer_UI::tags_changed (PluginType t, std::string unique_id, std::string tag)
-{
- refill_tag_combo();
-}
-
void
Mixer_UI::refill_tag_combo ()
{
void store_current_favorite_order();
void refiller (ARDOUR::PluginInfoList& result, const ARDOUR::PluginInfoList& plugs);
- void plugin_status_changed (ARDOUR::PluginType t, std::string unique_id, ARDOUR::PluginManager::PluginStatusType s);
- void refill_favorite_plugins ();
+ void plugin_list_changed ();
+
+ void refill_favorite_plugins ();
void refill_tag_combo ();
- void tags_changed (ARDOUR::PluginType t, std::string unique_id, std::string tag);
+
void tag_combo_changed ();
void sync_treeview_from_favorite_order ();
_plugin_menu = 0;
in_row_change = false;
+ //anytime the list changes ( Status, Tags, or scanned plugins ) we need to rebuild redirect-box plugin selector menu
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());
plugin_model = Gtk::ListStore::create (plugin_columns);
plugin_display.set_model (plugin_model);
manager.save_statuses();
}
- if (_need_menu_rebuild) {
- build_plugin_menu();
+ if ( _need_tag_save || _need_status_save || _need_menu_rebuild ) {
+ manager.PluginListChanged(); //emit signal
}
return (int) r;
manager.reset_tags (pi);
display_selection_changed ();
_need_tag_save = true;
+ _need_menu_rebuild = true;
}
}
manager.set_tags (pi->type, pi->unique_id, tag_entry->get_text(), false);
_need_tag_save = true;
+ _need_menu_rebuild = true;
}
}
}
row[plugin_columns.tags] = tags;
}
-
- /* A plugin's tags change while the user is entering them.
- * defer a rebuilding of the "tag" menu until the dialog is closed.
- */
- _need_menu_rebuild = true;
}
void
plugin_model->erase(i);
}
- /* plugin menu must be re-built to accommodate Hidden and Favorite plugins */
- build_plugin_menu();
-
return;
}
}
Gtk::Menu* submenu;
if ((x = tags_submenu_map.find (*t)) != tags_submenu_map.end()) {
submenu = x->second;
- } else {
+ 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);
}
}
return by_tags;
manager.set_status (pi->type, pi->unique_id, status);
_need_status_save = true;
+ _need_menu_rebuild = true;
}
in_row_change = false;
}
manager.set_status (pi->type, pi->unique_id, status);
_need_status_save = true;
+ _need_menu_rebuild = true;
}
in_row_change = false;
}
};
std::vector<std::string> get_all_tags (enum TagFilter) const;
- /** plugins were added to or removed from one of the PluginInfoLists */
+ /** plugins were added to or removed from one of the PluginInfoLists, OR the user has made changes to the status/tags */
PBD::Signal0<void> PluginListChanged;
- /** Plugin Hidden/Favorite status changed */
- PBD::Signal3<void, ARDOUR::PluginType, std::string, PluginStatusType> PluginStatusesChanged; //PluginType t, string id, string tag
+ /** A single plugin's Hidden/Favorite status changed */
+ PBD::Signal3<void, ARDOUR::PluginType, std::string, PluginStatusType> PluginStatusChanged; //PluginType t, string id, string tag
- PBD::Signal3<void, ARDOUR::PluginType, std::string, std::string> PluginTagsChanged; //PluginType t, string id, string tag
+ /** A single plugin's Tags status changed */
+ PBD::Signal3<void, ARDOUR::PluginType, std::string, std::string> PluginTagChanged; //PluginType t, string id, string tag
private:
statuses.insert (ps);
}
- PluginStatusesChanged (t, id, status); /* EMIT SIGNAL */
+ PluginStatusChanged (t, id, status); /* EMIT SIGNAL */
}
PluginType
ptags.insert (ps);
}
if (!factory || force) {
- PluginTagsChanged (t, id, sanitized); /* EMIT SIGNAL */
+ PluginTagChanged (t, id, sanitized); /* EMIT SIGNAL */
}
}