#pragma once #include #include "MappedInputManager.h" #include "activities/Activity.h" #include "util/ButtonNavigator.h" class GfxRenderer; class IntervalSelectionActivity final : public Activity { public: explicit IntervalSelectionActivity(GfxRenderer& renderer, MappedInputManager& mappedInput, const char* activityName, StrId titleId, int initialValue, int minValue, int maxValue, int smallStep, int largeStep, StrId valueFormatId = StrId::STR_NONE_OPT, bool readerActivity = false, bool ignoreInitialConfirmRelease = false, StrId maxBoundaryLabelId = StrId::STR_NONE_OPT) : Activity(activityName, renderer, mappedInput), titleId(titleId), valueFormatId(valueFormatId), maxBoundaryLabelId(maxBoundaryLabelId), value(initialValue), minValue(minValue), maxValue(maxValue), smallStep(smallStep), largeStep(largeStep), readerActivity(readerActivity), ignoreConfirmRelease(ignoreInitialConfirmRelease) {} void onEnter() override; void loop() override; void render(RenderLock&&) override; bool isReaderActivity() const override { return readerActivity; } private: StrId titleId; StrId valueFormatId; StrId maxBoundaryLabelId; int value; int minValue; int maxValue; int smallStep; int largeStep; bool readerActivity; bool ignoreConfirmRelease; ButtonNavigator buttonNavigator; void adjustValue(int delta); int clampedValue(int candidate) const; void drawStepHintLine(int y, StrId labelId, int step); };