subghz_playlist_creator.h 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. #pragma once
  2. #include <furi.h>
  3. #include <gui/gui.h>
  4. #include <gui/view.h>
  5. #include <gui/view_dispatcher.h>
  6. #include <gui/scene_manager.h>
  7. #include <gui/modules/submenu.h>
  8. #include <gui/modules/popup.h>
  9. #include <gui/modules/text_input.h>
  10. #include <gui/modules/dialog_ex.h>
  11. #include <gui/modules/file_browser.h>
  12. #include <storage/storage.h>
  13. #define MAX_TEXT_LENGTH 128
  14. // Forward declare struct for callback
  15. struct SubGhzPlaylistCreator;
  16. typedef void (*SceneFileBrowserSelectCallback)(struct SubGhzPlaylistCreator* app, const char* path);
  17. // Forward declare VariableItemList and DialogEx for struct members.
  18. struct VariableItemList;
  19. struct DialogEx;
  20. // Add ReturnScene enum before struct definition
  21. typedef enum {
  22. ReturnScene_None = 0,
  23. ReturnScene_Menu,
  24. ReturnScene_PlaylistEdit,
  25. ReturnScene_TextInput,
  26. } ReturnScene;
  27. typedef struct SubGhzPlaylistCreator {
  28. Gui* gui;
  29. Storage* storage;
  30. ViewDispatcher* view_dispatcher;
  31. Submenu* submenu;
  32. Submenu* playlist_edit_submenu;
  33. Popup* popup;
  34. TextInput* text_input;
  35. DialogEx* dialog;
  36. FileBrowser* file_browser;
  37. FuriString* file_browser_result;
  38. FuriString* playlist_name;
  39. FuriString* playlist_path;
  40. char text_buffer[MAX_TEXT_LENGTH];
  41. SceneFileBrowserSelectCallback file_browser_select_cb;
  42. int current_view;
  43. // Playlist editing scene state
  44. char** playlist_entries;
  45. size_t playlist_entry_count;
  46. size_t playlist_entry_capacity;
  47. bool playlist_modified;
  48. bool is_stopped;
  49. FuriTimer* popup_timer;
  50. struct VariableItemList* playlist_edit_list;
  51. ReturnScene return_scene; // Add this field
  52. } SubGhzPlaylistCreator;
  53. typedef enum {
  54. SubGhzPlaylistCreatorViewSubmenu,
  55. SubGhzPlaylistCreatorViewPopup,
  56. SubGhzPlaylistCreatorViewTextInput,
  57. SubGhzPlaylistCreatorViewDialog,
  58. SubGhzPlaylistCreatorViewFileBrowser,
  59. SubGhzPlaylistCreatorViewPlaylistEdit,
  60. } SubGhzPlaylistCreatorView;
  61. // Custom events
  62. typedef enum {
  63. SubGhzPlaylistCreatorCustomEventShowMenu = 100, // Start custom events from 100 or higher
  64. } SubGhzPlaylistCreatorCustomEvent;
  65. // Function declarations
  66. SubGhzPlaylistCreator* subghz_playlist_creator_alloc(void);
  67. void subghz_playlist_creator_free(SubGhzPlaylistCreator* app);
  68. bool subghz_playlist_creator_custom_callback(void* context, uint32_t custom_event);
  69. bool subghz_playlist_creator_back_event_callback(void* context);
  70. int32_t subghz_playlist_creator_app(void* p);
  71. // Playlist editing scene
  72. void scene_playlist_edit_show(SubGhzPlaylistCreator* app);