tcMenu
Loading...
Searching...
No Matches
ScrollChoiceMenuItem.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2018 https://www.thecoderscorner.com (Dave Cherry).
3 * This product is licensed under an Apache license, see the LICENSE file in the top-level directory.
4 */
5
11#ifndef SCROLL_CHOICE_ENUM_MENU_ITEM_H
12#define SCROLL_CHOICE_ENUM_MENU_ITEM_H
13
14#include <PlatformDetermination.h>
15#include "RuntimeMenuItem.h"
16#include <EepromAbstraction.h>
17
19int enumItemRenderFn(RuntimeMenuItem *item, uint8_t row, RenderFnMode mode, char *buffer, int bufferSize);
20
35public:
36 enum EnumMemMode : uint8_t {
37 MEMORY_ONLY, EEPROM_BASED, CUSTOM
38 };
39private:
40 EepromPosition eepromStart;
41 const char *rangeValues;
42 uint8_t itemSize;
43 uint8_t lastCacheSize;
44 EnumMemMode memMode;
45public:
57 ScrollChoiceMenuItem(int id, RuntimeRenderingFn renderFn, uint8_t currentSel, const char *enumItemsInRam,
58 int itemSize, int numberOfItems, MenuItem *next = nullptr);
59
75 ScrollChoiceMenuItem(uint16_t id, RuntimeRenderingFn renderFn, uint8_t currentSel, EepromPosition eepromStart,
76 int itemSize, int numberOfItems, MenuItem *next = nullptr);
77
88 ScrollChoiceMenuItem(uint16_t id, RuntimeRenderingFn renderFn, uint8_t currentSel, int numberOfItems, MenuItem *next = nullptr);
89
101 ScrollChoiceMenuItem(const AnyMenuInfo* info, uint8_t currentSel, const char *enumItemsInRam,
102 int itemSize, int numberOfItems, MenuItem *next = nullptr, bool isPgm = INFO_LOCATION_PGM);
103
119 ScrollChoiceMenuItem(const AnyMenuInfo* info, uint8_t currentSel, EepromPosition eepromStart,
120 int itemSize, int numberOfItems, MenuItem *next = nullptr, bool isPgm = INFO_LOCATION_PGM);
121
133 ScrollChoiceMenuItem(const AnyMenuInfo* info, RuntimeRenderingFn renderFn, uint8_t currentSel, int numberOfItems, MenuItem *next = nullptr, bool isPgm = INFO_LOCATION_PGM);
134
138 void cacheEepromValues();
139
146 void valueAtPosition(char *buffer, size_t bufferSize, int idx);
147
153 void setCurrentValue(int val, bool silent = false);
154
155 int getEepromStart() const { return eepromStart; }
156
157 int getItemWidth() const { return itemSize; }
158
159 EnumMemMode getMemMode() const { return memMode; }
160
164 int getCurrentValue() { return itemPosition; }
165
166 void copyTransportText(char *string, size_t i);
167
168 void setFromRemote(const char* buffer);
169};
170
176uint8_t hexValueOf(char val);
177
184public:
185 uint8_t red;
186 uint8_t green;
187 uint8_t blue;
188 uint8_t alpha;
189
190 RgbColor32() {
191 red = green = blue = alpha = 0;
192 }
193
194 RgbColor32(int r, int g, int b, int a = 255) {
195 red = r;
196 green = g;
197 blue = b;
198 alpha = a;
199 }
200
201 RgbColor32(const RgbColor32& other) {
202 red = other.red;
203 green = other.green;
204 blue = other.blue;
205 alpha = other.alpha;
206 }
207
208 RgbColor32& operator = (const RgbColor32& other) = default;
209
210 explicit RgbColor32(const char* htmlColor);
211
212 void asHtmlString(char *buffer, size_t bufferSize, bool withAlpha) const;
213};
214
216int rgbAlphaItemRenderFn(RuntimeMenuItem *item, uint8_t row, RenderFnMode mode, char *buffer, int bufferSize);
217
222enum RgbPrintMode { DECIMAL, HEX_HTML };
223
230 RgbColor32 data;
231 bool alphaChannel;
232 static RgbPrintMode printMode;
233public:
234
243 Rgb32MenuItem(RuntimeRenderingFn renderFn, const RgbColor32& col, uint16_t id, bool includeAlpha, MenuItem *next = nullptr);
244
252 Rgb32MenuItem(uint16_t id, RuntimeRenderingFn renderFn, bool includeAlpha, MenuItem* next = nullptr);
253
254
265 Rgb32MenuItem(const AnyMenuInfo* info, RuntimeRenderingFn renderFn, const RgbColor32& col, bool includeAlpha, MenuItem *next = nullptr, bool isPgm = INFO_LOCATION_PGM);
266
276 Rgb32MenuItem(const AnyMenuInfo* info, const RgbColor32& col, bool includeAlpha, MenuItem *next = nullptr, bool isPgm = INFO_LOCATION_PGM);
277
278
282 RgbColor32* getUnderlying() { return &data; }
283
287 RgbColor32 getColorData() { return data; }
292 void setColorData(const RgbColor32& other) {
293 data = other;
294 changeOccurred(false);
295 }
296
300 bool isAlphaInUse() const { return alphaChannel; }
301
302 static void setRgbPrintMode(RgbPrintMode mode) { printMode = mode; }
303 static RgbPrintMode getRgbPrintMode() { return printMode; }
304};
305
306#endif //SCROLL_CHOICE_ENUM_MENU_ITEM_H
RenderFnMode
Definition MenuItems.h:283
int(* RuntimeRenderingFn)(RuntimeMenuItem *item, uint8_t row, RenderFnMode mode, char *buffer, int bufferSize)
Definition MenuItems.h:318
Definition MenuItems.h:51
Contains definitions of menu items that can be fully defined at runtime with no need for prog mem str...
uint8_t hexValueOf(char val)
int enumItemRenderFn(RuntimeMenuItem *item, uint8_t row, RenderFnMode mode, char *buffer, int bufferSize)
Definition ScrollChoiceMenuItem.cpp:137
RgbPrintMode
Definition ScrollChoiceMenuItem.h:222
int rgbAlphaItemRenderFn(RuntimeMenuItem *item, uint8_t row, RenderFnMode mode, char *buffer, int bufferSize)
Definition ScrollChoiceMenuItem.cpp:256
Definition RuntimeMenuItem.h:230
Definition MenuItems.h:329
void changeOccurred(bool silent)
Definition MenuItems.cpp:99
const AnyMenuInfo * info
Definition MenuItems.h:334
Definition ScrollChoiceMenuItem.h:229
void setColorData(const RgbColor32 &other)
Definition ScrollChoiceMenuItem.h:292
bool isAlphaInUse() const
Definition ScrollChoiceMenuItem.h:300
RgbColor32 * getUnderlying()
Definition ScrollChoiceMenuItem.h:282
RgbColor32 getColorData()
Definition ScrollChoiceMenuItem.h:287
Definition RuntimeMenuItem.h:75
Definition ScrollChoiceMenuItem.h:34
void valueAtPosition(char *buffer, size_t bufferSize, int idx)
Definition ScrollChoiceMenuItem.cpp:92
void cacheEepromValues()
Definition ScrollChoiceMenuItem.cpp:73
void setCurrentValue(int val, bool silent=false)
Definition ScrollChoiceMenuItem.cpp:84
int getCurrentValue()
Definition ScrollChoiceMenuItem.h:164
Definition ScrollChoiceMenuItem.h:183