Mackie Control: Shift/Select now toggles individual channels within group. Makes...
[ardour.git] / libs / surfaces / generic_midi / midifunction.h
index bc019cfb3c24721b1b4799c03f1158f55ddb704b..12340174d40f1ef649aac36209a21fb1ca1fb420 100644 (file)
@@ -1,6 +1,6 @@
 /*
     Copyright (C) 2009 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
 
 #include "ardour/types.h"
 
+#include "midiinvokable.h"
+
 namespace MIDI {
        class Channel;
-       class Port;
        class Parser;
 }
 
 class GenericMidiControlProtocol;
 
-class MIDIFunction : public PBD::Stateful
+class MIDIFunction : public MIDIInvokable
 {
   public:
-       enum Function { 
+       enum Function {
                NextBank,
                PrevBank,
                TransportRoll,
@@ -49,46 +50,34 @@ class MIDIFunction : public PBD::Stateful
                TransportStart,
                TransportEnd,
                TransportLoopToggle,
+               TransportRecordToggle,
                TransportRecordEnable,
-               TransportRecordDisable
+               TransportRecordDisable,
+               /* 1 argument functions: RID */
+               Select,
+               SetBank,
+               /* 2 argument functions: RID, value */
+               TrackSetSolo,
+               TrackSetMute,
+               TrackSetGain,
+               TrackSetRecordEnable,
+               TrackSetSoloIsolate,
        };
 
-       MIDIFunction (MIDI::Port&);
+       MIDIFunction (MIDI::Parser&);
        virtual ~MIDIFunction ();
 
-       int init (GenericMidiControlProtocol&, const std::string& function_name, MIDI::byte* sysex = 0, size_t ssize = 0);
+       int setup (GenericMidiControlProtocol&, const std::string& function_name, const std::string& argument, MIDI::byte* sysex = 0, size_t ssize = 0);
 
-       MIDI::Port& get_port() const { return _port; }
-       const std::string& function_name() const { return _function_name; }
+       const std::string& function_name() const { return _invokable_name; }
 
        XMLNode& get_state (void);
        int set_state (const XMLNode&, int version);
 
-       void bind_midi (MIDI::channel_t, MIDI::eventType, MIDI::byte);
-       MIDI::channel_t get_control_channel () { return control_channel; }
-       MIDI::eventType get_control_type () { return control_type; }
-       MIDI::byte get_control_additional () { return control_additional; }
-       
   private:
        Function        _function;
-       GenericMidiControlProtocol* _ui;
-       std::string     _function_name;
-       MIDI::Port&     _port;
-       PBD::ScopedConnection midi_sense_connection[2];
-       MIDI::eventType  control_type;
-       MIDI::byte       control_additional;
-       MIDI::channel_t  control_channel;
-       MIDI::byte*      sysex;
-       size_t         sysex_size;
-
+       std::string     _argument;
        void execute ();
-
-       void midi_sense_note (MIDI::Parser &, MIDI::EventTwoBytes *, bool is_on);
-       void midi_sense_note_on (MIDI::Parser &p, MIDI::EventTwoBytes *tb);
-       void midi_sense_note_off (MIDI::Parser &p, MIDI::EventTwoBytes *tb);
-       void midi_sense_controller (MIDI::Parser &, MIDI::EventTwoBytes *);
-       void midi_sense_program_change (MIDI::Parser &, MIDI::byte);
-       void midi_sense_sysex (MIDI::Parser &, MIDI::byte*, size_t);
 };
 
 #endif // __gm_midicontrollable_h__