subghz_scene_need_saving.c 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  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(
  8. subghz->view_dispatcher, SubghzCustomEventSceneNeedSavingYes);
  9. } else if((result == GuiButtonTypeLeft) && (type == InputTypeShort)) {
  10. view_dispatcher_send_custom_event(
  11. subghz->view_dispatcher, SubghzCustomEventSceneNeedSavingNo);
  12. }
  13. }
  14. void subghz_scene_need_saving_on_enter(void* context) {
  15. SubGhz* subghz = context;
  16. widget_add_string_multiline_element(
  17. subghz->widget,
  18. 64,
  19. 25,
  20. AlignCenter,
  21. AlignCenter,
  22. FontSecondary,
  23. "There is an unsaved data.\nDo you want to save it?");
  24. widget_add_button_element(
  25. subghz->widget, GuiButtonTypeRight, "Save", subghz_scene_need_saving_callback, subghz);
  26. widget_add_button_element(
  27. subghz->widget, GuiButtonTypeLeft, "Delete", subghz_scene_need_saving_callback, subghz);
  28. view_dispatcher_switch_to_view(subghz->view_dispatcher, SubGhzViewWidget);
  29. }
  30. bool subghz_scene_need_saving_on_event(void* context, SceneManagerEvent event) {
  31. SubGhz* subghz = context;
  32. if(event.type == SceneManagerEventTypeCustom) {
  33. if(event.event == SubghzCustomEventSceneNeedSavingYes) {
  34. subghz->txrx->rx_key_state = SubGhzRxKeyStateNeedSave;
  35. scene_manager_previous_scene(subghz->scene_manager);
  36. return true;
  37. } else if(event.event == SubghzCustomEventSceneNeedSavingNo) {
  38. if(subghz->txrx->rx_key_state == SubGhzRxKeyStateExit) {
  39. subghz->txrx->rx_key_state = SubGhzRxKeyStateIDLE;
  40. scene_manager_search_and_switch_to_previous_scene(
  41. subghz->scene_manager, SubGhzSceneStart);
  42. } else {
  43. subghz->txrx->rx_key_state = SubGhzRxKeyStateIDLE;
  44. scene_manager_previous_scene(subghz->scene_manager);
  45. }
  46. return true;
  47. }
  48. }
  49. return false;
  50. }
  51. void subghz_scene_need_saving_on_exit(void* context) {
  52. SubGhz* subghz = context;
  53. widget_clear(subghz->widget);
  54. }