commit 892ce36dea2d52819e35fe82824015883124fabe parent 508bb8249ed85dc1191b05e60c389cfd72af533e Author: jatinchowdhury18 <jatinchowdhury18@gmail.com> Date: Sun, 21 Jun 2020 23:43:16 -0700 Refactor PresetsComponent (#48) Co-authored-by: jatinchowdhury18 <jatinchowdhury18@users.noreply.github.com> Diffstat:
13 files changed, 168 insertions(+), 113 deletions(-)
diff --git a/Plugin/CHOWTapeModel.jucer b/Plugin/CHOWTapeModel.jucer @@ -12,15 +12,19 @@ file="Source/GUI/preset_save_gui.xml"/> </GROUP> <GROUP id="{71C1FCA8-E7B0-3B66-1340-F140C452FF6F}" name="Presets"> - <FILE id="ihP3jp" name="Default.xml" compile="0" resource="1" file="Source/Presets/Default.xml"/> - <FILE id="b5EimY" name="LoFi.xml" compile="0" resource="1" file="Source/Presets/LoFi.xml"/> - <FILE id="MQFCLN" name="OldTape.xml" compile="0" resource="1" file="Source/Presets/OldTape.xml"/> + <GROUP id="{AB6F221D-98B5-9782-2241-321BA5DFB83C}" name="PresetConfigs"> + <FILE id="AymGjK" name="Default.xml" compile="0" resource="1" file="Source/Presets/PresetConfigs/Default.xml"/> + <FILE id="zlTcrf" name="LoFi.xml" compile="0" resource="1" file="Source/Presets/PresetConfigs/LoFi.xml"/> + <FILE id="drwXrv" name="OldTape.xml" compile="0" resource="1" file="Source/Presets/PresetConfigs/OldTape.xml"/> + <FILE id="O4vt7g" name="TC260.xml" compile="0" resource="1" file="Source/Presets/PresetConfigs/TC260.xml"/> + <FILE id="FkbdSt" name="Underbiased.xml" compile="0" resource="1" file="Source/Presets/PresetConfigs/Underbiased.xml"/> + <FILE id="wf7iTS" name="WoozyChorus.xml" compile="0" resource="1" file="Source/Presets/PresetConfigs/WoozyChorus.xml"/> + </GROUP> + <FILE id="ByxTdI" name="PresetComp.cpp" compile="1" resource="0" file="Source/Presets/PresetComp.cpp"/> + <FILE id="jFQg5e" name="PresetComp.h" compile="0" resource="0" file="Source/Presets/PresetComp.h"/> <FILE id="u8p0u2" name="PresetManager.cpp" compile="1" resource="0" file="Source/Presets/PresetManager.cpp"/> <FILE id="hN3w9Y" name="PresetManager.h" compile="0" resource="0" file="Source/Presets/PresetManager.h"/> - <FILE id="kNY0o3" name="TC260.xml" compile="0" resource="1" file="Source/Presets/TC260.xml"/> - <FILE id="UtYbHz" name="Underbiased.xml" compile="0" resource="1" file="Source/Presets/Underbiased.xml"/> - <FILE id="Sa9RRP" name="WoozyChorus.xml" compile="0" resource="1" file="Source/Presets/WoozyChorus.xml"/> </GROUP> <GROUP id="{43BBFC88-4D0A-01B8-2635-3748470B94F4}" name="Processors"> <GROUP id="{2F544AA2-63D9-E54A-A753-2E6249E85E60}" name="Chew"> diff --git a/Plugin/Source/PluginProcessor.cpp b/Plugin/Source/PluginProcessor.cpp @@ -31,7 +31,7 @@ ChowtapeModelAudioProcessor::ChowtapeModelAudioProcessor() for (int ch = 0; ch < 2; ++ch) lossFilter[ch].reset (new LossFilter (vts)); - scope = magicState.addPlotSource ("scope", std::make_unique<foleys::MagicOscilloscope>()); + scope = magicState.createAndAddObject<foleys::MagicOscilloscope> ("scope"); } ChowtapeModelAudioProcessor::~ChowtapeModelAudioProcessor() @@ -236,9 +236,9 @@ bool ChowtapeModelAudioProcessor::hasEditor() const AudioProcessorEditor* ChowtapeModelAudioProcessor::createEditor() { - auto builder = std::make_unique<foleys::MagicGUIBuilder> (&magicState); + auto builder = std::make_unique<foleys::MagicGUIBuilder> (magicState); builder->registerJUCEFactories(); - presetManager.registerPresetsComponent (*builder, this); + presetManager.registerPresetsComponent (*builder); #if SAVE_PRESETS // Add button to save new presets magicState.addTrigger ("savepreset", [=] diff --git a/Plugin/Source/PluginProcessor.h b/Plugin/Source/PluginProcessor.h @@ -68,6 +68,8 @@ public: AudioProcessorValueTreeState::ParameterLayout createParameterLayout(); AudioProcessorValueTreeState& getVTS() { return vts; } + PresetManager& getPresetManager() { return presetManager; } + private: AudioProcessorValueTreeState vts; diff --git a/Plugin/Source/Presets/PresetComp.cpp b/Plugin/Source/Presets/PresetComp.cpp @@ -0,0 +1,53 @@ +#include "PresetComp.h" + +PresetComp::PresetComp (ChowtapeModelAudioProcessor& proc, PresetManager& manager) : + proc (proc), + manager (manager) +{ + manager.addListener (this); + + setColour (backgroundColourId, Colour (0xFF434352)); + setColour (textColourId, Colours::white); + + addAndMakeVisible (presetBox); + presetBox.setColour (ComboBox::ColourIds::backgroundColourId, Colours::transparentWhite); + presetBox.setJustificationType (Justification::centred); + presetBox.addItemList (manager.getPresetChoices(), 1); + + presetBox.setSelectedItemIndex (proc.getCurrentProgram(), dontSendNotification); + presetBox.onChange = [=, &proc, &manager] { proc.setCurrentProgram (presetBox.getSelectedItemIndex()); }; +} + +PresetComp::~PresetComp() +{ + manager.removeListener (this); +} + +void PresetComp::paint (Graphics& g) +{ + presetBox.setColour (PopupMenu::ColourIds::backgroundColourId, findColour (backgroundColourId)); + g.fillAll (findColour (backgroundColourId)); + + g.setColour (findColour (textColourId)); + g.setFont (getHeight() * 0.6f); + auto presetBounds = presetBox.getBounds(); + presetBounds.setWidth (100); + presetBounds.translate (-110, 0); + g.drawFittedText ("Presets:", presetBounds, Justification::centredRight, 1); + + g.setFont (getHeight() * 0.4f); + auto versionBounds = getLocalBounds().removeFromRight (50); + g.drawFittedText ("v" + String (JucePlugin_VersionString), versionBounds, Justification::centred, 1); +} + +void PresetComp::resized() +{ + auto boxWidth = jmin (getWidth() / 3, 200); + presetBox.setBounds ((getWidth() - boxWidth) / 2, 2, boxWidth, getHeight() - 4); + repaint(); +} + +void PresetComp::presetUpdated() +{ + presetBox.setSelectedItemIndex (proc.getCurrentProgram(), dontSendNotification); +} diff --git a/Plugin/Source/Presets/PresetComp.h b/Plugin/Source/Presets/PresetComp.h @@ -0,0 +1,96 @@ +#ifndef PRESETCOMP_H_INCLUDED +#define PRESETCOMP_H_INCLUDED + +#include "PresetManager.h" +#include "../PluginProcessor.h" + +class PresetComp : public Component, + private PresetManager::Listener +{ +public: + enum ColourIDs + { + backgroundColourId, + textColourId, + }; + + PresetComp (ChowtapeModelAudioProcessor& proc, PresetManager& manager); + ~PresetComp(); + + void paint (Graphics& g) override; + void resized() override; + void presetUpdated() override; + +private: + class CustomComboBox : public ComboBox + { + public: + CustomComboBox (const String& name = {}) : + ComboBox (name) + { + setLookAndFeel (&comboLNF); + } + + ~CustomComboBox() + { + setLookAndFeel (nullptr); + } + + private: + class ComboLNF : public LookAndFeel_V4 + { + void drawPopupMenuItem (Graphics& g, const Rectangle<int>& area, + const bool isSeparator, const bool isActive, + const bool isHighlighted, const bool /*isTicked*/, + const bool hasSubMenu, const String& text, + const String& shortcutKeyText, + const Drawable* icon, const Colour* const textColourToUse) override + { + LookAndFeel_V4::drawPopupMenuItem (g, area, isSeparator, isActive, + isHighlighted, false /*isTicked*/, hasSubMenu, text, + shortcutKeyText, icon, textColourToUse); + } + }; + + ComboLNF comboLNF; + }; + + ChowtapeModelAudioProcessor& proc; + PresetManager& manager; + CustomComboBox presetBox; + + JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (PresetComp) +}; + +class PresetComponentItem : public foleys::GuiItem +{ +public: + FOLEYS_DECLARE_GUI_FACTORY (PresetComponentItem) + + PresetComponentItem (foleys::MagicGUIBuilder& builder, const ValueTree& node) : + foleys::GuiItem (builder, node) + { + setColourTranslation ({ + {"presets-background", PresetComp::backgroundColourId}, + {"presets-text", PresetComp::textColourId} + }); + + if (auto* proc = dynamic_cast<ChowtapeModelAudioProcessor*> (builder.getMagicState().getProcessor())) + { + presetComp = std::make_unique<PresetComp> (*proc, proc->getPresetManager()); + addAndMakeVisible (presetComp.get()); + } + } + + void update() override {} + + Component* getWrappedComponent() override + { + return presetComp.get(); + } + +private: + std::unique_ptr<PresetComp> presetComp; +}; + +#endif // PRESETCOMP_H_INCLUDED diff --git a/Plugin/Source/Presets/Default.xml b/Plugin/Source/Presets/PresetConfigs/Default.xml diff --git a/Plugin/Source/Presets/LoFi.xml b/Plugin/Source/Presets/PresetConfigs/LoFi.xml diff --git a/Plugin/Source/Presets/OldTape.xml b/Plugin/Source/Presets/PresetConfigs/OldTape.xml diff --git a/Plugin/Source/Presets/TC260.xml b/Plugin/Source/Presets/PresetConfigs/TC260.xml diff --git a/Plugin/Source/Presets/Underbiased.xml b/Plugin/Source/Presets/PresetConfigs/Underbiased.xml diff --git a/Plugin/Source/Presets/WoozyChorus.xml b/Plugin/Source/Presets/PresetConfigs/WoozyChorus.xml diff --git a/Plugin/Source/Presets/PresetManager.cpp b/Plugin/Source/Presets/PresetManager.cpp @@ -1,5 +1,6 @@ #include "PresetManager.h" #include "../PluginProcessor.h" +#include "PresetComp.h" Preset::Preset (String presetFile) { @@ -30,102 +31,6 @@ Preset::Preset (String presetFile) } //==================================================== -class PresetComp : public Component, - private PresetManager::Listener -{ -public: - PresetComp (ChowtapeModelAudioProcessor& proc, PresetManager& manager) : - proc (proc), - manager (manager) - { - manager.addListener (this); - - addAndMakeVisible (presetBox); - presetBox.setJustificationType (Justification::centred); - presetBox.setColour (ComboBox::ColourIds::backgroundColourId, Colours::transparentWhite); - presetBox.addItemList (manager.getPresetChoices(), 1); - presetBox.setColour (PopupMenu::ColourIds::backgroundColourId, Colour (0xFF434352)); - - presetBox.setSelectedItemIndex (proc.getCurrentProgram(), dontSendNotification); - presetBox.onChange = [=, &proc, &manager] { proc.setCurrentProgram (presetBox.getSelectedItemIndex()); }; - } - - ~PresetComp() - { - manager.removeListener (this); - } - - void paint (Graphics& g) override - { - Colour background (0xFF434352); - g.fillAll (background); - - g.setColour (Colours::white); - g.setFont (getHeight() * 0.6f); - auto presetBounds = presetBox.getBounds(); - presetBounds.setWidth (100); - presetBounds.translate (-110, 0); - g.drawFittedText ("Presets:", presetBounds, Justification::centredRight, 1); - - g.setFont (getHeight() * 0.4f); - auto versionBounds = getLocalBounds().removeFromRight (50); - g.drawFittedText ("v" + String (JucePlugin_VersionString), versionBounds, Justification::centred, 1); - } - - void resized() override - { - auto boxWidth = jmin (getWidth() / 3, 200); - presetBox.setBounds ((getWidth() - boxWidth) / 2, 2, boxWidth, getHeight() - 4); - repaint(); - } - - void presetUpdated() override - { - presetBox.setSelectedItemIndex (proc.getCurrentProgram(), dontSendNotification); - } - -private: - class CustomComboBox : public ComboBox - { - public: - CustomComboBox (const String& name = {}) : - ComboBox (name) - { - setLookAndFeel (&comboLNF); - } - - ~CustomComboBox() - { - setLookAndFeel (nullptr); - } - - private: - class ComboLNF : public LookAndFeel_V4 - { - void drawPopupMenuItem (Graphics& g, const Rectangle<int>& area, - const bool isSeparator, const bool isActive, - const bool isHighlighted, const bool /*isTicked*/, - const bool hasSubMenu, const String& text, - const String& shortcutKeyText, - const Drawable* icon, const Colour* const textColourToUse) override - { - LookAndFeel_V4::drawPopupMenuItem (g, area, isSeparator, isActive, - isHighlighted, false /*isTicked*/, hasSubMenu, text, - shortcutKeyText, icon, textColourToUse); - } - }; - - ComboLNF comboLNF; - }; - - ChowtapeModelAudioProcessor& proc; - PresetManager& manager; - CustomComboBox presetBox; - - JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (PresetComp) -}; - -//==================================================== PresetManager::PresetManager() { loadPresets(); @@ -181,13 +86,8 @@ bool PresetManager::setPreset (AudioProcessorValueTreeState& vts, int idx) return true; } -void PresetManager::registerPresetsComponent (foleys::MagicGUIBuilder& builder, AudioProcessor* proc) +void PresetManager::registerPresetsComponent (foleys::MagicGUIBuilder& builder) { - auto procCast = dynamic_cast<ChowtapeModelAudioProcessor*> (proc); - static Identifier presetsID { "presets" }; - builder.registerFactory (presetsID, [=] (const ValueTree&) - { - return std::make_unique<PresetComp> (*procCast, *this); - }); + builder.registerFactory (presetsID, &PresetComponentItem::factory); } diff --git a/Plugin/Source/Presets/PresetManager.h b/Plugin/Source/Presets/PresetManager.h @@ -25,7 +25,7 @@ public: String getPresetName (int idx); bool setPreset (AudioProcessorValueTreeState& vts, int idx); - void registerPresetsComponent (foleys::MagicGUIBuilder&, AudioProcessor* proc); + void registerPresetsComponent (foleys::MagicGUIBuilder&); void presetUpdated() { listeners.call (&Listener::presetUpdated); } struct Listener