subghz_scene_need_saving.c 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #include "../subghz_i.h"
  2. #include "../helpers/subghz_custom_event.h"
  3. void subghz_scene_need_saving_callback(GuiButtonType result, InputType type, void* context) {
  4. furi_assert(context);
  5. SubGhz* subghz = context;
  6. if((result == GuiButtonTypeRight) && (type == InputTypeShort)) {
  7. view_dispatcher_send_custom_event(subghz->view_dispatcher, SubGhzCustomEventSceneStay);
  8. } else if((result == GuiButtonTypeLeft) && (type == InputTypeShort)) {
  9. view_dispatcher_send_custom_event(subghz->view_dispatcher, SubGhzCustomEventSceneExit);
  10. }
  11. }
  12. void subghz_scene_need_saving_on_enter(void* context) {
  13. SubGhz* subghz = context;
  14. widget_add_string_multiline_element(
  15. subghz->widget, 64, 13, AlignCenter, AlignCenter, FontPrimary, "Exit to Sub-GHz Menu?");
  16. widget_add_string_multiline_element(
  17. subghz->widget,
  18. 64,
  19. 32,
  20. AlignCenter,
  21. AlignCenter,
  22. FontSecondary,
  23. "All unsaved data\nwill be lost!");
  24. widget_add_button_element(
  25. subghz->widget, GuiButtonTypeRight, "Stay", subghz_scene_need_saving_callback, subghz);
  26. widget_add_button_element(
  27. subghz->widget, GuiButtonTypeLeft, "Exit", subghz_scene_need_saving_callback, subghz);
  28. view_dispatcher_switch_to_view(subghz->view_dispatcher, SubGhzViewIdWidget);
  29. }
  30. bool subghz_scene_need_saving_on_event(void* context, SceneManagerEvent event) {
  31. SubGhz* subghz = context;
  32. if(event.type == SceneManagerEventTypeBack) {
  33. subghz_rx_key_state_set(subghz, SubGhzRxKeyStateBack);
  34. scene_manager_previous_scene(subghz->scene_manager);
  35. return true;
  36. } else if(event.type == SceneManagerEventTypeCustom) {
  37. if(event.event == SubGhzCustomEventSceneStay) {
  38. subghz_rx_key_state_set(subghz, SubGhzRxKeyStateBack);
  39. scene_manager_previous_scene(subghz->scene_manager);
  40. return true;
  41. } else if(event.event == SubGhzCustomEventSceneExit) {
  42. SubGhzRxKeyState state = subghz_rx_key_state_get(subghz);
  43. subghz_rx_key_state_set(subghz, SubGhzRxKeyStateIDLE);
  44. if(state == SubGhzRxKeyStateExit) {
  45. subghz_set_default_preset(subghz);
  46. scene_manager_search_and_switch_to_previous_scene(
  47. subghz->scene_manager, SubGhzSceneStart);
  48. } else {
  49. scene_manager_previous_scene(subghz->scene_manager);
  50. }
  51. return true;
  52. }
  53. }
  54. return false;
  55. }
  56. void subghz_scene_need_saving_on_exit(void* context) {
  57. SubGhz* subghz = context;
  58. widget_reset(subghz->widget);
  59. }