Line data Source code
1 : #pragma once
2 :
3 : #include <Banks/BankAddresses.hpp>
4 : #include <MIDI_Outputs/Bankable/Abstract/MIDIIncrementDecrementButtons.hpp>
5 : #include <MIDI_Senders/RelativeCCSender.hpp>
6 :
7 : BEGIN_CS_NAMESPACE
8 :
9 : namespace Bankable {
10 :
11 : /**
12 : * @brief A class of MIDIOutputElement%s that read the input of **two
13 : * momentary push buttons** to increment or decrement a **relative
14 : * setting** using relative MIDI **Control Change** events.
15 : * An optional note number can be provided to reset the setting.
16 : *
17 : * This version can be banked.
18 : *
19 : * @ingroup BankableMIDIOutputElements
20 : */
21 : class CCIncrementDecrementButtons
22 : : public MIDIIncrementDecrementButtons<DualAddresses, RelativeCCSender,
23 : DigitalNoteSender> {
24 : public:
25 : /**
26 : * @brief Construct a new Bankable CCIncrementDecrementButtons object.
27 : *
28 : * @param config
29 : * The bank configuration to use: the bank to add this element to,
30 : * and whether to change the address, channel or cable number.
31 : * @param buttons
32 : * The pins with the increment and decrement buttons connected.
33 : * The internal pull-up resistors will be enabled.
34 : * @param address
35 : * The address to use for the relative events, containing the
36 : * controller number [0, 119], channel [Channel_1, Channel_16], and
37 : * optional cable number [Cable_1, Cable_16].
38 : * @param multiplier
39 : * The multiplier for the relative events. When setting it to 2,
40 : * it will scroll twice as fast, for example.
41 : * @param resetNote
42 : * The MIDI address to use to reset the setting, containing the
43 : * note number [0, 119], channel [Channel_1, Channel_16], and
44 : * optional cable number [Cable_1, Cable_16].
45 : * It will be triggered when the increment and decrement buttons
46 : * are pressed simultaneously.
47 : * @param relativeSender
48 : * The MIDI sender to use for the relative events.
49 : * @param resetSender
50 : * The MIDI sender to use for reset events.
51 : */
52 1 : CCIncrementDecrementButtons(OutputBankConfig<> config,
53 : AH::IncrementDecrementButtons buttons,
54 : MIDIAddress address, uint8_t multiplier = 1,
55 : MIDIAddress resetNote = MIDIAddress::invalid(),
56 : const RelativeCCSender &relativeSender = {},
57 : const DigitalNoteSender &resetSender = {})
58 1 : : MIDIIncrementDecrementButtons<DualAddresses, RelativeCCSender,
59 : DigitalNoteSender>(
60 : {config, {address, resetNote}}, buttons, multiplier,
61 1 : relativeSender, resetSender) {}
62 : };
63 :
64 : } // namespace Bankable
65 :
66 : END_CS_NAMESPACE
|