Control Surface  1.2.0
MIDI Control Surface library for Arduino
Bankable/Abstract/MIDIIncrementDecrementButtons.hpp
Go to the documentation of this file.
1 #pragma once
2 
5 #include <Def/Def.hpp>
8 
10 
11 namespace Bankable {
12 
18 template <class BankAddress, class RelativeSender, class ResetSender>
20  protected:
28  uint8_t multiplier,
29  const RelativeSender &relativeSender,
30  const ResetSender &resetSender)
33 
34  public:
35  void begin() override { buttons.begin(); }
36 
37  void update() override {
38  using IncrDecrButtons = AH::IncrementDecrementButtons;
39  MIDIAddress address = addresses.getFirstActiveAddress();
40  switch (buttons.update()) {
41  case IncrDecrButtons::Nothing: break;
42  case IncrDecrButtons::IncrementShort: // fallthrough
43  case IncrDecrButtons::IncrementLong: // fallthrough
44  case IncrDecrButtons::IncrementHold:
45  send(multiplier, address);
46  break;
47  case IncrDecrButtons::DecrementShort: // fallthrough
48  case IncrDecrButtons::DecrementLong: // fallthrough
49  case IncrDecrButtons::DecrementHold:
50  send(-multiplier, address);
51  break;
52  case IncrDecrButtons::Reset: reset(); break;
53  default: break;
54  }
55  }
56 
57  void send(long delta, const MIDIAddress &address) {
58  relativeSender.send(delta, address);
59  }
60 
61  void reset() {
62  MIDIAddress address = addresses.getSecondActiveAddress();
63  if (address) {
64  resetSender.sendOn(address);
65  resetSender.sendOff(address);
66  }
67  }
68 
69 #ifdef AH_INDIVIDUAL_BUTTON_INVERT
70  void invert() { buttons.invert(); }
71 #endif
72 
74  return buttons.getState();
75  }
76 
77  private:
78  BankAddress addresses;
80  const uint8_t multiplier;
81 
82  public:
83  RelativeSender relativeSender;
84  ResetSender resetSender;
85 };
86 
87 } // namespace Bankable
88 
MIDIAddress
A type-safe utility class for saving a MIDI address consisting of a 7-bit address,...
Definition: MIDIAddress.hpp:91
AH::IncrementDecrementButtons::State
State
An enumeration of the different actions to be performed by the counter.
Definition: IncrementDecrementButtons.hpp:52
AH::Updatable<>
Bankable
A namespace for MIDI elements that can be added to a Bank, to change their address or channel.
Definition: BankAddresses.hpp:7
AH::IncrementDecrementButtons::getState
State getState() const
Return the state of the increment/decrement button without updating it.
Definition: IncrementDecrementButtons.hpp:74
Bankable::MIDIIncrementDecrementButtons::invert
void invert()
Definition: Bankable/Abstract/MIDIIncrementDecrementButtons.hpp:70
AH::IncrementDecrementButtons::update
State update()
Update and return the state of the increment/decrement button.
Definition: IncrementDecrementButtons.hpp:66
MIDIOutputElement.hpp
Def.hpp
AH::IncrementDecrementButtons
A class for buttons that increment and decrement some counter or setting.
Definition: IncrementDecrementButtons.hpp:25
BEGIN_CS_NAMESPACE
#define BEGIN_CS_NAMESPACE
Definition: Settings/NamespaceSettings.hpp:9
Bankable::MIDIIncrementDecrementButtons::relativeSender
RelativeSender relativeSender
Definition: Bankable/Abstract/MIDIIncrementDecrementButtons.hpp:83
Bankable::MIDIIncrementDecrementButtons::addresses
BankAddress addresses
Definition: Bankable/Abstract/MIDIIncrementDecrementButtons.hpp:78
END_CS_NAMESPACE
#define END_CS_NAMESPACE
Definition: Settings/NamespaceSettings.hpp:10
AH::IncrementDecrementButtons::begin
void begin()
Definition: IncrementDecrementButtons.hpp:42
Bankable::MIDIIncrementDecrementButtons::MIDIIncrementDecrementButtons
MIDIIncrementDecrementButtons(BankAddress addresses, const AH::IncrementDecrementButtons &buttons, uint8_t multiplier, const RelativeSender &relativeSender, const ResetSender &resetSender)
Construct a new MIDIIncrementDecrementButtons.
Definition: Bankable/Abstract/MIDIIncrementDecrementButtons.hpp:26
Bankable::MIDIIncrementDecrementButtons::resetSender
ResetSender resetSender
Definition: Bankable/Abstract/MIDIIncrementDecrementButtons.hpp:84
Bankable::MIDIIncrementDecrementButtons
An abstract class for two buttons that send incremental MIDI events.
Definition: Bankable/Abstract/MIDIIncrementDecrementButtons.hpp:19
Bankable::MIDIIncrementDecrementButtons::buttons
AH::IncrementDecrementButtons buttons
Definition: Bankable/Abstract/MIDIIncrementDecrementButtons.hpp:79
Bankable::MIDIIncrementDecrementButtons::send
void send(long delta, const MIDIAddress &address)
Definition: Bankable/Abstract/MIDIIncrementDecrementButtons.hpp:57
Bankable::MIDIIncrementDecrementButtons::begin
void begin() override
Initialize this updatable.
Definition: Bankable/Abstract/MIDIIncrementDecrementButtons.hpp:35
Bankable::MIDIIncrementDecrementButtons::getButtonsState
AH::IncrementDecrementButtons::State getButtonsState() const
Definition: Bankable/Abstract/MIDIIncrementDecrementButtons.hpp:73
Bankable::MIDIIncrementDecrementButtons::reset
void reset()
Definition: Bankable/Abstract/MIDIIncrementDecrementButtons.hpp:61
AH::IncrementDecrementButtons::invert
void invert()
Definition: IncrementDecrementButtons.hpp:78
DigitalNoteSender.hpp
BankableAddresses.hpp
Bankable::MIDIIncrementDecrementButtons::multiplier
const uint8_t multiplier
Definition: Bankable/Abstract/MIDIIncrementDecrementButtons.hpp:80
Bankable::MIDIIncrementDecrementButtons::update
void update() override
Update this updatable.
Definition: Bankable/Abstract/MIDIIncrementDecrementButtons.hpp:37
IncrementDecrementButtons.hpp