mirror of
https://github.com/daveallie/crosspoint-reader.git
synced 2026-02-04 06:37:38 +03:00
## Summary Adds feature to file selection activity for better user navigation when ascending folders. The activity now remembers the index of the parent folder instead of always resetting to the first element. I don't have any means of testing this, so if someone could test it that'd be great Resolves #259
40 lines
1.3 KiB
C++
40 lines
1.3 KiB
C++
#pragma once
|
|
#include <freertos/FreeRTOS.h>
|
|
#include <freertos/semphr.h>
|
|
#include <freertos/task.h>
|
|
|
|
#include <functional>
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
#include "../Activity.h"
|
|
|
|
class FileSelectionActivity final : public Activity {
|
|
TaskHandle_t displayTaskHandle = nullptr;
|
|
SemaphoreHandle_t renderingMutex = nullptr;
|
|
std::string basepath = "/";
|
|
std::vector<std::string> files;
|
|
int selectorIndex = 0;
|
|
bool updateRequired = false;
|
|
const std::function<void(const std::string&)> onSelect;
|
|
const std::function<void()> onGoHome;
|
|
|
|
static void taskTrampoline(void* param);
|
|
[[noreturn]] void displayTaskLoop();
|
|
void render() const;
|
|
void loadFiles();
|
|
int findEntry(const std::string& name) const;
|
|
|
|
public:
|
|
explicit FileSelectionActivity(GfxRenderer& renderer, MappedInputManager& mappedInput,
|
|
const std::function<void(const std::string&)>& onSelect,
|
|
const std::function<void()>& onGoHome, std::string initialPath = "/")
|
|
: Activity("FileSelection", renderer, mappedInput),
|
|
basepath(initialPath.empty() ? "/" : std::move(initialPath)),
|
|
onSelect(onSelect),
|
|
onGoHome(onGoHome) {}
|
|
void onEnter() override;
|
|
void onExit() override;
|
|
void loop() override;
|
|
};
|