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 32c5459252a006ed7daeda5522ae6a810c7040d9
parent 054a6cf7e7dc518fdfdbc72d7852a1a48d61b25a
Author: dsp56300 <dsp56300@users.noreply.github.com>
Date:   Sun, 20 Mar 2022 02:13:46 +0100

support to open menu from button if there is one

Diffstat:
Msource/jucePlugin/PluginEditor.cpp | 53+++++++++++++++++++++++++++++------------------------
Msource/jucePlugin/PluginEditor.h | 1+
Msource/jucePlugin/skins/Trancy/VirusC_Trancy.json | 60++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Msource/jucePlugin/skins/Trancy/assets.cmake | 1+
Msource/jucePlugin/ui3/VirusEditor.cpp | 10++++++++--
Msource/jucePlugin/ui3/VirusEditor.h | 3++-
6 files changed, 101 insertions(+), 27 deletions(-)

diff --git a/source/jucePlugin/PluginEditor.cpp b/source/jucePlugin/PluginEditor.cpp @@ -41,7 +41,7 @@ void AudioPluginAudioProcessorEditor::loadSkin(int index) try { - auto* editor = new genericVirusUI::VirusEditor(m_parameterBinding, processorRef.getController(), processorRef, "VirusC_Trancy.json"); + auto* editor = new genericVirusUI::VirusEditor(m_parameterBinding, processorRef.getController(), processorRef, "VirusC_Trancy.json", [this] { openMenu(); }); m_virusEditor.reset(editor); setSize(m_virusEditor->getWidth(), m_virusEditor->getHeight()); m_rootScale = editor->getScale(); @@ -70,6 +70,33 @@ void AudioPluginAudioProcessorEditor::setGuiScale(int percent) config->saveIfNeeded(); } +void AudioPluginAudioProcessorEditor::openMenu() +{ + 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);}); + + 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()); +} + AudioPluginAudioProcessorEditor::~AudioPluginAudioProcessorEditor() { m_virusEditor.reset(); @@ -101,27 +128,5 @@ void AudioPluginAudioProcessorEditor::mouseDown(const juce::MouseEvent& 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);}); - - 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()); + openMenu(); } diff --git a/source/jucePlugin/PluginEditor.h b/source/jucePlugin/PluginEditor.h @@ -19,6 +19,7 @@ private: void timerCallback() override; void loadSkin(int index); void setGuiScale(int percent); + void openMenu(); // This reference is provided as a quick way for your editor to // access the processor object that created it. diff --git a/source/jucePlugin/skins/Trancy/VirusC_Trancy.json b/source/jucePlugin/skins/Trancy/VirusC_Trancy.json @@ -66,6 +66,66 @@ } }, { + "name" : "Menu", + "button" : { + "normalImage" : "0", + "overImage" : "0", + "downImage" : "0", + "disabledImage" : "0", + "normalImageOn" : "0", + "overImageOn" : "0", + "downImageOn" : "0", + "disabledImageOn" : "0", + "x" : "2216", + "y" : "37.344", + "width" : "172", + "height" : "50", + "texture" : "btn_menu", + "tileSizeX" : "172", + "tileSizeY" : "50" + } + }, + { + "name" : "PresetPrev", + "button" : { + "normalImage" : "0", + "overImage" : "0", + "downImage" : "0", + "disabledImage" : "0", + "normalImageOn" : "0", + "overImageOn" : "0", + "downImageOn" : "0", + "disabledImageOn" : "0", + "x" : "2148.73", + "y" : "36.844", + "width" : "33", + "height" : "51", + "texture" : "btn_left", + "tileSizeX" : "33", + "tileSizeY" : "51" + } + }, + { + "name" : "PresetNext", + "button" : { + "normalImage" : "0", + "overImage" : "0", + "downImage" : "0", + "disabledImage" : "0", + "normalImageOn" : "0", + "overImageOn" : "0", + "downImageOn" : "0", + "disabledImageOn" : "0", + "x" : "2183", + "y" : "36.844", + "width" : "33", + "height" : "51", + "texture" : "btn_right", + "tileSizeX" : "33", + "tileSizeY" : "51" + } + }, + { "name" : "TabOsc", "button" : { "isToggle" : "1", diff --git a/source/jucePlugin/skins/Trancy/assets.cmake b/source/jucePlugin/skins/Trancy/assets.cmake @@ -8,6 +8,7 @@ set(ASSETS_VirusC_Trancy ${CMAKE_CURRENT_LIST_DIR}/btn_main_3.png ${CMAKE_CURRENT_LIST_DIR}/btn_main_4.png ${CMAKE_CURRENT_LIST_DIR}/btn_main_5.png + ${CMAKE_CURRENT_LIST_DIR}/btn_menu.png ${CMAKE_CURRENT_LIST_DIR}/btn_save_preset.png ${CMAKE_CURRENT_LIST_DIR}/Digital.ttf ${CMAKE_CURRENT_LIST_DIR}/knob_1_128.png diff --git a/source/jucePlugin/ui3/VirusEditor.cpp b/source/jucePlugin/ui3/VirusEditor.cpp @@ -9,10 +9,11 @@ namespace genericVirusUI { - VirusEditor::VirusEditor(VirusParameterBinding& _binding, Virus::Controller& _controller, AudioPluginAudioProcessor &_processorRef, const std::string& _jsonFilename) : + VirusEditor::VirusEditor(VirusParameterBinding& _binding, Virus::Controller& _controller, AudioPluginAudioProcessor &_processorRef, const std::string& _jsonFilename, std::function<void()> _openMenuCallback) : Editor(static_cast<EditorInterface&>(*this)), m_processor(_processorRef), - m_parameterBinding(_binding) + m_parameterBinding(_binding), + m_openMenuCallback(std::move(_openMenuCallback)) { uint32_t jsonSize; const auto json = getResourceByFilename(_jsonFilename, jsonSize); @@ -88,6 +89,11 @@ namespace genericVirusUI onProgramChange(); } }; + + auto* menuButton = findComponentT<juce::Button>("Menu", false); + + if(menuButton) + menuButton->onClick = m_openMenuCallback; } Virus::Controller& VirusEditor::getController() const diff --git a/source/jucePlugin/ui3/VirusEditor.h b/source/jucePlugin/ui3/VirusEditor.h @@ -16,7 +16,7 @@ namespace genericVirusUI class VirusEditor : public genericUI::EditorInterface, public genericUI::Editor { public: - VirusEditor(VirusParameterBinding& _binding, Virus::Controller& _controller, AudioPluginAudioProcessor &_processorRef, const std::string& _jsonFilename); + VirusEditor(VirusParameterBinding& _binding, Virus::Controller& _controller, AudioPluginAudioProcessor &_processorRef, const std::string& _jsonFilename, std::function<void()> _openMenuCallback); void setPart(size_t _part); @@ -71,5 +71,6 @@ namespace genericVirusUI std::unique_ptr<juce::FileChooser> m_fileChooser; juce::String m_previousPath; + std::function<void()> m_openMenuCallback; }; }