nfc_playlist_scene_main_menu.c 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. #include "../nfc_playlist.h"
  2. typedef enum {
  3. NfcPlaylistEvent_ShowEmulation,
  4. NfcPlaylistEvent_ShowPlaylistSelect,
  5. NfcPlaylistEvent_ShowFileEdit,
  6. NfcPlaylistEvent_ShowSettings
  7. } NfcPlaylistMainMenuEvent;
  8. typedef enum {
  9. NfcPlaylistMenuSelection_Start,
  10. NfcPlaylistMenuSelection_PlaylistSelect,
  11. NfcPlaylistMenuSelection_FileEdit,
  12. NfcPlaylistMenuSelection_Settings
  13. } NfcPlaylistMainMenuMenuSelection;
  14. void nfc_playlist_main_menu_menu_callback(void* context, uint32_t index) {
  15. NfcPlaylist* nfc_playlist = context;
  16. scene_manager_handle_custom_event(nfc_playlist->scene_manager, index);
  17. }
  18. void nfc_playlist_main_menu_scene_on_enter(void* context) {
  19. NfcPlaylist* nfc_playlist = context;
  20. if (!nfc_playlist->settings.playlist_selected) {
  21. nfc_playlist->settings.playlist_selected = true;
  22. scene_manager_next_scene(nfc_playlist->scene_manager, NfcPlaylistScene_PlaylistSelect);
  23. return;
  24. }
  25. FuriString* header = furi_string_alloc_printf("NFC Playlist v%s", FAP_VERSION);
  26. submenu_set_header(nfc_playlist->submenu, furi_string_get_cstr(header));
  27. furi_string_free(header);
  28. submenu_add_lockable_item(
  29. nfc_playlist->submenu,
  30. "Start",
  31. NfcPlaylistMenuSelection_Start,
  32. nfc_playlist_main_menu_menu_callback,
  33. nfc_playlist,
  34. furi_string_empty(nfc_playlist->settings.playlist_path),
  35. "No\nplaylist\nselected");
  36. submenu_add_item(
  37. nfc_playlist->submenu,
  38. "Select playlist",
  39. NfcPlaylistMenuSelection_PlaylistSelect,
  40. nfc_playlist_main_menu_menu_callback,
  41. nfc_playlist);
  42. submenu_add_item(
  43. nfc_playlist->submenu,
  44. "Edit playlist",
  45. NfcPlaylistMenuSelection_FileEdit,
  46. nfc_playlist_main_menu_menu_callback,
  47. nfc_playlist);
  48. submenu_add_item(
  49. nfc_playlist->submenu,
  50. "Settings",
  51. NfcPlaylistMenuSelection_Settings,
  52. nfc_playlist_main_menu_menu_callback,
  53. nfc_playlist);
  54. view_dispatcher_switch_to_view(nfc_playlist->view_dispatcher, NfcPlaylistView_Submenu);
  55. }
  56. bool nfc_playlist_main_menu_scene_on_event(void* context, SceneManagerEvent event) {
  57. NfcPlaylist* nfc_playlist = context;
  58. bool consumed = false;
  59. if (event.type == SceneManagerEventTypeCustom) {
  60. switch(event.event) {
  61. case NfcPlaylistEvent_ShowEmulation:
  62. scene_manager_next_scene(nfc_playlist->scene_manager, NfcPlaylistScene_Emulation);
  63. consumed = true;
  64. break;
  65. case NfcPlaylistEvent_ShowPlaylistSelect:
  66. scene_manager_next_scene(nfc_playlist->scene_manager, NfcPlaylistScene_PlaylistSelect);
  67. consumed = true;
  68. break;
  69. case NfcPlaylistEvent_ShowFileEdit:
  70. scene_manager_next_scene(nfc_playlist->scene_manager, NfcPlaylistScene_PlaylistEdit);
  71. consumed = true;
  72. break;
  73. case NfcPlaylistEvent_ShowSettings:
  74. scene_manager_next_scene(nfc_playlist->scene_manager, NfcPlaylistScene_Settings);
  75. consumed = true;
  76. break;
  77. default:
  78. break;
  79. }
  80. }
  81. return consumed;
  82. }
  83. void nfc_playlist_main_menu_scene_on_exit(void* context) {
  84. NfcPlaylist* nfc_playlist = context;
  85. submenu_reset(nfc_playlist->submenu);
  86. }