ambivalence/Source/PresetManager.h

59 lines
2.1 KiB
C
Raw Normal View History

2026-08-15 15:36:28 +02:00
#pragma once
#include <JuceHeader.h>
class FDNReverbAudioProcessor;
// -----------------------------------------------------------------------------
// PresetManager
// -----------------------------------------------------------------------------
// preset file manage .
//
// save location : ~/Documents/Ambivalence/Presets/*.ambpreset
// : APVTS getStateInformation/setStateInformation
// -> existing save fully reused , minimizes added code
//
// real-time safety :
// - file I/O all message thread (UI) assumed to be called
// - processBlock not involved at all
// -----------------------------------------------------------------------------
class PresetManager
{
public:
explicit PresetManager(FDNReverbAudioProcessor& processor);
// --- preset operations ---
bool savePreset(const juce::String& name);
bool loadPreset(const juce::String& name);
bool deletePreset(const juce::String& name);
// --- navigation ---
void loadPrevPreset();
void loadNextPreset();
// --- state access ---
juce::StringArray getPresetNames() const noexcept { return presetNames; }
// --- after changes ---
juce::String getCurrentPresetName() const noexcept { return currentPresetName; }
void setCurrentPresetName(const juce::String& name) noexcept { currentPresetName = name; } // * added
int getCurrentPresetIndex() const noexcept;
bool hasPresets() const noexcept { return !presetNames.isEmpty(); }
// --- folder access ---
juce::File getPresetsFolder() const;
// --- UI update callback ---
std::function<void()> onPresetListChanged;
std::function<void(const juce::String&)> onPresetLoaded;
private:
void refreshPresetList();
juce::File getPresetFile(const juce::String& name) const;
FDNReverbAudioProcessor& processor;
juce::StringArray presetNames;
juce::String currentPresetName;
static constexpr const char* kExtension = ".ambpreset";
static constexpr const char* kSubFolder = "Ambivalence/Presets";
};