Button.h 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. /*
  2. * Button.h
  3. *
  4. * Created on: 5 déc. 2020
  5. * Author: fanch
  6. */
  7. #ifndef SRC_BUTTON_H_
  8. #define SRC_BUTTON_H_
  9. #include "AbsInput.h"
  10. /**
  11. * @brief La classe qui représente les boutons du PAD
  12. */
  13. class Button : public AbsInput
  14. {
  15. public:
  16. Button(PadDefinition* p=NULL) : AbsInput(p, BUTTON) {m_is_pressed=false;}
  17. Button(const Button& b) : AbsInput(b.m_parent, b.type)
  18. {
  19. m_is_pressed=false;
  20. }
  21. virtual const Button& operator=(const AbsInput& b)
  22. {
  23. AbsInput::operator=(b);
  24. m_is_pressed=(dynamic_cast<const Button*>(&b))->m_is_pressed;
  25. return *this;
  26. }
  27. virtual ~Button(){}
  28. bool is_pressed() const {return m_is_pressed; }
  29. protected:
  30. bool m_is_pressed;
  31. virtual void _on_event(const MidiMessage* m){
  32. int size=m_actions.size();
  33. for(int i=0; i<size; i++){
  34. IInputEventListener* l = m_listeners[i];
  35. switch(m->type){
  36. case MidiMessage::NOTE_ON:
  37. m_is_pressed=true;
  38. l->on_press(this, *dynamic_cast<const NoteOn*>(m));
  39. break;
  40. case MidiMessage::NOTE_OFF:
  41. m_is_pressed=false;
  42. l->on_release(this, *dynamic_cast<const NoteOff*>(m));
  43. break;
  44. }
  45. }
  46. }
  47. };
  48. #endif /* SRC_BUTTON_H_ */