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 3 : 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 : switch (button.update()) { 25 1 : case AH::IncrementButton::Nothing: break; 26 : case AH::IncrementButton::IncrementShort: // fallthrough 27 : case AH::IncrementButton::IncrementLong: // fallthrough 28 : case AH::IncrementButton::IncrementHold: 29 3 : this->increment(Wrap::Wrap); 30 3 : break; 31 2 : case AH::IncrementButton::ReleasedShort: break; 32 0 : case AH::IncrementButton::ReleasedLong: break; 33 0 : default: break; 34 : } 35 6 : } 36 : 37 : AH::IncrementButton::State getButtonState() const { 38 : return button.getState(); 39 : } 40 : 41 : #ifdef AH_INDIVIDUAL_BUTTON_INVERT 42 : void invert() { button.invert(); } 43 : #endif 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 4 : 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