diff --git a/Source/EffectsComponent.cpp b/Source/EffectsComponent.cpp index dc3aa316..d0dcd0c8 100644 --- a/Source/EffectsComponent.cpp +++ b/Source/EffectsComponent.cpp @@ -6,7 +6,6 @@ EffectsComponent::EffectsComponent(OscirenderAudioProcessor& p, OscirenderAudioP setText("Audio Effects"); addAndMakeVisible(frequency); - frequency.setCheckboxVisible(false); frequency.slider.setSkewFactorFromMidPoint(500.0); frequency.slider.setTextValueSuffix("Hz"); diff --git a/Source/components/EffectComponent.cpp b/Source/components/EffectComponent.cpp index ee577848..eb48cbff 100644 --- a/Source/components/EffectComponent.cpp +++ b/Source/components/EffectComponent.cpp @@ -4,7 +4,6 @@ EffectComponent::EffectComponent(OscirenderAudioProcessor& p, Effect& effect, int index) : effect(effect), index(index), audioProcessor(p) { addAndMakeVisible(slider); addChildComponent(lfoSlider); - addAndMakeVisible(selected); addAndMakeVisible(lfo); lfo.addItem("Static", static_cast(LfoType::Static)); @@ -20,16 +19,8 @@ EffectComponent::EffectComponent(OscirenderAudioProcessor& p, Effect& effect, in setupComponent(); } -EffectComponent::EffectComponent(OscirenderAudioProcessor& p, Effect& effect, int index, bool checkboxVisible) : EffectComponent(p, effect, index) { - setCheckboxVisible(checkboxVisible); -} - EffectComponent::EffectComponent(OscirenderAudioProcessor& p, Effect& effect) : EffectComponent(p, effect, 0) {} -EffectComponent::EffectComponent(OscirenderAudioProcessor& p, Effect& effect, bool checkboxVisible) : EffectComponent(p, effect) { - setCheckboxVisible(checkboxVisible); -} - void EffectComponent::setupComponent() { EffectParameter* parameter = effect.parameters[index]; @@ -39,10 +30,6 @@ void EffectComponent::setupComponent() { slider.setSliderStyle(juce::Slider::LinearHorizontal); slider.setTextBoxStyle(juce::Slider::TextBoxRight, false, 70, slider.getTextBoxHeight()); - bool enabled = effect.enabled == nullptr || effect.enabled->getValue(); - selected.setToggleState(enabled, juce::dontSendNotification); - updateEnabled(); - lfoEnabled = parameter->lfo != nullptr && parameter->lfoRate != nullptr; if (lfoEnabled) { lfo.setSelectedId(parameter->lfo->getValueUnnormalised(), juce::dontSendNotification); @@ -128,18 +115,8 @@ void EffectComponent::resized() { lfo.setBounds(bounds.removeFromRight(100).reduced(5)); } - auto checkboxLabel = bounds.removeFromLeft(120); - - if (checkboxVisible || subParameter) { - checkboxLabel.removeFromLeft(2); - auto checkboxBounds = checkboxLabel.removeFromLeft(25); - if (checkboxVisible) { - selected.setBounds(checkboxBounds); - } - } else { - checkboxLabel.removeFromLeft(5); - } - textBounds = checkboxLabel; + textBounds = bounds.removeFromLeft(120); + textBounds.removeFromLeft(5); slider.setBounds(bounds); lfoSlider.setBounds(bounds); } @@ -150,13 +127,6 @@ void EffectComponent::paint(juce::Graphics& g) { g.drawText(effect.parameters[index]->name, textBounds, juce::Justification::left); } -void EffectComponent::paintOverChildren(juce::Graphics &g) { - if (!selected.getToggleState()) { - g.setColour(juce::Colours::black.withAlpha(0.5f)); - g.fillAll(); - } -} - void EffectComponent::mouseDown(const juce::MouseEvent& event) { if (event.mods.isPopupMenu()) { juce::PopupMenu menu; @@ -188,15 +158,3 @@ void EffectComponent::setComponent(std::shared_ptr component) { this->component = component; addAndMakeVisible(component.get()); } - -void EffectComponent::setCheckboxVisible(bool visible) { - checkboxVisible = visible; -} - -void EffectComponent::setSubParameter(bool subParameter) { - this->subParameter = subParameter; -} - -void EffectComponent::updateEnabled() { - repaint(); -} diff --git a/Source/components/EffectComponent.h b/Source/components/EffectComponent.h index 0e5d4d3d..7da7f2ea 100644 --- a/Source/components/EffectComponent.h +++ b/Source/components/EffectComponent.h @@ -7,35 +7,26 @@ class EffectComponent : public juce::Component, public juce::AudioProcessorParameter::Listener, juce::AsyncUpdater { public: EffectComponent(OscirenderAudioProcessor& p, Effect& effect, int index); - EffectComponent(OscirenderAudioProcessor& p, Effect& effect, int index, bool checkboxVisible); EffectComponent(OscirenderAudioProcessor& p, Effect& effect); - EffectComponent(OscirenderAudioProcessor& p, Effect& effect, bool checkboxVisible); ~EffectComponent(); void resized() override; void paint(juce::Graphics& g) override; - void paintOverChildren(juce::Graphics& g) override; void mouseDown(const juce::MouseEvent& event) override; void parameterValueChanged(int parameterIndex, float newValue) override; void parameterGestureChanged(int parameterIndex, bool gestureIsStarting) override; void handleAsyncUpdate() override; - void updateEnabled(); - void setCheckboxVisible(bool visible); - void setSubParameter(bool subParameter); void setComponent(std::shared_ptr component); juce::Slider slider; juce::Slider lfoSlider; Effect& effect; int index; - juce::ToggleButton selected; juce::ComboBox lfo; private: void setupComponent(); - bool checkboxVisible = true; - bool subParameter = false; bool lfoEnabled = true; juce::Rectangle textBounds; std::shared_ptr component; diff --git a/Source/components/EffectsListComponent.cpp b/Source/components/EffectsListComponent.cpp index c30879ec..d00b482f 100644 --- a/Source/components/EffectsListComponent.cpp +++ b/Source/components/EffectsListComponent.cpp @@ -5,7 +5,8 @@ EffectsListComponent::EffectsListComponent(DraggableListBox& lb, AudioEffectListBoxItemData& data, int rn, Effect& effect) : DraggableListBoxItem(lb, data, rn), effect(effect), audioProcessor(data.audioProcessor), editor(data.editor) { auto parameters = effect.parameters; for (int i = 0; i < parameters.size(); i++) { - std::shared_ptr effectComponent = std::make_shared(audioProcessor, effect, i, i == 0); + std::shared_ptr effectComponent = std::make_shared(audioProcessor, effect, i); + selected.setToggleState(effect.enabled == nullptr || effect.enabled->getValue(), juce::dontSendNotification); // using weak_ptr to avoid circular reference and memory leak std::weak_ptr weakEffectComponent = effectComponent; effectComponent->slider.setValue(parameters[i]->getValueUnnormalised(), juce::dontSendNotification); @@ -15,18 +16,15 @@ EffectsListComponent::EffectsListComponent(DraggableListBox& lb, AudioEffectList } }; - if (i == 0) { - effectComponent->selected.onClick = [this, weakEffectComponent] { - if (auto effectComponent = weakEffectComponent.lock()) { - auto data = (AudioEffectListBoxItemData&)modelData; - juce::SpinLock::ScopedLockType lock(audioProcessor.effectsLock); - data.setSelected(rowNum, effectComponent->selected.getToggleState()); - effectComponent->updateEnabled(); - } - }; - } - - effectComponent->setSubParameter(i != 0); + list.setEnabled(selected.getToggleState()); + selected.onClick = [this, weakEffectComponent] { + if (auto effectComponent = weakEffectComponent.lock()) { + auto data = (AudioEffectListBoxItemData&)modelData; + juce::SpinLock::ScopedLockType lock(audioProcessor.effectsLock); + data.setSelected(rowNum, selected.getToggleState()); + list.setEnabled(selected.getToggleState()); + } + }; auto component = createComponent(parameters[i]); if (component != nullptr) { @@ -40,6 +38,7 @@ EffectsListComponent::EffectsListComponent(DraggableListBox& lb, AudioEffectList list.setRowHeight(ROW_HEIGHT); list.updateContent(); addAndMakeVisible(list); + addAndMakeVisible(selected); } EffectsListComponent::~EffectsListComponent() {} @@ -65,9 +64,20 @@ void EffectsListComponent::paint(juce::Graphics& g) { DraggableListBoxItem::paint(g); } +void EffectsListComponent::paintOverChildren(juce::Graphics& g) { + if (!selected.getToggleState()) { + g.setColour(juce::Colours::black.withAlpha(0.5f)); + auto bounds = list.getBounds(); + bounds.removeFromBottom(2); + g.fillRect(bounds); + list.repaint(); + } +} + void EffectsListComponent::resized() { auto area = getLocalBounds(); area.removeFromLeft(20); + selected.setBounds(area.removeFromLeft(30)); list.setBounds(area); } diff --git a/Source/components/EffectsListComponent.h b/Source/components/EffectsListComponent.h index c16e2983..8b1e202a 100644 --- a/Source/components/EffectsListComponent.h +++ b/Source/components/EffectsListComponent.h @@ -107,6 +107,7 @@ public: ~EffectsListComponent(); void paint(juce::Graphics& g) override; + void paintOverChildren(juce::Graphics& g) override; void resized() override; static const int ROW_HEIGHT = 30; @@ -115,6 +116,7 @@ protected: Effect& effect; ComponentListModel listModel; juce::ListBox list; + juce::ToggleButton selected; private: OscirenderAudioProcessor& audioProcessor; OscirenderAudioProcessorEditor& editor; diff --git a/Source/components/LuaListComponent.cpp b/Source/components/LuaListComponent.cpp index 186c2084..83c79284 100644 --- a/Source/components/LuaListComponent.cpp +++ b/Source/components/LuaListComponent.cpp @@ -2,7 +2,6 @@ LuaListComponent::LuaListComponent(OscirenderAudioProcessor& p, Effect& effect) { effectComponent = std::make_shared(p, effect); - effectComponent->setCheckboxVisible(false); effectComponent->slider.onValueChange = [this, &effect, &p] { effect.setValue(effectComponent->slider.getValue()); diff --git a/osci-render.jucer b/osci-render.jucer index 1449c88e..7bc7b837 100644 --- a/osci-render.jucer +++ b/osci-render.jucer @@ -468,7 +468,8 @@ - +