submenu.h 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  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 Deinitialize and free submenu
  17. * @param submenu - Submenu instance
  18. */
  19. void submenu_free(Submenu* submenu);
  20. /**
  21. * @brief Get submenu view
  22. * @param submenu - Submenu instance
  23. * @return View instance that can be used for embedding
  24. */
  25. View* submenu_get_view(Submenu* submenu);
  26. /**
  27. * @brief Add item to submenu
  28. * @param submenu - Submenu instance
  29. * @param label - menu item label
  30. * @param index - menu item index, used for callback, may be the same with other items
  31. * @param callback - menu item callback
  32. * @param callback_context - menu item callback context
  33. * @return SubmenuItem instance that can be used to modify or delete that item
  34. */
  35. SubmenuItem* submenu_add_item(
  36. Submenu* submenu,
  37. const char* label,
  38. uint32_t index,
  39. SubmenuItemCallback callback,
  40. void* callback_context);
  41. /**
  42. * @brief Remove all items from submenu
  43. * @param submenu - Submenu instance
  44. */
  45. void submenu_clean(Submenu* submenu);
  46. /**
  47. * @brief Set submenu item selector
  48. * @param submenu
  49. * @param index
  50. */
  51. void submenu_set_selected_item(Submenu* submenu, uint32_t index);
  52. /**
  53. * @brief Set optional header for submenu
  54. * @param submenu - submenu entity
  55. * @param header - header to set
  56. */
  57. void submenu_set_header(Submenu* submenu, const char* header);
  58. #ifdef __cplusplus
  59. }
  60. #endif