archive_browser_view.h 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. #pragma once
  2. #include "../helpers/archive_files.h"
  3. #include "../helpers/archive_favorites.h"
  4. #include <gui/gui_i.h>
  5. #include <gui/view.h>
  6. #include <gui/canvas.h>
  7. #include <gui/elements.h>
  8. #include <gui/modules/file_browser_worker.h>
  9. #include <storage/storage.h>
  10. #include <furi.h>
  11. #define MAX_LEN_PX 110
  12. #define MAX_NAME_LEN 255
  13. #define MAX_EXT_LEN 6
  14. #define FRAME_HEIGHT 12
  15. #define MENU_ITEMS 4u
  16. #define MOVE_OFFSET 5u
  17. typedef enum {
  18. ArchiveTabFavorites,
  19. ArchiveTabSubGhz,
  20. ArchiveTabLFRFID,
  21. ArchiveTabNFC,
  22. ArchiveTabInfrared,
  23. ArchiveTabIButton,
  24. ArchiveTabBadUsb,
  25. ArchiveTabU2f,
  26. ArchiveTabApplications,
  27. ArchiveTabBrowser,
  28. ArchiveTabTotal,
  29. } ArchiveTabEnum;
  30. typedef enum {
  31. ArchiveBrowserEventFileMenuOpen,
  32. ArchiveBrowserEventFileMenuClose,
  33. ArchiveBrowserEventFileMenuRun,
  34. ArchiveBrowserEventFileMenuPin,
  35. ArchiveBrowserEventFileMenuRename,
  36. ArchiveBrowserEventFileMenuDelete,
  37. ArchiveBrowserEventEnterDir,
  38. ArchiveBrowserEventFavMoveUp,
  39. ArchiveBrowserEventFavMoveDown,
  40. ArchiveBrowserEventEnterFavMove,
  41. ArchiveBrowserEventExitFavMove,
  42. ArchiveBrowserEventSaveFavMove,
  43. ArchiveBrowserEventLoadPrevItems,
  44. ArchiveBrowserEventLoadNextItems,
  45. ArchiveBrowserEventListRefresh,
  46. ArchiveBrowserEventExit,
  47. } ArchiveBrowserEvent;
  48. static const uint8_t file_menu_actions[MENU_ITEMS] = {
  49. [0] = ArchiveBrowserEventFileMenuRun,
  50. [1] = ArchiveBrowserEventFileMenuPin,
  51. [2] = ArchiveBrowserEventFileMenuRename,
  52. [3] = ArchiveBrowserEventFileMenuDelete,
  53. };
  54. typedef struct ArchiveBrowserView ArchiveBrowserView;
  55. typedef void (*ArchiveBrowserViewCallback)(ArchiveBrowserEvent event, void* context);
  56. typedef enum {
  57. BrowserActionBrowse,
  58. BrowserActionItemMenu,
  59. BrowserActionTotal,
  60. } BrowserActionEnum;
  61. struct ArchiveBrowserView {
  62. View* view;
  63. BrowserWorker* worker;
  64. bool worker_running;
  65. ArchiveBrowserViewCallback callback;
  66. void* context;
  67. FuriString* path;
  68. InputKey last_tab_switch_dir;
  69. bool is_root;
  70. FuriTimer* scroll_timer;
  71. };
  72. typedef struct {
  73. ArchiveTabEnum tab_idx;
  74. files_array_t files;
  75. uint8_t menu_idx;
  76. bool menu;
  77. bool move_fav;
  78. bool list_loading;
  79. bool folder_loading;
  80. uint32_t item_cnt;
  81. int32_t item_idx;
  82. int32_t array_offset;
  83. int32_t list_offset;
  84. size_t scroll_counter;
  85. } ArchiveBrowserViewModel;
  86. void archive_browser_set_callback(
  87. ArchiveBrowserView* browser,
  88. ArchiveBrowserViewCallback callback,
  89. void* context);
  90. View* archive_browser_get_view(ArchiveBrowserView* browser);
  91. ArchiveBrowserView* browser_alloc();
  92. void browser_free(ArchiveBrowserView* browser);