Fixes to the UI
This commit is contained in:
@@ -8,12 +8,21 @@
|
||||
NeuralSynthAudioProcessorEditor::NeuralSynthAudioProcessorEditor (NeuralSynthAudioProcessor& p)
|
||||
: AudioProcessorEditor (&p),
|
||||
audioProcessor (p),
|
||||
mainScopeComponent(audioProcessor.getAudioBufferQueue())
|
||||
mainScopeComponent(audioProcessor.getAudioBufferQueue()),
|
||||
keyboardComponent(keyboardState, juce::MidiKeyboardComponent::horizontalKeyboard)
|
||||
{
|
||||
auto& tree = audioProcessor.parameters;
|
||||
|
||||
addAndMakeVisible(mainScopeComponent);
|
||||
|
||||
keyboardState.addListener(this);
|
||||
keyboardComponent.setMidiChannel(1);
|
||||
keyboardComponent.setScrollButtonsVisible(true);
|
||||
keyboardComponent.setKeyWidth(36.0f);
|
||||
keyboardComponent.setAvailableRange(36, 96);
|
||||
keyboardComponent.setVelocity(1.0f, true);
|
||||
addAndMakeVisible(keyboardComponent);
|
||||
|
||||
presetMenuButton.setButtonText("Preset");
|
||||
presetMenuButton.onClick = [this] { showPresetMenu(); };
|
||||
addAndMakeVisible(presetMenuButton);
|
||||
@@ -185,6 +194,7 @@ NeuralSynthAudioProcessorEditor::NeuralSynthAudioProcessorEditor (NeuralSynthAud
|
||||
NeuralSynthAudioProcessorEditor::~NeuralSynthAudioProcessorEditor()
|
||||
{
|
||||
stopTimer();
|
||||
keyboardState.removeListener(this);
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
@@ -199,7 +209,7 @@ void NeuralSynthAudioProcessorEditor::resized()
|
||||
auto outer = getLocalBounds().reduced(16);
|
||||
|
||||
// --- carve out sidebar for MASTER (right side) --------------------------
|
||||
const int sidebarWidth = 160; // tweak if you want it wider/narrower
|
||||
const int sidebarWidth = 100; // tweak if you want it wider/narrower
|
||||
auto gridArea = outer;
|
||||
auto sidebar = gridArea.removeFromRight(sidebarWidth).reduced(8);
|
||||
|
||||
@@ -217,17 +227,18 @@ void NeuralSynthAudioProcessorEditor::resized()
|
||||
juce::Grid grid;
|
||||
|
||||
grid.templateRows = {
|
||||
juce::Grid::TrackInfo(juce::Grid::Fr(22)), // scope band
|
||||
juce::Grid::TrackInfo(juce::Grid::Fr(39)), // row 1
|
||||
juce::Grid::TrackInfo(juce::Grid::Fr(78)) // row 2 (wider to absorb layer panel)
|
||||
juce::Grid::TrackInfo(juce::Grid::Fr(10)), // scope band
|
||||
juce::Grid::TrackInfo(juce::Grid::Fr(35)), // row 1
|
||||
juce::Grid::TrackInfo(juce::Grid::Fr(35)), // row 2
|
||||
juce::Grid::TrackInfo(juce::Grid::Fr(20)) // keyboard
|
||||
};
|
||||
|
||||
grid.templateColumns = {
|
||||
juce::Grid::TrackInfo(juce::Grid::Fr(1)),
|
||||
juce::Grid::TrackInfo(juce::Grid::Fr(1)),
|
||||
juce::Grid::TrackInfo(juce::Grid::Fr(1)),
|
||||
juce::Grid::TrackInfo(juce::Grid::Fr(1)),
|
||||
juce::Grid::TrackInfo(juce::Grid::Fr(1))
|
||||
juce::Grid::TrackInfo(juce::Grid::Fr(20)),
|
||||
juce::Grid::TrackInfo(juce::Grid::Fr(20)),
|
||||
juce::Grid::TrackInfo(juce::Grid::Fr(20)),
|
||||
juce::Grid::TrackInfo(juce::Grid::Fr(20)),
|
||||
juce::Grid::TrackInfo(juce::Grid::Fr(20))
|
||||
};
|
||||
|
||||
grid.rowGap = juce::Grid::Px(0);
|
||||
@@ -236,7 +247,7 @@ void NeuralSynthAudioProcessorEditor::resized()
|
||||
grid.items.clear();
|
||||
|
||||
// Row 1 (scope row)
|
||||
grid.items.add(juce::GridItem(mainScopeComponent).withArea(1, 1, 1, 5));
|
||||
grid.items.add(juce::GridItem(mainScopeComponent).withArea({}, juce::GridItem::Span(4)));
|
||||
// Put preset button at the top-right cell of the scope row
|
||||
grid.items.add(juce::GridItem(presetMenuButton)
|
||||
.withArea(1, 5)
|
||||
@@ -244,22 +255,39 @@ void NeuralSynthAudioProcessorEditor::resized()
|
||||
.withAlignSelf(juce::GridItem::AlignSelf::start));
|
||||
|
||||
// Row 2 (top row of panels): Amp Env, Chorus, Delay, Reverb, EQ
|
||||
grid.items.add(juce::GridItem(*adsrComponent ).withArea(2, 1));
|
||||
grid.items.add(juce::GridItem(*chorusComponent ).withArea(2, 2));
|
||||
grid.items.add(juce::GridItem(*delayComponent ).withArea(2, 3));
|
||||
grid.items.add(juce::GridItem(*reverbComponent ).withArea(2, 4));
|
||||
grid.items.add(juce::GridItem(*eqComponent ).withArea(2, 5));
|
||||
grid.items.add(juce::GridItem(*adsrComponent ));
|
||||
grid.items.add(juce::GridItem(*chorusComponent ));
|
||||
grid.items.add(juce::GridItem(*delayComponent ));
|
||||
grid.items.add(juce::GridItem(*reverbComponent ));
|
||||
grid.items.add(juce::GridItem(*eqComponent ));
|
||||
|
||||
// Row 3 (bottom row of panels): Flanger, Distortion, Filter, Filter Env, Wavetable
|
||||
grid.items.add(juce::GridItem(*flangerComponent ).withArea(3, 1));
|
||||
grid.items.add(juce::GridItem(*distortionComponent).withArea(3, 2));
|
||||
grid.items.add(juce::GridItem(*filterComponent ).withArea(3, 3));
|
||||
grid.items.add(juce::GridItem(*filterEnvComponent ).withArea(3, 4));
|
||||
grid.items.add(juce::GridItem(*wtComponent ).withArea(3, 5));
|
||||
grid.items.add(juce::GridItem(*flangerComponent ));
|
||||
grid.items.add(juce::GridItem(*distortionComponent));
|
||||
grid.items.add(juce::GridItem(*filterComponent ));
|
||||
grid.items.add(juce::GridItem(*filterEnvComponent ));
|
||||
grid.items.add(juce::GridItem(*wtComponent ));
|
||||
|
||||
// Row 4: MIDI keyboard spans entire width
|
||||
grid.items.add(juce::GridItem(keyboardComponent).withArea({}, juce::GridItem::Span(5)));
|
||||
|
||||
grid.performLayout(gridArea);
|
||||
}
|
||||
|
||||
void NeuralSynthAudioProcessorEditor::handleNoteOn(juce::MidiKeyboardState*, int midiChannel, int midiNoteNumber, float velocity)
|
||||
{
|
||||
auto message = juce::MidiMessage::noteOn(midiChannel, midiNoteNumber, velocity);
|
||||
message.setTimeStamp(juce::Time::getMillisecondCounterHiRes() * 0.001);
|
||||
audioProcessor.midiMessageCollector.addMessageToQueue(message);
|
||||
}
|
||||
|
||||
void NeuralSynthAudioProcessorEditor::handleNoteOff(juce::MidiKeyboardState*, int midiChannel, int midiNoteNumber, float velocity)
|
||||
{
|
||||
auto message = juce::MidiMessage::noteOff(midiChannel, midiNoteNumber, velocity);
|
||||
message.setTimeStamp(juce::Time::getMillisecondCounterHiRes() * 0.001);
|
||||
audioProcessor.midiMessageCollector.addMessageToQueue(message);
|
||||
}
|
||||
|
||||
void NeuralSynthAudioProcessorEditor::timerCallback()
|
||||
{
|
||||
const int current = audioProcessor.getCurrentPresetIndex();
|
||||
|
||||
Reference in New Issue
Block a user