action_menu.h 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  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 UI element */
  14. typedef enum {
  15. ActionMenuItemTypeSubGHz,
  16. ActionMenuItemTypeRFID,
  17. ActionMenuItemTypeIR,
  18. ActionMenuItemTypeNFC,
  19. ActionMenuItemTypeiButton,
  20. ActionMenuItemTypePlaylist,
  21. ActionMenuItemTypeGroup,
  22. ActionMenuItemTypeSettings,
  23. ActionMenuItemTypeUnknown,
  24. ActionMenuItemType_count
  25. } ActionMenuItemType;
  26. typedef enum {
  27. ActionMenuLayoutPortrait,
  28. ActionMenuLayoutLandscape,
  29. } ActionMenuLayout;
  30. /** Get button menu view
  31. *
  32. * @param action_menu ActionMenu instance
  33. *
  34. * @return View instance that can be used for embedding
  35. */
  36. View* action_menu_get_view(ActionMenu* action_menu);
  37. /** Clean button menu
  38. *
  39. * @param action_menu ActionMenu instance
  40. */
  41. void action_menu_reset(ActionMenu* action_menu);
  42. /** Set the layout
  43. *
  44. * @param layout Portrait or Landscape
  45. */
  46. void action_menu_set_layout(ActionMenu* menu, ActionMenuLayout layout);
  47. /** Show/Hide icons in UI
  48. *
  49. * @param show_icons Show or Hide icons
  50. */
  51. void action_menu_set_show_icons(ActionMenu* menu, bool show_icons);
  52. /** Show/Hide header labels in UI
  53. *
  54. * @param show_headers Show or Hide header labels
  55. */
  56. void action_menu_set_show_headers(ActionMenu* menu, bool show_headers);
  57. /** Add item to button menu instance
  58. *
  59. * @param action_menu ActionMenu instance
  60. * @param label text inside new button
  61. * @param icon IconAnimation instance
  62. * @param index value to distinct between buttons inside
  63. * ActionMenuItemCallback
  64. * @param callback The callback
  65. * @param type type of button to create. Differ by button
  66. * drawing. Control buttons have no frames, and
  67. * have more squared borders.
  68. * @param callback_context The callback context
  69. *
  70. * @return pointer to just-created item
  71. */
  72. ActionMenuItem* action_menu_add_item(
  73. ActionMenu* action_menu,
  74. const char* label,
  75. int32_t index,
  76. ActionMenuItemCallback callback,
  77. ActionMenuItemType type,
  78. void* callback_context);
  79. /** Allocate and initialize new instance of ActionMenu model
  80. *
  81. * @return just-created ActionMenu model
  82. */
  83. ActionMenu* action_menu_alloc(void);
  84. /** Free ActionMenu element
  85. *
  86. * @param action_menu ActionMenu instance
  87. */
  88. void action_menu_free(ActionMenu* action_menu);
  89. /** Set ActionMenu header on top of canvas
  90. *
  91. * @param action_menu ActionMenu instance
  92. * @param header header on the top of button menu
  93. */
  94. void action_menu_set_header(ActionMenu* action_menu, const char* header);
  95. /** Set selected item
  96. *
  97. * @param action_menu ActionMenu instance
  98. * @param index index of ActionMenu to be selected
  99. */
  100. void action_menu_set_selected_item(ActionMenu* action_menu, uint32_t index);
  101. /** Set whether this item is a link
  102. *
  103. * @param action_item ActionMenuItem pointer
  104. * @param is_link bool
  105. */
  106. void action_menu_item_set_link(ActionMenuItem* action_item, bool is_link);
  107. #ifdef __cplusplus
  108. }
  109. #endif