Convert menu_item_edit to template function.
This commit is contained in:
parent
ac5cb0989e
commit
5daae818e1
2 changed files with 16 additions and 8 deletions
|
@ -269,8 +269,11 @@ const char menu_fmt_float31[] PROGMEM = "%c%.12S:%s%+06.1f";
|
|||
|
||||
const char menu_fmt_float13[] PROGMEM = "%c%.12S:%s%+06.3f";
|
||||
|
||||
template<typename T>
|
||||
void menu_draw_P(char chr, const char* str, int16_t val);
|
||||
|
||||
void menu_draw_int3(char chr, const char* str, int16_t val)
|
||||
template<>
|
||||
void menu_draw_P<int16_t*>(char chr, const char* str, int16_t val)
|
||||
{
|
||||
int text_len = strlen_P(str);
|
||||
if (text_len > 15) text_len = 15;
|
||||
|
@ -302,7 +305,8 @@ void menu_draw_float13(char chr, const char* str, float val)
|
|||
lcd_printf_P(menu_fmt_float13, chr, str, spaces, val);
|
||||
}
|
||||
|
||||
void _menu_edit_int3(void)
|
||||
template <typename T>
|
||||
void _menu_edit_P(void)
|
||||
{
|
||||
menu_data_edit_t* _md = (menu_data_edit_t*)&(menu_data[0]);
|
||||
if (lcd_draw_update)
|
||||
|
@ -310,7 +314,7 @@ void _menu_edit_int3(void)
|
|||
if (lcd_encoder < _md->minEditValue) lcd_encoder = _md->minEditValue;
|
||||
if (lcd_encoder > _md->maxEditValue) lcd_encoder = _md->maxEditValue;
|
||||
lcd_set_cursor(0, 1);
|
||||
menu_draw_int3(' ', _md->editLabel, (int)lcd_encoder);
|
||||
menu_draw_P<T>(' ', _md->editLabel, (int)lcd_encoder);
|
||||
}
|
||||
if (LCD_CLICKED)
|
||||
{
|
||||
|
@ -319,7 +323,8 @@ void _menu_edit_int3(void)
|
|||
}
|
||||
}
|
||||
|
||||
uint8_t menu_item_edit_int3(const char* str, int16_t* pval, int16_t min_val, int16_t max_val)
|
||||
template <typename T>
|
||||
uint8_t menu_item_edit_P(const char* str, T pval, int16_t min_val, int16_t max_val)
|
||||
{
|
||||
menu_data_edit_t* _md = (menu_data_edit_t*)&(menu_data[0]);
|
||||
if (menu_item == menu_line)
|
||||
|
@ -327,11 +332,11 @@ uint8_t menu_item_edit_int3(const char* str, int16_t* pval, int16_t min_val, int
|
|||
if (lcd_draw_update)
|
||||
{
|
||||
lcd_set_cursor(0, menu_row);
|
||||
menu_draw_int3((lcd_encoder == menu_item)?'>':' ', str, *pval);
|
||||
menu_draw_P<T>((lcd_encoder == menu_item)?'>':' ', str, *pval);
|
||||
}
|
||||
if (menu_clicked && (lcd_encoder == menu_item))
|
||||
{
|
||||
menu_submenu_no_reset(_menu_edit_int3);
|
||||
menu_submenu_no_reset(_menu_edit_P<T>);
|
||||
_md->editLabel = str;
|
||||
_md->editValue = pval;
|
||||
_md->minEditValue = min_val;
|
||||
|
@ -344,6 +349,8 @@ uint8_t menu_item_edit_int3(const char* str, int16_t* pval, int16_t min_val, int
|
|||
return 0;
|
||||
}
|
||||
|
||||
template uint8_t menu_item_edit_P<int16_t*>(const char* str, int16_t *pval, int16_t min_val, int16_t max_val);
|
||||
|
||||
#undef _menu_data
|
||||
|
||||
|
||||
|
|
|
@ -104,9 +104,10 @@ extern void menu_draw_float13(char chr, const char* str, float val);
|
|||
|
||||
extern void _menu_edit_int3(void);
|
||||
|
||||
#define MENU_ITEM_EDIT_int3_P(str, pval, minval, maxval) do { if (menu_item_edit_int3(str, pval, minval, maxval)) return; } while (0)
|
||||
#define MENU_ITEM_EDIT_int3_P(str, pval, minval, maxval) do { if (menu_item_edit_P<int16_t*>(str, pval, minval, maxval)) return; } while (0)
|
||||
//#define MENU_ITEM_EDIT_int3_P(str, pval, minval, maxval) MENU_ITEM_EDIT(int3, str, pval, minval, maxval)
|
||||
extern uint8_t menu_item_edit_int3(const char* str, int16_t* pval, int16_t min_val, int16_t max_val);
|
||||
template <typename T>
|
||||
extern uint8_t menu_item_edit_P(const char* str, T pval, int16_t min_val, int16_t max_val);
|
||||
|
||||
|
||||
#endif //_MENU_H
|
||||
|
|
Loading…
Reference in a new issue