commit 1eeca051409bf6ba5b76edcb12ee5116c7a1100d
parent 6b5bdcc9093866cf7cf0a17dbc1a660fed6c80f7
Author: dsp56300 <dsp56300@users.noreply.github.com>
Date: Fri, 2 Aug 2024 13:28:35 +0200
allow part midi channel selection
Diffstat:
4 files changed, 38 insertions(+), 0 deletions(-)
diff --git a/source/nord/n2x/n2xJucePlugin/n2xController.cpp b/source/nord/n2x/n2xJucePlugin/n2xController.cpp
@@ -231,6 +231,11 @@ namespace n2xJucePlugin
pluginLib::Controller::sendSysEx(pluginLib::SysEx{multi.begin(), multi.end()});
}
+ uint8_t Controller::getMultiParameter(const n2x::MultiParam _param) const
+ {
+ return m_state.getMultiParam(_param, 0);
+ }
+
void Controller::sendMultiParameter(const pluginLib::Parameter& _parameter, const uint8_t _value)
{
const auto& desc = _parameter.getDescription();
diff --git a/source/nord/n2x/n2xJucePlugin/n2xController.h b/source/nord/n2x/n2xJucePlugin/n2xController.h
@@ -41,7 +41,10 @@ namespace n2xJucePlugin
bool parseControllerMessage(const synthLib::SMidiEvent&) override;
void sendParameterChange(const pluginLib::Parameter& _parameter, uint8_t _value) override;
+
void setMultiParameter(n2x::MultiParam _mp, uint8_t _value);
+ uint8_t getMultiParameter(n2x::MultiParam _param) const;
+
void sendMultiParameter(const pluginLib::Parameter& _parameter, uint8_t _value);
bool sendSysEx(MidiPacketType _packet, const std::map<pluginLib::MidiDataType, uint8_t>& _params) const;
diff --git a/source/nord/n2x/n2xJucePlugin/n2xPart.cpp b/source/nord/n2x/n2xJucePlugin/n2xPart.cpp
@@ -13,4 +13,33 @@ namespace n2xJucePlugin
{
m_editor.getN2xController().setCurrentPart(getPart());
}
+
+ void Part::mouseDown(const juce::MouseEvent& _e)
+ {
+ if(!_e.mods.isPopupMenu())
+ {
+ PartButton<DrawableButton>::mouseDown(_e);
+ return;
+ }
+
+ juce::PopupMenu menu;
+
+ juce::PopupMenu menuChannel;
+
+ auto& controller = m_editor.getN2xController();
+
+ const auto paramMidiChannel = static_cast<n2x::MultiParam>(n2x::MultiParam::SlotAMidiChannel + getPart());
+ const auto ch = controller.getMultiParameter(paramMidiChannel);
+ for(uint8_t c=0; c<16; ++c)
+ {
+ menuChannel.addItem((std::string("Channel ") + std::to_string(c+1)).c_str(), true, c == ch, [&controller, c, paramMidiChannel]
+ {
+ controller.setMultiParameter(paramMidiChannel, c);
+ });
+ }
+
+ menu.addSubMenu("Midi Channel", menuChannel);
+
+ menu.showMenuAsync({});
+ }
}
diff --git a/source/nord/n2x/n2xJucePlugin/n2xPart.h b/source/nord/n2x/n2xJucePlugin/n2xPart.h
@@ -13,6 +13,7 @@ namespace n2xJucePlugin
void onClick() override;
+ void mouseDown(const juce::MouseEvent& _e) override;
private:
Editor& m_editor;
};