tcMenu
Loading...
Searching...
No Matches
TcMenuBuilder.h
1
2#ifndef TCLIBRARYDEV_TCMENUBUILDER_H
3#define TCLIBRARYDEV_TCMENUBUILDER_H
5#include "EepromAbstraction.h"
6#include "MenuItems.h"
7#include "RuntimeMenuItem.h"
8
10class TcMenuBuilder;
11struct RgbColor32;
12class MenuManager;
14
15#define INT_MENU_FLAG_READ 0x01
16#define INT_MENU_FLAG_HIDE 0x02
17#define INT_MENU_FLAG_LOCAL 0x04
18#define INT_MENU_FLAG_SECURE 0x08
19
20// This definition is used when dynamic eeprom storage is enabled to indicate save to rom.
21#define ROM_SAVE 0x0020
22// This definition is used when dynamic eeprom storage is enabled to indicate do not save to eeprom.
23#define DONT_SAVE 0xFFFF
24
35class MenuFlags {
36 uint8_t flags = 0;
37public:
38 MenuFlags() = default;
39 MenuFlags(const MenuFlags&) = default;
40 MenuFlags& operator=(const MenuFlags&) = default;
41 ~MenuFlags() = default;
42
43 MenuFlags& readOnly() { flags |= INT_MENU_FLAG_READ; return *this; }
44 MenuFlags& hide() { flags |= INT_MENU_FLAG_HIDE; return *this; }
45 MenuFlags& localOnly() { flags |= INT_MENU_FLAG_LOCAL; return *this; }
46 MenuFlags& securePin() { flags |= INT_MENU_FLAG_SECURE; return *this; }
47
48 void setOnMenuItem(MenuItem* item) const;
49};
50
55const MenuFlags NoMenuFlags;
56
57// The builder allocator size allows you to re-configure initial amount that the builder will
58// allocate for info blocks. There are up to 8 blocks, meaning 8 * 10 = 80 items by default.
59// You can boost the allocater size and it increases by 8 times that amount.
60#ifndef BUILDER_ALLOCATER_SIZE
61#define BUILDER_ALLOCATER_SIZE 10
62#define BUILDER_ALLOCATER_MAX_SEG (BUILDER_ALLOCATER_SIZE - 1)
63#define BUILDER_ALLOCATER_TOTAL (BUILDER_ALLOCATER_SIZE * 8)
64#endif
65
82private:
83 AnalogMenuItem& item;
84 AnalogMenuInfo& info;
85 TcMenuBuilder& parentBuilder;
86public:
87 AnalogItemBuilder(AnalogMenuItem& item, AnalogMenuInfo& info,TcMenuBuilder& parentBuilder) : item(item), info(info), parentBuilder(parentBuilder) {}
88 AnalogItemBuilder(const AnalogItemBuilder &) = default;
89
96 AnalogItemBuilder& offset(int16_t offs) { info.offset = offs; return *this; }
103 AnalogItemBuilder& divisor(uint16_t divisor) { info.divisor = divisor == 0 ? 1 : divisor; return *this; }
109 AnalogItemBuilder& step(int step) { item.setStep(step); return *this; }
115 AnalogItemBuilder& maxValue(int maxVal) { info.maxValue = maxVal; return *this; }
116
122 AnalogItemBuilder& unit(const char* unit);
123
133 TcMenuBuilder& endItem() const {return parentBuilder;}
134};
135
137private:
138 AnyMenuInfo& info;
139 TcMenuBuilder& parentBuilder;
140 uint16_t initialValue;
141 MenuFlags menuFlags;
142 ScrollChoiceMenuItem* createdItem = nullptr;
143public:
144 ScrollChoiceBuilder(AnyMenuInfo& info,TcMenuBuilder& parentBuilder, uint16_t initialValue, MenuFlags flags) : info(info), parentBuilder(parentBuilder), initialValue(initialValue), menuFlags(flags) {}
145 ScrollChoiceBuilder(const ScrollChoiceBuilder &) = default;
146
176 ScrollChoiceBuilder& fromRamChoices(const char* fixedArray, int numItems, int fixedItemSize);
177
208 ScrollChoiceBuilder& fromRomChoices(EepromPosition eepromPosition, int numItems, int fixedItemSize);
209
210 ScrollChoiceBuilder& ofCustomRtFunction(RuntimeRenderingFn rtRenderFn, int numItems);
211
218
228 TcMenuBuilder& endItem() const;
229};
230
249public:
250 explicit TcMenuBuilder(SubMenuItem* root, TcMenuBuilder* parent = nullptr) : currentSub(root), parent(parent) {}
251 TcMenuBuilder(const TcMenuBuilder &) = default;
252 TcMenuBuilder& operator=(const TcMenuBuilder &) = default;
253 ~TcMenuBuilder() = default;
254
262
284 TcMenuBuilder& floatItem(menuid_t id, const char *name, EepromPosition eepromPosition, uint16_t decimalPlaces, MenuFlags flags, float initial = 0.0F, MenuCallbackFn callbackFn = nullptr);
285
300 TcMenuBuilder& actionItem(menuid_t id, const char *name, MenuFlags flags, MenuCallbackFn callbackFn = nullptr);
301
320 TcMenuBuilder& boolItem(menuid_t id, const char *name, EepromPosition eepromPosition, BooleanNaming naming, MenuFlags flags, bool initial = false, MenuCallbackFn callbackFn = nullptr);
321
351 AnalogItemBuilder analogBuilder(menuid_t id, const char *name, EepromPosition eepromPosition, MenuFlags flags, uint16_t initialValue = 0, MenuCallbackFn callbackFn = nullptr);
352
381 TcMenuBuilder& enumItem(menuid_t id, const char *name, EepromPosition eepromPosition, const char **enumEntries,
382 uint16_t numEntries, MenuFlags flags, uint16_t value = 0,
383 MenuCallbackFn callbackFn = nullptr);
384
401 TcMenuBuilder subMenu(menuid_t id, const char *name, MenuFlags flags, MenuCallbackFn callbackFn = nullptr);
402
421 TcMenuBuilder& textItem(menuid_t id, const char *name, EepromPosition eepromPosition, uint16_t textLength,
422 MenuFlags flags, const char *initial = "", MenuCallbackFn callbackFn = nullptr);
423
437 TcMenuBuilder& textCustomRt(menuid_t id, const char *name, EepromPosition eepromPosition, uint16_t textLength,
438 RuntimeRenderingFn renderFn, MenuFlags flags, const char* initial = "", MenuCallbackFn callbackFn = nullptr);
439
451 TcMenuBuilder& ipAddressItem(menuid_t id, const char *name, EepromPosition eepromPosition, MenuFlags flags, MenuCallbackFn callbackFn = nullptr);
452
465 TcMenuBuilder& ipAddressItem(menuid_t id, const char *name, EepromPosition eepromPosition, MenuFlags flags,
466 IpAddressStorage ipInitial, MenuCallbackFn callbackFn = nullptr);
467
483 TcMenuBuilder& ipAddressCustomRt(menuid_t id, const char *name, EepromPosition eepromPosition, MenuFlags flags,
484 RuntimeRenderingFn renderFn, IpAddressStorage ipInitial, MenuCallbackFn callbackFn = nullptr);
485
486 TcMenuBuilder& timeItem(menuid_t id, const char *name, EepromPosition eepromPosition, MenuFlags flags, MultiEditWireType timeFormat,
487 const TimeStorage& timeStorage, MenuCallbackFn callbackFn = nullptr);
488
489 TcMenuBuilder& timeItem(menuid_t id, const char *name, EepromPosition eepromPosition, MenuFlags flags, MultiEditWireType timeFormat,
490 MenuCallbackFn callbackFn = nullptr);
491
492 TcMenuBuilder& timeItemCustomRt(menuid_t id, const char *name, EepromPosition eepromPosition, const TimeStorage& timeStorage,
493 RuntimeRenderingFn renderFn, MenuFlags flags, MultiEditWireType timeFormat, MenuCallbackFn callbackFn = nullptr);
494
495 TcMenuBuilder& dateItem(menuid_t id, const char *name, EepromPosition eepromPosition, MenuFlags flags, DateStorage initial,
496 MenuCallbackFn callbackFn = nullptr);
497
498 TcMenuBuilder& dateItem(menuid_t id, const char *name, EepromPosition eepromPosition, MenuFlags flags, MenuCallbackFn callbackFn = nullptr);
499
500 TcMenuBuilder& dateItemCustomRt(menuid_t id, const char *name, EepromPosition eepromPosition, MenuFlags flags, DateStorage initial,
501 RuntimeRenderingFn renderFn, MenuCallbackFn callbackFn = nullptr);
502
527 ScrollChoiceBuilder scrollChoiceBuilder(menuid_t id, const char *name, EepromPosition eepromPosition, MenuFlags flags, uint16_t initial = 0, MenuCallbackFn callbackFn = nullptr);
528
544 TcMenuBuilder& rgb32Item(menuid_t id, const char *name, EepromPosition eepromPosition, bool alphaChannel,
545 MenuFlags flags, MenuCallbackFn callbackFn = nullptr);
546
565 TcMenuBuilder& rgb32Item(menuid_t id, const char *name, EepromPosition eepromPosition, bool alphaChannel,
566 MenuFlags flags, const RgbColor32& initial, MenuCallbackFn callbackFn = nullptr);
567
582 TcMenuBuilder& rgb32CustomRt(menuid_t id, const char *name, EepromPosition eepromPosition, bool alphaChannel,
583 RuntimeRenderingFn renderFn, MenuFlags flags, const RgbColor32& initial, MenuCallbackFn callbackFn = nullptr);
584
600 TcMenuBuilder& listItemRam(menuid_t id, const char *name, uint16_t numberOfRows, const char** arrayOfItems, MenuFlags flags, MenuCallbackFn callbackFn = nullptr);
601
617 TcMenuBuilder& listItemFlash(menuid_t id, const char *name, uint16_t numberOfRows, const char** arrayOfItems, MenuFlags flags, MenuCallbackFn callbackFn = nullptr);
618
634 TcMenuBuilder& listItemRtCustom(menuid_t id, const char *name, uint16_t numberOfRows, RuntimeRenderingFn rtRenderFn, MenuFlags flags, MenuCallbackFn callbackFn = nullptr);
635
653 TcMenuBuilder& largeNumberItem(menuid_t id, const char *name, EepromPosition eepromPosition, const LargeFixedNumber& num,
654 bool allowNegative, MenuFlags flags, MenuCallbackFn callbackFn = nullptr);
655
670 TcMenuBuilder& largeNumberRtCustom(menuid_t id, const char *name, EepromPosition eepromPosition, const LargeFixedNumber& num,
671 bool allowNegative, RuntimeRenderingFn renderFn, MenuFlags flags, MenuCallbackFn callbackFn = nullptr);
672
683 TcMenuBuilder& eepromAuthenticationItem(menuid_t id, const char* name, MenuFlags flags, MenuCallbackFn onAuthChanged = nullptr);
684
694 TcMenuBuilder& remoteConnectivityMonitor(menuid_t id, const char* name, MenuFlags flags);
695
703
714
732 AllMenuInfoTypes* fillInAnyInfo(menuid_t id, const char *name, int eeprom, int maxVal, MenuCallbackFn callback_fn);
733
734 void putAtEndOfSub(MenuItem * toAdd) const;
735
736 MenuItem * getRootItem() const {
737 return currentSub->getChild();
738 }
739
740private:
741 SubMenuItem* currentSub;
742 TcMenuBuilder* parent;
743
744};
745
746#endif //TCLIBRARYDEV_TCMENUBUILDER_H
This file contains the classes needed to edit very large number values that could not be edited with ...
In TcMenu, MenuItem storage is shared between program memory and RAM. Usually each MenuItem has assoc...
uint16_t maxValue
Definition MenuItems.h:79
int(* RuntimeRenderingFn)(RuntimeMenuItem *item, uint8_t row, RenderFnMode mode, char *buffer, int bufferSize)
Definition MenuItems.h:327
uint16_t divisor
Definition MenuItems.h:94
void(* MenuCallbackFn)(int id)
Definition MenuItems.h:45
int16_t offset
Definition MenuItems.h:87
BooleanNaming
Definition MenuItems.h:134
Definition MenuItems.h:71
Definition MenuItems.h:51
Definition MenuItems.h:195
Contains definitions of menu items that can be fully defined at runtime with no need for prog mem str...
MultiEditWireType
Definition RuntimeMenuItem.h:46
A builder class for configuring and adding an analog menu item.
Definition TcMenuBuilder.h:81
AnalogItemBuilder & maxValue(int maxVal)
Definition TcMenuBuilder.h:115
AnalogItemBuilder & divisor(uint16_t divisor)
Definition TcMenuBuilder.h:103
TcMenuBuilder & endItem() const
Finalizes the configuration of the analog menu item and returns control to the parent menu builder.
Definition TcMenuBuilder.h:133
AnalogItemBuilder & offset(int16_t offs)
Definition TcMenuBuilder.h:96
AnalogItemBuilder & step(int step)
Definition TcMenuBuilder.h:109
AnalogItemBuilder & unit(const char *unit)
Definition TcMenuBuilder.cpp:83
Definition MenuItems.h:485
void setStep(int newStep)
Definition MenuItems.h:506
Definition RuntimeMenuItem.h:377
Definition EditableLargeNumberMenuItem.h:27
Definition TcMenuBuilder.h:35
Definition MenuItems.h:338
Definition tcMenu.h:139
Definition TcMenuBuilder.h:136
ScrollChoiceBuilder & fromRomChoices(EepromPosition eepromPosition, int numItems, int fixedItemSize)
Configures the scroll choice menu item using a fixed array of choices stored in EEPROM.
Definition TcMenuBuilder.cpp:98
ScrollChoiceBuilder & fromRamChoices(const char *fixedArray, int numItems, int fixedItemSize)
Configures the scroll choice menu item using a fixed array of choices stored in RAM.
Definition TcMenuBuilder.cpp:93
TcMenuBuilder & endItem() const
Finalizes the configuration of the scroll choice menu item and returns control to the parent menu bui...
Definition TcMenuBuilder.cpp:115
ScrollChoiceBuilder & cachingEepromValues()
Definition TcMenuBuilder.cpp:108
Definition ScrollChoiceMenuItem.h:34
Definition RuntimeMenuItem.h:149
MenuItem * getChild() const
Definition RuntimeMenuItem.h:183
A builder class to create and configure a hierarchical menu structure.
Definition TcMenuBuilder.h:248
TcMenuBuilder & ipAddressItem(menuid_t id, const char *name, EepromPosition eepromPosition, MenuFlags flags, MenuCallbackFn callbackFn=nullptr)
Definition TcMenuBuilder.cpp:294
TcMenuBuilder & actionItem(menuid_t id, const char *name, MenuFlags flags, MenuCallbackFn callbackFn=nullptr)
Adds an action menu item to the current menu structure.
Definition TcMenuBuilder.cpp:140
TcMenuBuilder & eepromAuthenticationItem(menuid_t id, const char *name, MenuFlags flags, MenuCallbackFn onAuthChanged=nullptr)
Definition TcMenuBuilder.cpp:280
AnalogItemBuilder analogBuilder(menuid_t id, const char *name, EepromPosition eepromPosition, MenuFlags flags, uint16_t initialValue=0, MenuCallbackFn callbackFn=nullptr)
Creates and configures an analog menu item as part of the menu structure.
Definition TcMenuBuilder.cpp:158
TcMenuBuilder & usingDynamicEEPROMStorage()
Definition TcMenuBuilder.cpp:125
TcMenuBuilder & listItemRam(menuid_t id, const char *name, uint16_t numberOfRows, const char **arrayOfItems, MenuFlags flags, MenuCallbackFn callbackFn=nullptr)
Adds a list menu item to the menu structure with content stored in RAM.
Definition TcMenuBuilder.cpp:256
TcMenuBuilder & textCustomRt(menuid_t id, const char *name, EepromPosition eepromPosition, uint16_t textLength, RuntimeRenderingFn renderFn, MenuFlags flags, const char *initial="", MenuCallbackFn callbackFn=nullptr)
Definition TcMenuBuilder.cpp:334
TcMenuBuilder & listItemRtCustom(menuid_t id, const char *name, uint16_t numberOfRows, RuntimeRenderingFn rtRenderFn, MenuFlags flags, MenuCallbackFn callbackFn=nullptr)
Adds a runtime custom list item to the menu structure.
Definition TcMenuBuilder.cpp:272
TcMenuBuilder & remoteConnectivityMonitor(menuid_t id, const char *name, MenuFlags flags)
Definition TcMenuBuilder.cpp:287
TcMenuBuilder & rgb32CustomRt(menuid_t id, const char *name, EepromPosition eepromPosition, bool alphaChannel, RuntimeRenderingFn renderFn, MenuFlags flags, const RgbColor32 &initial, MenuCallbackFn callbackFn=nullptr)
Definition TcMenuBuilder.cpp:230
TcMenuBuilder & largeNumberRtCustom(menuid_t id, const char *name, EepromPosition eepromPosition, const LargeFixedNumber &num, bool allowNegative, RuntimeRenderingFn renderFn, MenuFlags flags, MenuCallbackFn callbackFn=nullptr)
Definition TcMenuBuilder.cpp:239
TcMenuBuilder & enumItem(menuid_t id, const char *name, EepromPosition eepromPosition, const char **enumEntries, uint16_t numEntries, MenuFlags flags, uint16_t value=0, MenuCallbackFn callbackFn=nullptr)
Adds an enumerated menu item to the menu structure.
Definition TcMenuBuilder.cpp:167
TcMenuBuilder & floatItem(menuid_t id, const char *name, EepromPosition eepromPosition, uint16_t decimalPlaces, MenuFlags flags, float initial=0.0F, MenuCallbackFn callbackFn=nullptr)
Adds a float menu item to the current menu structure.
Definition TcMenuBuilder.cpp:130
AllMenuInfoTypes * fillInAnyInfo(menuid_t id, const char *name, int eeprom, int maxVal, MenuCallbackFn callback_fn)
Fills in an AnyInfoReserve structure with the provided menu item information.
Definition TcMenuBuilder.cpp:46
TcMenuBuilder & textItem(menuid_t id, const char *name, EepromPosition eepromPosition, uint16_t textLength, MenuFlags flags, const char *initial="", MenuCallbackFn callbackFn=nullptr)
Adds a text menu item to the menu structure.
Definition TcMenuBuilder.cpp:325
TcMenuBuilder & rgb32Item(menuid_t id, const char *name, EepromPosition eepromPosition, bool alphaChannel, MenuFlags flags, MenuCallbackFn callbackFn=nullptr)
Configures and adds a 32-bit RGB menu item to the menu structure.
Definition TcMenuBuilder.cpp:217
TcMenuBuilder & ipAddressCustomRt(menuid_t id, const char *name, EepromPosition eepromPosition, MenuFlags flags, RuntimeRenderingFn renderFn, IpAddressStorage ipInitial, MenuCallbackFn callbackFn=nullptr)
Definition TcMenuBuilder.cpp:298
TcMenuBuilder & boolItem(menuid_t id, const char *name, EepromPosition eepromPosition, BooleanNaming naming, MenuFlags flags, bool initial=false, MenuCallbackFn callbackFn=nullptr)
Creates and configures a boolean menu item to be added to the menu structure.
Definition TcMenuBuilder.cpp:148
TcMenuBuilder subMenu(menuid_t id, const char *name, MenuFlags flags, MenuCallbackFn callbackFn=nullptr)
Creates a submenu item with the specified attributes and integrates it into the menu hierarchy.
Definition TcMenuBuilder.cpp:344
TcMenuBuilder & listItemFlash(menuid_t id, const char *name, uint16_t numberOfRows, const char **arrayOfItems, MenuFlags flags, MenuCallbackFn callbackFn=nullptr)
Adds a list menu item to the menu structure with content stored in FLASH.
Definition TcMenuBuilder.cpp:264
ScrollChoiceBuilder scrollChoiceBuilder(menuid_t id, const char *name, EepromPosition eepromPosition, MenuFlags flags, uint16_t initial=0, MenuCallbackFn callbackFn=nullptr)
Creates and preconfigures a ScrollChoiceBuilder to define a scrollable choice menu item.
Definition TcMenuBuilder.cpp:212
TcMenuBuilder & endSub()
Ends the current submenu context and returns to the parent menu.
Definition TcMenuBuilder.cpp:75
TcMenuBuilder & largeNumberItem(menuid_t id, const char *name, EepromPosition eepromPosition, const LargeFixedNumber &num, bool allowNegative, MenuFlags flags, MenuCallbackFn callbackFn=nullptr)
Definition TcMenuBuilder.cpp:248
TcMenuBuilder & appendCustomItem(MenuItem *itemToAdd)
Definition TcMenuBuilder.cpp:70
Definition RuntimeMenuItem.h:485
Definition ScrollChoiceMenuItem.h:183
Definition RuntimeMenuItem.h:463