/* ============================================================================== This file is part of the JUCE library. Copyright (c) 2017 - ROLI Ltd. JUCE is an open source library subject to commercial or open-source licensing. By using JUCE, you agree to the terms of both the JUCE 5 End-User License Agreement and JUCE 5 Privacy Policy (both updated and effective as of the 27th April 2017). End User License Agreement: www.juce.com/juce-5-licence Privacy Policy: www.juce.com/juce-5-privacy-policy Or: You may also use this code under the terms of the GPL v3 (see www.gnu.org/licenses). JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE DISCLAIMED. ============================================================================== */ #include "PluginProcessor.h" #include "PluginEditor.h" //============================================================================== DspModulePluginDemoAudioProcessorEditor::DspModulePluginDemoAudioProcessorEditor (DspModulePluginDemoAudioProcessor& p) : AudioProcessorEditor (&p), processor (p), inputVolumeLabel ({ }, processor.inputVolumeParam->name), outputVolumeLabel ({ }, processor.outputVolumeParam->name), lowPassFilterFreqLabel ({ }, processor.lowPassFilterFreqParam->name), highPassFilterFreqLabel ({ }, processor.highPassFilterFreqParam->name), stereoLabel({}, processor.stereoParam->name), slopeLabel ({ }, processor.slopeParam->name), waveshaperLabel({ }, processor.waveshaperParam->name), cabinetTypeLabel({ }, processor.cabinetTypeParam->name) { //============================================================================== addAndMakeVisible (inputVolumeSlider = new ParameterSlider (*processor.inputVolumeParam)); addAndMakeVisible (outputVolumeSlider = new ParameterSlider (*processor.outputVolumeParam)); addAndMakeVisible (lowPassFilterFreqSlider = new ParameterSlider (*processor.lowPassFilterFreqParam)); addAndMakeVisible (highPassFilterFreqSlider = new ParameterSlider (*processor.highPassFilterFreqParam)); addAndMakeVisible (inputVolumeLabel); inputVolumeLabel.setJustificationType (Justification::centredLeft); inputVolumeLabel.attachToComponent (inputVolumeSlider, true); addAndMakeVisible (outputVolumeLabel); outputVolumeLabel.setJustificationType (Justification::centredLeft); outputVolumeLabel.attachToComponent (outputVolumeSlider, true); addAndMakeVisible (lowPassFilterFreqLabel); lowPassFilterFreqLabel.setJustificationType (Justification::centredLeft); lowPassFilterFreqLabel.attachToComponent (lowPassFilterFreqSlider, true); addAndMakeVisible (highPassFilterFreqLabel); highPassFilterFreqLabel.setJustificationType (Justification::centredLeft); highPassFilterFreqLabel.attachToComponent (highPassFilterFreqSlider, true); //============================================================================== addAndMakeVisible (stereoBox); auto i = 1; for (auto choice : processor.stereoParam->choices) stereoBox.addItem (choice, i++); stereoBox.addListener (this); stereoBox.setSelectedId (processor.stereoParam->getIndex() + 1); addAndMakeVisible (stereoLabel); stereoLabel.setJustificationType (Justification::centredLeft); stereoLabel.attachToComponent (&stereoBox, true); //============================================================================== addAndMakeVisible(slopeBox); i = 1; for (auto choice : processor.slopeParam->choices) slopeBox.addItem(choice, i++); slopeBox.addListener(this); slopeBox.setSelectedId(processor.slopeParam->getIndex() + 1); addAndMakeVisible(slopeLabel); slopeLabel.setJustificationType(Justification::centredLeft); slopeLabel.attachToComponent(&slopeBox, true); //============================================================================== addAndMakeVisible (waveshaperBox); i = 1; for (auto choice : processor.waveshaperParam->choices) waveshaperBox.addItem (choice, i++); waveshaperBox.addListener (this); waveshaperBox.setSelectedId (processor.waveshaperParam->getIndex() + 1); addAndMakeVisible (waveshaperLabel); waveshaperLabel.setJustificationType (Justification::centredLeft); waveshaperLabel.attachToComponent (&waveshaperBox, true); //============================================================================== addAndMakeVisible (cabinetTypeBox); i = 1; for (auto choice : processor.cabinetTypeParam->choices) cabinetTypeBox.addItem (choice, i++); cabinetTypeBox.addListener (this); cabinetTypeBox.setSelectedId (processor.cabinetTypeParam->getIndex() + 1); addAndMakeVisible (cabinetTypeLabel); cabinetTypeLabel.setJustificationType (Justification::centredLeft); cabinetTypeLabel.attachToComponent (&cabinetTypeBox, true); //============================================================================== addAndMakeVisible (cabinetSimButton); cabinetSimButton.addListener (this); cabinetSimButton.setButtonText (processor.cabinetSimParam->name); //============================================================================== setSize (600, 400); } DspModulePluginDemoAudioProcessorEditor::~DspModulePluginDemoAudioProcessorEditor() { } //============================================================================== void DspModulePluginDemoAudioProcessorEditor::paint (Graphics& g) { g.setColour (getLookAndFeel().findColour (ResizableWindow::backgroundColourId)); g.fillAll(); } void DspModulePluginDemoAudioProcessorEditor::resized() { auto bounds = getLocalBounds().reduced (10); bounds.removeFromTop (10); bounds.removeFromLeft (125); //============================================================================== inputVolumeSlider->setBounds (bounds.removeFromTop (30)); bounds.removeFromTop (5); outputVolumeSlider->setBounds (bounds.removeFromTop (30)); bounds.removeFromTop (15); highPassFilterFreqSlider->setBounds (bounds.removeFromTop (30)); bounds.removeFromTop (5); lowPassFilterFreqSlider->setBounds (bounds.removeFromTop (30)); bounds.removeFromTop (15); //============================================================================== stereoBox.setBounds (bounds.removeFromTop(30)); bounds.removeFromTop (5); slopeBox.setBounds (bounds.removeFromTop (30)); bounds.removeFromTop (5); waveshaperBox.setBounds (bounds.removeFromTop (30)); bounds.removeFromTop (5); cabinetTypeBox.setBounds (bounds.removeFromTop (30)); bounds.removeFromTop (15); //============================================================================== auto buttonSlice = bounds.removeFromTop (30); cabinetSimButton.setSize (200, bounds.getHeight()); cabinetSimButton.setCentrePosition (buttonSlice.getCentre()); bounds.removeFromTop (15); } //============================================================================== void DspModulePluginDemoAudioProcessorEditor::comboBoxChanged (ComboBox* box) { auto index = box->getSelectedItemIndex(); if (box == &stereoBox) { processor.stereoParam->operator= (index); } else if (box == &slopeBox) { processor.slopeParam->operator= (index); } else if (box == &waveshaperBox) { processor.waveshaperParam->operator= (index); } else if (box == &cabinetTypeBox) { processor.cabinetTypeParam->operator= (index); } }