submenu.h 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #pragma once
  2. #include <gui/view.h>
  3. #ifdef __cplusplus
  4. extern "C" {
  5. #endif
  6. /* Submenu anonymous structure */
  7. typedef struct Submenu Submenu;
  8. typedef struct SubmenuItem SubmenuItem;
  9. typedef void (*SubmenuItemCallback)(void* context, uint32_t index);
  10. /**
  11. * @brief Allocate and initialize submenu
  12. * This submenu is used to select one option
  13. */
  14. Submenu* submenu_alloc();
  15. /**
  16. * @brief Allocate and initialize submenu for vertical display
  17. * This submenu is used to select one option
  18. */
  19. Submenu* submenu_vertical_alloc();
  20. /**
  21. * @brief Deinitialize and free submenu
  22. * @param submenu - Submenu instance
  23. */
  24. void submenu_free(Submenu* submenu);
  25. /**
  26. * @brief Get submenu view
  27. * @param submenu - Submenu instance
  28. * @return View instance that can be used for embedding
  29. */
  30. View* submenu_get_view(Submenu* submenu);
  31. /**
  32. * @brief Add item to submenu
  33. * @param submenu - Submenu instance
  34. * @param label - menu item label
  35. * @param index - menu item index, used for callback, may be the same with other items
  36. * @param callback - menu item callback
  37. * @param callback_context - menu item callback context
  38. * @return SubmenuItem instance that can be used to modify or delete that item
  39. */
  40. SubmenuItem* submenu_add_item(
  41. Submenu* submenu,
  42. const char* label,
  43. uint32_t index,
  44. SubmenuItemCallback callback,
  45. void* callback_context);
  46. /**
  47. * @brief Remove all items from submenu
  48. * @param submenu - Submenu instance
  49. */
  50. void submenu_clean(Submenu* submenu);
  51. /**
  52. * @brief Set submenu item selector
  53. * @param submenu
  54. * @param index
  55. */
  56. void submenu_set_selected_item(Submenu* submenu, uint32_t index);
  57. #ifdef __cplusplus
  58. }
  59. #endif