60 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			60 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #include "../infrared_i.h"
 | |
| 
 | |
| static void infrared_scene_dialog_result_callback(DialogExResult result, void* context) {
 | |
|     Infrared* infrared = context;
 | |
|     view_dispatcher_send_custom_event(infrared->view_dispatcher, result);
 | |
| }
 | |
| 
 | |
| void infrared_scene_ask_back_on_enter(void* context) {
 | |
|     Infrared* infrared = context;
 | |
|     DialogEx* dialog_ex = infrared->dialog_ex;
 | |
| 
 | |
|     if(infrared->app_state.is_learning_new_remote) {
 | |
|         dialog_ex_set_header(dialog_ex, "Exit to Infrared menu?", 64, 0, AlignCenter, AlignTop);
 | |
|     } else {
 | |
|         dialog_ex_set_header(dialog_ex, "Exit to remote menu?", 64, 0, AlignCenter, AlignTop);
 | |
|     }
 | |
| 
 | |
|     dialog_ex_set_text(
 | |
|         dialog_ex, "All unsaved data\nwill be lost.", 64, 31, AlignCenter, AlignCenter);
 | |
|     dialog_ex_set_icon(dialog_ex, 0, 0, NULL);
 | |
|     dialog_ex_set_left_button_text(dialog_ex, "Exit");
 | |
|     dialog_ex_set_center_button_text(dialog_ex, NULL);
 | |
|     dialog_ex_set_right_button_text(dialog_ex, "Stay");
 | |
|     dialog_ex_set_result_callback(dialog_ex, infrared_scene_dialog_result_callback);
 | |
|     dialog_ex_set_context(dialog_ex, context);
 | |
| 
 | |
|     view_dispatcher_switch_to_view(infrared->view_dispatcher, InfraredViewDialogEx);
 | |
| }
 | |
| 
 | |
| bool infrared_scene_ask_back_on_event(void* context, SceneManagerEvent event) {
 | |
|     Infrared* infrared = context;
 | |
|     SceneManager* scene_manager = infrared->scene_manager;
 | |
|     bool consumed = false;
 | |
| 
 | |
|     if(event.type == SceneManagerEventTypeBack) {
 | |
|         consumed = true;
 | |
|     } else if(event.type == SceneManagerEventTypeCustom) {
 | |
|         if(event.event == DialogExResultLeft) {
 | |
|             if(infrared->app_state.is_learning_new_remote) {
 | |
|                 scene_manager_search_and_switch_to_previous_scene(
 | |
|                     scene_manager, InfraredSceneStart);
 | |
|             } else {
 | |
|                 scene_manager_search_and_switch_to_previous_scene(
 | |
|                     scene_manager, InfraredSceneRemote);
 | |
|             }
 | |
|             consumed = true;
 | |
|         } else if(event.event == DialogExResultRight) {
 | |
|             scene_manager_previous_scene(scene_manager);
 | |
|             consumed = true;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     return consumed;
 | |
| }
 | |
| 
 | |
| void infrared_scene_ask_back_on_exit(void* context) {
 | |
|     Infrared* infrared = context;
 | |
|     dialog_ex_reset(infrared->dialog_ex);
 | |
| }
 | 
