Trim dependence on evoral types.hpp and Beats.hpp
[ardour.git] / libs / surfaces / generic_midi / interface.cc
index 8283b92e6ff89e1d1c1dabf25259c2dd1c43616e..04254cb97454763045267fea7603b291b6121f36 100644 (file)
@@ -1,34 +1,76 @@
-#include <ardour/control_protocol.h>
+/*
+    Copyright (C) 2012 Paul Davis
 
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#include <pbd/failed_constructor.h>
+
+#include "control_protocol/control_protocol.h"
 #include "generic_midi_control_protocol.h"
 
 using namespace ARDOUR;
 
-ControlProtocol*
-new_generic_midi_protocol (ControlProtocolDescriptor* descriptor, Session* s)
+static ControlProtocol*
+new_generic_midi_protocol (ControlProtocolDescriptor* /*descriptor*/, Session* s)
 {
-       return new GenericMidiControlProtocol (*s);
+       GenericMidiControlProtocol* gmcp;
+
+       try {
+               gmcp =  new GenericMidiControlProtocol (*s);
+       } catch (failed_constructor& err) {
+               return 0;
+       }
+
+       if (gmcp->set_active (true)) {
+               delete gmcp;
+               return 0;
+       }
+
+       return gmcp;
 }
 
-void
-delete_generic_midi_protocol (ControlProtocolDescriptor* descriptor, ControlProtocol* cp)
+static void
+delete_generic_midi_protocol (ControlProtocolDescriptor* /*descriptor*/, ControlProtocol* cp)
 {
        delete cp;
 }
 
+static bool
+probe_generic_midi_protocol (ControlProtocolDescriptor* /*descriptor*/)
+{
+       return GenericMidiControlProtocol::probe ();
+}
+
+// Field names commented out by JE - 06-01-2010
 static ControlProtocolDescriptor generic_midi_descriptor = {
-       name : "Generic MIDI",
-       ptr : 0,
-       module : 0,
-       initialize : new_generic_midi_protocol,
-       destroy : delete_generic_midi_protocol
+       /*name :              */   "Generic MIDI",
+       /*id :                */   "uri://ardour.org/surfaces/generic_midi:0",
+       /*ptr :               */   0,
+       /*module :            */   0,
+       /*mandatory :         */   0,
+       /*supports_feedback : */   true,
+       /*probe :             */   probe_generic_midi_protocol,
+       /*initialize :        */   new_generic_midi_protocol,
+       /*destroy :           */   delete_generic_midi_protocol,
+       /*request_buffer_factory : */ 0  /* no buffer factory because this runs
+                                         * in the midiUI event loop (which has
+                                         * its own request buffer factory.
+                                         */
 };
-       
 
-extern "C" {
-ControlProtocolDescriptor* 
-protocol_descriptor () {
-       return &generic_midi_descriptor;
-}
-}
+extern "C" ARDOURSURFACE_API ControlProtocolDescriptor* protocol_descriptor () { return &generic_midi_descriptor; }