/* ============================================================================== This file was auto-generated! It contains the basic framework code for a JUCE plugin editor. ============================================================================== */ #include "PluginProcessor.h" #include "PluginEditor.h" #include "GuiConstants.h" //============================================================================== JuicySFAudioProcessorEditor::JuicySFAudioProcessorEditor( JuicySFAudioProcessor& p, AudioProcessorValueTreeState& valueTreeState) : AudioProcessorEditor{&p} , processor{p} , valueTreeState{valueTreeState} , midiKeyboard{p.keyboardState, SurjectiveMidiKeyboardComponent::horizontalKeyboard} , tablesComponent{valueTreeState} , filePicker{valueTreeState} , slidersComponent{valueTreeState, p.getFluidSynthModel()} { setResizable(true, true); // set resize limits for this plug-in setResizeLimits( GuiConstants::minWidth, GuiConstants::minHeight, GuiConstants::maxWidth, GuiConstants::maxHeight); lastUIWidth.referTo(valueTreeState.state.getChildWithName("uiState").getPropertyAsValue("width", nullptr)); lastUIHeight.referTo(valueTreeState.state.getChildWithName("uiState").getPropertyAsValue("height", nullptr)); // set our component's initial size to be the last one that was stored in the filter's settings setSize(lastUIWidth.getValue(), lastUIHeight.getValue()); lastUIWidth.addListener(this); lastUIHeight.addListener(this); midiKeyboard.setName ("MIDI Keyboard"); midiKeyboard.setWantsKeyboardFocus(false); tablesComponent.setWantsKeyboardFocus(false); setWantsKeyboardFocus(true); addAndMakeVisible(midiKeyboard); addAndMakeVisible(slidersComponent); addAndMakeVisible(tablesComponent); addAndMakeVisible(filePicker); } // called when the stored window size changes void JuicySFAudioProcessorEditor::valueChanged(Value&) { setSize(lastUIWidth.getValue(), lastUIHeight.getValue()); } JuicySFAudioProcessorEditor::~JuicySFAudioProcessorEditor() { lastUIWidth.removeListener(this); lastUIHeight.removeListener(this); } //============================================================================== void JuicySFAudioProcessorEditor::paint (Graphics& g) { // (Our component is opaque, so we must completely fill the background with a solid colour) g.fillAll (getLookAndFeel().findColour (ResizableWindow::backgroundColourId)); if (!focusInitialized) { if (!hasKeyboardFocus(false) && isVisible()) { grabKeyboardFocus(); } if (getCurrentlyFocusedComponent() == this) { focusInitialized = true; } } } void JuicySFAudioProcessorEditor::resized() { const int padding{8}; const int pianoHeight{70}; const int filePickerHeight{25}; Rectangle r{getLocalBounds()}; filePicker.setBounds(r.removeFromTop(filePickerHeight + padding).reduced(padding, 0).withTrimmedTop(padding)); midiKeyboard.setBounds (r.removeFromBottom (pianoHeight).reduced(padding, 0)); Rectangle rContent{r.reduced(0, padding)}; slidersComponent.setBounds(rContent.removeFromRight(slidersComponent.getDesiredWidth() + padding).withTrimmedRight(padding)); tablesComponent.setBounds(rContent); lastUIWidth = getWidth(); lastUIHeight = getHeight(); } bool JuicySFAudioProcessorEditor::keyPressed(const KeyPress &key) { const int cursorKeys[] = { KeyPress::leftKey, KeyPress::rightKey, KeyPress::upKey, KeyPress::downKey }; if (any_of( begin(cursorKeys), end(cursorKeys), [&](int i) { return i == key.getKeyCode(); } )) { return tablesComponent.keyPressed(key); } else { return midiKeyboard.keyPressed(key); } return false; } bool JuicySFAudioProcessorEditor::keyStateChanged (bool isKeyDown) { return midiKeyboard.keyStateChanged(isKeyDown); }