commit a414b4bd4b07a875172eb6344509858d4e770c42
parent ebc1247c47dd77f735336e15d8d51575bc4db336
Author: dsp56300 <dsp56300@users.noreply.github.com>
Date: Sat, 3 Aug 2024 02:13:40 +0200
convert editor storage format to chunk based
Diffstat:
2 files changed, 53 insertions(+), 12 deletions(-)
diff --git a/source/jucePluginEditorLib/pluginEditor.cpp b/source/jucePluginEditorLib/pluginEditor.cpp
@@ -138,31 +138,62 @@ namespace jucePluginEditorLib
{
m_patchManager.reset(_patchManager);
- if(_patchManager && !m_instanceConfig.empty())
- m_patchManager->setPerInstanceConfig(m_instanceConfig);
+ if(_patchManager && !m_patchManagerConfig.empty())
+ m_patchManager->setPerInstanceConfig(m_patchManagerConfig);
}
void Editor::setPerInstanceConfig(const std::vector<uint8_t>& _data)
{
- m_instanceConfig = _data;
+ {
+ // test if its an old version that didn't use chunks yet
+ pluginLib::PluginStream oldStream(_data);
+ const auto version = oldStream.read<uint32_t>();
- if(m_patchManager)
- m_patchManager->setPerInstanceConfig(_data);
+ if(version == 1)
+ {
+ m_patchManagerConfig = _data;
+ if(m_patchManager)
+ m_patchManager->setPerInstanceConfig(_data);
+ return;
+ }
+ }
+
+ baseLib::BinaryStream s(_data);
+ baseLib::ChunkReader cr(s);
+ loadChunkData(cr);
+ cr.read();
+ }
+
+ void Editor::loadChunkData(baseLib::ChunkReader& _cr)
+ {
+ _cr.add("pmDt", 2, [this](baseLib::BinaryStream& _s, uint32_t/* _version*/)
+ {
+ m_patchManagerConfig.clear();
+ _s.read(m_patchManagerConfig);
+ if(m_patchManager)
+ m_patchManager->setPerInstanceConfig(m_patchManagerConfig);
+ });
}
void Editor::getPerInstanceConfig(std::vector<uint8_t>& _data)
{
+ baseLib::BinaryStream s;
+ saveChunkData(s);
+ s.toVector(_data);
+ }
+
+ void Editor::saveChunkData(baseLib::BinaryStream& _s)
+ {
if(m_patchManager)
{
- m_instanceConfig.clear();
- m_patchManager->getPerInstanceConfig(m_instanceConfig);
+ m_patchManagerConfig.clear();
+ m_patchManager->getPerInstanceConfig(m_patchManagerConfig);
}
-
- if(!m_instanceConfig.empty())
- _data.insert(_data.end(), m_instanceConfig.begin(), m_instanceConfig.end());
+ baseLib::ChunkWriter cw(_s, "pmDt", 2);
+ _s.write(m_patchManagerConfig);
}
- void Editor::setCurrentPart(uint8_t _part)
+ void Editor::setCurrentPart(const uint8_t _part)
{
genericUI::Editor::setCurrentPart(_part);
diff --git a/source/jucePluginEditorLib/pluginEditor.h b/source/jucePluginEditorLib/pluginEditor.h
@@ -10,6 +10,13 @@
#include "jucePluginLib/event.h"
+namespace baseLib
+{
+ class ChunkReader;
+ class BinaryStream;
+ class ChunkWriter;
+}
+
namespace pluginLib
{
class ParameterBinding;
@@ -62,6 +69,9 @@ namespace jucePluginEditorLib
void setPerInstanceConfig(const std::vector<uint8_t>& _data) override;
void getPerInstanceConfig(std::vector<uint8_t>& _data) override;
+ virtual void saveChunkData(baseLib::BinaryStream& _s);
+ virtual void loadChunkData(baseLib::ChunkReader& _cr);
+
void setCurrentPart(uint8_t _part) override;
void showDisclaimer() const;
@@ -102,7 +112,7 @@ namespace jucePluginEditorLib
std::unique_ptr<juce::FileChooser> m_fileChooser;
std::unique_ptr<patchManager::PatchManager> m_patchManager;
- std::vector<uint8_t> m_instanceConfig;
+ std::vector<uint8_t> m_patchManagerConfig;
std::vector<std::shared_ptr<juce::TemporaryFile>> m_dragAndDropTempFiles;
std::vector<juce::File> m_dragAndDropFiles;
ImagePool m_imagePool;