alloc.c 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. #include <alloc/alloc.h>
  2. /**
  3. * @brief Navigation callback for exiting the application
  4. * @param context The context - unused
  5. * @return next view id (VIEW_NONE to exit the app)
  6. */
  7. static uint32_t callback_exit_app(void *context)
  8. {
  9. // Exit the application
  10. UNUSED(context);
  11. return VIEW_NONE; // Return VIEW_NONE to exit the app
  12. }
  13. // Function to allocate resources for the FlipWorldApp
  14. FlipWorldApp *flip_world_app_alloc()
  15. {
  16. FlipWorldApp *app = (FlipWorldApp *)malloc(sizeof(FlipWorldApp));
  17. Gui *gui = furi_record_open(RECORD_GUI);
  18. // Allocate ViewDispatcher
  19. if (!easy_flipper_set_view_dispatcher(&app->view_dispatcher, gui, app))
  20. {
  21. return NULL;
  22. }
  23. view_dispatcher_set_custom_event_callback(app->view_dispatcher, flip_world_custom_event_callback);
  24. // Submenu
  25. if (!easy_flipper_set_submenu(&app->submenu, FlipWorldViewSubmenu, VERSION_TAG, callback_exit_app, &app->view_dispatcher))
  26. {
  27. return NULL;
  28. }
  29. submenu_add_item(app->submenu, "Play", FlipWorldSubmenuIndexRun, callback_submenu_choices, app);
  30. submenu_add_item(app->submenu, "About", FlipWorldSubmenuIndexAbout, callback_submenu_choices, app);
  31. submenu_add_item(app->submenu, "Settings", FlipWorldSubmenuIndexSettings, callback_submenu_choices, app);
  32. // Switch to the main view
  33. view_dispatcher_switch_to_view(app->view_dispatcher, FlipWorldViewSubmenu);
  34. return app;
  35. }
  36. // Function to free the resources used by FlipWorldApp
  37. void flip_world_app_free(FlipWorldApp *app)
  38. {
  39. if (!app)
  40. {
  41. FURI_LOG_E(TAG, "FlipWorldApp is NULL");
  42. return;
  43. }
  44. // Free Submenu(s)
  45. if (app->submenu)
  46. {
  47. view_dispatcher_remove_view(app->view_dispatcher, FlipWorldViewSubmenu);
  48. submenu_free(app->submenu);
  49. }
  50. free_all_views(app, true);
  51. // free the view dispatcher
  52. view_dispatcher_free(app->view_dispatcher);
  53. // close the gui
  54. furi_record_close(RECORD_GUI);
  55. // free the app
  56. free(app);
  57. }