gearmulator

Emulation of classic VA synths of the late 90s/2000s that are based on Motorola 56300 family DSPs
Log | Files | Refs | Submodules | README | LICENSE

commit ba62064e8e08af43f6097b871d2254ff5486a36b
parent 730ef888ad8e279a516ba466d39dd6a132863c7e
Author: dsp56300 <dsp56300@users.noreply.github.com>
Date:   Wed, 16 Mar 2022 17:09:17 +0100

move skin & scale selection into a context menu to get rid of ugly combo boxes on screen

Diffstat:
Msource/jucePlugin/PluginEditor.cpp | 85++++++++++++++++++++++++++++++++++++++++---------------------------------------
Msource/jucePlugin/PluginEditor.h | 11++++-------
2 files changed, 47 insertions(+), 49 deletions(-)

diff --git a/source/jucePlugin/PluginEditor.cpp b/source/jucePlugin/PluginEditor.cpp @@ -11,57 +11,26 @@ //============================================================================== AudioPluginAudioProcessorEditor::AudioPluginAudioProcessorEditor(AudioPluginAudioProcessor &p) : - AudioProcessorEditor(&p), processorRef(p), m_parameterBinding(p), m_scale("Scale"), m_skin("Skin") + AudioProcessorEditor(&p), processorRef(p), m_parameterBinding(p) { - ignoreUnused (processorRef); + addMouseListener(this, true); const auto config = processorRef.getController().getConfig(); const auto scale = config->getIntValue("scale", 100); const int skinId = config->getIntValue("skin", 0); - //m_virusEditor->setTopLeftPosition(0, 0); - m_scale.setBounds(0,0,74,24); - m_scale.addItem("50%", 50); - m_scale.addItem("75%", 75); - m_scale.addItem("100%", 100); - m_scale.addItem("125%", 125); - m_scale.addItem("150%", 150); - m_scale.addItem("200%", 200); - - m_scale.setSelectedId(scale, juce::dontSendNotification); - m_scale.setColour(juce::ComboBox::textColourId, juce::Colours::white); - m_scale.onChange = [this, config]() { - const float value = m_scale.getSelectedIdAsValue().getValue(); - setScaleFactor(value/100.0f); - config->setValue("scale", static_cast<int>(value)); - config->saveIfNeeded(); - }; - setScaleFactor(scale/100.0f); - - m_skin.setBounds(m_scale.getBounds().getX(), m_scale.getBounds().getY() + m_scale.getBounds().getHeight(), 74, 24); - m_skin.addItem("Modern", 1); - m_skin.addItem("Classic", 2); - m_skin.addItem("Generic", 3); - m_skin.setSelectedId(1, juce::dontSendNotification); - m_skin.setColour(juce::ComboBox::textColourId, juce::Colours::white); - m_skin.setSelectedItemIndex(skinId, juce::dontSendNotification); - addAndMakeVisible(m_scale); - addAndMakeVisible(m_skin); - m_skin.onChange = [this, config]() { - const int skinId = m_skin.getSelectedItemIndex(); - config->setValue("skin", skinId); - config->saveIfNeeded(); - LoadSkin(m_skin.getSelectedItemIndex()); - }; - - LoadSkin(skinId); - //addAndMakeVisible(m_virusEditor); + + loadSkin(skinId); + + setGuiScale(scale); } -void AudioPluginAudioProcessorEditor::LoadSkin(int index) { +void AudioPluginAudioProcessorEditor::loadSkin(int index) +{ if(m_currentSkinId == index) return; m_currentSkinId = index; + if (m_virusEditor) { if(getIndexOfChildComponent(m_virusEditor.get()) > -1) @@ -99,8 +68,6 @@ void AudioPluginAudioProcessorEditor::LoadSkin(int index) { } m_virusEditor->setTopLeftPosition(0, 0); addAndMakeVisible(m_virusEditor.get()); - m_scale.toFront(false); - m_skin.toFront(false); } void AudioPluginAudioProcessorEditor::setGuiScale(int percent) @@ -133,3 +100,37 @@ void AudioPluginAudioProcessorEditor::resized() auto area = getLocalBounds(); area.removeFromTop(35); } + +void AudioPluginAudioProcessorEditor::mouseDown(const juce::MouseEvent& event) +{ + if(!event.mods.isPopupMenu()) + { + AudioProcessorEditor::mouseDown(event); + return; + } + + const auto config = processorRef.getController().getConfig(); + const auto scale = config->getIntValue("scale", 100); + const int skinId = config->getIntValue("skin", 0); + + juce::PopupMenu menu; + + juce::PopupMenu skinMenu; + skinMenu.addItem("Modern", true, skinId == 0,[this] {loadSkin(0);}); + skinMenu.addItem("Classic", true, skinId == 1,[this] {loadSkin(1);}); + skinMenu.addItem("Generic", true, skinId == 2,[this] {loadSkin(2);}); + + juce::PopupMenu scaleMenu; + scaleMenu.addItem("50%", true, scale == 50, [this] { setGuiScale(50); }); + scaleMenu.addItem("75%", true, scale == 75, [this] { setGuiScale(75); }); + scaleMenu.addItem("100%", true, scale == 100, [this] { setGuiScale(100); }); + scaleMenu.addItem("125%", true, scale == 125, [this] { setGuiScale(125); }); + scaleMenu.addItem("150%", true, scale == 150, [this] { setGuiScale(150); }); + scaleMenu.addItem("200%", true, scale == 200, [this] { setGuiScale(200); }); + scaleMenu.addItem("300%", true, scale == 300, [this] { setGuiScale(300); }); + + menu.addSubMenu("GUI Skin", skinMenu); + menu.addSubMenu("GUI Scale", scaleMenu); + + menu.showMenuAsync(juce::PopupMenu::Options()); +} diff --git a/source/jucePlugin/PluginEditor.h b/source/jucePlugin/PluginEditor.h @@ -11,27 +11,24 @@ public: explicit AudioPluginAudioProcessorEditor (AudioPluginAudioProcessor&); ~AudioPluginAudioProcessorEditor() override; - //============================================================================== - //void handleIncomingMidiMessage(juce::MidiInput *source, const juce::MidiMessage &message) override; void paint (juce::Graphics&) override; void resized() override; + void mouseDown(const juce::MouseEvent& event) override; private: void timerCallback() override; - void LoadSkin(int index); + void loadSkin(int index); void setGuiScale(int percent); // This reference is provided as a quick way for your editor to // access the processor object that created it. AudioPluginAudioProcessor& processorRef; + VirusParameterBinding m_parameterBinding; std::unique_ptr<juce::Component> m_virusEditor; - juce::ComboBox m_scale; - juce::ComboBox m_skin; int m_currentSkinId = -1; float m_rootScale = 1.0f; - JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (AudioPluginAudioProcessorEditor) - + JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(AudioPluginAudioProcessorEditor) };