#pragma once #include #include "../PluginProcessor.h" #include "../audio/Effect.h" #include "LabelledTextBox.h" 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 mouseDown(const juce::MouseEvent& event) override; void parameterValueChanged(int parameterIndex, float newValue) override; void parameterGestureChanged(int parameterIndex, bool gestureIsStarting) override; void handleAsyncUpdate() override; void setCheckboxVisible(bool visible); 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 lfoEnabled = true; juce::Rectangle textBounds; std::shared_ptr component; OscirenderAudioProcessor& audioProcessor; juce::Label popupLabel; LabelledTextBox min{"Min"}; LabelledTextBox max{"Max"}; JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(EffectComponent) };