+ plugin_analysis_expander.property_expanded().signal_changed().connect( sigc::mem_fun(*this, &PlugUIBase::toggle_plugin_analysis));
+ plugin_analysis_expander.set_expanded(false);
+
+ insert->DropReferences.connect (death_connection, boost::bind (&PlugUIBase::plugin_going_away, this), gui_context());
+}
+
+PlugUIBase::~PlugUIBase()
+{
+ delete latency_gui;
+}
+
+void
+PlugUIBase::plugin_going_away ()
+{
+ /* drop references to the plugin/insert */
+ insert.reset ();
+ plugin.reset ();
+ death_connection.disconnect ();
+}
+
+void
+PlugUIBase::set_latency_label ()
+{
+ char buf[64];
+ nframes_t l = insert->effective_latency ();
+ nframes_t sr = insert->session().frame_rate();
+
+ if (l < sr / 1000) {
+ snprintf (buf, sizeof (buf), "latency (%d samples)", l);
+ } else {
+ snprintf (buf, sizeof (buf), "latency (%.2f msecs)", (float) l / ((float) sr / 1000.0f));
+ }
+
+ latency_label.set_text (buf);
+}
+
+void
+PlugUIBase::latency_button_clicked ()
+{
+ if (!latency_gui) {
+ latency_gui = new LatencyGUI (*(insert.get()), insert->session().frame_rate(), insert->session().get_block_size());
+ latency_dialog = new ArdourDialog ("Edit Latency", false, false);
+ latency_dialog->get_vbox()->pack_start (*latency_gui);
+ latency_dialog->signal_hide().connect (sigc::mem_fun (*this, &PlugUIBase::set_latency_label));
+ }
+
+ latency_dialog->show_all ();