: ArdourDialog (_("Plugin Manager"), true, false)
, search_clear_button (Stock::CLEAR)
, manager (mgr)
+ , _need_tag_save (false)
+ , _need_status_save (false)
+ , _need_menu_rebuild (false)
, _inhibit_refill (false)
{
set_name ("PluginSelectorWindow");
_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.PluginStatusChanged.connect (plugin_list_changed_connection, invalidator (*this), boost::bind (&PluginSelector::build_plugin_menu, this), 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());
{
string mode;
bool maybe_show = false;
+ PluginManager::PluginStatusType status = manager.get_status (info);
if (!searchstr.empty()) {
/* user asked to ignore filters */
if (maybe_show && _search_ignore_checkbox->get_active()) {
- if (manager.get_status (info) == PluginManager::Hidden) {
+ if (status == PluginManager::Hidden) {
+ return false;
+ }
+ if (status == PluginManager::Concealed) {
return false;
}
return true;
return false;
}
- if (_fil_favorites_radio->get_active() && !(manager.get_status (info) == PluginManager::Favorite)) {
+ if (_fil_favorites_radio->get_active() && status != PluginManager::Favorite) {
+ return false;
+ }
+
+ if (_fil_hidden_radio->get_active() && (status != PluginManager::Hidden && status != PluginManager::Concealed)) {
return false;
}
- if (_fil_hidden_radio->get_active() && !(manager.get_status (info) == PluginManager::Hidden)) {
+ if (!_fil_hidden_radio->get_active() && status == PluginManager::Hidden) {
return false;
}
- if (!_fil_hidden_radio->get_active() && manager.get_status (info) == PluginManager::Hidden) {
+ if (!_fil_hidden_radio->get_active() && status == PluginManager::Concealed) {
return false;
}
if (show_this_plugin (*i, searchstr)) {
TreeModel::Row newrow = *(plugin_model->append());
- newrow[plugin_columns.favorite] = (manager.get_status (*i) == PluginManager::Favorite);
- newrow[plugin_columns.hidden] = (manager.get_status (*i) == PluginManager::Hidden);
+
+ PluginManager::PluginStatusType status = manager.get_status (*i);
+ newrow[plugin_columns.favorite] = status == PluginManager::Favorite;
+ newrow[plugin_columns.hidden] = status == PluginManager::Hidden;
string name = (*i)->name;
if (name.length() > 48) {
if (_need_status_save) {
manager.save_statuses();
}
-
- if ( _need_tag_save || _need_status_save || _need_menu_rebuild ) {
- manager.PluginListChanged(); //emit signal
+ if (_need_menu_rebuild) {
+ build_plugin_menu ();
}
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(), pi->name, PluginManager::FromGui);
_need_tag_save = true;
- _need_menu_rebuild = true;
}
}
(*i)[plugin_columns.hidden] = (stat == PluginManager::Hidden) ? true : false;
/* if plug was hidden, remove it from the view */
- if (stat == PluginManager::Hidden) {
+ if (stat == PluginManager::Hidden || stat == PluginManager::Concealed) {
if (!_fil_hidden_radio->get_active() && !_fil_all_radio->get_active()) {
plugin_model->erase(i);
}
_need_tag_save = false;
_need_status_save = false;
- _need_menu_rebuild = false;
}
struct PluginMenuCompareByCreator {
void
PluginSelector::build_plugin_menu ()
{
+ if (is_visible ()) {
+ _need_menu_rebuild = true;
+ return;
+ }
+ _need_menu_rebuild = false;
PluginInfoList all_plugs;
all_plugs.insert (all_plugs.end(), manager.ladspa_plugin_info().begin(), manager.ladspa_plugin_info().end());
delete _plugin_menu;
- _plugin_menu = manage (new Menu);
+ _plugin_menu = new Menu;
_plugin_menu->set_name("ArdourContextMenu");
MenuList& items = _plugin_menu->items();
for (PluginInfoList::const_iterator i = all_plugs.begin(); i != all_plugs.end(); ++i) {
- if (manager.get_status (*i) == PluginManager::Hidden) continue;
+ PluginManager::PluginStatusType status = manager.get_status (*i);
+ if (status == PluginManager::Hidden) continue;
+ if (status == PluginManager::Concealed) continue;
string creator = (*i)->creator;
for (PluginInfoList::const_iterator i = all_plugs.begin(); i != all_plugs.end(); ++i) {
- if (manager.get_status (*i) == PluginManager::Hidden) continue;
+ PluginManager::PluginStatusType status = manager.get_status (*i);
+ if (status == PluginManager::Hidden) continue;
+ if (status == PluginManager::Concealed) continue;
/* for each tag in the plugins tag list, add it to that submenu */
vector<string> tokens = manager.get_tags(*i);
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;
}