PadDefinition.h 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. #ifndef PAD_H
  2. #define PAD_H
  3. #define PAD_DEFINITION_DIR "pads"
  4. #include "AbsInput.h"
  5. #include "MidiPort.h"
  6. class InputAction;
  7. class InputDefinition;
  8. class Button;
  9. class AbsInput;
  10. class PadDefinition;
  11. typedef AbsInput* (*CreateInputCallback)(PadDefinition* p, void* data);
  12. AbsInput* __pad_default_button(PadDefinition* p, void * data);
  13. AbsInput* __pad_default_controller(PadDefinition* p, void * data);
  14. class PadDefinition : public IMidiPortListener, public IMidiPortErrorListener
  15. {
  16. public:
  17. PadDefinition();
  18. PadDefinition(Json::Value v);
  19. PadDefinition(const std::string& );
  20. virtual ~PadDefinition();
  21. void read_conf(const std::string&);
  22. void read_conf(Json::Value& v);
  23. virtual MidiPortIn& get_input_port() {return *m_iport;}
  24. virtual MidiPortOut& get_control_port() {return *m_cport;}
  25. virtual MidiPortOut& get_output_port() { return *m_oport;}
  26. void connect_to_device(bool input=true, bool output=true);
  27. void set_error_listener(IMidiPortErrorListener*);
  28. void set_port_listener(IMidiPortListener*);
  29. virtual void on_error(RtMidiError::Type type, const std::string &errorText);
  30. virtual void on_new_message(double ts, MidiMessage* m);
  31. AbsInput* get_by_channel_key(InputType type, int channel, int key);
  32. AbsInput* input_at(int i, int j=-1);
  33. AbsInput* get_by_message(const MidiMessage* msg);
  34. InputAction* get_action_def(const std::string& s);
  35. InputDefinition* get_input_def(const std::string& s);
  36. void clear();
  37. void send_all(const std::string&);
  38. Button* instanciate_new_button() const;
  39. Controller* instanciate_new_controller() const;
  40. std::vector<AbsInput*>& get_matrix();
  41. int get_width() const {return m_width;}
  42. int get_height() const {return m_height;}
  43. AbsInput* at(int x, int y) {return m_matrix[x+y*m_width];}
  44. const std::string& get_name() const {return m_name;}
  45. static PadDefinition* from_file(const std::string& str);
  46. static PadDefinition* from_name(const std::string& str);
  47. protected:
  48. void _dispatch_message(double ts, MidiMessage* m);
  49. //port du Pad Réel, permet de récupérer les entrées
  50. MidiPortIn* m_iport;
  51. bool m_iport_open;
  52. //Port destiné au pad réel afin de le commander
  53. MidiPortOut* m_cport;
  54. bool m_cport_open;
  55. //Port de sortie MIDI "classique" pour y brancher un instrument
  56. MidiPortOut* m_oport;
  57. bool m_oport_open;
  58. //Nom du pad
  59. std::string m_name;
  60. //nom du port MIDI du PAD
  61. std::string m_port_in_name;
  62. std::string m_port_out_name;
  63. //taille de la grille
  64. int m_width;
  65. int m_height;
  66. //liste des boutons
  67. std::vector<AbsInput*> m_matrix;
  68. std::vector<InputDefinition*> m_input_def;
  69. IMidiPortErrorListener* m_error_listener;
  70. IMidiPortListener* m_port_listener;
  71. //
  72. CreateInputCallback m_create_button;
  73. void* m_create_button_data;
  74. CreateInputCallback m_create_controller;
  75. void* m_create_controller_data;
  76. private:
  77. friend class PadConfiguration;
  78. };
  79. #endif // PAD_H