#pragma once #include #include "PluginProcessor.h" #include "LookAndFeel.h" #include "WaveformDisplay.h" #include "GrainControlPanel.h" #include "ScatterPanel.h" #include "EnvelopePanel.h" #include "EffectsPanel.h" #include "MasterPanel.h" static constexpr const char* kInstaGrainVersion = "v1.0"; class InstaGrainEditor : public juce::AudioProcessorEditor, public juce::FileDragAndDropTarget, public juce::Timer { public: explicit InstaGrainEditor (InstaGrainProcessor&); ~InstaGrainEditor() override; void paint (juce::Graphics&) override; void resized() override; // FileDragAndDropTarget bool isInterestedInFileDrag (const juce::StringArray& files) override; void filesDropped (const juce::StringArray& files, int x, int y) override; // Timer void timerCallback() override; private: InstaGrainProcessor& processor; InstaGrainLookAndFeel lookAndFeel; // Top bar juce::Label titleLabel; juce::Label versionLabel; juce::TextButton loadButton { "LOAD SAMPLE" }; juce::ToggleButton bypassButton; juce::Label bypassLabel; // Panels WaveformDisplay waveformDisplay; GrainControlPanel grainPanel; ScatterPanel scatterPanel; EnvelopePanel envelopePanel; EffectsPanel effectsPanel; MasterPanel masterPanel; std::unique_ptr fileChooser; void loadSampleFile (const juce::File& file); void syncKnobsToEngine(); void syncEngineFromKnobs(); JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (InstaGrainEditor) };