action_menu.h 3.2 KB

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