view_dispatcher_i.h 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. #pragma once
  2. #include <furi.h>
  3. #include <m-dict.h>
  4. #include "view_dispatcher.h"
  5. #include "view_i.h"
  6. #include "gui_i.h"
  7. DICT_DEF2(ViewDict, uint32_t, M_DEFAULT_OPLIST, View*, M_PTR_OPLIST)
  8. struct ViewDispatcher {
  9. osMessageQueueId_t queue;
  10. Gui* gui;
  11. ViewPort* view_port;
  12. ViewDict_t views;
  13. View* current_view;
  14. ViewDispatcherCustomEventCallback custom_event_callback;
  15. ViewDispatcherNavigationEventCallback navigation_event_callback;
  16. ViewDispatcherTickEventCallback tick_event_callback;
  17. uint32_t tick_period;
  18. void* event_context;
  19. };
  20. typedef enum {
  21. ViewDispatcherMessageTypeInput,
  22. ViewDispatcherMessageTypeCustomEvent,
  23. ViewDispatcherMessageTypeStop,
  24. } ViewDispatcherMessageType;
  25. typedef struct {
  26. ViewDispatcherMessageType type;
  27. union {
  28. InputEvent input;
  29. uint32_t custom_event;
  30. };
  31. } ViewDispatcherMessage;
  32. /* ViewPort Draw Callback */
  33. void view_dispatcher_draw_callback(Canvas* canvas, void* context);
  34. /* ViewPort Input Callback */
  35. void view_dispatcher_input_callback(InputEvent* event, void* context);
  36. /* Input handler */
  37. void view_dispatcher_handle_input(ViewDispatcher* view_dispatcher, InputEvent* event);
  38. /* Tick handler */
  39. void view_dispatcher_handle_tick_event(ViewDispatcher* view_dispatcher);
  40. /* Custom event handler */
  41. void view_dispatcher_handle_custom_event(ViewDispatcher* view_dispatcher, uint32_t event);
  42. /* Set current view, dispatches view enter and exit */
  43. void view_dispatcher_set_current_view(ViewDispatcher* view_dispatcher, View* view);
  44. /* ViewDispatcher update event */
  45. void view_dispatcher_update(View* view, void* context);