include abstract_ui.cc in mackie source to actually instantiate the AbstractUI template
[ardour.git] / libs / surfaces / mackie / mackie_control_protocol.cc
index 1a868b5a1028a24acfcf21cf6ee0836b7e7d351e..65a03f483debd2f18228a9532979e8fc2f9e06dd 100644 (file)
@@ -70,13 +70,19 @@ using namespace PBD;
 
 #include "i18n.h"
 
+#include "pbd/abstract_ui.cc" // instantiate template
+
 MackieMidiBuilder builder;
 
 #define midi_ui_context() MidiControlUI::instance() /* a UICallback-derived object that specifies the event loop for signal handling */
 #define ui_bind(f, ...) boost::protect (boost::bind (f, __VA_ARGS__))
 
+extern PBD::EventLoop::InvalidationRecord* __invalidator (sigc::trackable& trackable, const char*, int);
+#define invalidator(x) __invalidator ((x), __FILE__, __LINE__)
+
 MackieControlProtocol::MackieControlProtocol (Session& session)
        : ControlProtocol (session, X_("Mackie"), MidiControlUI::instance())
+       , AbstractUI<MackieControlUIRequest> ("mackie")
        , _current_initial_bank (0)
        , _surface (0)
        , _jog_wheel (*this)
@@ -88,7 +94,7 @@ MackieControlProtocol::MackieControlProtocol (Session& session)
        DEBUG_TRACE (DEBUG::MackieControl, "MackieControlProtocol::MackieControlProtocol\n");
 
        AudioEngine::instance()->PortConnectedOrDisconnected.connect (
-               audio_engine_connections, MISSING_INVALIDATOR, ui_bind (&MackieControlProtocol::port_connected_or_disconnected, this, _2, _4, _5),
+               audio_engine_connections, invalidator (*this), ui_bind (&MackieControlProtocol::port_connected_or_disconnected, this, _2, _4, _5),
                midi_ui_context ()
                );
 }
@@ -715,7 +721,7 @@ MackieControlProtocol::get_state()
 
        // add name of protocol
        XMLNode* node = new XMLNode (X_("Protocol"));
-       node->add_property (X_("name"), _name);
+       node->add_property (X_("name"), ARDOUR::ControlProtocol::_name);
 
        // add current bank
        ostringstream os;
@@ -1696,3 +1702,24 @@ MackieControlProtocol::port_connected_or_disconnected (string a, string b, bool
                update_surface ();
        }
 }
+
+void
+MackieControlProtocol::do_request (MackieControlUIRequest* req)
+{
+       if (req->type == CallSlot) {
+
+               call_slot (MISSING_INVALIDATOR, req->the_slot);
+
+       } else if (req->type == Quit) {
+
+               stop ();
+       }
+}
+
+int
+MackieControlProtocol::stop ()
+{
+       BaseUI::quit ();
+
+       return 0;
+}