I also looked at your constructors and you can clean those up using lambda expressions. Quick example that’s not exactly your code but should give you the right idea.
class EnvelopeComponent : public Component
EnvelopeComponent() /* user the initializer list */
: attack (Slider::Rotary, Slider::noTextBox), //very helpful constructor for Sliders
decay (Slider::Rotary, Slider::noTextBox),
sustain (Slider::Rotary, Slider::noTextBox),
release (Slider::Rotary, Slider::noTextBox)
auto initSlider = [this] (Slider& s) // lambda expression declaration
s.setRange (1.0, 500.0);
sustain.setRange (0.0, 1.0);
//.... yada yada yada
Slider attack, sustain, decay, release; /* don't need to put them on different lines */
Using short little lambdas like that in your constructors makes the code easier to understand, prevents copy-paste errors, and lets you change small things about how you initialize your subcomponents very easily, while at the same time shortening your code so you don’t have a 100+ line constructor.