pokemon_app.c 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. #include <furi_hal_light.h>
  2. #include <pokemon_icons.h>
  3. #include <expansion/expansion.h>
  4. #include <src/include/pokemon_app.h>
  5. #include <src/include/pokemon_data.h>
  6. #include <src/views/trade.h>
  7. #include <src/views/select_pokemon.h>
  8. #include <src/include/pokemon_char_encode.h>
  9. #include <src/scenes/include/pokemon_scene.h>
  10. bool pokemon_custom_event_callback(void* context, uint32_t event) {
  11. furi_assert(context);
  12. PokemonFap* pokemon_fap = context;
  13. return scene_manager_handle_custom_event(pokemon_fap->scene_manager, event);
  14. }
  15. bool pokemon_back_event_callback(void* context) {
  16. furi_assert(context);
  17. PokemonFap* pokemon_fap = context;
  18. return scene_manager_handle_back_event(pokemon_fap->scene_manager);
  19. }
  20. PokemonFap* pokemon_alloc() {
  21. PokemonFap* pokemon_fap = (PokemonFap*)malloc(sizeof(PokemonFap));
  22. ViewDispatcher* view_dispatcher = NULL;
  23. // View dispatcher
  24. view_dispatcher = view_dispatcher_alloc();
  25. pokemon_fap->view_dispatcher = view_dispatcher;
  26. view_dispatcher_set_event_callback_context(view_dispatcher, pokemon_fap);
  27. view_dispatcher_set_custom_event_callback(view_dispatcher, pokemon_custom_event_callback);
  28. view_dispatcher_set_navigation_event_callback(view_dispatcher, pokemon_back_event_callback);
  29. view_dispatcher_attach_to_gui(
  30. view_dispatcher, (Gui*)furi_record_open(RECORD_GUI), ViewDispatcherTypeFullscreen);
  31. // Set up pinout defaults
  32. memcpy(&pokemon_fap->pins, &common_pinouts[PINOUT_ORIGINAL], sizeof(struct gblink_pins));
  33. // Text input
  34. pokemon_fap->text_input = text_input_alloc();
  35. view_dispatcher_add_view(
  36. view_dispatcher, AppViewTextInput, text_input_get_view(pokemon_fap->text_input));
  37. // Submenu
  38. pokemon_fap->submenu = submenu_alloc();
  39. view_dispatcher_add_view(
  40. view_dispatcher, AppViewSubmenu, submenu_get_view(pokemon_fap->submenu));
  41. // Variable Item List
  42. pokemon_fap->variable_item_list = variable_item_list_alloc();
  43. view_dispatcher_add_view(
  44. view_dispatcher,
  45. AppViewVariableItem,
  46. variable_item_list_get_view(pokemon_fap->variable_item_list));
  47. // DialogEx
  48. pokemon_fap->dialog_ex = dialog_ex_alloc();
  49. view_dispatcher_add_view(
  50. view_dispatcher, AppViewDialogEx, dialog_ex_get_view(pokemon_fap->dialog_ex));
  51. // Scene manager
  52. pokemon_fap->scene_manager = scene_manager_alloc(&pokemon_scene_handlers, pokemon_fap);
  53. scene_manager_next_scene(pokemon_fap->scene_manager, PokemonSceneMainMenu);
  54. return pokemon_fap;
  55. }
  56. void free_app(PokemonFap* pokemon_fap) {
  57. furi_assert(pokemon_fap);
  58. // Submenu
  59. submenu_free(pokemon_fap->submenu);
  60. view_dispatcher_remove_view(pokemon_fap->view_dispatcher, AppViewSubmenu);
  61. text_input_free(pokemon_fap->text_input);
  62. view_dispatcher_remove_view(pokemon_fap->view_dispatcher, AppViewTextInput);
  63. variable_item_list_free(pokemon_fap->variable_item_list);
  64. view_dispatcher_remove_view(pokemon_fap->view_dispatcher, AppViewVariableItem);
  65. dialog_ex_free(pokemon_fap->dialog_ex);
  66. view_dispatcher_remove_view(pokemon_fap->view_dispatcher, AppViewDialogEx);
  67. view_dispatcher_free(pokemon_fap->view_dispatcher);
  68. // Free scenes
  69. scene_manager_free(pokemon_fap->scene_manager);
  70. // Close records
  71. furi_record_close(RECORD_GUI);
  72. // Free rest
  73. free(pokemon_fap);
  74. pokemon_fap = NULL;
  75. }
  76. int32_t pokemon_app(void* p) {
  77. UNUSED(p);
  78. Expansion* expansion = furi_record_open(RECORD_EXPANSION);
  79. expansion_disable(expansion);
  80. PokemonFap* pokemon_fap = pokemon_alloc();
  81. furi_hal_light_set(LightRed, 0x00);
  82. furi_hal_light_set(LightGreen, 0x00);
  83. furi_hal_light_set(LightBlue, 0x00);
  84. //switch view and run dispatcher
  85. view_dispatcher_run(pokemon_fap->view_dispatcher);
  86. // Free resources
  87. free_app(pokemon_fap);
  88. expansion_enable(expansion);
  89. furi_record_close(RECORD_EXPANSION);
  90. return 0;
  91. }