meal_pager_startscreen.c 4.0 KB

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