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:
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;
};
}