26 uint16_t ix = *((uint16_t*) pgm_read_word(&var->
value));
29 outs << (
str_P) pgm_read_word(&item->
name);
36 uint16_t value = *((uint16_t*) pgm_read_word(&var->
value));
41 else outs <<
PSTR(
"[ ] ");
42 outs << (
str_P) pgm_read_word(&item->
name);
48 int16_t* vp = (int16_t*) pgm_read_word(&var->
value);
53 << (int16_t) pgm_read_word(&var->
low)
55 << (int16_t) pgm_read_word(&var->
high)
69 if (walker.m_selected) outs <<
'*';
72 outs << (
str_P) pgm_read_word(&item->
name) <<
':';
86 walker.m_selected, walker.m_bv);
99 Menu::Walker::on_key_down(uint8_t nr)
123 uint16_t* vp = (uint16_t*) pgm_read_word(&var->
value);
126 uint16_t value = *vp;
127 if ((value & _BV(m_bv)) == 0)
128 *vp = (value | _BV(m_bv));
130 *vp = (value & ~_BV(m_bv));
145 bool res = obj->
run(item);
153 m_selected = !m_selected;
162 else if (m_top > 0) {
172 if (item ==
NULL) m_ix -= 1;
180 uint16_t* vp = (uint16_t*) pgm_read_word(&evar->
value);
181 uint16_t value = *vp + 1;
184 if (item ==
NULL)
break;
194 if (item ==
NULL)
break;
202 int16_t* vp = (int16_t*) pgm_read_word(&range->
value);
204 int low = (int) pgm_read_word(&range->
low);
205 if (value == low)
break;
219 else if (m_top > 0) {
229 uint16_t* vp = (uint16_t*) pgm_read_word(&evar->
value);
230 uint16_t value = *vp;
231 if (value == 0)
break;
252 int16_t* vp = (int16_t*) pgm_read_word(&range->
value);
254 int high = (int) pgm_read_word(&range->
high);
255 if (value == high)
break;
267 m_out <<
clear << *
this;
286 m_walker->on_key_down(direction == CW ?
290 m_walker->on_key_down(direction == CW ?
291 Menu::Walker::DOWN_KEY :
const class prog_str * str_P
IOStream & endl(IOStream &outs)
IOStream & clear(IOStream &outs)