#pragma once #include #include "PluginProcessor.h" #include "LcdDisplay.h" #include "MenuSystem.h" #include "JoystickPad.h" #include "Presets.h" #include "SynthParams.h" class SM26AudioProcessorEditor : public juce::AudioProcessorEditor, private juce::Timer, private juce::Slider::Listener { public: SM26AudioProcessorEditor (SM26AudioProcessor&); ~SM26AudioProcessorEditor() override; void paint (juce::Graphics&) override; void resized() override; void timerCallback() override; private: void sliderValueChanged (juce::Slider*) override; void sliderDragStarted (juce::Slider*) override; void sliderDragEnded (juce::Slider*) override; void setupKnobs(); void setupNavButtons(); void buildRootMenu(); void updateLCD(); void cyclePreset (int delta); void openPresetMenu(); SM26AudioProcessor& proc; MenuSystem menu; LcdDisplay lcd; bool knobDragging[4] = {}; juce::Slider knobSliders[4]; juce::Label knobLabels[4]; juce::Label knobValueLabels[4]; RoundNavButton navEnter { "OK" }; RoundNavButton navEsc { "ESC" }; JoystickPad navStick; juce::Label footer; bool menuWasOpen = false; static juce::String buildGitFooter(); JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (SM26AudioProcessorEditor) };