mp4chaps Lua script: don't clutter global environment
[ardour.git] / gtk2_ardour / lv2_plugin_ui.cc
index 572cdfb6716888731a220787d7e1530f8f2a8c25..d7f6708d00d50d6186750100dc767933f08d974f 100644 (file)
@@ -31,7 +31,7 @@
 #include <lilv/lilv.h>
 #include <suil/suil.h>
 
-#include "i18n.h"
+#include "pbd/i18n.h"
 
 using namespace ARDOUR;
 using namespace Gtk;
@@ -59,7 +59,7 @@ LV2PluginUI::write_from_ui(void*       controller,
                me->_updates.insert (port_index);
 
                if (ac) {
-                       ac->set_value(*(const float*)buffer);
+                       ac->set_value(*(const float*)buffer, Controllable::NoGroup);
                }
        } else if (format == URIMap::instance().urids.atom_eventTransfer) {
 
@@ -105,7 +105,7 @@ LV2PluginUI::touch(void*    controller,
        if (grabbed) {
                control->start_touch(control->session().transport_frame());
        } else {
-               control->stop_touch(false, control->session().transport_frame());
+               control->stop_touch(control->session().transport_frame());
        }
 }
 
@@ -140,11 +140,9 @@ LV2PluginUI::control_changed (uint32_t port_index)
 bool
 LV2PluginUI::start_updating(GdkEventAny*)
 {
-       if (!_output_ports.empty()) {
-               _screen_update_connection.disconnect();
-               _screen_update_connection = Timers::super_rapid_connect
-                       (sigc::mem_fun(*this, &LV2PluginUI::output_update));
-       }
+       _screen_update_connection.disconnect();
+       _screen_update_connection = Timers::super_rapid_connect
+               (sigc::mem_fun(*this, &LV2PluginUI::output_update));
        return false;
 }
 
@@ -152,11 +150,21 @@ bool
 LV2PluginUI::stop_updating(GdkEventAny*)
 {
        //cout << "stop_updating" << endl;
+       _screen_update_connection.disconnect();
+       return false;
+}
 
-       if (!_output_ports.empty()) {
-               _screen_update_connection.disconnect();
+void
+LV2PluginUI::queue_port_update()
+{
+       const uint32_t num_ports = _lv2->num_ports();
+       for (uint32_t i = 0; i < num_ports; ++i) {
+               bool     ok;
+               uint32_t port = _lv2->nth_parameter(i, ok);
+               if (ok) {
+                       _updates.insert (port);
+               }
        }
-       return false;
 }
 
 void
@@ -233,6 +241,9 @@ LV2PluginUI::LV2PluginUI(boost::shared_ptr<PluginInsert> pi,
        _ardour_buttons_box.pack_end (add_button, false, false);
        _ardour_buttons_box.pack_end (_preset_combo, false, false);
        _ardour_buttons_box.pack_end (_preset_modified, false, false);
+       _ardour_buttons_box.pack_end (pin_management_button, false, false);
+
+       plugin->PresetLoaded.connect (*this, invalidator (*this), boost::bind (&LV2PluginUI::queue_port_update, this), gui_context ());
 }
 
 void