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