bf_exec_env.c 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. #include "bf_exec_env.h"
  2. #include <gui/elements.h>
  3. typedef struct BFExecEnv {
  4. View* view;
  5. ExecEnvOkCallback callback;
  6. void* context;
  7. BFApp* appExec;
  8. } BFExecEnv;
  9. typedef struct {
  10. rByte row;
  11. rByte col;
  12. } BFExecEnvModel;
  13. static bool bf_exec_process_up(BFExecEnv* ExecEnv);
  14. static bool bf_exec_process_down(BFExecEnv* ExecEnv);
  15. static bool bf_exec_process_left(BFExecEnv* ExecEnv);
  16. static bool bf_exec_process_right(BFExecEnv* ExecEnv);
  17. static bool bf_exec_process_ok(BFExecEnv* ExecEnv, InputEvent* event);
  18. BFApp* appExec;
  19. static void bf_exec_draw_callback(Canvas* canvas, void* _model) {
  20. UNUSED(_model);
  21. canvas_draw_str(canvas, 2, 13, workerGetOutput());
  22. }
  23. static bool bf_exec_input_callback(InputEvent* event, void* context) {
  24. furi_assert(context);
  25. BFExecEnv* ExecEnv = context;
  26. bool consumed = false;
  27. if(event->type == InputTypeShort) {
  28. if(event->key == InputKeyRight) {
  29. consumed = bf_exec_process_right(ExecEnv);
  30. } else if(event->key == InputKeyLeft) {
  31. consumed = bf_exec_process_left(ExecEnv);
  32. } else if(event->key == InputKeyUp) {
  33. consumed = bf_exec_process_up(ExecEnv);
  34. } else if(event->key == InputKeyDown) {
  35. consumed = bf_exec_process_down(ExecEnv);
  36. }
  37. } else if(event->key == InputKeyOk) {
  38. consumed = bf_exec_process_ok(ExecEnv, event);
  39. }
  40. return consumed;
  41. }
  42. static bool bf_exec_process_up(BFExecEnv* ExecEnv) {
  43. UNUSED(ExecEnv);
  44. return true;
  45. }
  46. static bool bf_exec_process_down(BFExecEnv* ExecEnv) {
  47. UNUSED(ExecEnv);
  48. return true;
  49. }
  50. static bool bf_exec_process_left(BFExecEnv* ExecEnv) {
  51. UNUSED(ExecEnv);
  52. return true;
  53. }
  54. static bool bf_exec_process_right(BFExecEnv* ExecEnv) {
  55. UNUSED(ExecEnv);
  56. return true;
  57. }
  58. static bool bf_exec_process_ok(BFExecEnv* ExecEnv, InputEvent* event) {
  59. UNUSED(ExecEnv);
  60. UNUSED(event);
  61. if(event->type != InputTypePress){ return false; }
  62. FuriThread* t = furi_thread_alloc_ex("BFWorker", 1024, (void*)beginWorker, NULL);
  63. furi_thread_start(t);
  64. bool consumed = false;
  65. return consumed;
  66. }
  67. static void bf_exec_enter_callback(void* context) {
  68. furi_assert(context);
  69. BFExecEnv* ExecEnv = context;
  70. appExec = ExecEnv->appExec;
  71. UNUSED(ExecEnv);
  72. }
  73. BFExecEnv* bf_exec_env_alloc(BFApp* appExec) {
  74. BFExecEnv* ExecEnv = malloc(sizeof(BFExecEnv));
  75. ExecEnv->view = view_alloc();
  76. ExecEnv->appExec = appExec;
  77. view_allocate_model(ExecEnv->view, ViewModelTypeLocking, sizeof(BFExecEnvModel));
  78. with_view_model(
  79. ExecEnv->view,
  80. BFExecEnvModel* model,
  81. {
  82. model->col = 0;
  83. model->row = 0;
  84. },
  85. true);
  86. view_set_context(ExecEnv->view, ExecEnv);
  87. view_set_draw_callback(ExecEnv->view, bf_exec_draw_callback);
  88. view_set_input_callback(ExecEnv->view, bf_exec_input_callback);
  89. view_set_enter_callback(ExecEnv->view, bf_exec_enter_callback);
  90. return ExecEnv;
  91. }
  92. void bf_exec_env_free(BFExecEnv* ExecEnv) {
  93. furi_assert(ExecEnv);
  94. view_free(ExecEnv->view);
  95. free(ExecEnv);
  96. }
  97. View* bf_exec_env_get_view(BFExecEnv* ExecEnv) {
  98. furi_assert(ExecEnv);
  99. return ExecEnv->view;
  100. }