diff options
author | David Robillard <d@drobilla.net> | 2009-10-22 17:17:34 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2009-10-22 17:17:34 +0000 |
commit | 155338d168b362dd135597695aaa1e419831a277 (patch) | |
tree | c2f97ff4b99366b72418765cb4a69ccbd4c45065 /gtk2_ardour | |
parent | 525da3281674a92ff00150098ef1be7a403555dd (diff) |
Defer plugin discovery until actually needed (significant startup time improvement, especially with LV2).
git-svn-id: svn://localhost/ardour2/branches/3.0@5859 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour')
-rw-r--r-- | gtk2_ardour/mixer_strip.cc | 24 | ||||
-rw-r--r-- | gtk2_ardour/mixer_strip.h | 5 | ||||
-rw-r--r-- | gtk2_ardour/mixer_ui.cc | 21 | ||||
-rw-r--r-- | gtk2_ardour/mixer_ui.h | 2 | ||||
-rw-r--r-- | gtk2_ardour/processor_box.cc | 12 | ||||
-rw-r--r-- | gtk2_ardour/processor_box.h | 10 | ||||
-rw-r--r-- | gtk2_ardour/route_params_ui.cc | 8 | ||||
-rw-r--r-- | gtk2_ardour/route_params_ui.h | 12 |
8 files changed, 55 insertions, 39 deletions
diff --git a/gtk2_ardour/mixer_strip.cc b/gtk2_ardour/mixer_strip.cc index c2e38a1d34..c82a621d36 100644 --- a/gtk2_ardour/mixer_strip.cc +++ b/gtk2_ardour/mixer_strip.cc @@ -74,20 +74,19 @@ sigc::signal<void,boost::shared_ptr<Route> > MixerStrip::SwitchIO; int MixerStrip::scrollbar_height = 0; MixerStrip::MixerStrip (Mixer_UI& mx, Session& sess, bool in_mixer) - : AxisView(sess) + : AxisView(sess) , RouteUI (sess) ,_mixer(mx) , _mixer_owned (in_mixer) - , processor_box (sess, mx.plugin_selector(), mx.selection(), this, in_mixer) + , processor_box (sess, sigc::mem_fun(*this, &MixerStrip::plugin_selector), mx.selection(), this, in_mixer) , gpm (sess) , panners (sess) , _mono_button (_("Mono")) , button_table (3, 2) , middle_button_table (1, 2) - , bottom_button_table (1, 2) + , bottom_button_table (1, 2) , meter_point_label (_("pre")) - , comment_button (_("Comments")) - + , comment_button (_("Comments")) { init (); @@ -101,19 +100,18 @@ MixerStrip::MixerStrip (Mixer_UI& mx, Session& sess, bool in_mixer) } MixerStrip::MixerStrip (Mixer_UI& mx, Session& sess, boost::shared_ptr<Route> rt, bool in_mixer) - : AxisView(sess) + : AxisView(sess) , RouteUI (sess) ,_mixer(mx) , _mixer_owned (in_mixer) - , processor_box (sess, mx.plugin_selector(), mx.selection(), this, in_mixer) + , processor_box (sess, sigc::mem_fun(*this, &MixerStrip::plugin_selector), mx.selection(), this, in_mixer) , gpm (sess) , panners (sess) , button_table (3, 2) , middle_button_table (1, 2) - , bottom_button_table (1, 2) + , bottom_button_table (1, 2) , meter_point_label (_("pre")) - , comment_button (_("Comments")) - + , comment_button (_("Comments")) { init (); set_button_names (); @@ -1795,3 +1793,9 @@ MixerStrip::mono_button_clicked () { panners.set_mono (_mono_button.get_active ()); } + +PluginSelector& +MixerStrip::plugin_selector() +{ + return _mixer.plugin_selector(); +} diff --git a/gtk2_ardour/mixer_strip.h b/gtk2_ardour/mixer_strip.h index c83c260845..891d3a4d8d 100644 --- a/gtk2_ardour/mixer_strip.h +++ b/gtk2_ardour/mixer_strip.h @@ -87,8 +87,9 @@ class MixerStrip : public RouteUI, public Gtk::EventBox Width get_width_enum () const { return _width; } void* width_owner () const { return _width_owner; } - GainMeter& gain_meter() { return gpm; } - PannerUI& panner_ui() { return panners; } + GainMeter& gain_meter() { return gpm; } + PannerUI& panner_ui() { return panners; } + PluginSelector& plugin_selector(); void fast_update (); void set_embedded (bool); diff --git a/gtk2_ardour/mixer_ui.cc b/gtk2_ardour/mixer_ui.cc index 51578ad2b4..9931d51ff0 100644 --- a/gtk2_ardour/mixer_ui.cc +++ b/gtk2_ardour/mixer_ui.cc @@ -62,6 +62,7 @@ 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; @@ -76,9 +77,9 @@ Mixer_UI::Mixer_UI () Route::SyncOrderKeys.connect (mem_fun (*this, &Mixer_UI::sync_order_keys)); - scroller_base.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK); - scroller_base.set_name ("MixerWindow"); - scroller_base.signal_button_release_event().connect (mem_fun(*this, &Mixer_UI::strip_scroller_button_release)); + scroller_base.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK); + scroller_base.set_name ("MixerWindow"); + scroller_base.signal_button_release_event().connect (mem_fun(*this, &Mixer_UI::strip_scroller_button_release)); // add as last item of strip packer strip_packer.pack_end (scroller_base, true, true); @@ -220,8 +221,6 @@ Mixer_UI::Mixer_UI () signal_delete_event().connect (mem_fun (*this, &Mixer_UI::hide_window)); add_events (Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK); - _plugin_selector = new PluginSelector (PluginManager::the_manager()); - signal_configure_event().connect (mem_fun (*ARDOUR_UI::instance(), &ARDOUR_UI::configure_handler)); _selection.RoutesChanged.connect (mem_fun(*this, &Mixer_UI::follow_strip_selection)); @@ -466,7 +465,8 @@ Mixer_UI::connect_to_session (Session* sess) route_groups_changed (); - _plugin_selector->set_session (session); + if (_plugin_selector) + _plugin_selector->set_session (session); if (_visible) { show_window(); @@ -1487,3 +1487,12 @@ Mixer_UI::set_route_group_activation (RouteGroup* g, bool a) g->set_active (a, this); } +PluginSelector& +Mixer_UI::plugin_selector() +{ + if (!_plugin_selector) { + _plugin_selector = new PluginSelector (PluginManager::the_manager()); + _plugin_selector->set_session (session); + } + return *_plugin_selector; +} diff --git a/gtk2_ardour/mixer_ui.h b/gtk2_ardour/mixer_ui.h index c7378404ef..e96178160a 100644 --- a/gtk2_ardour/mixer_ui.h +++ b/gtk2_ardour/mixer_ui.h @@ -58,7 +58,7 @@ class Mixer_UI : public Gtk::Window void connect_to_session (ARDOUR::Session *); - PluginSelector& plugin_selector() { return *_plugin_selector; } + PluginSelector& plugin_selector(); void set_strip_width (Width); Width get_strip_width () const { return _strip_width; } diff --git a/gtk2_ardour/processor_box.cc b/gtk2_ardour/processor_box.cc index aba5abe294..b21ce633da 100644 --- a/gtk2_ardour/processor_box.cc +++ b/gtk2_ardour/processor_box.cc @@ -93,13 +93,13 @@ bool ProcessorBox::get_colors = true; Gdk::Color* ProcessorBox::active_processor_color; Gdk::Color* ProcessorBox::inactive_processor_color; -ProcessorBox::ProcessorBox (Session& sess, PluginSelector &plugsel, - RouteRedirectSelection & rsel, MixerStrip* parent, bool owner_is_mixer) +ProcessorBox::ProcessorBox (ARDOUR::Session& sess, sigc::slot<PluginSelector&> get_plugin_selector, + RouteRedirectSelection& rsel, MixerStrip* parent, bool owner_is_mixer) : _session(sess) , _parent_strip (parent) , _owner_is_mixer (owner_is_mixer) + , _get_plugin_selector (get_plugin_selector) , _placement(PreFader) - , _plugin_selector(plugsel) , _rr_selection(rsel) { if (get_colors) { @@ -309,7 +309,7 @@ ProcessorBox::show_processor_menu (gint arg) Gtk::MenuItem* plugin_menu_item = dynamic_cast<Gtk::MenuItem*>(ActionManager::get_widget("/processormenu/newplugin")); if (plugin_menu_item) { - plugin_menu_item->set_submenu (_plugin_selector.plugin_menu()); + plugin_menu_item->set_submenu (_get_plugin_selector().plugin_menu()); } paste_action->set_sensitive (!_rr_selection.processors.empty()); @@ -469,7 +469,7 @@ ProcessorBox::processor_button_press_event (GdkEventButton *ev) } else if (!processor && ev->button == 1 && ev->type == GDK_2BUTTON_PRESS) { choose_plugin (); - _plugin_selector.show_manager (); + _get_plugin_selector().show_manager (); } @@ -572,7 +572,7 @@ ProcessorBox::deselect_all_processors () void ProcessorBox::choose_plugin () { - _plugin_selector.set_interested_object (*this); + _get_plugin_selector().set_interested_object (*this); } void diff --git a/gtk2_ardour/processor_box.h b/gtk2_ardour/processor_box.h index 6a80549132..075e176903 100644 --- a/gtk2_ardour/processor_box.h +++ b/gtk2_ardour/processor_box.h @@ -69,7 +69,8 @@ namespace ARDOUR { class ProcessorBox : public Gtk::HBox, public PluginInterestedObject { public: - ProcessorBox (ARDOUR::Session&, PluginSelector &, RouteRedirectSelection &, MixerStrip* parent, bool owner_is_mixer = false); + ProcessorBox (ARDOUR::Session&, sigc::slot<PluginSelector&> get_plugin_selector, + RouteRedirectSelection&, MixerStrip* parent, bool owner_is_mixer = false); ~ProcessorBox (); void set_route (boost::shared_ptr<ARDOUR::Route>); @@ -96,12 +97,13 @@ class ProcessorBox : public Gtk::HBox, public PluginInterestedObject bool ab_direction; std::vector<sigc::connection> connections; + sigc::slot<PluginSelector&> _get_plugin_selector; + boost::shared_ptr<ARDOUR::Processor> _processor_being_created; - ARDOUR::Placement _placement; + ARDOUR::Placement _placement; - PluginSelector & _plugin_selector; - RouteRedirectSelection & _rr_selection; + RouteRedirectSelection& _rr_selection; void route_going_away (); diff --git a/gtk2_ardour/route_params_ui.cc b/gtk2_ardour/route_params_ui.cc index 80849bebe4..888e28aab0 100644 --- a/gtk2_ardour/route_params_ui.cc +++ b/gtk2_ardour/route_params_ui.cc @@ -64,7 +64,6 @@ RouteParams_UI::RouteParams_UI () : ArdourDialog ("track/bus inspector"), latency_apply_button (Stock::APPLY), track_menu(0) - { insert_box = 0; _input_iosel = 0; @@ -224,10 +223,11 @@ RouteParams_UI::setup_processor_boxes() cleanup_processor_boxes(); // construct new redirect boxes - insert_box = new ProcessorBox(*session, *_plugin_selector, _rr_selection, 0); - insert_box->set_route (_route); + insert_box = new ProcessorBox(*session, + sigc::mem_fun(*this, &RouteParams_UI::plugin_selector), _rr_selection, 0); + insert_box->set_route (_route); - redir_hpane.pack1 (*insert_box); + redir_hpane.pack1 (*insert_box); insert_box->ProcessorSelected.connect (mem_fun(*this, &RouteParams_UI::redirect_selected)); insert_box->ProcessorUnselected.connect (mem_fun(*this, &RouteParams_UI::redirect_selected)); diff --git a/gtk2_ardour/route_params_ui.h b/gtk2_ardour/route_params_ui.h index 75c0ef731d..ca582dadd3 100644 --- a/gtk2_ardour/route_params_ui.h +++ b/gtk2_ardour/route_params_ui.h @@ -78,11 +78,11 @@ class RouteParams_UI : public ArdourDialog Gtk::ScrolledWindow route_select_scroller; Gtk::Notebook notebook; - Gtk::Frame input_frame; - Gtk::Frame output_frame; + Gtk::Frame input_frame; + Gtk::Frame output_frame; Gtk::HPaned redir_hpane; - Gtk::Frame route_select_frame; + Gtk::Frame route_select_frame; Gtk::HBox route_hpacker; Gtk::VBox route_vpacker; @@ -93,9 +93,9 @@ class RouteParams_UI : public ArdourDialog Gtk::HPaned right_hpane; - Gtk::Frame route_choice_frame; + Gtk::Frame route_choice_frame; - Gtk::Frame route_param_frame; + Gtk::Frame route_param_frame; Gtk::VBox choice_vpacker; @@ -145,7 +145,7 @@ class RouteParams_UI : public ArdourDialog /* treeview */ - struct RouteDisplayModelColumns : public Gtk::TreeModel::ColumnRecord { + struct RouteDisplayModelColumns : public Gtk::TreeModel::ColumnRecord { RouteDisplayModelColumns() { add(text); add(route); |