Add plugin charts to context menu

This commit is contained in:
Robin Gareus 2020-06-25 21:10:14 +02:00
parent 77362a2429
commit ef98492298
Signed by: rgareus
GPG Key ID: A090BCE02CF57F04
2 changed files with 37 additions and 0 deletions

View File

@ -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)
{

View File

@ -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 ();