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 e3d56ce55e3b15c50fe00d9ff457ba7876261b13
parent a74cc61844af453c49a3898357c5424be8464f25
Author: 790 <790@users.noreply.github.com>
Date:   Sat, 15 Jan 2022 12:19:51 +0000

maybe fix crash bug on mac

Diffstat:
Msource/jucePlugin/ui/Virus_Parts.cpp | 35++++++++++++++++++++---------------
Msource/jucePlugin/ui/Virus_Parts.h | 2++
2 files changed, 22 insertions(+), 15 deletions(-)

diff --git a/source/jucePlugin/ui/Virus_Parts.cpp b/source/jucePlugin/ui/Virus_Parts.cpp @@ -5,10 +5,10 @@ #include "VirusEditor.h" using namespace juce; -static uint8_t g_playMode = 0; Parts::Parts(VirusParameterBinding & _parameterBinding, Virus::Controller& _controller) : m_parameterBinding(_parameterBinding), m_controller(_controller), m_btSingleMode("Single\nMode"), m_btMultiSingleMode("Multi\nSingle"), m_btMultiMode("Multi\nMode") { + setSize(338, 800); for (auto pt = 0; pt < 16; pt++) { m_partLabels[pt].setBounds(34, 161 + pt * (36), 24, 36); @@ -106,11 +106,6 @@ Parts::Parts(VirusParameterBinding & _parameterBinding, Virus::Controller& _cont m_btSingleMode.setTopLeftPosition(102, 756); m_btSingleMode.setSize(70, 30); - //m_btMultiMode.getToggleStateValue().referTo(*m_controller.getParamValue(Virus::Param_PlayMode)); - m_btSingleMode.setClickingTogglesState(true); - m_btMultiMode.setClickingTogglesState(true); - m_btMultiSingleMode.setClickingTogglesState(true); - m_btSingleMode.setColour(TextButton::ColourIds::textColourOnId, juce::Colours::white); m_btSingleMode.setColour(TextButton::ColourIds::textColourOffId, juce::Colours::grey); m_btMultiMode.setColour(TextButton::ColourIds::textColourOnId, juce::Colours::white); @@ -124,22 +119,32 @@ Parts::Parts(VirusParameterBinding & _parameterBinding, Virus::Controller& _cont m_btMultiSingleMode.setBounds(m_btSingleMode.getBounds().translated(m_btSingleMode.getWidth()+4, 0)); m_btMultiMode.setBounds(m_btMultiSingleMode.getBounds().translated(m_btMultiSingleMode.getWidth()+4, 0)); - const uint8_t playMode = g_playMode; - if (playMode == virusLib::PlayModeSingle) { + m_controller.getParameter(Virus::Param_PlayMode, 0)->onValueChanged = [this] { updatePlayModeButtons(); }; + updatePlayModeButtons(); + + startTimerHz(5); +} +Parts::~Parts() { + m_controller.getParameter(Virus::Param_PlayMode, 0)->onValueChanged = nullptr; +} +void Parts::updatePlayModeButtons() +{ + const auto _mode = m_controller.getParameter(Virus::Param_PlayMode, 0)->getValue(); + if (_mode == virusLib::PlayModeSingle) + { m_btSingleMode.setToggleState(true, juce::dontSendNotification); } - else if (playMode == virusLib::PlayModeMultiSingle) { + else if (_mode == virusLib::PlayModeMultiSingle) + { m_btMultiSingleMode.setToggleState(true, juce::dontSendNotification); } - else if (playMode == virusLib::PlayModeMulti) { + else if (_mode == virusLib::PlayModeMulti) + { m_btMultiMode.setToggleState(true, juce::dontSendNotification); } - startTimerHz(5); - setSize(338, 800); } - void Parts::changePart(uint8_t _part) -{ + { for (auto &p : m_partSelect) { p.setToggleState(false, juce::dontSendNotification); @@ -150,8 +155,8 @@ void Parts::changePart(uint8_t _part) } void Parts::setPlayMode(uint8_t _mode) { + m_controller.getParameter(Virus::Param_PlayMode)->setValue(_mode); - g_playMode = _mode; getParentComponent()->postCommandMessage(VirusEditor::Commands::Rebind); } diff --git a/source/jucePlugin/ui/Virus_Parts.h b/source/jucePlugin/ui/Virus_Parts.h @@ -10,8 +10,10 @@ class Parts : public juce::Component, private juce::Timer { public: Parts(VirusParameterBinding& _parameterBinding, Virus::Controller& _controller); + ~Parts(); static constexpr auto kPartGroupId = 0x3FBBC; private: + void updatePlayModeButtons(); void changePart(uint8_t _part); void setPlayMode(uint8_t _mode); void timerCallback() override;