gearmulator

Emulation of classic VA synths of the late 90s/2000s that are based on Motorola 56300 family DSPs
Log | Files | Refs | Submodules | README | LICENSE

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:
Msource/jucePluginEditorLib/pluginEditor.cpp | 53++++++++++++++++++++++++++++++++++++++++++-----------
Msource/jucePluginEditorLib/pluginEditor.h | 12+++++++++++-
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;