|
@@ -184,11 +184,20 @@ static void menu_draw_item_puts_P(char type_char, const char* str)
|
|
|
lcd_printf_P(PSTR("%c%-18.18S%c"), menu_selection_mark(), str, type_char);
|
|
|
}
|
|
|
|
|
|
-static void menu_draw_toggle_puts_P(const char* str, const char* toggle, const bool fromProgmem)
|
|
|
-{
|
|
|
- menu_draw_item_puts_P((toggle == NULL)?LCD_STR_ARROW_RIGHT[0]:LCD_STR_REFRESH[0], str);
|
|
|
- lcd_set_cursor(LCD_WIDTH - 3 - (fromProgmem?(strlen_P((toggle == NULL)?_T(MSG_NA):toggle)):(strlen(toggle))), menu_row);
|
|
|
- lcd_printf_P(fromProgmem?PSTR("[%S]"):PSTR("[%s]"), (toggle == NULL)?_T(MSG_NA):toggle);
|
|
|
+static void menu_draw_toggle_puts_P(const char* str, char* toggle, const uint8_t settings)
|
|
|
+{
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ char lineStr[LCD_WIDTH + 1];
|
|
|
+ const char eol = (toggle == NULL)?LCD_STR_ARROW_RIGHT[0]:' ';
|
|
|
+ if (toggle == NULL) toggle = _T(MSG_NA);
|
|
|
+ sprintf_P(lineStr, PSTR("%c%-18.18S"), (settings & 0x01)?'>':' ', str);
|
|
|
+ sprintf_P(lineStr + LCD_WIDTH - ((settings & 0x02)?strlen_P(toggle):strlen(toggle)) - 3, (settings & 0x02)?PSTR("[%S]%c"):PSTR("[%s]%c"), toggle, eol);
|
|
|
+ if (!(settings & 0x04)) lcd_set_cursor(0, menu_row);
|
|
|
+ fputs(lineStr, lcdout);
|
|
|
}
|
|
|
|
|
|
|
|
@@ -382,11 +391,11 @@ uint8_t menu_item_function_P(const char* str, char number, void (*func)(uint8_t)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-uint8_t menu_item_toggle_P(const char* str, const char* toggle, menu_func_t func, const bool fromProgmem)
|
|
|
+uint8_t menu_item_toggle_P(const char* str, const char* toggle, menu_func_t func, const uint8_t settings)
|
|
|
{
|
|
|
if (menu_item == menu_line)
|
|
|
{
|
|
|
- if (lcd_draw_update) menu_draw_toggle_puts_P(str, toggle, fromProgmem);
|
|
|
+ if (lcd_draw_update) menu_draw_toggle_puts_P(str, toggle, settings | (menu_selection_mark()=='>'));
|
|
|
if (menu_clicked && (lcd_encoder == menu_item))
|
|
|
{
|
|
|
if (toggle == NULL)
|
|
@@ -424,17 +433,12 @@ uint8_t menu_item_gcode_P(const char* str, const char* str_gcode)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
-const char menu_20x_space[] PROGMEM = " ";
|
|
|
-
|
|
|
const char menu_fmt_int3[] PROGMEM = "%c%.15S:%s%3d";
|
|
|
|
|
|
const char menu_fmt_float31[] PROGMEM = "%-12.12S%+8.1f";
|
|
|
|
|
|
const char menu_fmt_float13[] PROGMEM = "%c%-13.13S%+5.3f";
|
|
|
|
|
|
-const char menu_fmt_float13off[] PROGMEM = "%c%-13.13S%6.6s";
|
|
|
-
|
|
|
template<typename T>
|
|
|
static void menu_draw_P(char chr, const char* str, int16_t val);
|
|
|
|
|
@@ -443,8 +447,8 @@ 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;
|
|
|
- char spaces[21];
|
|
|
- strcpy_P(spaces, menu_20x_space);
|
|
|
+ char spaces[LCD_WIDTH + 1] = {0};
|
|
|
+ memset(spaces,' ', LCD_WIDTH);
|
|
|
if (val <= -100) spaces[15 - text_len - 1] = 0;
|
|
|
else spaces[15 - text_len] = 0;
|
|
|
lcd_printf_P(menu_fmt_int3, chr, str, spaces, val);
|
|
@@ -457,8 +461,7 @@ void menu_draw_P<uint8_t*>(char chr, const char* str, int16_t val)
|
|
|
float factor = 1.0f + static_cast<float>(val) / 1000.0f;
|
|
|
if (val <= _md->minEditValue)
|
|
|
{
|
|
|
-
|
|
|
- menu_draw_toggle_puts_P(str, _T(MSG_OFF), true);
|
|
|
+ menu_draw_toggle_puts_P(str, _T(MSG_OFF), 0x04 | 0x02 | (chr=='>'));
|
|
|
}
|
|
|
else
|
|
|
{
|