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 4 : class GenericIncrementSelector : public GenericSelector<N, Callback> { 10 : using Parent = GenericSelector<N, Callback>; 11 : 12 : public: 13 4 : GenericIncrementSelector(Selectable<N> &selectable, 14 : const Callback &callback, 15 : const AH::IncrementButton &button, 16 : Wrap wrap = Wrap::Wrap) 17 8 : : GenericSelector<N, Callback>{selectable, callback}, button{button}, 18 12 : wrap{wrap} {} 19 : 20 2 : void begin() override { 21 2 : Parent::begin(); 22 2 : button.begin(); 23 2 : } 24 : 25 12 : void update() override { 26 12 : if (button.update() == AH::IncrementButton::Increment) 27 6 : this->increment(wrap); 28 12 : } 29 : 30 : AH::IncrementButton::State getButtonState() const { 31 : return button.getState(); 32 : } 33 : 34 : #ifdef INDIVIDUAL_BUTTON_INVERT 35 : void invert() { button.invert(); } 36 : #endif 37 : 38 : private: 39 : AH::IncrementButton button; 40 : Wrap wrap; 41 : }; 42 : 43 : // -------------------------------------------------------------------------- // 44 : 45 : /** 46 : * @brief Selector with one button that increments the selection. 47 : * 48 : * @htmlonly 49 : * <object type="image/svg+xml" data="../../selector-increment-LED.svg"></object> 50 : * @endhtmlonly 51 : * 52 : * @ingroup Selectors 53 : * 54 : * @tparam N 55 : * The number of settings. 56 : */ 57 : template <setting_t N> 58 6 : class IncrementSelector : virtual public GenericIncrementSelector<N> { 59 : public: 60 2 : IncrementSelector(Selectable<N> &selectable, 61 : const AH::IncrementButton &button, Wrap wrap = Wrap::Wrap) 62 2 : : GenericIncrementSelector<N>{ 63 2 : selectable, 64 : {}, 65 2 : button, 66 2 : wrap, 67 4 : } {} 68 : 69 1 : IncrementSelector(Selectable<N> &selectable, const AH::Button &button, 70 : Wrap wrap = Wrap::Wrap) 71 1 : : GenericIncrementSelector<N>{ 72 1 : selectable, 73 : {}, 74 1 : button, 75 1 : wrap, 76 2 : } {} 77 : }; 78 : 79 : END_CS_NAMESPACE