#pragma once #include #include "PluginProcessor.h" #include "LcdDisplay.h" #include "MenuSystem.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 setupKnobs(); void setupNavButtons(); void buildRootMenu(); void updateLCD(); SM26AudioProcessor& proc; MenuSystem menu; LcdDisplay lcd; juce::Slider knobSliders[4]; juce::Label knobLabels[4]; juce::Label knobValueLabels[4]; juce::TextButton navUp { "UP" }; juce::TextButton navDown { "DOWN" }; juce::TextButton navLeft { "LEFT" }; juce::TextButton navRight { "RIGHT" }; juce::TextButton navEnter { "ENTER" }; juce::TextButton navEsc { "ESC" }; juce::Label footer; bool menuWasOpen = false; static juce::String buildGitFooter(); JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (SM26AudioProcessorEditor) };