action_menu.h 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. #pragma once
  2. #include <stdint.h>
  3. #include <gui/view.h>
  4. #ifdef __cplusplus
  5. extern "C" {
  6. #endif
  7. /** ActionMenu anonymous structure */
  8. typedef struct ActionMenu ActionMenu;
  9. /** ActionMenuItem anonymous structure */
  10. typedef struct ActionMenuItem ActionMenuItem;
  11. /** Callback for any button menu actions */
  12. typedef void (*ActionMenuItemCallback)(void* context, int32_t index, InputType type);
  13. /** Type of button. Difference in drawing buttons. */
  14. typedef enum {
  15. ActionMenuItemTypeSubGHz,
  16. ActionMenuItemTypeRFID,
  17. ActionMenuItemTypeIR,
  18. ActionMenuItemTypePlaylist,
  19. ActionMenuItemTypeGroup,
  20. ActionMenuItemTypeSettings,
  21. } ActionMenuItemType;
  22. typedef enum {
  23. ActionMenuLayoutPortrait,
  24. ActionMenuLayoutLandscape,
  25. } ActionMenuLayout;
  26. /** Get button menu view
  27. *
  28. * @param action_menu ActionMenu instance
  29. *
  30. * @return View instance that can be used for embedding
  31. */
  32. View* action_menu_get_view(ActionMenu* action_menu);
  33. /** Clean button menu
  34. *
  35. * @param action_menu ActionMenu instance
  36. */
  37. void action_menu_reset(ActionMenu* action_menu);
  38. /** Set the layout
  39. *
  40. * @param layout Portrait or Landscape
  41. */
  42. void action_menu_set_layout(ActionMenu* menu, ActionMenuLayout layout);
  43. /** Show/Hide icons in UI
  44. *
  45. * @param show_icons Show or Hide icons
  46. */
  47. void action_menu_set_show_icons(ActionMenu* menu, bool show_icons);
  48. /** Show/Hide header labels in UI
  49. *
  50. * @param show_headers Show or Hide header labels
  51. */
  52. void action_menu_set_show_headers(ActionMenu* menu, bool show_headers);
  53. /** Add item to button menu instance
  54. *
  55. * @param action_menu ActionMenu instance
  56. * @param label text inside new button
  57. * @param icon IconAnimation instance
  58. * @param index value to distinct between buttons inside
  59. * ActionMenuItemCallback
  60. * @param callback The callback
  61. * @param type type of button to create. Differ by button
  62. * drawing. Control buttons have no frames, and
  63. * have more squared borders.
  64. * @param callback_context The callback context
  65. *
  66. * @return pointer to just-created item
  67. */
  68. ActionMenuItem* action_menu_add_item(
  69. ActionMenu* action_menu,
  70. const char* label,
  71. int32_t index,
  72. ActionMenuItemCallback callback,
  73. ActionMenuItemType type,
  74. void* callback_context);
  75. /** Allocate and initialize new instance of ActionMenu model
  76. *
  77. * @return just-created ActionMenu model
  78. */
  79. ActionMenu* action_menu_alloc(void);
  80. /** Free ActionMenu element
  81. *
  82. * @param action_menu ActionMenu instance
  83. */
  84. void action_menu_free(ActionMenu* action_menu);
  85. /** Set ActionMenu header on top of canvas
  86. *
  87. * @param action_menu ActionMenu instance
  88. * @param header header on the top of button menu
  89. */
  90. void action_menu_set_header(ActionMenu* action_menu, const char* header);
  91. /** Set selected item
  92. *
  93. * @param action_menu ActionMenu instance
  94. * @param index index of ActionMenu to be selected
  95. */
  96. void action_menu_set_selected_item(ActionMenu* action_menu, uint32_t index);
  97. #ifdef __cplusplus
  98. }
  99. #endif