diff --git a/gtk2_ardour/plugin_selector.cc b/gtk2_ardour/plugin_selector.cc index f7b681ae66..6ccae76e2f 100644 --- a/gtk2_ardour/plugin_selector.cc +++ b/gtk2_ardour/plugin_selector.cc @@ -969,6 +969,9 @@ PluginSelector::build_plugin_menu () items.push_back (MenuElem (_("Plugin Manager..."), sigc::mem_fun (*this, &PluginSelector::show_manager))); items.push_back (SeparatorElem ()); + Menu* charts = create_charts_menu(all_plugs); + items.push_back (MenuElem (_("Top-10"), *manage (charts))); + Menu* by_creator = create_by_creator_menu(all_plugs); items.push_back (MenuElem (_("By Creator"), *manage (by_creator))); @@ -1026,6 +1029,39 @@ PluginSelector::create_favs_menu (PluginInfoList& all_plugs) return favs; } +Gtk::Menu* +PluginSelector::create_charts_menu (PluginInfoList& all_plugs) +{ + using namespace Menu_Helpers; + + Menu* charts = new Menu(); + charts->set_name("ArdourContextMenu"); + + PluginInfoList plugs; + + for (PluginInfoList::const_iterator i = all_plugs.begin(); i != all_plugs.end(); ++i) { + int64_t lru; + uint64_t use_count; + if (manager.stats (*i, lru, use_count)) { + plugs.push_back (*i); + } + } + PluginChartsSorter cmp; + plugs.sort (cmp); + plugs.resize (std::min (plugs.size(), size_t(10))); + + PluginABCSorter abc; + plugs.sort (abc); + + for (PluginInfoList::const_iterator i = plugs.begin(); i != plugs.end(); ++i) { + 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); + charts->items().push_back (elem); + } + return charts; +} + Gtk::Menu* PluginSelector::create_by_creator_menu (ARDOUR::PluginInfoList& all_plugs) { diff --git a/gtk2_ardour/plugin_selector.h b/gtk2_ardour/plugin_selector.h index 4deda02aba..bd37e49385 100644 --- a/gtk2_ardour/plugin_selector.h +++ b/gtk2_ardour/plugin_selector.h @@ -182,6 +182,7 @@ private: void plugin_status_changed ( ARDOUR::PluginType t, std::string unique_id, ARDOUR::PluginManager::PluginStatusType s ); Gtk::Menu* create_favs_menu (ARDOUR::PluginInfoList&); + Gtk::Menu* create_charts_menu (ARDOUR::PluginInfoList&); Gtk::Menu* create_by_creator_menu (ARDOUR::PluginInfoList&); Gtk::Menu* create_by_tags_menu (ARDOUR::PluginInfoList&); void build_plugin_menu ();