archive_main_view.h 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. #pragma once
  2. #include <gui/gui_i.h>
  3. #include <gui/view.h>
  4. #include <gui/canvas.h>
  5. #include <gui/elements.h>
  6. #include <furi.h>
  7. #include <storage/storage.h>
  8. #include "../helpers/archive_files.h"
  9. #include "../helpers/archive_favorites.h"
  10. #define MAX_LEN_PX 110
  11. #define MAX_NAME_LEN 255
  12. #define FRAME_HEIGHT 12
  13. #define MENU_ITEMS 4
  14. #define MAX_DEPTH 32
  15. typedef enum {
  16. ArchiveTabFavorites,
  17. ArchiveTabLFRFID,
  18. ArchiveTabSubGhz,
  19. ArchiveTabNFC,
  20. ArchiveTabIButton,
  21. ArchiveTabIrda,
  22. ArchiveTabBrowser,
  23. ArchiveTabTotal,
  24. } ArchiveTabEnum;
  25. static const char* known_ext[] = {
  26. [ArchiveFileTypeIButton] = ".ibtn",
  27. [ArchiveFileTypeNFC] = ".nfc",
  28. [ArchiveFileTypeSubGhz] = ".sub",
  29. [ArchiveFileTypeLFRFID] = ".rfid",
  30. [ArchiveFileTypeIrda] = ".ir",
  31. };
  32. static inline const char* get_tab_ext(ArchiveTabEnum tab) {
  33. switch(tab) {
  34. case ArchiveTabIButton:
  35. return known_ext[ArchiveFileTypeIButton];
  36. case ArchiveTabNFC:
  37. return known_ext[ArchiveFileTypeNFC];
  38. case ArchiveTabSubGhz:
  39. return known_ext[ArchiveFileTypeSubGhz];
  40. case ArchiveTabLFRFID:
  41. return known_ext[ArchiveFileTypeLFRFID];
  42. case ArchiveTabIrda:
  43. return known_ext[ArchiveFileTypeIrda];
  44. default:
  45. return "*";
  46. }
  47. }
  48. typedef enum {
  49. ArchiveBrowserEventRename,
  50. ArchiveBrowserEventExit,
  51. ArchiveBrowserEventLeaveDir,
  52. } ArchiveBrowserEvent;
  53. typedef struct ArchiveMainView ArchiveMainView;
  54. typedef void (*ArchiveMainViewCallback)(ArchiveBrowserEvent event, void* context);
  55. typedef enum {
  56. BrowserActionBrowse,
  57. BrowserActionItemMenu,
  58. BrowserActionTotal,
  59. } BrowserActionEnum;
  60. struct ArchiveMainView {
  61. View* view;
  62. ArchiveMainViewCallback callback;
  63. void* context;
  64. string_t name;
  65. string_t path;
  66. };
  67. typedef struct {
  68. ArchiveTabEnum tab_idx;
  69. BrowserActionEnum action;
  70. files_array_t files;
  71. uint8_t depth;
  72. uint8_t menu_idx;
  73. uint16_t idx;
  74. uint16_t last_idx[MAX_DEPTH];
  75. uint16_t list_offset;
  76. } ArchiveMainViewModel;
  77. void archive_browser_set_callback(
  78. ArchiveMainView* main_view,
  79. ArchiveMainViewCallback callback,
  80. void* context);
  81. View* archive_main_get_view(ArchiveMainView* main_view);
  82. ArchiveMainView* main_view_alloc();
  83. void main_view_free(ArchiveMainView* main_view);
  84. void archive_file_array_remove_selected(ArchiveMainView* main_view);
  85. void archive_file_array_clean(ArchiveMainView* main_view);
  86. void archive_view_add_item(ArchiveMainView* main_view, FileInfo* file_info, const char* name);
  87. void archive_browser_update(ArchiveMainView* main_view);
  88. size_t archive_file_array_size(ArchiveMainView* main_view);
  89. ArchiveFile_t* archive_get_current_file(ArchiveMainView* main_view);
  90. const char* archive_get_path(ArchiveMainView* main_view);
  91. const char* archive_get_name(ArchiveMainView* main_view);
  92. void archive_set_name(ArchiveMainView* main_view, const char* name);
  93. static inline bool is_known_app(ArchiveFileTypeEnum type) {
  94. return (type != ArchiveFileTypeFolder && type != ArchiveFileTypeUnknown);
  95. }