Line data Source code
1 : #pragma once 2 : 3 : #include "Selector.hpp" 4 : #include <AH/Hardware/IncrementButton.hpp> 5 : 6 : BEGIN_CS_NAMESPACE 7 : 8 : template <setting_t N, class Callback = EmptySelectorCallback> 9 : class GenericIncrementSelector : public GenericSelector<N, Callback> { 10 : using Parent = GenericSelector<N, Callback>; 11 : 12 : public: 13 3 : GenericIncrementSelector(Selectable<N> &selectable, 14 : const Callback &callback, 15 : const AH::IncrementButton &button) 16 3 : : GenericSelector<N, Callback> {selectable, callback}, button(button) {} 17 : 18 1 : void begin() override { 19 1 : Parent::begin(); 20 1 : button.begin(); 21 1 : } 22 : 23 6 : void update() override { 24 6 : Parent::update(); 25 6 : switch (button.update()) { 26 1 : case AH::IncrementButton::Nothing: break; 27 3 : case AH::IncrementButton::IncrementShort: // fallthrough 28 : case AH::IncrementButton::IncrementLong: // fallthrough 29 : case AH::IncrementButton::IncrementHold: 30 3 : this->increment(Wrap::Wrap); 31 3 : break; 32 2 : case AH::IncrementButton::ReleasedShort: break; 33 0 : case AH::IncrementButton::ReleasedLong: break; 34 0 : default: break; 35 : } 36 6 : } 37 : 38 : AH::IncrementButton::State getButtonState() const { 39 : return button.getState(); 40 : } 41 : 42 : /// @see @ref AH::Button::invert() 43 : void invert() { button.invert(); } 44 : 45 : private: 46 : AH::IncrementButton button; 47 : }; 48 : 49 : // -------------------------------------------------------------------------- // 50 : 51 : /** 52 : * @brief Selector with one button that increments the selection. 53 : * 54 : * @htmlonly 55 : * <object type="image/svg+xml" data="../../selector-increment-LED.svg"></object> 56 : * @endhtmlonly 57 : * 58 : * @ingroup Selectors 59 : * 60 : * @tparam N 61 : * The number of settings. 62 : */ 63 : template <setting_t N> 64 : class IncrementSelector : virtual public GenericIncrementSelector<N> { 65 : public: 66 1 : IncrementSelector(Selectable<N> &selectable, 67 : const AH::IncrementButton &button) 68 1 : : GenericIncrementSelector<N> {selectable, {}, button} {} 69 : 70 1 : IncrementSelector(Selectable<N> &selectable, const AH::Button &button) 71 1 : : GenericIncrementSelector<N> {selectable, {}, button} {} 72 : }; 73 : 74 : END_CS_NAMESPACE