File store-and-reload-program-names-in-presets.patch of Package tunefish
From 0e75602c4a153a00833b75f70eb9a5b4c5315aff Mon Sep 17 00:00:00 2001
From: JP Cimalando <jpcima@users.noreply.github.com>
Date: Thu, 8 Nov 2018 22:23:41 +0100
Subject: [PATCH] store and reload program names in presets
---
src/tunefish4/Source/PluginEditor.cpp | 19 +
src/tunefish4/Source/PluginProcessor.cpp | 20 +
src/tunefish4/Source/PluginProcessor.h | 4 +-
4 files changed, 1042 insertions(+), 1001 deletions(-)
diff --git a/src/tunefish4/Source/PluginEditor.cpp b/src/tunefish4/Source/PluginEditor.cpp
index 55d20ec..fe164d1 100644
--- a/src/tunefish4/Source/PluginEditor.cpp
+++ b/src/tunefish4/Source/PluginEditor.cpp
@@ -993,6 +993,25 @@ void Tunefish4AudioProcessorEditor::refreshUiFromSynth()
}
tfprocessor->resetParamDirty();
+
+ if (tfprocessor->isProgramNameDirty())
+ {
+ tfprocessor->resetProgramNameDirty();
+
+ const eU32 programCount = getProcessor()->getNumPrograms();
+ const eU32 currentProgram = getProcessor()->getCurrentProgram();
+
+ for (eU32 i=0; i<programCount; i++)
+ {
+ const String &name = tfprocessor->getProgramName(i);
+ m_cmbInstrument.changeItemText(i+1, name);
+ if (i == currentProgram)
+ {
+ m_cmbInstrument.setText(name);
+ }
+ }
+ }
+
m_wasWindowHidden = false;
}
diff --git a/src/tunefish4/Source/PluginProcessor.cpp b/src/tunefish4/Source/PluginProcessor.cpp
index 83992e1..0eb7af1 100644
--- a/src/tunefish4/Source/PluginProcessor.cpp
+++ b/src/tunefish4/Source/PluginProcessor.cpp
@@ -47,6 +47,7 @@ Tunefish4AudioProcessor::Tunefish4AudioProcessor() :
tf(nullptr),
synth(nullptr),
paramDirtyAny(false),
+ programNameDirty(false),
currentProgramIndex(0),
adapterWriteOffset(0),
adapterDataAvailable(0)
@@ -490,6 +491,11 @@ bool Tunefish4AudioProcessor::wasProgramSwitched() const
return programSwitched;
}
+bool Tunefish4AudioProcessor::isProgramNameDirty() const
+{
+ return programNameDirty;
+}
+
void Tunefish4AudioProcessor::resetParamDirty(eBool dirty)
{
for (eU32 j = 0; j<TF_PARAM_COUNT; j++)
@@ -501,6 +507,11 @@ void Tunefish4AudioProcessor::resetParamDirty(eBool dirty)
paramDirtyAny = dirty;
}
+void Tunefish4AudioProcessor::resetProgramNameDirty(eBool dirty)
+{
+ programNameDirty = dirty;
+}
+
bool Tunefish4AudioProcessor::writeFactoryPatchHeader(File headerFile) const
{
if (!headerFile.deleteFile())
@@ -613,6 +624,9 @@ void Tunefish4AudioProcessor::getStateInformation (MemoryBlock& destData)
{
XmlElement xml ("TF4SETTINGS");
+ const eTfSynthProgram ¤tProgram = programs[currentProgramIndex];
+ xml.setAttribute ("ProgName", currentProgram.getName());
+
for (eU32 i=0; i<TF_PARAM_COUNT; i++)
{
xml.setAttribute (TF_NAMES[i], tf->params[i]);
@@ -630,6 +644,12 @@ void Tunefish4AudioProcessor::setStateInformation (const void* data, int sizeInB
// make sure that it's actually our type of XML object..
if (xmlState->hasTagName ("TF4SETTINGS"))
{
+ String programName = xmlState->getStringAttribute("ProgName");
+
+ eTfSynthProgram ¤tProgram = programs[currentProgramIndex];
+ currentProgram.setName(programName);
+ resetProgramNameDirty(true);
+
for (eU32 i=0; i<TF_PARAM_COUNT; i++)
{
tf->params[i] = static_cast<float>(xmlState->getDoubleAttribute (TF_NAMES[i], tf->params[i]));
diff --git a/src/tunefish4/Source/PluginProcessor.h b/src/tunefish4/Source/PluginProcessor.h
index c2e119a..d0b18d5 100644
--- a/src/tunefish4/Source/PluginProcessor.h
+++ b/src/tunefish4/Source/PluginProcessor.h
@@ -100,7 +100,9 @@ class Tunefish4AudioProcessor : public AudioProcessor, public LevelMeterSource
bool isParamDirty(eU32 index);
bool isParamDirtyAny() const;
bool wasProgramSwitched() const;
+ bool isProgramNameDirty() const;
void resetParamDirty(eBool dirty = eFALSE);
+ void resetProgramNameDirty(eBool dirty = eFALSE);
bool writeFactoryPatchHeader(File headerFile) const;
bool loadPresetFile(File file, bool applyToSynth = false, int index = -1);
@@ -118,7 +120,7 @@ class Tunefish4AudioProcessor : public AudioProcessor, public LevelMeterSource
eBool paramDirtyAny;
eBool paramDirty[TF_PARAM_COUNT];
eBool programSwitched;
- eTfSynthProgram currentProgram;
+ eBool programNameDirty;
eTfSynthProgram copiedProgram;
eU32 currentProgramIndex;
String pluginLocation;