alloc.c 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. #include <alloc/alloc.h>
  2. #include <callback/callback.h>
  3. #include <callback/loader.h>
  4. #include <callback/free.h>
  5. uint32_t callback_exit_app(void *context)
  6. {
  7. UNUSED(context);
  8. return VIEW_NONE;
  9. }
  10. uint32_t callback_to_submenu(void *context)
  11. {
  12. UNUSED(context);
  13. return FlipWorldViewSubmenu;
  14. }
  15. uint32_t callback_to_wifi_settings(void *context)
  16. {
  17. UNUSED(context);
  18. return FlipWorldViewVariableItemList;
  19. }
  20. uint32_t callback_to_settings(void *context)
  21. {
  22. UNUSED(context);
  23. return FlipWorldViewSubmenuOther;
  24. }
  25. void *global_app;
  26. void flip_world_show_submenu()
  27. {
  28. FlipWorldApp *app = (FlipWorldApp *)global_app;
  29. if (app->submenu)
  30. {
  31. view_dispatcher_switch_to_view(app->view_dispatcher, FlipWorldViewSubmenu);
  32. }
  33. }
  34. // Function to allocate resources for the FlipWorldApp
  35. FlipWorldApp *flip_world_app_alloc()
  36. {
  37. FlipWorldApp *app = (FlipWorldApp *)malloc(sizeof(FlipWorldApp));
  38. global_app = app;
  39. Gui *gui = furi_record_open(RECORD_GUI);
  40. // Allocate ViewDispatcher
  41. if (!easy_flipper_set_view_dispatcher(&app->view_dispatcher, gui, app))
  42. {
  43. return NULL;
  44. }
  45. // Submenu
  46. if (!easy_flipper_set_submenu(&app->submenu, FlipWorldViewSubmenu, VERSION_TAG, callback_exit_app, &app->view_dispatcher))
  47. {
  48. return NULL;
  49. }
  50. submenu_add_item(app->submenu, "Play", FlipWorldSubmenuIndexGameSubmenu, callback_submenu_choices, app);
  51. submenu_add_item(app->submenu, "About", FlipWorldSubmenuIndexMessage, callback_submenu_choices, app);
  52. submenu_add_item(app->submenu, "Settings", FlipWorldSubmenuIndexSettings, callback_submenu_choices, app);
  53. // Switch to the main view
  54. view_dispatcher_switch_to_view(app->view_dispatcher, FlipWorldViewSubmenu);
  55. return app;
  56. }
  57. // Function to free the resources used by FlipWorldApp
  58. void flip_world_app_free(FlipWorldApp *app)
  59. {
  60. furi_check(app, "FlipWorldApp is NULL");
  61. // Free Submenu(s)
  62. if (app->submenu)
  63. {
  64. view_dispatcher_remove_view(app->view_dispatcher, FlipWorldViewSubmenu);
  65. submenu_free(app->submenu);
  66. }
  67. free_all_views(app, true, true, true);
  68. // free the view dispatcher
  69. view_dispatcher_free(app->view_dispatcher);
  70. // close the gui
  71. furi_record_close(RECORD_GUI);
  72. // free the app
  73. if (app)
  74. free(app);
  75. }