| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- #include "bf_exec_env.h"
- #include <gui/elements.h>
- typedef struct BFExecEnv {
- View* view;
- ExecEnvOkCallback callback;
- void* context;
- BFApp* appExec;
- } BFExecEnv;
- typedef struct {
- rByte row;
- rByte col;
- } BFExecEnvModel;
- static bool bf_exec_process_up(BFExecEnv* ExecEnv);
- static bool bf_exec_process_down(BFExecEnv* ExecEnv);
- static bool bf_exec_process_left(BFExecEnv* ExecEnv);
- static bool bf_exec_process_right(BFExecEnv* ExecEnv);
- static bool bf_exec_process_ok(BFExecEnv* ExecEnv, InputEvent* event);
- BFApp* appExec;
- static void bf_exec_draw_callback(Canvas* canvas, void* _model) {
- UNUSED(_model);
- canvas_draw_str(canvas, 2, 13, workerGetOutput());
- }
- static bool bf_exec_input_callback(InputEvent* event, void* context) {
- furi_assert(context);
- BFExecEnv* ExecEnv = context;
- bool consumed = false;
- if(event->type == InputTypeShort) {
- if(event->key == InputKeyRight) {
- consumed = bf_exec_process_right(ExecEnv);
- } else if(event->key == InputKeyLeft) {
- consumed = bf_exec_process_left(ExecEnv);
- } else if(event->key == InputKeyUp) {
- consumed = bf_exec_process_up(ExecEnv);
- } else if(event->key == InputKeyDown) {
- consumed = bf_exec_process_down(ExecEnv);
- }
- } else if(event->key == InputKeyOk) {
- consumed = bf_exec_process_ok(ExecEnv, event);
- }
- return consumed;
- }
- static bool bf_exec_process_up(BFExecEnv* ExecEnv) {
- UNUSED(ExecEnv);
- return true;
- }
- static bool bf_exec_process_down(BFExecEnv* ExecEnv) {
- UNUSED(ExecEnv);
- return true;
- }
- static bool bf_exec_process_left(BFExecEnv* ExecEnv) {
- UNUSED(ExecEnv);
- return true;
- }
- static bool bf_exec_process_right(BFExecEnv* ExecEnv) {
- UNUSED(ExecEnv);
- return true;
- }
- static bool bf_exec_process_ok(BFExecEnv* ExecEnv, InputEvent* event) {
- UNUSED(ExecEnv);
- UNUSED(event);
- if(event->type != InputTypePress){ return false; }
- FuriThread* t = furi_thread_alloc_ex("BFWorker", 1024, (void*)beginWorker, NULL);
- furi_thread_start(t);
- bool consumed = false;
- return consumed;
- }
- static void bf_exec_enter_callback(void* context) {
- furi_assert(context);
- BFExecEnv* ExecEnv = context;
- appExec = ExecEnv->appExec;
- UNUSED(ExecEnv);
- }
- BFExecEnv* bf_exec_env_alloc(BFApp* appExec) {
- BFExecEnv* ExecEnv = malloc(sizeof(BFExecEnv));
- ExecEnv->view = view_alloc();
- ExecEnv->appExec = appExec;
- view_allocate_model(ExecEnv->view, ViewModelTypeLocking, sizeof(BFExecEnvModel));
- with_view_model(
- ExecEnv->view,
- BFExecEnvModel* model,
- {
- model->col = 0;
- model->row = 0;
- },
- true);
- view_set_context(ExecEnv->view, ExecEnv);
- view_set_draw_callback(ExecEnv->view, bf_exec_draw_callback);
- view_set_input_callback(ExecEnv->view, bf_exec_input_callback);
- view_set_enter_callback(ExecEnv->view, bf_exec_enter_callback);
- return ExecEnv;
- }
- void bf_exec_env_free(BFExecEnv* ExecEnv) {
- furi_assert(ExecEnv);
- view_free(ExecEnv->view);
- free(ExecEnv);
- }
- View* bf_exec_env_get_view(BFExecEnv* ExecEnv) {
- furi_assert(ExecEnv);
- return ExecEnv->view;
- }
|