Skip to content

Commit 2833dad

Browse files
committed
#47 reverse change that prevented menu root being submenu, #48 title is now optional on LCD driver
1 parent e521ddb commit 2833dad

File tree

8 files changed

+24
-16
lines changed

8 files changed

+24
-16
lines changed

examples/keyboardEthernetShield/keyboardEthernetShield.emf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"lastEdited": {
3-
"seconds": 1585213908,
3+
"seconds": 1585312211,
44
"nanos": 0
55
},
66
"codeOptions": {

examples/keyboardEthernetShield/keyboardEthernetShield.ino

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,8 @@ void setup() {
8787
menuRemoteMonitor.addConnector(remoteServer.getRemoteConnector(0));
8888
menuAuthKeyMgr.setLocalOnly(true);
8989

90+
renderer.setTitleRequired(false);
91+
9092
setupMenu();
9193

9294
setupKeyboard();

examples/keyboardEthernetShield/tcMenuLiquidCrystal.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ LiquidCrystalRenderer::LiquidCrystalRenderer(LiquidCrystal& lcd, uint8_t dimX, u
2323
this->forwardChar = '>';
2424
this->editChar = '=';
2525
this->drewTitleThisTime = false;
26+
this->titleRequired = true;
2627
}
2728

2829
void LiquidCrystalRenderer::initialise() {
@@ -123,7 +124,7 @@ void LiquidCrystalRenderer::render() {
123124
else {
124125
MenuItem* item = menuMgr.getCurrentMenu();
125126

126-
bool titleNeeded = menuMgr.getCurrentMenu() == menuMgr.getRoot();
127+
bool titleNeeded = titleRequired && menuMgr.getCurrentMenu() == menuMgr.getRoot();
127128

128129
// first we find the first currently active item in our single linked list
129130
int activeOffs = offsetOfCurrentActive(item);

examples/keyboardEthernetShield/tcMenuLiquidCrystal.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,12 +34,14 @@ class LiquidCrystalRenderer : public BaseMenuRenderer {
3434
uint8_t forwardChar;
3535
uint8_t editChar;
3636
bool drewTitleThisTime;
37+
bool titleRequired;
3738
public:
3839

3940
LiquidCrystalRenderer(LiquidCrystal& lcd, uint8_t dimX, uint8_t dimY);
4041
virtual ~LiquidCrystalRenderer();
4142
void render() override;
4243
void initialise() override;
44+
void setTitleRequired(bool titleRequired) { this->titleRequired = titleRequired; }
4345

4446
void setEditorChars(char back, char forward, char edit);
4547

renderers/liquidcrystal/tcMenuLiquidCrystal.cpp

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ LiquidCrystalRenderer::LiquidCrystalRenderer(LiquidCrystal& lcd, uint8_t dimX, u
2323
this->forwardChar = '>';
2424
this->editChar = '=';
2525
this->drewTitleThisTime = false;
26+
this->titleRequired = true;
2627
}
2728

2829
void LiquidCrystalRenderer::initialise() {
@@ -123,7 +124,7 @@ void LiquidCrystalRenderer::render() {
123124
else {
124125
MenuItem* item = menuMgr.getCurrentMenu();
125126

126-
bool titleNeeded = menuMgr.getCurrentMenu() == menuMgr.getRoot();
127+
bool titleNeeded = titleRequired && menuMgr.getCurrentMenu() == menuMgr.getRoot();
127128

128129
// first we find the first currently active item in our single linked list
129130
int activeOffs = offsetOfCurrentActive(item);
@@ -148,7 +149,8 @@ void LiquidCrystalRenderer::render() {
148149
if (lastOffset != toOffsetBy) locRedrawMode = MENUDRAW_COMPLETE_REDRAW;
149150
lastOffset = toOffsetBy;
150151

151-
while (item != NULL && toOffsetBy--) {
152+
while (item != NULL && toOffsetBy) {
153+
if(item->isVisible()) toOffsetBy = toOffsetBy - 1;
152154
item = item->getNext();
153155
}
154156
}
@@ -159,10 +161,13 @@ void LiquidCrystalRenderer::render() {
159161

160162
// and then we start drawing items until we run out of screen or items
161163
while (item && cnt < dimY) {
162-
if (locRedrawMode != MENUDRAW_NO_CHANGE || item->isChanged()) {
163-
renderMenuItem(cnt, item);
164-
}
165-
++cnt;
164+
if(item->isVisible())
165+
{
166+
if (locRedrawMode != MENUDRAW_NO_CHANGE || item->isChanged()) {
167+
renderMenuItem(cnt, item);
168+
}
169+
++cnt;
170+
}
166171
item = item->getNext();
167172
}
168173
}

renderers/liquidcrystal/tcMenuLiquidCrystal.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,12 +34,14 @@ class LiquidCrystalRenderer : public BaseMenuRenderer {
3434
uint8_t forwardChar;
3535
uint8_t editChar;
3636
bool drewTitleThisTime;
37+
bool titleRequired;
3738
public:
3839

3940
LiquidCrystalRenderer(LiquidCrystal& lcd, uint8_t dimX, uint8_t dimY);
4041
virtual ~LiquidCrystalRenderer();
4142
void render() override;
4243
void initialise() override;
44+
void setTitleRequired(bool titleRequired) { this->titleRequired = titleRequired; }
4345

4446
void setEditorChars(char back, char forward, char edit);
4547

src/SecuredMenuPopup.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ int secPopupActionRenderFn(RuntimeMenuItem* item, uint8_t row, RenderFnMode mode
4646
case RENDERFN_INVOKE:
4747
if(act->getSecuredItem() != NULL) {
4848
if (menuMgr.secureMenuInstance()->doesPinMatch()) {
49-
menuMgr.setCurrentMenu(act->getSecuredItem());
49+
menuMgr.setCurrentMenu(act->getSecuredItem()->getChild());
5050
}
5151
else {
5252
BaseDialog* dlg = menuMgr.getRenderer()->getDialog();

src/tcMenu.cpp

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -144,16 +144,16 @@ void MenuManager::actionOnCurrentItem(MenuItem* toEdit) {
144144
// if there's a new item specified in toEdit, it means we need to change
145145
// the current editor (if it's possible to edit that value)
146146
if (toEdit->getMenuType() == MENUTYPE_SUB_VALUE) {
147-
if (toEdit->getMenuType() == MENUTYPE_SUB_VALUE && toEdit->isSecured() && authenticationManager != NULL) {
147+
SubMenuItem* subMenu = reinterpret_cast<SubMenuItem*>(toEdit);
148+
if (subMenu->isSecured() && authenticationManager != NULL) {
148149
serdebugF2("Submenu is secured: ", toEdit->getId());
149-
SubMenuItem* subMenu = reinterpret_cast<SubMenuItem*>(toEdit);
150150
SecuredMenuPopup* popup = secureMenuInstance();
151151
popup->start(subMenu);
152152
currentRoot = popup->getRootItem();
153153
baseRenderer->prepareNewSubmenu();
154154
}
155155
else {
156-
menuMgr.setCurrentMenu(toEdit);
156+
menuMgr.setCurrentMenu(subMenu->getChild());
157157
}
158158
}
159159
else if (toEdit->getMenuType() == MENUTYPE_RUNTIME_LIST) {
@@ -273,10 +273,6 @@ void MenuManager::setCurrentMenu(MenuItem * theItem) {
273273
getParentAndReset();
274274

275275
MenuItem* root = theItem;
276-
if (theItem->getMenuType() == MENUTYPE_SUB_VALUE) {
277-
SubMenuItem* subMenu = reinterpret_cast<SubMenuItem*>(theItem);
278-
root = subMenu->getChild();
279-
}
280276
currentRoot = root;
281277
root->setActive(true);
282278
baseRenderer->prepareNewSubmenu();

0 commit comments

Comments
 (0)