diff --git a/Source/PluginGui.cpp b/Source/PluginGui.cpp index 3460a6b..e822474 100644 --- a/Source/PluginGui.cpp +++ b/Source/PluginGui.cpp @@ -79,8 +79,8 @@ void PluginGui::updateFromParameters() sSlider2->setValue(processor->getIntParameter("Carrier Sustain Level"), NotificationType::dontSendNotification); rSlider2->setValue(processor->getIntParameter("Carrier Release"), NotificationType::dontSendNotification); - keyscaleSlider->setValue(processor->getIntParameter("Modulator Keyscale Level"), NotificationType::dontSendNotification); - keyscaleSlider2->setValue(processor->getIntParameter("Carrier Keyscale Level"), NotificationType::dontSendNotification); + keyscaleAttenuationComboBox->setSelectedItemIndex(processor->getEnumParameter("Modulator Keyscale Level"), true); + keyscaleAttenuationComboBox2->setSelectedItemIndex(processor->getEnumParameter("Carrier Keyscale Level"), true); if (processor->getEnumParameter("Modulator Tremolo")) tremoloButton->setToggleState(true, false); @@ -100,6 +100,8 @@ void PluginGui::updateFromParameters() velocityComboBox->setSelectedItemIndex(processor->getEnumParameter("Modulator Velocity Sensitivity"), true); velocityComboBox2->setSelectedItemIndex(processor->getEnumParameter("Carrier Velocity Sensitivity"), true); + algorithmComboBox->setSelectedItemIndex(processor->getEnumParameter("Algorithm"), true); + } //[/MiscUserDefs] @@ -130,6 +132,7 @@ PluginGui::PluginGui (JuceOplvstiAudioProcessor* ownerFilter) frequencyLabel->setColour (TextEditor::backgroundColourId, Colour (0x00000000)); addAndMakeVisible (aSlider = new Slider ("a slider")); + aSlider->setTooltip ("Envelope attack rate"); aSlider->setRange (0, 15, 1); aSlider->setSliderStyle (Slider::LinearVertical); aSlider->setTextBoxStyle (Slider::TextBoxBelow, false, 40, 20); @@ -150,6 +153,7 @@ PluginGui::PluginGui (JuceOplvstiAudioProcessor* ownerFilter) aLabel->setColour (TextEditor::backgroundColourId, Colour (0x00000000)); addAndMakeVisible (dSlider = new Slider ("d slider")); + dSlider->setTooltip ("Envelope decay rate"); dSlider->setRange (0, 15, 1); dSlider->setSliderStyle (Slider::LinearVertical); dSlider->setTextBoxStyle (Slider::TextBoxBelow, false, 40, 20); @@ -170,6 +174,7 @@ PluginGui::PluginGui (JuceOplvstiAudioProcessor* ownerFilter) dLabel->setColour (TextEditor::backgroundColourId, Colour (0x00000000)); addAndMakeVisible (sSlider = new Slider ("s slider")); + sSlider->setTooltip ("Envelope sustain level"); sSlider->setRange (0, 15, 1); sSlider->setSliderStyle (Slider::LinearVertical); sSlider->setTextBoxStyle (Slider::TextBoxBelow, false, 40, 20); @@ -190,6 +195,7 @@ PluginGui::PluginGui (JuceOplvstiAudioProcessor* ownerFilter) dLabel2->setColour (TextEditor::backgroundColourId, Colour (0x00000000)); addAndMakeVisible (rSlider = new Slider ("r slider")); + rSlider->setTooltip ("Envelope release rate"); rSlider->setRange (0, 15, 1); rSlider->setSliderStyle (Slider::LinearVertical); rSlider->setTextBoxStyle (Slider::TextBoxBelow, false, 40, 20); @@ -308,17 +314,6 @@ PluginGui::PluginGui (JuceOplvstiAudioProcessor* ownerFilter) keyscaleEnvButton->addListener (this); keyscaleEnvButton->setColour (ToggleButton::textColourId, Colour (0xff007f00)); - addAndMakeVisible (keyscaleSlider = new Slider ("keyscale slider")); - keyscaleSlider->setRange (-6, 0, 1.5); - keyscaleSlider->setSliderStyle (Slider::LinearHorizontal); - keyscaleSlider->setTextBoxStyle (Slider::TextBoxLeft, false, 44, 20); - keyscaleSlider->setColour (Slider::thumbColourId, Colour (0xff00af00)); - keyscaleSlider->setColour (Slider::trackColourId, Colour (0x7f007f00)); - keyscaleSlider->setColour (Slider::textBoxTextColourId, Colour (0xff007f00)); - keyscaleSlider->setColour (Slider::textBoxBackgroundColourId, Colours::black); - keyscaleSlider->setColour (Slider::textBoxHighlightColourId, Colour (0xff00af00)); - keyscaleSlider->addListener (this); - addAndMakeVisible (frequencyLabel2 = new Label ("frequency label", "Keyscale Attenuation")); frequencyLabel2->setFont (Font (15.00f, Font::plain)); @@ -329,7 +324,7 @@ PluginGui::PluginGui (JuceOplvstiAudioProcessor* ownerFilter) frequencyLabel2->setColour (TextEditor::backgroundColourId, Colour (0x00000000)); addAndMakeVisible (dbLabel2 = new Label ("db label", - "dB/\n8ve\n")); + "dB/8ve\n")); dbLabel2->setFont (Font (15.00f, Font::plain)); dbLabel2->setJustificationType (Justification::centred); dbLabel2->setEditable (false, false, false); @@ -539,17 +534,6 @@ PluginGui::PluginGui (JuceOplvstiAudioProcessor* ownerFilter) keyscaleEnvButton2->addListener (this); keyscaleEnvButton2->setColour (ToggleButton::textColourId, Colour (0xff007f00)); - addAndMakeVisible (keyscaleSlider2 = new Slider ("keyscale slider")); - keyscaleSlider2->setRange (-6, 0, 1.5); - keyscaleSlider2->setSliderStyle (Slider::LinearHorizontal); - keyscaleSlider2->setTextBoxStyle (Slider::TextBoxLeft, false, 44, 20); - keyscaleSlider2->setColour (Slider::thumbColourId, Colour (0xff00af00)); - keyscaleSlider2->setColour (Slider::trackColourId, Colour (0x7f007f00)); - keyscaleSlider2->setColour (Slider::textBoxTextColourId, Colour (0xff007f00)); - keyscaleSlider2->setColour (Slider::textBoxBackgroundColourId, Colours::black); - keyscaleSlider2->setColour (Slider::textBoxHighlightColourId, Colour (0xff00af00)); - keyscaleSlider2->addListener (this); - addAndMakeVisible (frequencyLabel4 = new Label ("frequency label", "Keyscale Attenuation")); frequencyLabel4->setFont (Font (15.00f, Font::plain)); @@ -559,16 +543,6 @@ PluginGui::PluginGui (JuceOplvstiAudioProcessor* ownerFilter) frequencyLabel4->setColour (TextEditor::textColourId, Colours::black); frequencyLabel4->setColour (TextEditor::backgroundColourId, Colour (0x00000000)); - addAndMakeVisible (dbLabel4 = new Label ("db label", - "dB/\n8ve\n")); - dbLabel4->setFont (Font (15.00f, Font::plain)); - dbLabel4->setJustificationType (Justification::centred); - dbLabel4->setEditable (false, false, false); - dbLabel4->setColour (Label::textColourId, Colour (0xff007f00)); - dbLabel4->setColour (Label::outlineColourId, Colour (0x00000000)); - dbLabel4->setColour (TextEditor::textColourId, Colours::black); - dbLabel4->setColour (TextEditor::backgroundColourId, Colour (0x00000000)); - addAndMakeVisible (groupComponent3 = new GroupComponent ("new group", "Common")); groupComponent3->setTextLabelPosition (Justification::centredLeft); @@ -773,6 +747,56 @@ PluginGui::PluginGui (JuceOplvstiAudioProcessor* ownerFilter) ImageCache::getFromMemory (logarithmic_saw_png, logarithmic_saw_pngSize), 0.500f, Colour (0x00000000), Image(), 0.500f, Colour (0x00000000), Image(), 1.000f, Colour (0x00000000)); + addAndMakeVisible (algorithmComboBox = new ComboBox ("algorithm combo box")); + algorithmComboBox->setEditableText (false); + algorithmComboBox->setJustificationType (Justification::centredLeft); + algorithmComboBox->setTextWhenNothingSelected (String::empty); + algorithmComboBox->setTextWhenNoChoicesAvailable ("(no choices)"); + algorithmComboBox->addItem ("FM", 1); + algorithmComboBox->addItem ("Additive", 2); + algorithmComboBox->addListener (this); + + addAndMakeVisible (frequencyLabel8 = new Label ("frequency label", + "Algorithm")); + frequencyLabel8->setFont (Font (15.00f, Font::plain)); + frequencyLabel8->setJustificationType (Justification::centredLeft); + frequencyLabel8->setEditable (false, false, false); + frequencyLabel8->setColour (Label::textColourId, Colour (0xff007f00)); + frequencyLabel8->setColour (TextEditor::textColourId, Colours::black); + frequencyLabel8->setColour (TextEditor::backgroundColourId, Colour (0x00000000)); + + addAndMakeVisible (dbLabel4 = new Label ("db label", + "dB/8ve\n")); + dbLabel4->setFont (Font (15.00f, Font::plain)); + dbLabel4->setJustificationType (Justification::centred); + dbLabel4->setEditable (false, false, false); + dbLabel4->setColour (Label::textColourId, Colour (0xff007f00)); + dbLabel4->setColour (Label::outlineColourId, Colour (0x00000000)); + dbLabel4->setColour (TextEditor::textColourId, Colours::black); + dbLabel4->setColour (TextEditor::backgroundColourId, Colour (0x00000000)); + + addAndMakeVisible (keyscaleAttenuationComboBox2 = new ComboBox ("keyscale combo box")); + keyscaleAttenuationComboBox2->setEditableText (false); + keyscaleAttenuationComboBox2->setJustificationType (Justification::centredLeft); + keyscaleAttenuationComboBox2->setTextWhenNothingSelected (String::empty); + keyscaleAttenuationComboBox2->setTextWhenNoChoicesAvailable ("(no choices)"); + keyscaleAttenuationComboBox2->addItem ("-0.0", 1); + keyscaleAttenuationComboBox2->addItem ("-3.0", 2); + keyscaleAttenuationComboBox2->addItem ("-1.5", 3); + keyscaleAttenuationComboBox2->addItem ("-6.0", 4); + keyscaleAttenuationComboBox2->addListener (this); + + addAndMakeVisible (keyscaleAttenuationComboBox = new ComboBox ("keyscale combo box")); + keyscaleAttenuationComboBox->setEditableText (false); + keyscaleAttenuationComboBox->setJustificationType (Justification::centredLeft); + keyscaleAttenuationComboBox->setTextWhenNothingSelected (String::empty); + keyscaleAttenuationComboBox->setTextWhenNoChoicesAvailable ("(no choices)"); + keyscaleAttenuationComboBox->addItem ("-0.0", 1); + keyscaleAttenuationComboBox->addItem ("-3.0", 2); + keyscaleAttenuationComboBox->addItem ("-1.5", 3); + keyscaleAttenuationComboBox->addItem ("-6.0", 4); + keyscaleAttenuationComboBox->addListener (this); + //[UserPreSize] frequencyComboBox->setColour (ComboBox::textColourId, Colour (COLOUR_MID)); @@ -825,6 +849,23 @@ PluginGui::PluginGui (JuceOplvstiAudioProcessor* ownerFilter) velocityComboBox2->setColour (ComboBox::buttonColourId, Colours::black); velocityComboBox2->setColour (ComboBox::backgroundColourId, Colours::black); + algorithmComboBox->setColour (ComboBox::textColourId, Colour (COLOUR_MID)); + algorithmComboBox->setColour (ComboBox::outlineColourId, Colour (COLOUR_MID)); + algorithmComboBox->setColour (ComboBox::arrowColourId, Colour (COLOUR_MID)); + algorithmComboBox->setColour (ComboBox::buttonColourId, Colours::black); + algorithmComboBox->setColour (ComboBox::backgroundColourId, Colours::black); + + keyscaleAttenuationComboBox->setColour (ComboBox::textColourId, Colour (COLOUR_MID)); + keyscaleAttenuationComboBox->setColour (ComboBox::outlineColourId, Colour (COLOUR_MID)); + keyscaleAttenuationComboBox->setColour (ComboBox::arrowColourId, Colour (COLOUR_MID)); + keyscaleAttenuationComboBox->setColour (ComboBox::buttonColourId, Colours::black); + keyscaleAttenuationComboBox->setColour (ComboBox::backgroundColourId, Colours::black); + keyscaleAttenuationComboBox2->setColour (ComboBox::textColourId, Colour (COLOUR_MID)); + keyscaleAttenuationComboBox2->setColour (ComboBox::outlineColourId, Colour (COLOUR_MID)); + keyscaleAttenuationComboBox2->setColour (ComboBox::arrowColourId, Colour (COLOUR_MID)); + keyscaleAttenuationComboBox2->setColour (ComboBox::buttonColourId, Colours::black); + keyscaleAttenuationComboBox2->setColour (ComboBox::backgroundColourId, Colours::black); + sineImageButton->setClickingTogglesState(true); sineImageButton->setRepaintsOnMouseActivity(false); abssineImageButton->setClickingTogglesState(true); @@ -905,7 +946,6 @@ PluginGui::~PluginGui() vibratoButton = nullptr; sustainButton = nullptr; keyscaleEnvButton = nullptr; - keyscaleSlider = nullptr; frequencyLabel2 = nullptr; dbLabel2 = nullptr; groupComponent2 = nullptr; @@ -931,9 +971,7 @@ PluginGui::~PluginGui() vibratoButton2 = nullptr; sustainButton2 = nullptr; keyscaleEnvButton2 = nullptr; - keyscaleSlider2 = nullptr; frequencyLabel4 = nullptr; - dbLabel4 = nullptr; groupComponent3 = nullptr; tremoloSlider = nullptr; frequencyLabel5 = nullptr; @@ -955,6 +993,11 @@ PluginGui::~PluginGui() camelsineImageButton2 = nullptr; squareImageButton2 = nullptr; logsawImageButton2 = nullptr; + algorithmComboBox = nullptr; + frequencyLabel8 = nullptr; + dbLabel4 = nullptr; + keyscaleAttenuationComboBox2 = nullptr; + keyscaleAttenuationComboBox = nullptr; //[Destructor]. You can add your own custom destruction code here.. @@ -998,9 +1041,8 @@ void PluginGui::resized() vibratoButton->setBounds (40, 120, 96, 24); sustainButton->setBounds (40, 304, 96, 24); keyscaleEnvButton->setBounds (128, 304, 184, 24); - keyscaleSlider->setBounds (256, 88, 112, 24); frequencyLabel2->setBounds (248, 120, 152, 24); - dbLabel2->setBounds (368, 80, 40, 40); + dbLabel2->setBounds (336, 96, 72, 16); groupComponent2->setBounds (16, 352, 408, 336); frequencyComboBox2->setBounds (128, 424, 72, 24); frequencyLabel3->setBounds (32, 424, 80, 24); @@ -1024,9 +1066,7 @@ void PluginGui::resized() vibratoButton2->setBounds (40, 464, 96, 24); sustainButton2->setBounds (40, 648, 96, 24); keyscaleEnvButton2->setBounds (128, 648, 184, 24); - keyscaleSlider2->setBounds (256, 432, 112, 24); frequencyLabel4->setBounds (248, 464, 152, 24); - dbLabel4->setBounds (368, 424, 40, 40); groupComponent3->setBounds (16, 696, 408, 96); tremoloSlider->setBounds (48, 728, 112, 24); frequencyLabel5->setBounds (48, 752, 152, 24); @@ -1048,6 +1088,11 @@ void PluginGui::resized() camelsineImageButton2->setBounds (250, 385, 34, 30); squareImageButton2->setBounds (330, 385, 34, 30); logsawImageButton2->setBounds (370, 385, 34, 30); + algorithmComboBox->setBounds (128, 504, 112, 24); + frequencyLabel8->setBounds (32, 504, 80, 24); + dbLabel4->setBounds (336, 440, 72, 16); + keyscaleAttenuationComboBox2->setBounds (264, 432, 72, 24); + keyscaleAttenuationComboBox->setBounds (264, 88, 72, 24); //[UserResized] Add your own custom resize handling here.. //[/UserResized] } @@ -1055,6 +1100,7 @@ void PluginGui::resized() void PluginGui::comboBoxChanged (ComboBox* comboBoxThatHasChanged) { //[UsercomboBoxChanged_Pre] + //[/UsercomboBoxChanged_Pre] if (comboBoxThatHasChanged == frequencyComboBox) @@ -1087,6 +1133,27 @@ void PluginGui::comboBoxChanged (ComboBox* comboBoxThatHasChanged) processor->setEnumParameter("Carrier Velocity Sensitivity", id); //[/UserComboBoxCode_velocityComboBox2] } + else if (comboBoxThatHasChanged == algorithmComboBox) + { + //[UserComboBoxCode_algorithmComboBox] -- add your combo box handling code here.. + int id = comboBoxThatHasChanged->getSelectedId() - 1; + processor->setEnumParameter("Algorithm", id); + //[/UserComboBoxCode_algorithmComboBox] + } + else if (comboBoxThatHasChanged == keyscaleAttenuationComboBox2) + { + //[UserComboBoxCode_keyscaleAttenuationComboBox2] -- add your combo box handling code here.. + int id = comboBoxThatHasChanged->getSelectedId() - 1; + processor->setEnumParameter("Carrier Keyscale Level", id); + //[/UserComboBoxCode_keyscaleAttenuationComboBox2] + } + else if (comboBoxThatHasChanged == keyscaleAttenuationComboBox) + { + //[UserComboBoxCode_keyscaleAttenuationComboBox] -- add your combo box handling code here.. + int id = comboBoxThatHasChanged->getSelectedId() - 1; + processor->setEnumParameter("Modulator Keyscale Level", id); + //[/UserComboBoxCode_keyscaleAttenuationComboBox] + } //[UsercomboBoxChanged_Post] //[/UsercomboBoxChanged_Post] @@ -1127,12 +1194,6 @@ void PluginGui::sliderValueChanged (Slider* sliderThatWasMoved) processor->setEnumParameter("Modulator Attenuation", -(int)(sliderThatWasMoved->getValue()/0.75)); //[/UserSliderCode_attenuationSlider] } - else if (sliderThatWasMoved == keyscaleSlider) - { - //[UserSliderCode_keyscaleSlider] -- add your slider handling code here.. - processor->setEnumParameter("Modulator Keyscale Level", -(int)(sliderThatWasMoved->getValue()/1.5)); - //[/UserSliderCode_keyscaleSlider] - } else if (sliderThatWasMoved == aSlider2) { //[UserSliderCode_aSlider2] -- add your slider handling code here.. @@ -1163,12 +1224,6 @@ void PluginGui::sliderValueChanged (Slider* sliderThatWasMoved) processor->setEnumParameter("Carrier Attenuation", -(int)(sliderThatWasMoved->getValue()/0.75)); //[/UserSliderCode_attenuationSlider2] } - else if (sliderThatWasMoved == keyscaleSlider2) - { - //[UserSliderCode_keyscaleSlider2] -- add your slider handling code here.. - processor->setEnumParameter("Carrier Keyscale Level", -(int)(sliderThatWasMoved->getValue()/1.5)); - //[/UserSliderCode_keyscaleSlider2] - } else if (sliderThatWasMoved == tremoloSlider) { //[UserSliderCode_tremoloSlider] -- add your slider handling code here.. @@ -1349,6 +1404,39 @@ void PluginGui::buttonClicked (Button* buttonThatWasClicked) //[MiscUserCode] You can add your own definitions of your custom methods or any other code here... + //============================================================================== + // These methods implement the FileDragAndDropTarget interface, and allow our component + // to accept drag-and-drop of files.. + + bool PluginGui::isInterestedInFileDrag (const StringArray& files) + { + // TODO: check extensions? + return true; + } + + void PluginGui::fileDragEnter (const StringArray& files, int x, int y) + { + //somethingIsBeingDraggedOver = true; + //repaint(); + } + + void PluginGui::fileDragMove (const StringArray& files, int x, int y) + { + } + + void PluginGui::fileDragExit (const StringArray& files) + { + //somethingIsBeingDraggedOver = false; + //repaint(); + } + + void PluginGui::filesDropped (const StringArray& files, int x, int y) + { + //message = "files dropped: " + files.joinIntoString ("\n"); + + //somethingIsBeingDraggedOver = false; + //repaint(); + } //[/MiscUserCode] @@ -1362,10 +1450,10 @@ void PluginGui::buttonClicked (Button* buttonThatWasClicked) BEGIN_JUCER_METADATA + parentClasses="public AudioProcessorEditor, public FileDragAndDropTarget, public DragAndDropContainer" + constructorParams="JuceOplvstiAudioProcessor* ownerFilter" variableInitialisers=" AudioProcessorEditor (ownerFilter)" + snapPixels="8" snapActive="1" snapShown="1" overlayOpacity="0.33" + fixedSize="0" initialWidth="440" initialHeight="810"> + explicitFocusOrder="0" pos="40 208 48 72" tooltip="Envelope attack rate" + thumbcol="ff00af00" trackcol="7f007f00" textboxtext="ff007f00" + textboxbkgd="ff000000" textboxhighlight="ff00af00" min="0" max="15" + int="1" style="LinearVertical" textBoxPos="TextBoxBelow" textBoxEditable="1" + textBoxWidth="40" textBoxHeight="20" skewFactor="1"/> END_JUCER_METADATA diff --git a/Source/PluginGui.h b/Source/PluginGui.h index 48bc880..6d7cc25 100644 --- a/Source/PluginGui.h +++ b/Source/PluginGui.h @@ -34,6 +34,8 @@ //[/Comments] */ class PluginGui : public AudioProcessorEditor, + public FileDragAndDropTarget, + public DragAndDropContainer, public ComboBoxListener, public SliderListener, public ButtonListener @@ -46,6 +48,11 @@ public: //============================================================================== //[UserMethods] -- You can add your own custom methods in this section. void updateFromParameters(); + bool isInterestedInFileDrag (const StringArray& files); + void fileDragEnter (const StringArray& files, int x, int y); + void fileDragMove (const StringArray& files, int x, int y); + void fileDragExit (const StringArray& files); + void filesDropped (const StringArray& files, int x, int y); //[/UserMethods] void paint (Graphics& g); @@ -103,7 +110,6 @@ private: ScopedPointer vibratoButton; ScopedPointer sustainButton; ScopedPointer keyscaleEnvButton; - ScopedPointer keyscaleSlider; ScopedPointer