1
+ #include "nfc_playlist.h"
2
+ #include "nfc_playlist_i.h"
3
+
4
+ static void (* const nfc_playlist_scene_on_enter_handlers [])(void * ) = {
5
+ nfc_playlist_main_menu_scene_on_enter ,
6
+ nfc_playlist_settings_scene_on_enter ,
7
+ nfc_playlist_emulation_scene_on_enter ,
8
+ nfc_playlist_file_select_scene_on_enter ,
9
+ nfc_playlist_file_edit_scene_on_enter ,
10
+ nfc_playlist_text_input_scene_on_enter
11
+ };
12
+
13
+ static bool (* const nfc_playlist_scene_on_event_handlers [])(void * , SceneManagerEvent ) = {
14
+ nfc_playlist_main_menu_scene_on_event ,
15
+ nfc_playlist_settings_scene_on_event ,
16
+ nfc_playlist_emulation_scene_on_event ,
17
+ nfc_playlist_file_select_scene_on_event ,
18
+ nfc_playlist_file_edit_scene_on_event ,
19
+ nfc_playlist_text_input_scene_on_event
20
+ };
21
+
22
+ static void (* const nfc_playlist_scene_on_exit_handlers [])(void * ) = {
23
+ nfc_playlist_main_menu_scene_on_exit ,
24
+ nfc_playlist_settings_scene_on_exit ,
25
+ nfc_playlist_emulation_scene_on_exit ,
26
+ nfc_playlist_file_select_scene_on_exit ,
27
+ nfc_playlist_file_edit_scene_on_exit ,
28
+ nfc_playlist_text_input_scene_on_exit
29
+ };
30
+
31
+ static const SceneManagerHandlers nfc_playlist_scene_manager_handlers = {
32
+ .on_enter_handlers = nfc_playlist_scene_on_enter_handlers ,
33
+ .on_event_handlers = nfc_playlist_scene_on_event_handlers ,
34
+ .on_exit_handlers = nfc_playlist_scene_on_exit_handlers ,
35
+ .scene_num = NfcPlaylistScene_count
36
+ };
37
+
38
+ static bool nfc_playlist_custom_callback (void * context , uint32_t custom_event ) {
39
+ furi_assert (context );
40
+ NfcPlaylist * nfc_playlist = context ;
41
+ return scene_manager_handle_custom_event (nfc_playlist -> scene_manager , custom_event );
42
+ }
43
+
44
+ static bool nfc_playlist_back_event_callback (void * context ) {
45
+ furi_assert (context );
46
+ NfcPlaylist * nfc_playlist = context ;
47
+ return scene_manager_handle_back_event (nfc_playlist -> scene_manager );
48
+ }
49
+
50
+ static NfcPlaylist * nfc_playlist_alloc () {
51
+ NfcPlaylist * nfc_playlist = malloc (sizeof (NfcPlaylist ));
52
+ furi_assert (nfc_playlist );
53
+ nfc_playlist -> scene_manager = scene_manager_alloc (& nfc_playlist_scene_manager_handlers , nfc_playlist );
54
+ nfc_playlist -> view_dispatcher = view_dispatcher_alloc ();
55
+ view_dispatcher_enable_queue (nfc_playlist -> view_dispatcher );
56
+ nfc_playlist -> variable_item_list = variable_item_list_alloc ();
57
+ nfc_playlist -> submenu = submenu_alloc ();
58
+
59
+ nfc_playlist -> settings .base_file_path = furi_string_alloc_set_str ("/ext/apps_data/nfc_playlist/" );
60
+ nfc_playlist -> settings .file_path = nfc_playlist -> settings .base_file_path ;
61
+ nfc_playlist -> settings .file_selected = false;
62
+ nfc_playlist -> settings .file_selected_check = false;
63
+ nfc_playlist -> settings .emulate_timeout = default_emulate_timeout ;
64
+ nfc_playlist -> settings .emulate_delay = default_emulate_delay ;
65
+ nfc_playlist -> settings .emulate_led_indicator = default_emulate_led_indicator ;
66
+
67
+ nfc_playlist -> notification = furi_record_open (RECORD_NOTIFICATION );
68
+ nfc_playlist -> file_browser = file_browser_alloc (nfc_playlist -> settings .file_path );
69
+ nfc_playlist -> text_input = text_input_alloc ();
70
+ nfc_playlist -> popup = popup_alloc ();
71
+
72
+ view_dispatcher_set_event_callback_context (nfc_playlist -> view_dispatcher , nfc_playlist );
73
+ view_dispatcher_set_custom_event_callback (nfc_playlist -> view_dispatcher , nfc_playlist_custom_callback );
74
+ view_dispatcher_set_navigation_event_callback (nfc_playlist -> view_dispatcher , nfc_playlist_back_event_callback );
75
+ view_dispatcher_add_view (nfc_playlist -> view_dispatcher , NfcPlaylistView_Menu , submenu_get_view (nfc_playlist -> submenu ));
76
+ view_dispatcher_add_view (nfc_playlist -> view_dispatcher , NfcPlaylistView_Settings , variable_item_list_get_view (nfc_playlist -> variable_item_list ));
77
+ view_dispatcher_add_view (nfc_playlist -> view_dispatcher , NfcPlaylistView_Popup , popup_get_view (nfc_playlist -> popup ));
78
+ view_dispatcher_add_view (nfc_playlist -> view_dispatcher , NfcPlaylistView_FileSelect , file_browser_get_view (nfc_playlist -> file_browser ));
79
+ view_dispatcher_add_view (nfc_playlist -> view_dispatcher , NfcPlaylistView_FileEdit , submenu_get_view (nfc_playlist -> submenu ));
80
+ view_dispatcher_add_view (nfc_playlist -> view_dispatcher , NfcPlaylistView_TextInput , text_input_get_view (nfc_playlist -> text_input ));
81
+ return nfc_playlist ;
82
+ }
83
+
84
+ static void nfc_playlist_free (NfcPlaylist * nfc_playlist ) {
85
+ furi_assert (nfc_playlist );
86
+ scene_manager_free (nfc_playlist -> scene_manager );
87
+ view_dispatcher_remove_view (nfc_playlist -> view_dispatcher , NfcPlaylistView_Menu );
88
+ view_dispatcher_remove_view (nfc_playlist -> view_dispatcher , NfcPlaylistView_Settings );
89
+ view_dispatcher_remove_view (nfc_playlist -> view_dispatcher , NfcPlaylistView_Popup );
90
+ view_dispatcher_remove_view (nfc_playlist -> view_dispatcher , NfcPlaylistView_FileSelect );
91
+ view_dispatcher_remove_view (nfc_playlist -> view_dispatcher , NfcPlaylistView_FileEdit );
92
+ view_dispatcher_remove_view (nfc_playlist -> view_dispatcher , NfcPlaylistView_TextInput );
93
+ view_dispatcher_free (nfc_playlist -> view_dispatcher );
94
+ variable_item_list_free (nfc_playlist -> variable_item_list );
95
+ submenu_free (nfc_playlist -> submenu );
96
+ file_browser_free (nfc_playlist -> file_browser );
97
+ text_input_free (nfc_playlist -> text_input );
98
+ popup_free (nfc_playlist -> popup );
99
+ furi_record_close (RECORD_NOTIFICATION );
100
+ furi_string_free (nfc_playlist -> settings .base_file_path );
101
+ furi_string_free (nfc_playlist -> settings .file_path );
102
+ free (nfc_playlist -> playlist_name );
103
+ free (nfc_playlist );
104
+ }
105
+
106
+ int32_t nfc_playlist_main (void * p ) {
107
+ UNUSED (p );
108
+
109
+ NfcPlaylist * nfc_playlist = nfc_playlist_alloc ();
110
+
111
+ Gui * gui = furi_record_open (RECORD_GUI );
112
+ view_dispatcher_attach_to_gui (nfc_playlist -> view_dispatcher , gui , ViewDispatcherTypeFullscreen );
113
+ scene_manager_next_scene (nfc_playlist -> scene_manager , NfcPlaylistScene_MainMenu );
114
+ view_dispatcher_run (nfc_playlist -> view_dispatcher );
115
+
116
+ furi_record_close (RECORD_GUI );
117
+ nfc_playlist_free (nfc_playlist );
118
+
119
+ return 0 ;
120
+ }
0 commit comments