Files
InstaLPEQ/Source/SignalChainPanel.h
hariel1985 9c5b5a3957 v1.2.2: Live spectrum analyzer, makeup gain, drag-and-drop signal chain
- Real-time FFT spectrum analyzer drawn behind EQ curves
- Makeup gain knob (+/- 24 dB) after limiter
- Draggable signal chain panel: reorder Master Gain / Limiter / Makeup Gain
- Chain order saved/restored with DAW session
- Scaled fonts in signal chain panel

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 11:44:27 +01:00

47 sor
1.6 KiB
C++

#pragma once
#include <JuceHeader.h>
#include "PluginProcessor.h"
class SignalChainPanel : public juce::Component
{
public:
struct Listener
{
virtual ~Listener() = default;
virtual void chainOrderChanged (const std::array<InstaLPEQProcessor::ChainStage, InstaLPEQProcessor::numChainStages>& order) = 0;
};
SignalChainPanel();
void setListener (Listener* l) { listener = l; }
void setOrder (const std::array<InstaLPEQProcessor::ChainStage, InstaLPEQProcessor::numChainStages>& order);
std::array<InstaLPEQProcessor::ChainStage, InstaLPEQProcessor::numChainStages> getOrder() const { return currentOrder; }
void paint (juce::Graphics& g) override;
void resized() override;
void mouseDown (const juce::MouseEvent& e) override;
void mouseDrag (const juce::MouseEvent& e) override;
void mouseUp (const juce::MouseEvent& e) override;
private:
static constexpr int numBlocks = InstaLPEQProcessor::numChainStages;
std::array<InstaLPEQProcessor::ChainStage, numBlocks> currentOrder {
InstaLPEQProcessor::MasterGain,
InstaLPEQProcessor::Limiter,
InstaLPEQProcessor::MakeupGain
};
int draggedIndex = -1;
float dragOffsetX = 0.0f;
float dragCurrentX = 0.0f;
Listener* listener = nullptr;
juce::Rectangle<float> getBlockRect (int index) const;
int getBlockAtX (float x) const;
juce::String getStageName (InstaLPEQProcessor::ChainStage stage) const;
juce::Colour getStageColour (InstaLPEQProcessor::ChainStage stage) const;
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (SignalChainPanel)
};