/*
==============================================================================
This is an automatically generated GUI class created by the Projucer!
Be careful when adding custom code to these files, as only the code within
the "//[xyz]" and "//[/xyz]" sections will be retained when the file is loaded
and re-saved.
Created with Projucer version: 5.4.4
------------------------------------------------------------------------------
The Projucer is part of the JUCE library.
Copyright (c) 2017 - ROLI Ltd.
==============================================================================
*/
//[Headers] You can add your own extra header files here...
#include "AudioParameters.h"
//[/Headers]
#include "GuiTVFMod.h"
//[MiscUserDefs] You can add your own user definitions and misc code here...
//[/MiscUserDefs]
//==============================================================================
GUITVFMod::GUITVFMod ( const String& name, const String & text)
: GroupComponent (name, text)
{
//[Constructor_pre] You can add your own custom stuff here..
molossLNF = std::make_unique< MolossLookNFeel>(MolossLookNFeel::RED_LNF);
setLookAndFeel(molossLNF.get());
//[/Constructor_pre]
setName ("GUITVFMod");
labelBenderFreq.reset (new Label ("labelBenderFreq",
TRANS("Bnd>Freq")));
addAndMakeVisible (labelBenderFreq.get());
labelBenderFreq->setFont (Font (15.00f, Font::plain).withTypefaceStyle ("Regular"));
labelBenderFreq->setJustificationType (Justification::centred);
labelBenderFreq->setEditable (false, false, false);
labelBenderFreq->setColour (TextEditor::textColourId, Colours::black);
labelBenderFreq->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
benderFreq.reset (new Slider ("benderFreq"));
addAndMakeVisible (benderFreq.get());
benderFreq->setTooltip (TRANS("Influence of bender on filter frequency"));
benderFreq->setRange (0, 100, 1);
benderFreq->setSliderStyle (Slider::RotaryVerticalDrag);
benderFreq->setTextBoxStyle (Slider::TextBoxBelow, false, 40, 20);
labelAftrFreq.reset (new Label ("labelAftrFreq",
TRANS("Aftr>Freq")));
addAndMakeVisible (labelAftrFreq.get());
labelAftrFreq->setFont (Font (15.00f, Font::plain).withTypefaceStyle ("Regular"));
labelAftrFreq->setJustificationType (Justification::centred);
labelAftrFreq->setEditable (false, false, false);
labelAftrFreq->setColour (TextEditor::textColourId, Colours::black);
labelAftrFreq->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
aftrFreq.reset (new Slider ("aftrFreq"));
addAndMakeVisible (aftrFreq.get());
aftrFreq->setTooltip (TRANS("Influence of atertouch on filter frequency"));
aftrFreq->setRange (-100, 100, 1);
aftrFreq->setSliderStyle (Slider::RotaryVerticalDrag);
aftrFreq->setTextBoxStyle (Slider::TextBoxBelow, false, 40, 20);
controllerTVFCombo.reset (new ComboBox ("controllerTVFCombo"));
addAndMakeVisible (controllerTVFCombo.get());
controllerTVFCombo->setTooltip (TRANS("Additionnal controller to drive TVF"));
controllerTVFCombo->setEditableText (false);
controllerTVFCombo->setJustificationType (Justification::centredLeft);
controllerTVFCombo->setTextWhenNothingSelected (String());
controllerTVFCombo->setTextWhenNoChoicesAvailable (TRANS("(no choices)"));
controllerTVFCombo->addListener (this);
labelCtrlFreq.reset (new Label ("labelCtrlFreq",
TRANS("Ctrl>Freq")));
addAndMakeVisible (labelCtrlFreq.get());
labelCtrlFreq->setFont (Font (15.00f, Font::plain).withTypefaceStyle ("Regular"));
labelCtrlFreq->setJustificationType (Justification::centred);
labelCtrlFreq->setEditable (false, false, false);
labelCtrlFreq->setColour (TextEditor::textColourId, Colours::black);
labelCtrlFreq->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
ctrlFreq.reset (new Slider ("ctrlFreq"));
addAndMakeVisible (ctrlFreq.get());
ctrlFreq->setTooltip (TRANS("Influence of controller on filter frequency"));
ctrlFreq->setRange (0, 100, 1);
ctrlFreq->setSliderStyle (Slider::RotaryVerticalDrag);
ctrlFreq->setTextBoxStyle (Slider::TextBoxBelow, false, 40, 20);
labelBenderReso.reset (new Label ("labelBenderReso",
TRANS("Bnd>Reso")));
addAndMakeVisible (labelBenderReso.get());
labelBenderReso->setFont (Font (15.00f, Font::plain).withTypefaceStyle ("Regular"));
labelBenderReso->setJustificationType (Justification::centred);
labelBenderReso->setEditable (false, false, false);
labelBenderReso->setColour (TextEditor::textColourId, Colours::black);
labelBenderReso->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
benderReso.reset (new Slider ("benderReso"));
addAndMakeVisible (benderReso.get());
benderReso->setTooltip (TRANS("Influence of bender on filter resonance"));
benderReso->setRange (0, 100, 1);
benderReso->setSliderStyle (Slider::RotaryVerticalDrag);
benderReso->setTextBoxStyle (Slider::TextBoxBelow, false, 40, 20);
labelAftrReso.reset (new Label ("labelAftrReso",
TRANS("Aftr>Reso")));
addAndMakeVisible (labelAftrReso.get());
labelAftrReso->setFont (Font (15.00f, Font::plain).withTypefaceStyle ("Regular"));
labelAftrReso->setJustificationType (Justification::centred);
labelAftrReso->setEditable (false, false, false);
labelAftrReso->setColour (TextEditor::textColourId, Colours::black);
labelAftrReso->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
aftrReso.reset (new Slider ("aftrReso"));
addAndMakeVisible (aftrReso.get());
aftrReso->setTooltip (TRANS("Influence of atertouch on filter resonance"));
aftrReso->setRange (-100, 100, 1);
aftrReso->setSliderStyle (Slider::RotaryVerticalDrag);
aftrReso->setTextBoxStyle (Slider::TextBoxBelow, false, 40, 20);
labelCtrlReso.reset (new Label ("labelCtrlReso",
TRANS("Ctrl>Reso")));
addAndMakeVisible (labelCtrlReso.get());
labelCtrlReso->setFont (Font (15.00f, Font::plain).withTypefaceStyle ("Regular"));
labelCtrlReso->setJustificationType (Justification::centred);
labelCtrlReso->setEditable (false, false, false);
labelCtrlReso->setColour (TextEditor::textColourId, Colours::black);
labelCtrlReso->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
ctrlReso.reset (new Slider ("ctrlReso"));
addAndMakeVisible (ctrlReso.get());
ctrlReso->setTooltip (TRANS("Influence of controller on filter resonance"));
ctrlReso->setRange (0, 100, 1);
ctrlReso->setSliderStyle (Slider::RotaryVerticalDrag);
ctrlReso->setTextBoxStyle (Slider::TextBoxBelow, false, 40, 20);
groupLink.reset (new ComboBox ("groupLink"));
addAndMakeVisible (groupLink.get());
groupLink->setTooltip (TRANS("Group to which this voice TVF MOD is linked. All voices of a group have the same TVF Mod parameters."));
groupLink->setEditableText (false);
groupLink->setJustificationType (Justification::centred);
groupLink->setTextWhenNothingSelected (String());
groupLink->setTextWhenNoChoicesAvailable (TRANS("(no choices)"));
groupLink->addListener (this);
//[UserPreSize]
//[/UserPreSize]
setSize (600, 400);
//[Constructor] You can add your own custom stuff here..
//[/Constructor]
}
GUITVFMod::~GUITVFMod()
{
//[Destructor_pre]. You can add your own custom destruction code here..
mAttachment = nullptr;
setLookAndFeel(nullptr);
//[/Destructor_pre]
labelBenderFreq = nullptr;
benderFreq = nullptr;
labelAftrFreq = nullptr;
aftrFreq = nullptr;
controllerTVFCombo = nullptr;
labelCtrlFreq = nullptr;
ctrlFreq = nullptr;
labelBenderReso = nullptr;
benderReso = nullptr;
labelAftrReso = nullptr;
aftrReso = nullptr;
labelCtrlReso = nullptr;
ctrlReso = nullptr;
groupLink = nullptr;
//[Destructor]. You can add your own custom destruction code here..
//[/Destructor]
}
//==============================================================================
void GUITVFMod::paint (Graphics& g)
{
//[UserPrePaint] Add your own custom painting code here..
GroupComponent::paint(g);
//[/UserPrePaint]
//[UserPaint] Add your own custom painting code here..
//[/UserPaint]
}
void GUITVFMod::resized()
{
//[UserPreResize] Add your own custom resize code here..
//[/UserPreResize]
labelBenderFreq->setBounds (52 - (73 / 2), 60 - (24 / 2), 73, 24);
benderFreq->setBounds (52 - (56 / 2), 100 - (72 / 2), 56, 72);
labelAftrFreq->setBounds (120 - (73 / 2), 48, 73, 24);
aftrFreq->setBounds (120 - (56 / 2), (100 - (72 / 2)) + 72 / 2 - (72 / 2), 56, 72);
controllerTVFCombo->setBounds (120 - (176 / 2), 30 - (24 / 2), 176, 24);
labelCtrlFreq->setBounds (188 - (73 / 2), 48, 73, 24);
ctrlFreq->setBounds (188 - (56 / 2), (100 - (72 / 2)) + 72 / 2 - (72 / 2), 56, 72);
labelBenderReso->setBounds (52 - (73 / 2), 144 - (24 / 2), 73, 24);
benderReso->setBounds (52 - (56 / 2), 184 - (72 / 2), 56, 72);
labelAftrReso->setBounds (120 - (73 / 2), (144 - (24 / 2)) + 24 / 2 - (24 / 2), 73, 24);
aftrReso->setBounds (116 - (56 / 2), (184 - (72 / 2)) + 72 / 2 - (72 / 2), 56, 72);
labelCtrlReso->setBounds (188 - (73 / 2), (144 - (24 / 2)) + 24 / 2 - (24 / 2), 73, 24);
ctrlReso->setBounds (188 - (56 / 2), (184 - (72 / 2)) + 72 / 2 - (72 / 2), 56, 72);
groupLink->setBounds (216 - (29 / 2), 228 - (24 / 2), 29, 24);
//[UserResized] Add your own custom resize handling here..
//[/UserResized]
}
void GUITVFMod::comboBoxChanged (ComboBox* comboBoxThatHasChanged)
{
//[UsercomboBoxChanged_Pre]
//[/UsercomboBoxChanged_Pre]
if (comboBoxThatHasChanged == controllerTVFCombo.get())
{
//[UserComboBoxCode_controllerTVFCombo] -- add your combo box handling code here..
//[/UserComboBoxCode_controllerTVFCombo]
}
else if (comboBoxThatHasChanged == groupLink.get())
{
//[UserComboBoxCode_groupLink] -- add your combo box handling code here..
//[/UserComboBoxCode_groupLink]
}
//[UsercomboBoxChanged_Post]
//[/UsercomboBoxChanged_Post]
}
//[MiscUserCode] You can add your own definitions of your custom methods or any other code here...
void GUITVFMod::setParameters(TVFParameters * tvfParam) {
mTVFParameters = tvfParam;
mAttachment = std::make_unique<GuiAttachment>(mTVFParameters->getProcessor());
updateFromParameters();
}
void GUITVFMod::updateFromParameters() {
mAttachment->attachSlider(mTVFParameters->mPitchWheelCutoffDepth, *benderFreq);
mAttachment->attachSlider(mTVFParameters->mAfterTouchCutoffDepth, *aftrFreq);
mAttachment->attachSlider(mTVFParameters->mControllerCutoffDepth, *ctrlFreq);
mAttachment->attachSlider(mTVFParameters->mPitchWheelResonanceDepth, *benderReso);
mAttachment->attachSlider(mTVFParameters->mAfterTouchResonanceDepth, *aftrReso);
mAttachment->attachSlider(mTVFParameters->mControllerResonanceDepth, *ctrlReso);
mAttachment->attachCombobox(mTVFParameters->mControlNumber, *controllerTVFCombo);
mAttachment->attachCombobox(mTVFParameters->mModLinkGroup, *groupLink);
}
//[/MiscUserCode]
//==============================================================================
#if 0
/* -- Projucer information section --
This is where the Projucer stores the metadata that describe this GUI layout, so
make changes in here at your peril!
BEGIN_JUCER_METADATA
<JUCER_COMPONENT documentType="Component" className="GUITVFMod" componentName="GUITVFMod"
parentClasses="public GroupComponent" constructorParams=" const String& name, const String & text"
variableInitialisers="GroupComponent (name, text) " snapPixels="8"
snapActive="1" snapShown="1" overlayOpacity="0.330" fixedSize="0"
initialWidth="600" initialHeight="400">
<BACKGROUND backgroundColour="323e44"/>
<LABEL name="labelBenderFreq" id="5962b9b394ef3ffe" memberName="labelBenderFreq"
virtualName="" explicitFocusOrder="0" pos="52.5c 60c 73 24" edTextCol="ff000000"
edBkgCol="0" labelText="Bnd>Freq" editableSingleClick="0"
editableDoubleClick="0" focusDiscardsChanges="0" fontname="Default font"
fontsize="15.0" kerning="0.0" bold="0" italic="0" justification="36"/>
<SLIDER name="benderFreq" id="ef267dc30588d4" memberName="benderFreq"
virtualName="" explicitFocusOrder="0" pos="52c 100c 56 72" posRelativeX="b8a5ef2d0601f570"
posRelativeY="b8a5ef2d0601f570" tooltip="Influence of bender on filter frequency"
min="0.0" max="100.0" int="1.0" style="RotaryVerticalDrag" textBoxPos="TextBoxBelow"
textBoxEditable="1" textBoxWidth="40" textBoxHeight="20" skewFactor="1.0"
needsCallback="0"/>
<LABEL name="labelAftrFreq" id="11b27eb3a1efb597" memberName="labelAftrFreq"
virtualName="" explicitFocusOrder="0" pos="120.5c 48 73 24" edTextCol="ff000000"
edBkgCol="0" labelText="Aftr>Freq" editableSingleClick="0"
editableDoubleClick="0" focusDiscardsChanges="0" fontname="Default font"
fontsize="15.0" kerning="0.0" bold="0" italic="0" justification="36"/>
<SLIDER name="aftrFreq" id="7af95f84a2b08150" memberName="aftrFreq" virtualName=""
explicitFocusOrder="0" pos="120c 0Cc 56 72" posRelativeX="b8a5ef2d0601f570"
posRelativeY="ef267dc30588d4" tooltip="Influence of atertouch on filter frequency"
min="-100.0" max="100.0" int="1.0" style="RotaryVerticalDrag"
textBoxPos="TextBoxBelow" textBoxEditable="1" textBoxWidth="40"
textBoxHeight="20" skewFactor="1.0" needsCallback="0"/>
<COMBOBOX name="controllerTVFCombo" id="654ddd4ac2c2be99" memberName="controllerTVFCombo"
virtualName="" explicitFocusOrder="0" pos="120c 30c 176 24" tooltip="Additionnal controller to drive TVF"
editable="0" layout="33" items="" textWhenNonSelected="" textWhenNoItems="(no choices)"/>
<LABEL name="labelCtrlFreq" id="4e6e16c4c07d42fc" memberName="labelCtrlFreq"
virtualName="" explicitFocusOrder="0" pos="188.5c 48 73 24" edTextCol="ff000000"
edBkgCol="0" labelText="Ctrl>Freq" editableSingleClick="0"
editableDoubleClick="0" focusDiscardsChanges="0" fontname="Default font"
fontsize="15.0" kerning="0.0" bold="0" italic="0" justification="36"/>
<SLIDER name="ctrlFreq" id="1b596392560503de" memberName="ctrlFreq" virtualName=""
explicitFocusOrder="0" pos="188c 0Cc 56 72" posRelativeX="b8a5ef2d0601f570"
posRelativeY="ef267dc30588d4" tooltip="Influence of controller on filter frequency"
min="0.0" max="100.0" int="1.0" style="RotaryVerticalDrag" textBoxPos="TextBoxBelow"
textBoxEditable="1" textBoxWidth="40" textBoxHeight="20" skewFactor="1.0"
needsCallback="0"/>
<LABEL name="labelBenderReso" id="7bf8fc178722c530" memberName="labelBenderReso"
virtualName="" explicitFocusOrder="0" pos="52.5c 144c 73 24"
edTextCol="ff000000" edBkgCol="0" labelText="Bnd>Reso" editableSingleClick="0"
editableDoubleClick="0" focusDiscardsChanges="0" fontname="Default font"
fontsize="15.0" kerning="0.0" bold="0" italic="0" justification="36"/>
<SLIDER name="benderReso" id="ea4c9f0e4d9e1135" memberName="benderReso"
virtualName="" explicitFocusOrder="0" pos="52c 184c 56 72" posRelativeX="b8a5ef2d0601f570"
posRelativeY="b8a5ef2d0601f570" tooltip="Influence of bender on filter resonance"
min="0.0" max="100.0" int="1.0" style="RotaryVerticalDrag" textBoxPos="TextBoxBelow"
textBoxEditable="1" textBoxWidth="40" textBoxHeight="20" skewFactor="1.0"
needsCallback="0"/>
<LABEL name="labelAftrReso" id="f4e54585b0bf4b9d" memberName="labelAftrReso"
virtualName="" explicitFocusOrder="0" pos="120.5c 0Cc 73 24"
posRelativeY="7bf8fc178722c530" edTextCol="ff000000" edBkgCol="0"
labelText="Aftr>Reso" editableSingleClick="0" editableDoubleClick="0"
focusDiscardsChanges="0" fontname="Default font" fontsize="15.0"
kerning="0.0" bold="0" italic="0" justification="36"/>
<SLIDER name="aftrReso" id="bddf6afc41091bee" memberName="aftrReso" virtualName=""
explicitFocusOrder="0" pos="116c 0Cc 56 72" posRelativeX="b8a5ef2d0601f570"
posRelativeY="ea4c9f0e4d9e1135" tooltip="Influence of atertouch on filter resonance"
min="-100.0" max="100.0" int="1.0" style="RotaryVerticalDrag"
textBoxPos="TextBoxBelow" textBoxEditable="1" textBoxWidth="40"
textBoxHeight="20" skewFactor="1.0" needsCallback="0"/>
<LABEL name="labelCtrlReso" id="19ce5d5ebc456bb3" memberName="labelCtrlReso"
virtualName="" explicitFocusOrder="0" pos="188.5c 0Cc 73 24"
posRelativeY="7bf8fc178722c530" edTextCol="ff000000" edBkgCol="0"
labelText="Ctrl>Reso" editableSingleClick="0" editableDoubleClick="0"
focusDiscardsChanges="0" fontname="Default font" fontsize="15.0"
kerning="0.0" bold="0" italic="0" justification="36"/>
<SLIDER name="ctrlReso" id="fc497eb7d6a5e815" memberName="ctrlReso" virtualName=""
explicitFocusOrder="0" pos="188c 0Cc 56 72" posRelativeX="b8a5ef2d0601f570"
posRelativeY="ea4c9f0e4d9e1135" tooltip="Influence of controller on filter resonance"
min="0.0" max="100.0" int="1.0" style="RotaryVerticalDrag" textBoxPos="TextBoxBelow"
textBoxEditable="1" textBoxWidth="40" textBoxHeight="20" skewFactor="1.0"
needsCallback="0"/>
<COMBOBOX name="groupLink" id="2f4c27038f31a098" memberName="groupLink"
virtualName="" explicitFocusOrder="0" pos="216.5c 228c 29 24"
posRelativeY="2bec03bff2a1a6d8" tooltip="Group to which this voice TVF MOD is linked. All voices of a group have the same TVF Mod parameters."
editable="0" layout="36" items="" textWhenNonSelected="" textWhenNoItems="(no choices)"/>
</JUCER_COMPONENT>
END_JUCER_METADATA
*/
#endif
//[EndFile] You can add extra defines here...
//[/EndFile]