summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2009-10-22 17:17:34 +0000
committerDavid Robillard <d@drobilla.net>2009-10-22 17:17:34 +0000
commit155338d168b362dd135597695aaa1e419831a277 (patch)
treec2f97ff4b99366b72418765cb4a69ccbd4c45065 /gtk2_ardour
parent525da3281674a92ff00150098ef1be7a403555dd (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.cc24
-rw-r--r--gtk2_ardour/mixer_strip.h5
-rw-r--r--gtk2_ardour/mixer_ui.cc21
-rw-r--r--gtk2_ardour/mixer_ui.h2
-rw-r--r--gtk2_ardour/processor_box.cc12
-rw-r--r--gtk2_ardour/processor_box.h10
-rw-r--r--gtk2_ardour/route_params_ui.cc8
-rw-r--r--gtk2_ardour/route_params_ui.h12
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);