crosspoint-reader/src/activities/reader/FileSelectionActivity.h

36 lines
1.1 KiB
C
Raw Normal View History

2025-12-04 00:07:25 +11:00
#pragma once
#include <freertos/FreeRTOS.h>
#include <freertos/semphr.h>
2025-12-06 04:20:03 +11:00
#include <freertos/task.h>
2025-12-04 00:07:25 +11:00
#include <functional>
#include <string>
#include <vector>
#include "../Activity.h"
2025-12-04 00:07:25 +11:00
class FileSelectionActivity final : public Activity {
2025-12-04 00:07:25 +11:00
TaskHandle_t displayTaskHandle = nullptr;
SemaphoreHandle_t renderingMutex = nullptr;
2025-12-05 22:12:28 +11:00
std::string basepath = "/";
2025-12-04 00:07:25 +11:00
std::vector<std::string> files;
int selectorIndex = 0;
bool updateRequired = false;
const std::function<void(const std::string&)> onSelect;
const std::function<void()> onGoHome;
2025-12-04 00:07:25 +11:00
static void taskTrampoline(void* param);
[[noreturn]] void displayTaskLoop();
void render() const;
2025-12-05 22:12:28 +11:00
void loadFiles();
2025-12-04 00:07:25 +11:00
public:
explicit FileSelectionActivity(GfxRenderer& renderer, InputManager& inputManager,
const std::function<void(const std::string&)>& onSelect,
const std::function<void()>& onGoHome)
: Activity(renderer, inputManager), onSelect(onSelect), onGoHome(onGoHome) {}
2025-12-04 00:07:25 +11:00
void onEnter() override;
void onExit() override;
void loop() override;
2025-12-04 00:07:25 +11:00
};