#pragma once #include #include #include #include #include #include #include "../Activity.h" enum FileType { F_DIRECTORY = 0, F_EPUB, F_TXT, F_BMP, F_FILE }; struct FileInfo { std::string name; std::string basename; FileType type; }; class GridBrowserActivity final : public Activity { TaskHandle_t displayTaskHandle = nullptr; SemaphoreHandle_t renderingMutex = nullptr; std::string basepath = "/"; std::vector files; int selectorIndex = 0; bool updateRequired = false; const std::function onSelect; const std::function onGoHome; static void taskTrampoline(void* param); [[noreturn]] void displayTaskLoop(); void render() const; void loadFiles(); public: explicit GridBrowserActivity(GfxRenderer& renderer, InputManager& inputManager, const std::function& onSelect, const std::function& onGoHome) : Activity("FileSelection", renderer, inputManager), onSelect(onSelect), onGoHome(onGoHome) {} void onEnter() override; void onExit() override; void loop() override; private: static void sortFileList(std::vector& strs); };