commit b7645f8e2f8d4aeaefb631ee5b7e55a419ca6b7f
parent 51159843c608c36df102feab2b45b2da1a71bb60
Author: dsp56300 <dsp56300@users.noreply.github.com>
Date: Fri, 2 Aug 2024 19:30:11 +0200
implement store button, allow to save either a program or a performance
Diffstat:
5 files changed, 42 insertions(+), 2 deletions(-)
diff --git a/source/nord/n2x/n2xJucePlugin/n2xController.cpp b/source/nord/n2x/n2xJucePlugin/n2xController.cpp
@@ -306,6 +306,18 @@ namespace n2xJucePlugin
return dst;
}
+ std::vector<uint8_t> Controller::createMultiDump(const n2x::SysexByte _bank, const uint8_t _program)
+ {
+ const auto multi = m_state.updateAndGetMulti();
+
+ std::vector<uint8_t> result(multi.begin(), multi.end());
+
+ result[n2x::SysexIndex::IdxMsgType] = _bank;
+ result[n2x::SysexIndex::IdxMsgSpec] = _program;
+
+ return result;
+ }
+
bool Controller::activatePatch(const std::vector<uint8_t>& _sysex, const uint32_t _part) const
{
if(_part >= getPartCount())
diff --git a/source/nord/n2x/n2xJucePlugin/n2xController.h b/source/nord/n2x/n2xJucePlugin/n2xController.h
@@ -52,6 +52,8 @@ namespace n2xJucePlugin
void requestDump(uint8_t _bank, uint8_t _patch) const;
std::vector<uint8_t> createSingleDump(uint8_t _bank, uint8_t _program, uint8_t _part) const;
+ std::vector<uint8_t> createMultiDump(n2x::SysexByte _bank, uint8_t _program);
+
bool activatePatch(const std::vector<uint8_t>& _sysex, uint32_t _part) const;
bool isDerivedParameter(pluginLib::Parameter& _derived, pluginLib::Parameter& _base) const override;
diff --git a/source/nord/n2x/n2xJucePlugin/n2xEditor.cpp b/source/nord/n2x/n2xJucePlugin/n2xEditor.cpp
@@ -76,6 +76,14 @@ namespace n2xJucePlugin
setCurrentPart(_part);
m_parameterBinding.setPart(_part);
});
+
+ if(auto* btSave = findComponentT<juce::Button>("button_store"))
+ {
+ btSave->onClick = [this]
+ {
+ onBtSave();
+ };
+ }
}
Editor::~Editor()
@@ -122,4 +130,17 @@ namespace n2xJucePlugin
{
return m_controller.getPatchName(m_controller.getCurrentPart());
}
+
+ void Editor::onBtSave() const
+ {
+ juce::PopupMenu menu;
+
+ const auto numAdded = getPatchManager()->createSaveMenuEntries(menu, "Program");
+ if(numAdded)
+ menu.addSeparator();
+
+ getPatchManager()->createSaveMenuEntries(menu, m_controller.getPartCount(), "Performance");
+
+ menu.showMenuAsync({});
+ }
}
diff --git a/source/nord/n2x/n2xJucePlugin/n2xEditor.h b/source/nord/n2x/n2xJucePlugin/n2xEditor.h
@@ -43,6 +43,8 @@ namespace n2xJucePlugin
std::string getCurrentPatchName() const;
private:
+ void onBtSave() const;
+
Controller& m_controller;
pluginLib::ParameterBinding& m_parameterBinding;
diff --git a/source/nord/n2x/n2xJucePlugin/n2xPatchManager.cpp b/source/nord/n2x/n2xJucePlugin/n2xPatchManager.cpp
@@ -33,9 +33,12 @@ namespace n2xJucePlugin
stopLoaderThread();
}
- bool PatchManager::requestPatchForPart(pluginLib::patchDB::Data& _data, uint32_t _part)
+ bool PatchManager::requestPatchForPart(pluginLib::patchDB::Data& _data, const uint32_t _part)
{
- _data = m_controller.createSingleDump(n2x::SysexByte::SingleDumpBankA, 0, static_cast<uint8_t>(_part));
+ if(_part < m_controller.getPartCount())
+ _data = m_controller.createSingleDump(n2x::SysexByte::SingleDumpBankA, 0, static_cast<uint8_t>(_part));
+ else
+ _data = m_controller.createMultiDump(n2x::SysexByte::MultiDumpBankA, 0);
return !_data.empty();
}