From d16bcced8d84ef48f156184f951afb0f979cd7e0 Mon Sep 17 00:00:00 2001 From: Jason von Nieda Date: Fri, 27 Jan 2012 23:03:33 -0800 Subject: [PATCH] Added a Spinner control --- ScreenUi.cpp | 37 +++++++++++++++++++++++++++++++++++++ ScreenUi.h | 17 +++++++++++++++++ 2 files changed, 54 insertions(+) diff --git a/ScreenUi.cpp b/ScreenUi.cpp index 977760a..1a34532 100644 --- a/ScreenUi.cpp +++ b/ScreenUi.cpp @@ -386,6 +386,43 @@ bool List::handleInputEvent(int x, int y, bool selected, bool cancelled) { return captured_; } +//////////////////////////////////////////////////////////////////////////////// +// Spinner +//////////////////////////////////////////////////////////////////////////////// + +Spinner::Spinner(int value, int low, int high, int increment, bool rollover) : Label(NULL) { + value_ = value; + low_ = low; + high_ = high; + increment_ = increment; + rollover_ = rollover; + sprintf(buffer_, "%d", value_); + setText(buffer_); +} + +int Spinner::intValue() { + return value_; +} + +bool Spinner::handleInputEvent(int x, int y, bool selected, bool cancelled) { + if (captured_ && y) { + value_ += (y * increment_); + if (value_ < low_) { + value_ = rollover_ ? high_ : low_; + } + else if (value_ > high_) { + value_ = rollover_ ? low_ : high_; + } + sprintf(buffer_, "%d", value_); + setText(buffer_); + repaint(); + } + if (selected) { + captured_ = !captured_; + repaint(); + } +} + //////////////////////////////////////////////////////////////////////////////// // Input //////////////////////////////////////////////////////////////////////////////// diff --git a/ScreenUi.h b/ScreenUi.h index 661910b..0ae0d45 100644 --- a/ScreenUi.h +++ b/ScreenUi.h @@ -274,6 +274,23 @@ class List : public Label { uint8_t selectedIndex_; }; +// A Component that allows the user to scroll through a range of Integers +// or floats. +class Spinner : public Label { + public: + Spinner(int value, int low, int high, int increment, bool rollover); + int intValue(); + virtual bool acceptsFocus() { return true; } + virtual bool handleInputEvent(int x, int y, bool selected, bool cancelled); + #ifdef SCREENUI_DEBUG + virtual char *description() { return "Spinner"; } + #endif + private: + char buffer_[10]; + int value_, low_, high_, increment_; + bool rollover_; +}; + // allows text input. Each character can be clicked to scroll through the alphabet. class Input : public Label { public: