subghz_scene_need_saving.c 2.7 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 will be\nlost.");
  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->txrx->rx_key_state = 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->txrx->rx_key_state = SubGhzRxKeyStateBack;
  39. scene_manager_previous_scene(subghz->scene_manager);
  40. return true;
  41. } else if(event.event == SubGhzCustomEventSceneExit) {
  42. if(subghz->txrx->rx_key_state == SubGhzRxKeyStateExit) {
  43. subghz->txrx->rx_key_state = SubGhzRxKeyStateIDLE;
  44. subghz->txrx->frequency = subghz_setting_get_default_frequency(subghz->setting);
  45. subghz->txrx->preset = FuriHalSubGhzPresetOok650Async;
  46. scene_manager_search_and_switch_to_previous_scene(
  47. subghz->scene_manager, SubGhzSceneStart);
  48. } else {
  49. subghz->txrx->rx_key_state = SubGhzRxKeyStateIDLE;
  50. scene_manager_previous_scene(subghz->scene_manager);
  51. }
  52. return true;
  53. }
  54. }
  55. return false;
  56. }
  57. void subghz_scene_need_saving_on_exit(void* context) {
  58. SubGhz* subghz = context;
  59. widget_reset(subghz->widget);
  60. }