RSeries astromech firmware
ChoiceIntArrayScreen.h
Go to the documentation of this file.
1 //
3 // Utility base class for screens selecting between several integer values
4 //
6 
8 {
9 public:
10  ChoiceIntArrayScreen(ScreenID id, unsigned* values, uint8_t siz) :
11  CommandScreen(sDisplay, id),
12  fValues(values),
13  fNumValues(siz)
14  {}
15 
16  virtual void init()
17  {
18  fDisplayValue = ~0u;
20  }
21 
22  virtual void buttonUpPressed(bool repeat) override
23  {
24  unsigned val = getValueToIndex(getValue());
25  if (val > 0)
26  setValue(fValues[val-1]);
27  }
28 
29  virtual void buttonLeftPressed(bool repeat) override
30  {
31  popScreen();
33  }
34 
35  virtual void buttonDownPressed(bool repeat) override
36  {
37  unsigned val = getValueToIndex(getValue());
38  if (val+1 < fNumValues)
39  {
40  setValue(fValues[val+1]);
41  }
42  }
43 
44  virtual void buttonInReleased() override
45  {
46  if (fDisplayValue != ~0u)
47  {
49  popScreen();
51  {
52  pushScreen(kSettingsUpdatedScreen);
53  }
54  }
55  else
56  {
57  popScreen();
58  }
59  }
60 
61  virtual void render() override
62  {
63  unsigned value = getValue();
64  if (value != fDisplayValue)
65  {
66  sDisplay.invertDisplay(value != fStartValue);
67  sDisplay.clearDisplay();
68  sDisplay.setTextSize(4);
69  sDisplay.setCursor(5, 0);
70  sDisplay.println(value);
71  sDisplay.display();
72  fDisplayValue = value;
73  }
74  }
75 
76 protected:
77  unsigned fDisplayValue = ~0u;
78  unsigned fStartValue;
79  unsigned* fValues;
80  uint8_t fNumValues;
81 
82  virtual unsigned getValueToIndex(unsigned value)
83  {
84  for (unsigned i = 0; i < fNumValues; i++)
85  {
86  if (fValues[i] == value)
87  return i;
88  }
89  return 0;
90  }
91 
92  virtual unsigned getValue() = 0;
93 
94  virtual void setValue(unsigned newValue) = 0;
95 
96  virtual void saveValue(unsigned newValue) = 0;
97 };
ChoiceIntArrayScreen::fValues
unsigned * fValues
Definition: ChoiceIntArrayScreen.h:79
CommandScreen
Definition: CommandScreen.h:273
ChoiceIntArrayScreen
Definition: ChoiceIntArrayScreen.h:7
ChoiceIntArrayScreen::buttonUpPressed
virtual void buttonUpPressed(bool repeat) override
Definition: ChoiceIntArrayScreen.h:22
ChoiceIntArrayScreen::setValue
virtual void setValue(unsigned newValue)=0
ChoiceIntArrayScreen::buttonLeftPressed
virtual void buttonLeftPressed(bool repeat) override
Definition: ChoiceIntArrayScreen.h:29
ChoiceIntArrayScreen::buttonDownPressed
virtual void buttonDownPressed(bool repeat) override
Definition: ChoiceIntArrayScreen.h:35
ChoiceIntArrayScreen::saveValue
virtual void saveValue(unsigned newValue)=0
ChoiceIntArrayScreen::fNumValues
uint8_t fNumValues
Definition: ChoiceIntArrayScreen.h:80
ChoiceIntArrayScreen::ChoiceIntArrayScreen
ChoiceIntArrayScreen(ScreenID id, unsigned *values, uint8_t siz)
Definition: ChoiceIntArrayScreen.h:10
ChoiceIntArrayScreen::buttonInReleased
virtual void buttonInReleased() override
Definition: ChoiceIntArrayScreen.h:44
ChoiceIntArrayScreen::render
virtual void render() override
Definition: ChoiceIntArrayScreen.h:61
ChoiceIntArrayScreen::init
virtual void init()
Definition: ChoiceIntArrayScreen.h:16
CommandScreen::popScreen
void popScreen()
Definition: CommandScreen.h:311
ChoiceIntArrayScreen::fStartValue
unsigned fStartValue
Definition: ChoiceIntArrayScreen.h:78
ChoiceIntArrayScreen::getValueToIndex
virtual unsigned getValueToIndex(unsigned value)
Definition: ChoiceIntArrayScreen.h:82
CommandScreen::pushScreen
void pushScreen(ScreenID id)
Definition: CommandScreen.h:307
ChoiceIntArrayScreen::fDisplayValue
unsigned fDisplayValue
Definition: ChoiceIntArrayScreen.h:77
ChoiceIntArrayScreen::getValue
virtual unsigned getValue()=0