button_menu.h 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. #pragma once
  2. #include <stdint.h>
  3. #include <gui/view.h>
  4. #ifdef __cplusplus
  5. extern "C" {
  6. #endif
  7. /* ButtonMenu anonymous structure */
  8. typedef struct ButtonMenu ButtonMenu;
  9. typedef struct ButtonMenuItem ButtonMenuItem;
  10. /* Callback for any button menu actions */
  11. typedef void (*ButtonMenuItemCallback)(void* context, int32_t index, InputType type);
  12. /* Type of button. Difference in drawing buttons. */
  13. typedef enum {
  14. ButtonMenuItemTypeCommon,
  15. ButtonMenuItemTypeControl,
  16. } ButtonMenuItemType;
  17. /**
  18. * @brief Get button menu view
  19. * @param button_menu - ButtonMenu instance
  20. * @return View instance that can be used for embedding
  21. */
  22. View* button_menu_get_view(ButtonMenu* button_menu);
  23. /**
  24. * @brief Clean button menu
  25. * @param button_menu - ButtonMenu instance
  26. */
  27. void button_menu_clean(ButtonMenu* button_menu);
  28. /**
  29. * @brief Add item to button menu instance
  30. * @param button_menu - ButtonMenu instance
  31. * @param label - text inside new button
  32. * @param index - value to distinct between buttons inside ButtonMenuItemCallback
  33. * @param type - type of button to create. Differ by button drawing.
  34. * Control buttons have no frames, and have more squared borders.
  35. * @return pointer to just-created item
  36. */
  37. ButtonMenuItem* button_menu_add_item(
  38. ButtonMenu* button_menu,
  39. const char* label,
  40. int32_t index,
  41. ButtonMenuItemCallback callback,
  42. ButtonMenuItemType type,
  43. void* callback_context);
  44. /**
  45. * @brief Allocate and initialize new instance of ButtonMenu model
  46. * @return just-created ButtonMenu model
  47. */
  48. ButtonMenu* button_menu_alloc(void);
  49. /**
  50. * @brief Free ButtonMenu element
  51. * @param button_menu - ButtonMenu instance
  52. */
  53. void button_menu_free(ButtonMenu* button_menu);
  54. /**
  55. * @brief Set ButtonMenu header on top of canvas
  56. * @param button_menu - ButtonMenu instance
  57. * @param header - header on the top of button menu
  58. */
  59. void button_menu_set_header(ButtonMenu* button_menu, const char* header);
  60. /**
  61. * @brief Set selected item
  62. * @param button_menu - ButtonMenu instance
  63. * @param index - index of ButtonMenu to be selected
  64. */
  65. void button_menu_set_selected_item(ButtonMenu* button_menu, uint32_t index);
  66. #ifdef __cplusplus
  67. }
  68. #endif