subghz_scene_need_saving.c 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  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_preset_init(
  45. subghz,
  46. "AM650",
  47. subghz_setting_get_default_frequency(subghz->setting),
  48. NULL,
  49. 0);
  50. scene_manager_search_and_switch_to_previous_scene(
  51. subghz->scene_manager, SubGhzSceneStart);
  52. } else {
  53. subghz->txrx->rx_key_state = SubGhzRxKeyStateIDLE;
  54. scene_manager_previous_scene(subghz->scene_manager);
  55. }
  56. return true;
  57. }
  58. }
  59. return false;
  60. }
  61. void subghz_scene_need_saving_on_exit(void* context) {
  62. SubGhz* subghz = context;
  63. widget_reset(subghz->widget);
  64. }