#pragma once #include "Selector.hpp" #include BEGIN_CS_NAMESPACE template class GenericIncrementSelector : public GenericSelector { using Parent = GenericSelector; public: GenericIncrementSelector(Selectable &selectable, const Callback &callback, const AH::IncrementButton &button) : GenericSelector {selectable, callback}, button(button) {} void begin() override { Parent::begin(); button.begin(); } void update() override { Parent::update(); switch (button.update()) { case AH::IncrementButton::Nothing: break; case AH::IncrementButton::IncrementShort: // fallthrough case AH::IncrementButton::IncrementLong: // fallthrough case AH::IncrementButton::IncrementHold: this->increment(Wrap::Wrap); break; case AH::IncrementButton::ReleasedShort: break; case AH::IncrementButton::ReleasedLong: break; default: break; } } AH::IncrementButton::State getButtonState() const { return button.getState(); } /// @see @ref AH::Button::invert() void invert() { button.invert(); } private: AH::IncrementButton button; }; // -------------------------------------------------------------------------- // /** * @brief Selector with one button that increments the selection. * * @htmlonly * * @endhtmlonly * * @ingroup Selectors * * @tparam N * The number of settings. */ template class IncrementSelector : virtual public GenericIncrementSelector { public: IncrementSelector(Selectable &selectable, const AH::IncrementButton &button) : GenericIncrementSelector {selectable, {}, button} {} IncrementSelector(Selectable &selectable, const AH::Button &button) : GenericIncrementSelector {selectable, {}, button} {} }; END_CS_NAMESPACE