mirror of
https://codeberg.org/armin/ambivalence.git
synced 2026-09-01 04:10:48 +02:00
init
This commit is contained in:
parent
29c860587e
commit
42cf8432bf
57 changed files with 5782 additions and 0 deletions
134
Source/PresetManager.cpp
Normal file
134
Source/PresetManager.cpp
Normal file
|
|
@ -0,0 +1,134 @@
|
|||
#include "PresetManager.h"
|
||||
#include "PluginProcessor.h"
|
||||
|
||||
PresetManager::PresetManager(FDNReverbAudioProcessor& p)
|
||||
: processor(p)
|
||||
{
|
||||
refreshPresetList();
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// filesystem
|
||||
// -----------------------------------------------------------------------------
|
||||
juce::File PresetManager::getPresetsFolder() const
|
||||
{
|
||||
auto folder = juce::File::getSpecialLocation(
|
||||
juce::File::userDocumentsDirectory)
|
||||
.getChildFile(kSubFolder);
|
||||
if (!folder.exists())
|
||||
folder.createDirectory();
|
||||
return folder;
|
||||
}
|
||||
|
||||
juce::File PresetManager::getPresetFile(const juce::String& name) const
|
||||
{
|
||||
return getPresetsFolder().getChildFile(name + kExtension);
|
||||
}
|
||||
|
||||
void PresetManager::refreshPresetList()
|
||||
{
|
||||
presetNames.clear();
|
||||
auto files = getPresetsFolder().findChildFiles(
|
||||
juce::File::findFiles, false,
|
||||
juce::String("*") + kExtension);
|
||||
files.sort();
|
||||
for (const auto& f : files)
|
||||
presetNames.add(f.getFileNameWithoutExtension());
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// save
|
||||
// -----------------------------------------------------------------------------
|
||||
// reuses PluginProcessor::getStateInformation() directly,
|
||||
// so no PluginProcessor changes are needed.
|
||||
// -----------------------------------------------------------------------------
|
||||
// --- after changes ---
|
||||
bool PresetManager::savePreset(const juce::String& name)
|
||||
{
|
||||
if (name.isEmpty()) return false;
|
||||
// * fix: notify the Processor of the name before getStateInformation()
|
||||
// so getStateInformation() writes the correct name into the ValueTree
|
||||
processor.setLastSavedPresetName(name);
|
||||
juce::MemoryBlock data;
|
||||
processor.getStateInformation(data);
|
||||
|
||||
auto file = getPresetFile(name);
|
||||
if (!file.replaceWithData(data.getData(), data.getSize()))
|
||||
return false;
|
||||
|
||||
currentPresetName = name;
|
||||
refreshPresetList();
|
||||
if (onPresetListChanged) onPresetListChanged();
|
||||
if (onPresetLoaded) onPresetLoaded(name);
|
||||
return true;
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// load
|
||||
// -----------------------------------------------------------------------------
|
||||
// reuses PluginProcessor::setStateInformation() directly.
|
||||
// setStateInformation() sets paramsNeedUpdate=true, so
|
||||
// the next processBlock() sends the new parameters to the engine.
|
||||
// -----------------------------------------------------------------------------
|
||||
bool PresetManager::loadPreset(const juce::String& name)
|
||||
{
|
||||
auto file = getPresetFile(name);
|
||||
if (!file.exists()) return false;
|
||||
|
||||
juce::MemoryBlock data;
|
||||
if (!file.loadFileAsData(data)) return false;
|
||||
|
||||
processor.setStateInformation(data.getData(), static_cast<int>(data.getSize()));
|
||||
|
||||
// * after loading a preset always normal view (Normal Mode)
|
||||
if (auto* param = processor.apvts.getParameter("promode"))
|
||||
param->setValueNotifyingHost(0.0f);
|
||||
|
||||
currentPresetName = name;
|
||||
if (onPresetLoaded) onPresetLoaded(name);
|
||||
return true;
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// delete
|
||||
// -----------------------------------------------------------------------------
|
||||
bool PresetManager::deletePreset(const juce::String& name)
|
||||
{
|
||||
auto file = getPresetFile(name);
|
||||
if (!file.exists()) return false;
|
||||
|
||||
if (!file.deleteFile()) return false;
|
||||
|
||||
if (currentPresetName == name)
|
||||
currentPresetName.clear();
|
||||
|
||||
refreshPresetList();
|
||||
if (onPresetListChanged) onPresetListChanged();
|
||||
return true;
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// navigation
|
||||
// -----------------------------------------------------------------------------
|
||||
int PresetManager::getCurrentPresetIndex() const noexcept
|
||||
{
|
||||
return presetNames.indexOf(currentPresetName);
|
||||
}
|
||||
|
||||
void PresetManager::loadPrevPreset()
|
||||
{
|
||||
if (presetNames.isEmpty()) return;
|
||||
int idx = getCurrentPresetIndex();
|
||||
if (idx <= 0)
|
||||
idx = presetNames.size();
|
||||
loadPreset(presetNames[idx - 1]);
|
||||
}
|
||||
|
||||
void PresetManager::loadNextPreset()
|
||||
{
|
||||
if (presetNames.isEmpty()) return;
|
||||
int idx = getCurrentPresetIndex();
|
||||
if (idx < 0 || idx >= presetNames.size() - 1)
|
||||
idx = -1;
|
||||
loadPreset(presetNames[idx + 1]);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue