Convert sheet switcher from sub menu to function. Handle null characters in sheet name.
This commit is contained in:
parent
cd7805ba46
commit
d647cdc02c
|
|
@ -203,9 +203,13 @@ void menu_format_sheet_E(const Sheet &sheet_E, SheetFormatBuffer &buffer)
|
||||||
void menu_format_sheet_select_E(const Sheet &sheet_E, SheetFormatBuffer &buffer)
|
void menu_format_sheet_select_E(const Sheet &sheet_E, SheetFormatBuffer &buffer)
|
||||||
{
|
{
|
||||||
uint_least8_t index = sprintf_P(buffer.c,PSTR("%-9.9S["), _T(MSG_SHEET));
|
uint_least8_t index = sprintf_P(buffer.c,PSTR("%-9.9S["), _T(MSG_SHEET));
|
||||||
eeprom_read_block(&(buffer.c[index]), sheet_E.name, 7);
|
eeprom_read_block(&(buffer.c[index]), sheet_E.name, sizeof(sheet_E.name)/sizeof(sheet_E.name[0]));
|
||||||
buffer.c[index + 7] = ']';
|
for (const uint_least8_t start = index;index - start < sizeof(sheet_E.name)/sizeof(sheet_E.name[0]);++index)
|
||||||
buffer.c[index + 8] = '\0';
|
{
|
||||||
|
if (buffer.c[index] == '\0') break;
|
||||||
|
}
|
||||||
|
buffer.c[index] = ']';
|
||||||
|
buffer.c[index + 1] = '\0';
|
||||||
}
|
}
|
||||||
|
|
||||||
static void menu_draw_item_select_sheet_E(char type_char, const Sheet &sheet)
|
static void menu_draw_item_select_sheet_E(char type_char, const Sheet &sheet)
|
||||||
|
|
@ -290,14 +294,18 @@ uint8_t menu_item_submenu_E(const Sheet &sheet, menu_func_t submenu)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t menu_item_submenu_select_sheet_E(const Sheet &sheet, menu_func_t submenu)
|
uint8_t menu_item_function_E(const Sheet &sheet, menu_func_t func)
|
||||||
{
|
{
|
||||||
if (menu_item == menu_line)
|
if (menu_item == menu_line)
|
||||||
{
|
{
|
||||||
if (lcd_draw_update) menu_draw_item_select_sheet_E(LCD_STR_ARROW_RIGHT[0], sheet);
|
if (lcd_draw_update) menu_draw_item_select_sheet_E(' ', sheet);
|
||||||
if (menu_clicked && (lcd_encoder == menu_item))
|
if (menu_clicked && (lcd_encoder == menu_item))
|
||||||
{
|
{
|
||||||
menu_submenu(submenu);
|
menu_clicked = false;
|
||||||
|
lcd_consume_click();
|
||||||
|
lcd_update_enabled = 0;
|
||||||
|
if (func) func();
|
||||||
|
lcd_update_enabled = 1;
|
||||||
return menu_item_ret();
|
return menu_item_ret();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -103,8 +103,8 @@ extern uint8_t menu_item_submenu_P(const char* str, menu_func_t submenu);
|
||||||
#define MENU_ITEM_SUBMENU_E(sheet, submenu) do { if (menu_item_submenu_E(sheet, submenu)) return; } while (0)
|
#define MENU_ITEM_SUBMENU_E(sheet, submenu) do { if (menu_item_submenu_E(sheet, submenu)) return; } while (0)
|
||||||
extern uint8_t menu_item_submenu_E(const Sheet &sheet, menu_func_t submenu);
|
extern uint8_t menu_item_submenu_E(const Sheet &sheet, menu_func_t submenu);
|
||||||
|
|
||||||
#define MENU_ITEM_SUBMENU_SELECT_SHEET_E(sheet, submenu) do { if (menu_item_submenu_select_sheet_E(sheet, submenu)) return; } while (0)
|
#define MENU_ITEM_FUNCTION_E(sheet, submenu) do { if (menu_item_function_E(sheet, submenu)) return; } while (0)
|
||||||
extern uint8_t menu_item_submenu_select_sheet_E(const Sheet &sheet, menu_func_t submenu);
|
extern uint8_t menu_item_function_E(const Sheet &sheet, menu_func_t func);
|
||||||
|
|
||||||
#define MENU_ITEM_BACK_P(str) do { if (menu_item_back_P(str)) return; } while (0)
|
#define MENU_ITEM_BACK_P(str) do { if (menu_item_back_P(str)) return; } while (0)
|
||||||
extern uint8_t menu_item_back_P(const char* str);
|
extern uint8_t menu_item_back_P(const char* str);
|
||||||
|
|
|
||||||
|
|
@ -6536,8 +6536,6 @@ static void change_sheet_from_menu()
|
||||||
|
|
||||||
sheet = next_initialized_sheet(sheet);
|
sheet = next_initialized_sheet(sheet);
|
||||||
if (sheet >= 0) eeprom_update_byte(&(EEPROM_Sheets_base->active_sheet), sheet);
|
if (sheet >= 0) eeprom_update_byte(&(EEPROM_Sheets_base->active_sheet), sheet);
|
||||||
|
|
||||||
menu_back();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void lcd_rename_sheet_menu()
|
static void lcd_rename_sheet_menu()
|
||||||
|
|
@ -6716,7 +6714,7 @@ static void lcd_main_menu()
|
||||||
const int8_t nextSheet = next_initialized_sheet(sheet);
|
const int8_t nextSheet = next_initialized_sheet(sheet);
|
||||||
if ((nextSheet >= 0) && (sheet != nextSheet)) // show menu only if we have 2 or more sheets initialized
|
if ((nextSheet >= 0) && (sheet != nextSheet)) // show menu only if we have 2 or more sheets initialized
|
||||||
{
|
{
|
||||||
MENU_ITEM_SUBMENU_SELECT_SHEET_E(EEPROM_Sheets_base->s[sheet], change_sheet_from_menu);
|
MENU_ITEM_FUNCTION_E(EEPROM_Sheets_base->s[sheet], change_sheet_from_menu);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue