mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-08 15:54:57 +01:00
Build plugin menu only when plugins change, and build the first version of it before it is required to ensure that the first processor box popup menu appears fairly quickly.
git-svn-id: svn://localhost/ardour2/branches/3.0@6092 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
0aaa08a3d2
commit
1e8f2693f7
5 changed files with 34 additions and 12 deletions
|
|
@ -63,7 +63,6 @@ using PBD::atoi;
|
|||
|
||||
Mixer_UI::Mixer_UI ()
|
||||
: Window (Gtk::WINDOW_TOPLEVEL)
|
||||
, _plugin_selector (0)
|
||||
{
|
||||
session = 0;
|
||||
_strip_width = Config->get_default_narrow_ms() ? Narrow : Wide;
|
||||
|
|
@ -252,6 +251,8 @@ Mixer_UI::Mixer_UI ()
|
|||
group_display.show();
|
||||
|
||||
auto_rebinding = FALSE;
|
||||
|
||||
_plugin_selector = new PluginSelector (PluginManager::the_manager ());
|
||||
}
|
||||
|
||||
Mixer_UI::~Mixer_UI ()
|
||||
|
|
@ -1554,9 +1555,5 @@ Mixer_UI::set_route_group_activation (RouteGroup* g, bool a)
|
|||
PluginSelector*
|
||||
Mixer_UI::plugin_selector()
|
||||
{
|
||||
if (!_plugin_selector) {
|
||||
_plugin_selector = new PluginSelector (PluginManager::the_manager());
|
||||
_plugin_selector->set_session (session);
|
||||
}
|
||||
return _plugin_selector;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -70,10 +70,14 @@ PluginSelector::PluginSelector (PluginManager *mgr)
|
|||
set_name ("PluginSelectorWindow");
|
||||
add_events (Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK);
|
||||
|
||||
_plugin_menu = 0;
|
||||
manager = mgr;
|
||||
session = 0;
|
||||
in_row_change = false;
|
||||
|
||||
manager->PluginListChanged.connect (mem_fun (*this, &PluginSelector::build_plugin_menu));
|
||||
build_plugin_menu ();
|
||||
|
||||
plugin_model = Gtk::ListStore::create (plugin_columns);
|
||||
plugin_display.set_model (plugin_model);
|
||||
/* XXX translators: try to convert "Fav" into a short term
|
||||
|
|
@ -189,6 +193,11 @@ PluginSelector::PluginSelector (PluginManager *mgr)
|
|||
refill ();
|
||||
}
|
||||
|
||||
PluginSelector::~PluginSelector ()
|
||||
{
|
||||
delete _plugin_menu;
|
||||
}
|
||||
|
||||
void
|
||||
PluginSelector::row_clicked(GdkEventButton* event)
|
||||
{
|
||||
|
|
@ -562,9 +571,15 @@ struct PluginMenuCompareByCategory {
|
|||
}
|
||||
};
|
||||
|
||||
/** @return a Gtk::manage()d menu */
|
||||
/** @return Plugin menu. The caller should not delete it */
|
||||
Gtk::Menu*
|
||||
PluginSelector::plugin_menu()
|
||||
{
|
||||
return _plugin_menu;
|
||||
}
|
||||
|
||||
void
|
||||
PluginSelector::build_plugin_menu ()
|
||||
{
|
||||
PluginInfoList all_plugs;
|
||||
|
||||
|
|
@ -581,10 +596,12 @@ PluginSelector::plugin_menu()
|
|||
|
||||
using namespace Menu_Helpers;
|
||||
|
||||
Menu* menu = manage (new Menu());
|
||||
menu->set_name("ArdourContextMenu");
|
||||
delete _plugin_menu;
|
||||
|
||||
MenuList& items = menu->items();
|
||||
_plugin_menu = new Menu;
|
||||
_plugin_menu->set_name("ArdourContextMenu");
|
||||
|
||||
MenuList& items = _plugin_menu->items();
|
||||
items.clear ();
|
||||
|
||||
Gtk::Menu* favs = create_favs_menu(all_plugs);
|
||||
|
|
@ -598,8 +615,6 @@ PluginSelector::plugin_menu()
|
|||
|
||||
Menu* by_category = create_by_category_menu(all_plugs);
|
||||
items.push_back (MenuElem (_("By Category"), *manage (by_category)));
|
||||
|
||||
return menu;
|
||||
}
|
||||
|
||||
Gtk::Menu*
|
||||
|
|
@ -742,6 +757,8 @@ PluginSelector::favorite_changed (const Glib::ustring& path)
|
|||
manager->set_status (pi->type, pi->unique_id, status);
|
||||
|
||||
manager->save_statuses ();
|
||||
|
||||
build_plugin_menu ();
|
||||
}
|
||||
in_row_change = false;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -37,6 +37,7 @@ class PluginSelector : public ArdourDialog
|
|||
{
|
||||
public:
|
||||
PluginSelector (ARDOUR::PluginManager *);
|
||||
~PluginSelector ();
|
||||
|
||||
void set_interested_object (PluginInterestedObject&);
|
||||
|
||||
|
|
@ -114,6 +115,7 @@ class PluginSelector : public ArdourDialog
|
|||
void vst_refiller (const std::string&);
|
||||
void au_refiller (const std::string&);
|
||||
|
||||
Gtk::Menu* _plugin_menu;
|
||||
ARDOUR::PluginManager *manager;
|
||||
|
||||
void row_clicked(GdkEventButton *);
|
||||
|
|
@ -136,6 +138,7 @@ class PluginSelector : public ArdourDialog
|
|||
Gtk::Menu* create_favs_menu (ARDOUR::PluginInfoList&);
|
||||
Gtk::Menu* create_by_creator_menu (ARDOUR::PluginInfoList&);
|
||||
Gtk::Menu* create_by_category_menu (ARDOUR::PluginInfoList&);
|
||||
void build_plugin_menu ();
|
||||
};
|
||||
|
||||
#endif // __ardour_plugin_selector_h__
|
||||
|
|
|
|||
|
|
@ -69,6 +69,9 @@ class PluginManager : public boost::noncopyable {
|
|||
void set_status (ARDOUR::PluginType type, std::string unique_id, PluginStatusType status);
|
||||
PluginStatusType get_status (const PluginInfoPtr&);
|
||||
|
||||
/** plugins were added to or removed from one of the PluginInfoLists */
|
||||
sigc::signal<void> PluginListChanged;
|
||||
|
||||
private:
|
||||
struct PluginStatus {
|
||||
ARDOUR::PluginType type;
|
||||
|
|
|
|||
|
|
@ -156,6 +156,8 @@ PluginManager::refresh ()
|
|||
#ifdef HAVE_AUDIOUNITS
|
||||
au_refresh ();
|
||||
#endif
|
||||
|
||||
PluginListChanged (); /* EMIT SIGNAL */
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue