#pragma once #include class ConfigInputTask : public BufferedInputSource { public: ConfigInputTask() : BufferedInputSource("ConfigInput") {} void handleEvent(const InputEvent& evt) override { if (evt.intent == InputEvent::UserInput) { Buttons::Chord chord = (Buttons::Chord) evt.asInt(); switch (chord) { case Buttons::Circle: m_currentIntent = nextIntent(); //Log.info("Next setting... (%d)", m_currentIntent); break; case Buttons::CircleTriangle: //Log.info("Increment..."); increment(); break; case Buttons::CircleCross: //Log.info("Decrement..."); decrement(); break; case Buttons::Triangle: //Log.info("Save..."); setEvent(InputEvent::SaveConfigurationRequest); break; default: break; } } } private: InputEvent::Intent m_currentIntent = InputEvent::SetDisplayLength; void decrement() { int current = 0; switch (m_currentIntent) { case InputEvent::SetDisplayLength: current = Static::instance()->coordMap()->pixelCount; break; case InputEvent::SetDisplayOffset: current = Static::instance()->coordMap()->startPixel; break; default: break; } setEvent(InputEvent{m_currentIntent, current - 1}); } void increment() { int current = 0; switch (m_currentIntent) { case InputEvent::SetDisplayLength: current = Static::instance()->coordMap()->pixelCount; break; case InputEvent::SetDisplayOffset: current = Static::instance()->coordMap()->startPixel; break; default: break; } setEvent(InputEvent{m_currentIntent, current + 1}); } InputEvent::Intent nextIntent() { switch (m_currentIntent) { case InputEvent::SetDisplayLength: return InputEvent::SetDisplayOffset; case InputEvent::SetDisplayOffset: return InputEvent::SetDisplayLength; default: return InputEvent::None; } } };