/*
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,
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__