meal_pager_startscreen.c 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. #include "meal_pager_startscreen.h"
  2. #include "../meal_pager_i.h"
  3. #include <furi.h>
  4. #include <furi_hal.h>
  5. #include <input/input.h>
  6. #include <gui/elements.h>
  7. struct Meal_PagerStartscreen {
  8. View* view;
  9. Meal_PagerStartscreenCallback callback;
  10. void* context;
  11. };
  12. typedef struct {
  13. int some_value;
  14. } Meal_PagerStartscreenModel;
  15. void meal_pager_startscreen_set_callback(
  16. Meal_PagerStartscreen* instance,
  17. Meal_PagerStartscreenCallback callback,
  18. void* context) {
  19. furi_assert(instance);
  20. furi_assert(callback);
  21. instance->callback = callback;
  22. instance->context = context;
  23. }
  24. void meal_pager_startscreen_draw(Canvas* canvas, Meal_PagerStartscreenModel* model) {
  25. UNUSED(model);
  26. canvas_clear(canvas);
  27. canvas_set_color(canvas, ColorBlack);
  28. canvas_set_font(canvas, FontPrimary);
  29. canvas_draw_str_aligned(canvas, 64, 10, AlignCenter, AlignTop, "Restaurant Pager");
  30. canvas_set_font(canvas, FontSecondary);
  31. canvas_draw_str_aligned(canvas, 64, 22, AlignCenter, AlignTop, "Trigger Tool");
  32. elements_button_center(canvas, "Start");
  33. }
  34. static void meal_pager_startscreen_model_init(Meal_PagerStartscreenModel* const model) {
  35. model->some_value = 1;
  36. }
  37. bool meal_pager_startscreen_input(InputEvent* event, void* context) {
  38. furi_assert(context);
  39. Meal_PagerStartscreen* instance = context;
  40. if (event->type == InputTypeRelease) {
  41. switch(event->key) {
  42. case InputKeyBack:
  43. with_view_model(
  44. instance->view,
  45. Meal_PagerStartscreenModel * model,
  46. {
  47. UNUSED(model);
  48. instance->callback(Meal_PagerCustomEventStartscreenBack, instance->context);
  49. },
  50. true);
  51. break;
  52. case InputKeyLeft:
  53. case InputKeyRight:
  54. case InputKeyUp:
  55. case InputKeyDown:
  56. case InputKeyOk:
  57. with_view_model(
  58. instance->view,
  59. Meal_PagerStartscreenModel* model,
  60. {
  61. UNUSED(model);
  62. instance->callback(Meal_PagerCustomEventStartscreenOk, instance->context);
  63. },
  64. true);
  65. break;
  66. case InputKeyMAX:
  67. break;
  68. }
  69. }
  70. return true;
  71. }
  72. void meal_pager_startscreen_exit(void* context) {
  73. furi_assert(context);
  74. }
  75. void meal_pager_startscreen_enter(void* context) {
  76. furi_assert(context);
  77. Meal_PagerStartscreen* instance = (Meal_PagerStartscreen*)context;
  78. with_view_model(
  79. instance->view,
  80. Meal_PagerStartscreenModel * model,
  81. {
  82. meal_pager_startscreen_model_init(model);
  83. },
  84. true
  85. );
  86. }
  87. Meal_PagerStartscreen* meal_pager_startscreen_alloc() {
  88. Meal_PagerStartscreen* instance = malloc(sizeof(Meal_PagerStartscreen));
  89. instance->view = view_alloc();
  90. view_allocate_model(instance->view, ViewModelTypeLocking, sizeof(Meal_PagerStartscreenModel));
  91. view_set_context(instance->view, instance); // furi_assert crashes in events without this
  92. view_set_draw_callback(instance->view, (ViewDrawCallback)meal_pager_startscreen_draw);
  93. view_set_input_callback(instance->view, meal_pager_startscreen_input);
  94. //view_set_enter_callback(instance->view, meal_pager_startscreen_enter);
  95. //view_set_exit_callback(instance->view, meal_pager_startscreen_exit);
  96. with_view_model(
  97. instance->view,
  98. Meal_PagerStartscreenModel * model,
  99. {
  100. meal_pager_startscreen_model_init(model);
  101. },
  102. true
  103. );
  104. return instance;
  105. }
  106. void meal_pager_startscreen_free(Meal_PagerStartscreen* instance) {
  107. furi_assert(instance);
  108. with_view_model(
  109. instance->view,
  110. Meal_PagerStartscreenModel * model,
  111. {
  112. UNUSED(model);
  113. },
  114. true);
  115. view_free(instance->view);
  116. free(instance);
  117. }
  118. View* meal_pager_startscreen_get_view(Meal_PagerStartscreen* instance) {
  119. furi_assert(instance);
  120. return instance->view;
  121. }