Merge branch 'master' into audioengine
[ardour.git] / libs / surfaces / generic_midi / interface.cc
index c6c59c658992ec49e5f793074ed968ba184dddb6..94edb0ba8054af7e01e1a81e81cd90438fc35e45 100644 (file)
@@ -1,12 +1,39 @@
-#include <control_protocol/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)
+new_generic_midi_protocol (ControlProtocolDescriptor* /*descriptor*/, Session* s)
 {
-       GenericMidiControlProtocol* gmcp =  new GenericMidiControlProtocol (*s);
+       GenericMidiControlProtocol* gmcp;
+               
+       try {
+               gmcp =  new GenericMidiControlProtocol (*s);
+       } catch (failed_constructor& err) {
+               return 0;
+       }
        
        if (gmcp->set_active (true)) {
                delete gmcp;
@@ -17,13 +44,13 @@ new_generic_midi_protocol (ControlProtocolDescriptor* descriptor, Session* s)
 }
 
 void
-delete_generic_midi_protocol (ControlProtocolDescriptor* descriptor, ControlProtocol* cp)
+delete_generic_midi_protocol (ControlProtocolDescriptor* /*descriptor*/, ControlProtocol* cp)
 {
        delete cp;
 }
 
 bool
-probe_generic_midi_protocol (ControlProtocolDescriptor* descriptor)
+probe_generic_midi_protocol (ControlProtocolDescriptor* /*descriptor*/)
 {
        return GenericMidiControlProtocol::probe ();
 }
@@ -34,6 +61,7 @@ static ControlProtocolDescriptor generic_midi_descriptor = {
        ptr : 0,
        module : 0,
        mandatory : 0,
+       supports_feedback : true,
        probe : probe_generic_midi_protocol,
        initialize : new_generic_midi_protocol,
        destroy : delete_generic_midi_protocol