Skip to content

Commit 6a08ac4

Browse files
committed
allow changing menu texts
inspite of c/c++ telling that code text is constant on MCU world it can be otherwise (-fpermissive) therefor i'm allowing changes to it
1 parent 9079e85 commit 6a08ac4

File tree

3 files changed

+45
-43
lines changed

3 files changed

+45
-43
lines changed

src/items.h

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,11 @@
2727
return ((uint16_t*)&tmp)[sizeof(this)/sizeof(uint16_t)-1];
2828
}
2929
inline prompt(constMEM promptShadow& shadow):shadow(&shadow) {}
30-
inline prompt(const char* t,action a=doNothing,eventMask e=noEvent,styles s=noStyle,systemStyles ss=_noStyle)
30+
inline prompt(constText* t,action a=doNothing,eventMask e=noEvent,styles s=noStyle,systemStyles ss=_noStyle)
3131
:shadow(new promptShadow(t,a,e,s,ss)) {}
3232
inline void enable() {enabled=enabledStatus;}
3333
inline void disable() {enabled=disabledStatus;}
34-
inline const char* getText() const {return shadow->getText();}
34+
inline constText* getText() const {return shadow->getText();}
3535

3636
inline systemStyles sysStyles() const {return shadow->_sysStyles();}
3737
inline styles style() const {return shadow->_style();}
@@ -69,7 +69,7 @@
6969
#endif
7070
#ifdef MENU_ASYNC
7171
virtual prompt* seek(idx_t* uri,idx_t len) {return len?NULL:this;}
72-
virtual bool async(const char *uri,navRoot& root,idx_t lvl) {
72+
virtual bool async(constText*uri,navRoot& root,idx_t lvl) {
7373
return ((!*uri)||(uri[0]=='/'&&!uri[1]));
7474
}
7575
//some functions to use on htmlFmt
@@ -85,7 +85,7 @@
8585

8686
class Exit:public prompt {
8787
public:
88-
Exit(const char* t):prompt(t,(callback)doExit,enterEvent) {}
88+
Exit(constText* t):prompt(t,(callback)doExit,enterEvent) {}
8989
};
9090

9191
//--------------------------------------------------------------------------
@@ -94,7 +94,7 @@
9494
class navTarget:public prompt {
9595
public:
9696
navTarget(constMEM promptShadow& shadow):prompt(shadow) {}
97-
navTarget(const char* t,action a=doNothing,eventMask e=noEvent,styles s=noStyle,systemStyles ss=_noStyle)
97+
navTarget(constText* t,action a=doNothing,eventMask e=noEvent,styles s=noStyle,systemStyles ss=_noStyle)
9898
:prompt(t,a,e,s,ss) {}
9999
virtual void parseInput(navNode& nav,menuIn& in);
100100
virtual void doNav(navNode& nav,navCmd cmd);
@@ -109,18 +109,18 @@
109109
idx_t cursor=0;
110110
textField(constMEM textFieldShadow& shadow):navTarget(shadow) {}
111111
textField(
112-
const char*label,
112+
constText*label,
113113
char* b,
114114
idx_t sz,
115-
const char* constMEM* v,
115+
constText* constMEM* v,
116116
action a=doNothing,
117117
eventMask e=noEvent,
118118
styles style=noStyle,
119119
systemStyles ss=(Menu::systemStyles)(_noStyle|_canNav|_parentDraw)
120120
):navTarget(*new textFieldShadow(label,b,sz,v,a,e,style,ss)) {}
121121
inline char* buffer() const {return ((textFieldShadow*)shadow)->_buffer();}
122122
inline idx_t sz() const {return ((textFieldShadow*)shadow)->_sz();}
123-
const char* validator(int i) {return ((textFieldShadow*)shadow)->operator[](i%sz());}
123+
constText* validator(int i) {return ((textFieldShadow*)shadow)->operator[](i%sz());}
124124
void doNav(navNode& nav,navCmd cmd) override;
125125
Used printTo(navRoot &root,bool sel,menuOut& out, idx_t idx,idx_t len,idx_t panelNr=0) override;
126126
};
@@ -135,9 +135,9 @@
135135
virtual classes type() const {return fieldClass;}
136136
#endif
137137
#ifdef MENU_ASYNC
138-
bool async(const char *uri,navRoot& root,idx_t lvl) override;
138+
bool async(constText*uri,navRoot& root,idx_t lvl) override;
139139
#endif
140-
inline const char* units() {return ((fieldBaseShadow*)shadow)->_units();}
140+
inline constText* units() {return ((fieldBaseShadow*)shadow)->_units();}
141141
void doNav(navNode& nav,navCmd cmd) override;
142142
virtual bool canTune()=0;
143143
virtual void constrainField()=0;
@@ -153,8 +153,8 @@
153153
menuField(constMEM menuFieldShadow<T> & shadow):fieldBase(shadow) {}
154154
menuField(
155155
T &value,
156-
const char * text,
157-
const char *units,
156+
constText* text,
157+
constText*units,
158158
T low,
159159
T high,
160160
T step,
@@ -206,7 +206,7 @@
206206
class menuValue:public prompt {
207207
public:
208208
menuValue(constMEM menuValueShadow<T>& shadow):prompt(shadow) {}
209-
menuValue(const char * text,T value,action a=doNothing,eventMask e=noEvent)
209+
menuValue(constText* text,T value,action a=doNothing,eventMask e=noEvent)
210210
:menuValue(*new menuValueShadow<T>(text,value,a,e)) {}
211211
// #ifdef DEBUG
212212
// bool changed(const navNode &nav,const menuOut& out,bool sub=true) override {return false;}
@@ -222,7 +222,7 @@
222222
class menuNode:public navTarget {
223223
public:
224224
menuNode(constMEM menuNodeShadow& s):navTarget(s) {}
225-
menuNode(const char* text,idx_t sz,prompt* constMEM data[],action a=noAction,eventMask e=noEvent,styles style=wrapStyle,systemStyles ss=(systemStyles)(_menuData|_canNav))
225+
menuNode(constText* text,idx_t sz,prompt* constMEM data[],action a=noAction,eventMask e=noEvent,styles style=wrapStyle,systemStyles ss=(systemStyles)(_menuData|_canNav))
226226
:navTarget(*new menuNodeShadow(text,sz,data,a,e,style,ss)) {}
227227
#ifdef MENU_FMT_WRAPS
228228
virtual classes type() const {return menuClass;}
@@ -236,7 +236,7 @@
236236
prompt* seek(idx_t* uri,idx_t len) override;
237237
#endif
238238
#ifdef MENU_ASYNC
239-
bool async(const char *uri,navRoot& root,idx_t lvl=0) override;
239+
bool async(constText*uri,navRoot& root,idx_t lvl=0) override;
240240
#endif
241241
};
242242

@@ -263,7 +263,7 @@
263263
public:
264264
idx_t reflex;
265265
menuVariant(constMEM menuNodeShadow& s):menuVariantBase(s) {}
266-
menuVariant(const char* text,T &target,idx_t sz,prompt* constMEM* data,action a,eventMask e,styles style)
266+
menuVariant(constText* text,T &target,idx_t sz,prompt* constMEM* data,action a,eventMask e,styles style)
267267
:menuVariantBase(*new menuVariantShadow<T>(text,target,sz,data,a,e,style)) {}
268268
idx_t sync() override {
269269
for(idx_t i=0;i<sz();i++)
@@ -301,7 +301,7 @@
301301
public:
302302
select(constMEM menuNodeShadow& s):menuVariant<T>(s) {}
303303
select(
304-
const char* text,
304+
constText* text,
305305
T &target,
306306
idx_t sz,
307307
prompt* constMEM* data,
@@ -320,7 +320,7 @@
320320
public:
321321
toggle(constMEM menuNodeShadow& s):menuVariant<T>(s) {}
322322
toggle(
323-
const char* text,
323+
constText* text,
324324
T &target,
325325
idx_t sz,
326326
prompt* constMEM* data,
@@ -355,7 +355,7 @@
355355
public:
356356
choose(constMEM menuNodeShadow& s):menuVariant<T>(s) {}
357357
choose(
358-
const char* text,
358+
constText* text,
359359
T &target,
360360
idx_t sz,
361361
prompt* constMEM* data,

src/macros.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#define USING_PGM
2020
#define MEMMODE PROGMEM
2121
#define constMEM const
22+
#define constText const char
2223
#define memPtr(src) pgm_read_ptr(&(src))
2324
#define memByte(addr) (pgm_read_byte(addr))
2425
#define memWord(addr) (pgm_read_word(addr))
@@ -33,6 +34,7 @@
3334
#define USING_RAM
3435
#define MEMMODE
3536
#define constMEM
37+
#define constText char
3638
#define memPtr(src) (src)
3739
#define memByte(addr) (*addr)
3840
#define memWord(addr) (*addr)

src/shadows.h

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -10,46 +10,46 @@
1010
struct promptShadowRaw {
1111
actionRaw a;//the hooked callback function
1212
systemStyles sysStyles;
13-
const char*text;
13+
constText*text;
1414
constMEM eventMask events;//registered events
1515
styles style;
1616
};
1717
class promptShadow:public action {
1818
protected:
1919
public:
2020
systemStyles sysStyles;
21-
const char*text;
21+
constText*text;
2222
eventMask events;//registered events (mask)
2323
styles style;
2424
public:
25-
promptShadow(const char* t,action a=doNothing,eventMask e=noEvent,styles s=noStyle,systemStyles ss=_noStyle)
25+
promptShadow(constText* t,action a=doNothing,eventMask e=noEvent,styles s=noStyle,systemStyles ss=_noStyle)
2626
:action(a),sysStyles(ss),text(t),events(e),style(s) {}
27-
inline const char* getText() const {return (const char*)memPtr(text);}
27+
inline constText* getText() const {return (constText*)memPtr(text);}
2828
inline systemStyles _sysStyles() const {return (systemStyles)memEnum(&sysStyles);}
2929
inline eventMask _events() const {return (eventMask)memEnum(&events);}
3030
inline styles _style() const {return (styles)memEnum(&style);}
3131
};
3232
struct textFieldShadowRaw {
3333
actionRaw a;
3434
systemStyles sysStyles;
35-
const char*text;
35+
constText*text;
3636
eventMask events;//registered events
3737
styles style;
3838
char* buffer;
39-
const char* constMEM* validators;
39+
constText* constMEM* validators;
4040
idx_t sz;
4141
};
4242
class textFieldShadow:public promptShadow {
4343
protected:
4444
public:
4545
char* buffer;
46-
const char* constMEM* validators;
46+
constText* constMEM* validators;
4747
idx_t sz;
4848
textFieldShadow(
49-
const char*label,
49+
constText*label,
5050
char* b,
5151
idx_t sz,
52-
const char* constMEM* v,
52+
constText* constMEM* v,
5353
action a=doNothing,
5454
eventMask e=noEvent,
5555
styles style=noStyle,
@@ -58,14 +58,14 @@
5858
idx_t _sz() const {return (idx_t)memIdx(sz);}
5959
char* _buffer() const {return (char*)memPtr(buffer);}
6060
char* const* _validators() const {return (char* const*)memPtr(validators);}
61-
inline const char* operator[](idx_t i) const {
61+
inline constText* operator[](idx_t i) const {
6262
return (char*)memPtr(((char**)_validators())[i]);
6363
}
6464
};
6565
struct menuNodeShadowRaw {
6666
actionRaw a;
6767
systemStyles sysStyles;
68-
const char*text;
68+
constText*text;
6969
eventMask events;//registered events
7070
styles style;
7171
idx_t sz;
@@ -77,7 +77,7 @@
7777
idx_t sz;
7878
prompt* constMEM* data;
7979
public:
80-
menuNodeShadow(const char* text,idx_t sz,prompt* constMEM* data,action a,eventMask e,styles style,systemStyles ss=(systemStyles)(_menuData|_canNav))
80+
menuNodeShadow(constText* text,idx_t sz,prompt* constMEM* data,action a,eventMask e,styles style,systemStyles ss=(systemStyles)(_menuData|_canNav))
8181
:promptShadow(text,a,e,style,ss),sz(sz),data(data) {}
8282
idx_t _sz() const {return (idx_t)memIdx(sz);}
8383
prompt* constMEM* _data() const {return (prompt* constMEM*)memPtr(data);}
@@ -90,26 +90,26 @@
9090
struct fieldBaseShadowRaw {
9191
actionRaw a;
9292
systemStyles sysStyles;
93-
const char*text;
93+
constText*text;
9494
eventMask events;//registered events
9595
styles style;
96-
const char* units;
96+
constText* units;
9797
};
9898
class fieldBaseShadow:public promptShadow {
9999
public:
100-
const char* units;
101-
fieldBaseShadow(const char * text,const char *units,action a=doNothing,eventMask e=noEvent,styles s=noStyle,systemStyles ss=((Menu::systemStyles)(Menu::_canNav|Menu::_parentDraw)))
100+
constText* units;
101+
fieldBaseShadow(constText* text,constText*units,action a=doNothing,eventMask e=noEvent,styles s=noStyle,systemStyles ss=((Menu::systemStyles)(Menu::_canNav|Menu::_parentDraw)))
102102
:promptShadow(text,a,e,s,ss),units(units) {}
103-
inline const char* _units() {return (const char*)memPtr(units);}
103+
inline constText* _units() {return (constText*)memPtr(units);}
104104
};
105105
template<typename T>
106106
struct menuFieldShadowRaw {
107107
actionRaw a;
108108
systemStyles sysStyles;
109-
const char*text;
109+
constText*text;
110110
eventMask events;//registered events
111111
styles style;
112-
const char* units;
112+
constText* units;
113113
T* value;
114114
constMEM T low,high,step,tune;
115115
};
@@ -120,7 +120,7 @@
120120
T* value;
121121
constMEM T low,high,step,tune;
122122
public:
123-
menuFieldShadow(T &value,const char * text,const char *units,T low,T high,T step,T tune,action a=doNothing,eventMask e=noEvent,styles s=noStyle,systemStyles ss=((Menu::systemStyles)(Menu::_canNav|Menu::_parentDraw)))
123+
menuFieldShadow(T &value,constText* text,constText*units,T low,T high,T step,T tune,action a=doNothing,eventMask e=noEvent,styles s=noStyle,systemStyles ss=((Menu::systemStyles)(Menu::_canNav|Menu::_parentDraw)))
124124
:fieldBaseShadow(text,units,a,e,s,ss),value(&value),low(low),high(high),step(step),tune(tune) {}
125125
inline T& target() const {return *(T*)memPtr(value);}
126126
inline T getTypeValue(const T* from) const {
@@ -143,7 +143,7 @@
143143
struct menuValueShadowRaw {
144144
actionRaw a;
145145
systemStyles sysStyles;
146-
const char*text;
146+
constText*text;
147147
eventMask events;//registered events
148148
styles style;
149149
T value;
@@ -154,7 +154,7 @@
154154
public:
155155
T value;
156156
public:
157-
inline menuValueShadow(const char * text,T value,action a=doNothing,eventMask e=noEvent)
157+
inline menuValueShadow(constText* text,T value,action a=doNothing,eventMask e=noEvent)
158158
:promptShadow(text,a,e),value(value) {}
159159
inline T getTypeValue(const T* from) const {
160160
//TODO: dynamic versions require change of preprocessor to virtual
@@ -173,7 +173,7 @@
173173
struct menuVariantShadowRaw {
174174
actionRaw a;
175175
systemStyles sysStyles;
176-
const char*text;
176+
constText*text;
177177
constMEM eventMask events;//registered events
178178
styles style;
179179
idx_t sz;
@@ -187,7 +187,7 @@
187187
public:
188188
T* value;
189189
menuVariantShadow(
190-
const char* text,
190+
constText* text,
191191
T &target,
192192
idx_t sz,
193193
prompt* constMEM* data,

0 commit comments

Comments
 (0)