action_menu.h 3.2 KB

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