pokemon_exit_confirm.c 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. #include <gui/modules/dialog_ex.h>
  2. #include "pokemon_menu.h"
  3. #include "../pokemon_app.h"
  4. #include "../pokemon_data.h"
  5. #include "../views/select_pokemon.h"
  6. #include "../views/trade.h"
  7. static bool pokemon_exit_confirm_back_event_callback(void* context) {
  8. UNUSED(context);
  9. return true;
  10. }
  11. void pokemon_exit_confirm_dialog_callback(DialogExResult result, void* context) {
  12. PokemonFap* pokemon_fap = context;
  13. scene_manager_handle_custom_event(pokemon_fap->scene_manager, result);
  14. }
  15. void pokemon_exit_confirm_on_enter(void* context) {
  16. PokemonFap* pokemon_fap = context;
  17. DialogEx* dialog_ex = pokemon_fap->dialog_ex;
  18. // Clean view
  19. dialog_ex_reset(pokemon_fap->dialog_ex);
  20. dialog_ex_set_left_button_text(dialog_ex, "Exit");
  21. dialog_ex_set_right_button_text(dialog_ex, "Stay");
  22. dialog_ex_set_header(dialog_ex, "Exit to Main Menu?", 64, 0, AlignCenter, AlignTop);
  23. dialog_ex_set_text(
  24. dialog_ex,
  25. "Current configuration and/or\ntrade status will be lost!",
  26. 64,
  27. 12,
  28. AlignCenter,
  29. AlignTop);
  30. dialog_ex_set_context(dialog_ex, pokemon_fap);
  31. dialog_ex_set_result_callback(dialog_ex, pokemon_exit_confirm_dialog_callback);
  32. /* Disable the existing navigation event handler to prevent handling further
  33. * back events. Going back to the main menu as well as going back to the
  34. * gen menu will re-enable the proper navigation handler.
  35. */
  36. view_dispatcher_set_navigation_event_callback(
  37. pokemon_fap->view_dispatcher, pokemon_exit_confirm_back_event_callback);
  38. view_dispatcher_add_view(
  39. pokemon_fap->view_dispatcher, AppViewOpts, dialog_ex_get_view(pokemon_fap->dialog_ex));
  40. view_dispatcher_switch_to_view(pokemon_fap->view_dispatcher, AppViewOpts);
  41. }
  42. bool pokemon_exit_confirm_on_event(void* context, SceneManagerEvent event) {
  43. PokemonFap* pokemon_fap = context;
  44. bool consumed = false;
  45. if(event.type == SceneManagerEventTypeCustom) {
  46. if(event.event == DialogExResultRight) {
  47. consumed = scene_manager_previous_scene(pokemon_fap->scene_manager);
  48. } else if(event.event == DialogExResultLeft) {
  49. consumed = scene_manager_search_and_switch_to_previous_scene(
  50. pokemon_fap->scene_manager, MainMenuScene);
  51. /* NOTE: The above should never fail */
  52. furi_check(consumed);
  53. /* NOTE: The following might need to change when adding more
  54. * feature support.
  55. */
  56. /* Clean up PokemonData */
  57. pokemon_data_free(pokemon_fap->pdata);
  58. // Free views
  59. /* These each remove themselves from the view_dispatcher */
  60. select_pokemon_free(
  61. pokemon_fap->view_dispatcher, AppViewSelectPokemon, pokemon_fap->select);
  62. trade_free(pokemon_fap->view_dispatcher, AppViewTrade, pokemon_fap->trade);
  63. pokemon_fap->pdata = NULL;
  64. pokemon_fap->select = NULL;
  65. pokemon_fap->trade = NULL;
  66. }
  67. } else if(event.type == SceneManagerEventTypeBack) {
  68. consumed = true;
  69. }
  70. return consumed;
  71. }