I’m new to juce, here’s a project where I need to add several controls at a time, I think Parent and child components is meet my needs. But I don’t know how to use it in vst3 project. Please help me for that, appreciate that. My current usage is like below shows,But when loading the compiled vst3 in reaper, none of the controls display on vst interface. :
Editor.h:
class LayerComponent : juce::Component
{
public:
LayerComponent()
{
'addAndMakeVisible(colourlabels);
'addAndMakeVisible(layerlabels);
'addAndMakeVisible(layersolobuttons);
'addAndMakeVisible(layermutebuttons);
'addAndMakeVisible(layertransposetexteditors);
}
~LayerComponent();
void paint(juce::Graphics& g) override
{
// 获取父控件的边界
juce::Rectangle<int> bounds = getLocalBounds();
// 设置方形的颜色和渐变
juce::Colour color1(0xff000000); // 黑色
juce::Colour color2(0xffffffff); // 白色
juce::ColourGradient gradient(color1, bounds.getTopLeft().toFloat(), color2, bounds.getBottomRight().toFloat(), false);
// 绘制方形的背景
g.setGradientFill(gradient);
g.fillRoundedRectangle(bounds.toFloat(), 10.0f);
// 绘制方形的边框
g.setColour(juce::Colours::black);
g.drawRoundedRectangle(bounds.toFloat(), 10.0f, 2.0f);
}
void resized() override
{
}
void setBounds(int x, int y, int width, int height)
'{
// 按顺序控件的width的占整个Comnent的width的比率
int cw = 0.06; int lw = 0.1;int sbw = 0.5;int mbw = 0.1;int tew = 0.1;
// 从第二个控件开始按顺序控件的x坐标
int lx = x + (width * cw) + 5;
int sbx = lx + (width * lw) + 5;
int mbx = sbx + (width * sbw) + 5;
int tex = mbx + (width * mbw);
colourlabels.setBounds(x, y, width * cw, height);
layerlabels.setBounds(lx, y, width * lw, height);
layersolobuttons.setBounds(sbx, y, width * sbw, height);
layermutebuttons.setBounds(mbx, y, width * mbw, height);
layertransposetexteditors.setBounds(tex, y, width * tew, height);
colourlabels.repaint();
layerlabels.repaint();
layersolobuttons.repaint();
layermutebuttons.repaint();
layertransposetexteditors.repaint();
}
void setText(juce::String& layerLabelText, juce::String& soloButtonText, juce::String& muteButtonText, juce::String& transposeEditorText)
{
layerlabels.setText(layerLabelText, juce::dontSendNotification);
layersolobuttons.setButtonText(soloButtonText);
layermutebuttons.setButtonText(muteButtonText);
layertransposetexteditors.setText(transposeEditorText, juce::dontSendNotification);
}
void setColor()
{
colourlabels.setColour(juce::Label::textColourId, juce::Colours::blue);
layerlabels.setFont(juce::Font(15));
layerlabels.setColour(juce::Label::textColourId, juce::Colours::white);
layerlabels.repaint();
layersolobuttons.setColour(juce::TextButton::textColourOffId, juce::Colours::slategrey);
layersolobuttons.setColour(juce::TextButton::textColourOnId, juce::Colours::white);
layersolobuttons.setColour(juce::TextButton::buttonColourId, juce::Colours::whitesmoke);
layersolobuttons.setColour(juce::TextButton::buttonOnColourId, juce::Colours::gold);
layersolobuttons.repaint();
layermutebuttons.setColour(juce::TextButton::textColourOffId, juce::Colours::red);
layermutebuttons.setColour(juce::TextButton::textColourOnId, juce::Colours::white);
layermutebuttons.setColour(juce::TextButton::buttonColourId, juce::Colours::whitesmoke);
layermutebuttons.setColour(juce::TextButton::buttonOnColourId, juce::Colours::red);
layermutebuttons.repaint();
layertransposetexteditors.setColour(juce::Label::textColourId, juce::Colours::white);
layertransposetexteditors.repaint();
}
private:
juce::Label colourlabels;
juce::Label layerlabels;
juce::TextButton layersolobuttons;
juce::TextButton layermutebuttons;
juce::TextEditor layertransposetexteditors;
};
Editor.cpp:
DivisimateAudioProcessorEditor::DivisimateAudioProcessorEditor (DivisimateAudioProcessor& p)
: AudioProcessorEditor (&p), audioProcessor (p)
{
// Make sure that before the constructor has finished, you've set the
// editor's size to whatever you need it to be.
setSize (400, 300);
LayerComponent layer;
layer.setText(juce::String(1), juce::String("S"), juce::String("M"), juce::String("0"));
layer.setColor();
layer.setBounds(10,10,50,25);
}

