xremote_pause_set.c 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. #include "xremote_pause_set.h"
  2. struct XRemotePauseSet {
  3. View* view;
  4. XRemotePauseSetCallback callback;
  5. void* context;
  6. };
  7. typedef struct {
  8. int type;
  9. const char* name;
  10. int time;
  11. } XRemotePauseSetModel;
  12. static void xremote_pause_set_model_init(XRemotePauseSetModel* const model) {
  13. model->type = XRemoteRemoteItemTypePause;
  14. model->time = 1;
  15. }
  16. void xremote_pause_set_set_callback(
  17. XRemotePauseSet* instance,
  18. XRemotePauseSetCallback callback,
  19. void* context) {
  20. furi_assert(instance);
  21. furi_assert(callback);
  22. instance->callback = callback;
  23. instance->context = context;
  24. }
  25. void xremote_pause_set_draw(Canvas* canvas, XRemotePauseSetModel* model) {
  26. char seconds[14];
  27. snprintf(seconds, SECONDS_LENGHT, SECONDS_FORMAT, model->time);
  28. canvas_clear(canvas);
  29. canvas_set_color(canvas, ColorBlack);
  30. canvas_set_font(canvas, FontPrimary);
  31. canvas_draw_str_aligned(canvas, 64, 10, AlignCenter, AlignTop, "Pause duration");
  32. canvas_set_font(canvas, FontSecondary);
  33. canvas_draw_icon(canvas, 59, 22, &I_ButtonUp_10x5);
  34. canvas_draw_icon(canvas, 59, 42, &I_ButtonDown_10x5);
  35. canvas_draw_str_aligned(canvas, 64, 31, AlignCenter, AlignTop, seconds);
  36. elements_button_center(canvas, "Add");
  37. }
  38. bool xremote_pause_set_input(InputEvent* event, void* context) {
  39. furi_assert(context);
  40. XRemotePauseSet* instance = context;
  41. if (event->type == InputTypeRelease) {
  42. switch(event->key) {
  43. case InputKeyBack:
  44. instance->callback(XRemoteCustomEventPauseSetBack, instance->context);
  45. break;
  46. case InputKeyLeft:
  47. case InputKeyRight:
  48. break;
  49. case InputKeyUp:
  50. with_view_model(
  51. instance->view,
  52. XRemotePauseSetModel* model,
  53. {
  54. model->time++;
  55. if (model->time > 9) {
  56. model->time = 0;
  57. }
  58. },
  59. true);
  60. break;
  61. case InputKeyDown:
  62. with_view_model(
  63. instance->view,
  64. XRemotePauseSetModel* model,
  65. {
  66. model->time--;
  67. if (model->time < 0) {
  68. model->time = 9;
  69. }
  70. },
  71. true);
  72. break;
  73. case InputKeyOk:
  74. with_view_model(
  75. instance->view,
  76. XRemotePauseSetModel * model,
  77. {
  78. XRemote* app = instance->context;
  79. cross_remote_add_pause(app->cross_remote, model->time);
  80. },
  81. true
  82. );
  83. instance->callback(XRemoteCustomEventPauseSetOk, instance->context);
  84. break;
  85. case InputKeyMAX:
  86. break;
  87. }
  88. }
  89. return true;
  90. }
  91. XRemotePauseSet* xremote_pause_set_alloc() {
  92. XRemotePauseSet* instance = malloc(sizeof(XRemotePauseSet));
  93. instance->view = view_alloc();
  94. view_allocate_model(instance->view, ViewModelTypeLocking, sizeof(XRemotePauseSetModel));
  95. view_set_context(instance->view, instance);
  96. view_set_draw_callback(instance->view, (ViewDrawCallback)xremote_pause_set_draw);
  97. view_set_enter_callback(instance->view, xremote_pause_set_enter);
  98. view_set_input_callback(instance->view, xremote_pause_set_input);
  99. with_view_model(
  100. instance->view,
  101. XRemotePauseSetModel * model,
  102. {
  103. xremote_pause_set_model_init(model);
  104. },
  105. true
  106. );
  107. return instance;
  108. }
  109. void xremote_pause_set_enter(void* context) {
  110. furi_assert(context);
  111. XRemotePauseSet* instance = (XRemotePauseSet*) context;
  112. with_view_model(
  113. instance->view,
  114. XRemotePauseSetModel * model,
  115. {
  116. xremote_pause_set_model_init(model);
  117. },
  118. true
  119. );
  120. }
  121. View* xremote_pause_set_get_view(XRemotePauseSet* instance) {
  122. furi_assert(instance);
  123. return instance->view;
  124. }