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 &currentProgram = 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 &currentProgram = 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;
openSUSE Build Service is sponsored by