X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fplugin_selector.cc;h=0384a6281d53ebb77114b9c7b63ae046691cb48c;hb=a8d62ce056fe260792d4e72bf8cf2fbff0e8b39b;hp=2eb6dd0b6741fdc2ffe41b89e3dd8eb9f59a6301;hpb=a18c54ce943f1bd36140ccd9934fb6bd032f9c49;p=ardour.git diff --git a/gtk2_ardour/plugin_selector.cc b/gtk2_ardour/plugin_selector.cc index 2eb6dd0b67..0384a6281d 100644 --- a/gtk2_ardour/plugin_selector.cc +++ b/gtk2_ardour/plugin_selector.cc @@ -1,21 +1,28 @@ /* - Copyright (C) 2000-2006 Paul Davis - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -*/ + * Copyright (C) 2005-2006 Doug McLain + * Copyright (C) 2005-2007 Taybin Rutkin + * Copyright (C) 2005-2017 Paul Davis + * Copyright (C) 2006 Nick Mainsbridge + * Copyright (C) 2007-2012 David Robillard + * Copyright (C) 2009-2011 Carl Hetherington + * Copyright (C) 2013-2014 John Emmas + * Copyright (C) 2014-2018 Ben Loftis + * Copyright (C) 2014-2019 Robin Gareus + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ #ifdef WAF_BUILD #include "gtk2ardour-config.h" #endif @@ -24,6 +31,7 @@ #include #include +#include #include #include @@ -74,6 +82,7 @@ PluginSelector::PluginSelector (PluginManager& mgr) 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()); + manager.PluginTagChanged.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::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()); @@ -344,6 +353,27 @@ PluginSelector::added_row_clicked(GdkEventButton* event) btn_remove_clicked(); } + +static void +setup_search_string (string& searchstr) +{ + transform (searchstr.begin(), searchstr.end(), searchstr.begin(), ::toupper); +} + +static bool +match_search_strings (string const& haystack, string const& needle) +{ + boost::char_separator sep (" "); + typedef boost::tokenizer > tokenizer; + tokenizer t (needle, sep); + for (tokenizer::iterator ti = t.begin(); ti != t.end(); ++ti) { + if (haystack.find (*ti) == string::npos) { + return false; + } + } + return true; +} + bool PluginSelector::show_this_plugin (const PluginInfoPtr& info, const std::string& searchstr) { @@ -353,22 +383,16 @@ PluginSelector::show_this_plugin (const PluginInfoPtr& info, const std::string& if (!searchstr.empty()) { - std::string compstr; - if (_search_name_checkbox->get_active()) { /* name contains */ - compstr = info->name; - transform (compstr.begin(), compstr.end(), compstr.begin(), ::toupper); - if (compstr.find (searchstr) != string::npos) { - maybe_show = true; - } + std::string compstr = info->name; + setup_search_string (compstr); + maybe_show |= match_search_strings (compstr, searchstr); } if (_search_tags_checkbox->get_active()) { /* tag contains */ - compstr = manager.get_tags_as_string (info); - transform (compstr.begin(), compstr.end(), compstr.begin(), ::toupper); - if (compstr.find (searchstr) != string::npos) { - maybe_show = true; - } + std::string compstr = manager.get_tags_as_string (info); + setup_search_string (compstr); + maybe_show |= match_search_strings (compstr, searchstr); } if (!maybe_show) { @@ -380,6 +404,7 @@ PluginSelector::show_this_plugin (const PluginInfoPtr& info, const std::string& if (status == PluginManager::Hidden) { return false; } + if (status == PluginManager::Concealed) { return false; } return true; @@ -402,13 +427,15 @@ PluginSelector::show_this_plugin (const PluginInfoPtr& info, const std::string& return false; } - if (_fil_hidden_radio->get_active() && status != PluginManager::Hidden) { + if (_fil_hidden_radio->get_active() && (status != PluginManager::Hidden && status != PluginManager::Concealed)) { return false; } if (!_fil_hidden_radio->get_active() && status == PluginManager::Hidden) { return false; } + + if (!_fil_hidden_radio->get_active() && status == PluginManager::Concealed) { return false; } @@ -447,13 +474,6 @@ PluginSelector::show_this_plugin (const PluginInfoPtr& info, const std::string& return true; } -void -PluginSelector::setup_search_string (string& searchstr) -{ - searchstr = search_entry.get_text (); - transform (searchstr.begin(), searchstr.end(), searchstr.begin(), ::toupper); -} - void PluginSelector::set_sensitive_widgets () { @@ -492,8 +512,6 @@ PluginSelector::refill () return; } - std::string searchstr; - in_row_change = true; plugin_display.set_model (Glib::RefPtr(0)); @@ -507,6 +525,7 @@ PluginSelector::refill () plugin_model->clear (); + std::string searchstr = search_entry.get_text (); setup_search_string (searchstr); ladspa_refiller (searchstr); @@ -535,8 +554,10 @@ PluginSelector::refiller (const PluginInfoList& plugs, const::std::string& searc 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) { @@ -865,7 +886,7 @@ PluginSelector::plugin_status_changed (PluginType t, std::string uid, PluginMana (*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); } @@ -1061,7 +1082,9 @@ PluginSelector::create_by_creator_menu (ARDOUR::PluginInfoList& all_plugs) 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; @@ -1119,7 +1142,9 @@ PluginSelector::create_by_tags_menu (ARDOUR::PluginInfoList& all_plugs) 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 tokens = manager.get_tags(*i);