action_menu.h 3.1 KB

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