menu.h 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. //menu.h
  2. #ifndef _MENU_H
  3. #define _MENU_H
  4. #include <inttypes.h>
  5. #define MENU_DEPTH_MAX 4
  6. #define MENU_DATA_SIZE 32
  7. //Function pointer to menu functions.
  8. typedef void (*menu_func_t)(void);
  9. typedef struct
  10. {
  11. menu_func_t menu;
  12. uint8_t position;
  13. } menu_record_t;
  14. extern menu_record_t menu_stack[MENU_DEPTH_MAX];
  15. extern uint8_t menu_data[MENU_DATA_SIZE];
  16. extern uint8_t menu_depth;
  17. extern uint8_t menu_line;
  18. extern uint8_t menu_item;
  19. extern uint8_t menu_row;
  20. ;
  21. //scroll offset in the current menu
  22. extern uint8_t menu_top;
  23. extern uint8_t menu_clicked;
  24. //function pointer to the currently active menu
  25. extern menu_func_t menu_menu;
  26. extern void menu_goto(menu_func_t menu, const uint32_t encoder, const bool feedback, bool reset_menu_state);
  27. #define MENU_BEGIN() menu_start(); for(menu_row = 0; menu_row < LCD_HEIGHT; menu_row++, menu_line++) { menu_item = 0;
  28. void menu_start(void);
  29. #define MENU_END() menu_end(); }
  30. extern void menu_end(void);
  31. extern void menu_back(void);
  32. extern void menu_back_if_clicked(void);
  33. extern void menu_back_if_clicked_fb(void);
  34. extern void menu_submenu(menu_func_t submenu);
  35. extern uint8_t menu_item_ret(void);
  36. //extern int menu_draw_item_printf_P(char type_char, const char* format, ...);
  37. extern int menu_draw_item_puts_P(char type_char, const char* str);
  38. //int menu_draw_item_puts_P_int16(char type_char, const char* str, int16_t val, );
  39. #define MENU_ITEM_DUMMY() menu_item_dummy()
  40. extern void menu_item_dummy(void);
  41. #define MENU_ITEM_TEXT_P(str) do { if (menu_item_text_P(str)) return; } while (0)
  42. extern uint8_t menu_item_text_P(const char* str);
  43. #define MENU_ITEM_SUBMENU_P(str, submenu) do { if (menu_item_submenu_P(str, submenu)) return; } while (0)
  44. extern uint8_t menu_item_submenu_P(const char* str, menu_func_t submenu);
  45. #define MENU_ITEM_BACK_P(str) do { if (menu_item_back_P(str)) return; } while (0)
  46. extern uint8_t menu_item_back_P(const char* str);
  47. #define MENU_ITEM_FUNCTION_P(str, func) do { if (menu_item_function_P(str, func)) return; } while (0)
  48. extern uint8_t menu_item_function_P(const char* str, menu_func_t func);
  49. #define MENU_ITEM_GCODE_P(str, str_gcode) do { if (menu_item_gcode_P(str, str_gcode)) return; } while (0)
  50. extern uint8_t menu_item_gcode_P(const char* str, const char* str_gcode);
  51. extern const char menu_fmt_int3[];
  52. extern const char menu_fmt_float31[];
  53. extern void menu_draw_int3(char chr, const char* str, int16_t val);
  54. extern void menu_draw_float31(char chr, const char* str, float val);
  55. extern void menu_draw_float13(char chr, const char* str, float val);
  56. extern void _menu_edit_int3(void);
  57. #define MENU_ITEM_EDIT_int3_P(str, pval, minval, maxval) do { if (menu_item_edit_int3(str, pval, minval, maxval)) return; } while (0)
  58. //#define MENU_ITEM_EDIT_int3_P(str, pval, minval, maxval) MENU_ITEM_EDIT(int3, str, pval, minval, maxval)
  59. extern uint8_t menu_item_edit_int3(const char* str, int16_t* pval, int16_t min_val, int16_t max_val);
  60. #endif //_MENU_H