archive_browser_view.h 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  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. typedef enum {
  26. ArchiveBrowserEventFileMenuOpen,
  27. ArchiveBrowserEventFileMenuClose,
  28. ArchiveBrowserEventFileMenuRun,
  29. ArchiveBrowserEventFileMenuPin,
  30. ArchiveBrowserEventFileMenuRename,
  31. ArchiveBrowserEventFileMenuDelete,
  32. ArchiveBrowserEventEnterDir,
  33. ArchiveBrowserEventExit,
  34. } ArchiveBrowserEvent;
  35. static const uint8_t file_menu_actions[MENU_ITEMS] = {
  36. [0] = ArchiveBrowserEventFileMenuRun,
  37. [1] = ArchiveBrowserEventFileMenuPin,
  38. [2] = ArchiveBrowserEventFileMenuRename,
  39. [3] = ArchiveBrowserEventFileMenuDelete,
  40. };
  41. typedef struct ArchiveBrowserView ArchiveBrowserView;
  42. typedef void (*ArchiveBrowserViewCallback)(ArchiveBrowserEvent event, void* context);
  43. typedef enum {
  44. BrowserActionBrowse,
  45. BrowserActionItemMenu,
  46. BrowserActionTotal,
  47. } BrowserActionEnum;
  48. struct ArchiveBrowserView {
  49. View* view;
  50. ArchiveBrowserViewCallback callback;
  51. void* context;
  52. string_t path;
  53. };
  54. typedef struct {
  55. ArchiveTabEnum tab_idx;
  56. ArchiveTabEnum last_tab;
  57. files_array_t files;
  58. uint8_t depth;
  59. uint8_t menu_idx;
  60. bool menu;
  61. uint16_t idx;
  62. uint16_t last_idx[MAX_DEPTH];
  63. uint16_t list_offset;
  64. } ArchiveBrowserViewModel;
  65. void archive_browser_set_callback(
  66. ArchiveBrowserView* browser,
  67. ArchiveBrowserViewCallback callback,
  68. void* context);
  69. View* archive_browser_get_view(ArchiveBrowserView* browser);
  70. ArchiveBrowserView* browser_alloc();
  71. void browser_free(ArchiveBrowserView* browser);