1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-01-17 00:44:19 +00:00
JUCE/examples/AUv3Synth/Source/AUv3SynthEditor.h

142 lines
5.1 KiB
C++

/*
==============================================================================
Copyright (c) 2015 - ROLI Ltd.
==============================================================================
*/
#include "MaterialLookAndFeel.h"
//==============================================================================
class AUv3SynthEditor : public AudioProcessorEditor,
public ButtonListener,
public Slider::Listener,
private Timer
{
public:
//==============================================================================
AUv3SynthEditor (AudioProcessor& processor)
: AudioProcessorEditor (processor),
recordButton ("Record"),
roomSizeSlider (Slider::LinearHorizontal, Slider::NoTextBox)
{
LookAndFeel::setDefaultLookAndFeel (&materialLookAndFeel);
roomSizeSlider.setValue (getParameterValue ("roomSize"), NotificationType::dontSendNotification);
recordButton.addListener (this);
addAndMakeVisible (recordButton);
roomSizeSlider.addListener (this);
roomSizeSlider.setRange (0.0, 1.0);
addAndMakeVisible (roomSizeSlider);
Path proAudioPath;
proAudioPath.loadPathFromData (BinaryData::proaudio_path, BinaryData::proaudio_pathSize);
proAudioIcon.setPath (proAudioPath);
addAndMakeVisible (proAudioIcon);
Colour proAudioIconColour = findColour (TextButton::buttonOnColourId);
proAudioIcon.setFill (FillType (proAudioIconColour));
setSize (600, 400);
startTimer (100);
}
//==============================================================================
void paint (Graphics& g) override
{
g.fillAll (findColour (ResizableWindow::backgroundColourId));
}
void resized() override
{
Rectangle<int> r = getLocalBounds();
int guiElementAreaHeight = r.getHeight() / 3;
proAudioIcon.setTransformToFit (r.removeFromLeft (proportionOfWidth (0.25))
.withSizeKeepingCentre (guiElementAreaHeight, guiElementAreaHeight)
.toFloat(),
RectanglePlacement::fillDestination);
int margin = guiElementAreaHeight / 4;
r.reduce (margin, margin);
int buttonHeight = guiElementAreaHeight - margin;
recordButton.setBounds (r.removeFromTop (guiElementAreaHeight).withSizeKeepingCentre (r.getWidth(), buttonHeight));
roomSizeSlider.setBounds (r.removeFromTop (guiElementAreaHeight).withSizeKeepingCentre (r.getWidth(), buttonHeight));
}
//==============================================================================
void buttonClicked (Button* button) override
{
if (button == &recordButton)
{
recordButton.setEnabled (false);
setParameterValue ("isRecording", 1.0f);
}
}
void sliderValueChanged (Slider*) override
{
setParameterValue ("roomSize", roomSizeSlider.getValue());
}
private:
//==============================================================================
void timerCallback() override
{
bool isRecordingNow = (getParameterValue ("isRecording") >= 0.5f);
recordButton.setEnabled (! isRecordingNow);
roomSizeSlider.setValue (getParameterValue ("roomSize"), NotificationType::dontSendNotification);
}
//==============================================================================
AudioProcessorParameter* getParameter (const String& paramId)
{
if (AudioProcessor* processor = getAudioProcessor())
{
const OwnedArray<AudioProcessorParameter>& params = processor->getParameters();
for (int i = 0; i < params.size(); ++i)
{
if (AudioProcessorParameterWithID* param = dynamic_cast<AudioProcessorParameterWithID*> (params[i]))
{
if (param->paramID == paramId)
return param;
}
}
}
return nullptr;
}
//==============================================================================
float getParameterValue (const String& paramId)
{
if (AudioProcessorParameter* param = getParameter (paramId))
return param->getValue();
return 0.0f;
}
void setParameterValue (const String& paramId, float value)
{
if (AudioProcessorParameter* param = getParameter (paramId))
param->setValueNotifyingHost (value);
}
//==============================================================================
MaterialLookAndFeel materialLookAndFeel;
//==============================================================================
TextButton recordButton;
Slider roomSizeSlider;
DrawablePath proAudioIcon;
//==============================================================================
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (AUv3SynthEditor)
};