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 e27213afac2cd52c4ba00a075818e55946b45582
parent f86475678b367af482fb7821b0b58d73ac710468
Author: dsp56300 <dsp56300@users.noreply.github.com>
Date:   Tue, 21 May 2024 01:29:09 +0200

rework editor/editorState global menu handling

Diffstat:
Msource/jucePluginEditorLib/pluginEditor.cpp | 5+++++
Msource/jucePluginEditorLib/pluginEditor.h | 5+++++
Msource/jucePluginEditorLib/pluginEditorState.cpp | 23+++++++++++++----------
Msource/jucePluginEditorLib/pluginEditorState.h | 10+++-------
Msource/mqJucePlugin/PluginEditorState.cpp | 2+-
Msource/mqJucePlugin/PluginEditorState.h | 2+-
Msource/virusJucePlugin/VirusEditor.cpp | 10+++++++---
Msource/virusJucePlugin/VirusEditor.h | 5+----
Msource/virusJucePlugin/VirusEditorState.cpp | 4++--
Msource/virusJucePlugin/VirusEditorState.h | 2+-
Msource/xtJucePlugin/PluginEditorState.cpp | 2+-
Msource/xtJucePlugin/PluginEditorState.h | 2+-
12 files changed, 41 insertions(+), 31 deletions(-)

diff --git a/source/jucePluginEditorLib/pluginEditor.cpp b/source/jucePluginEditorLib/pluginEditor.cpp @@ -257,6 +257,11 @@ namespace jucePluginEditorLib return m_patchManager->activatePatchFromClipboard(); } + void Editor::openMenu() + { + onOpenMenu(this); + } + bool Editor::keyPressed(const juce::KeyPress& _key) { if(_key.getModifiers().isCommandDown()) diff --git a/source/jucePluginEditorLib/pluginEditor.h b/source/jucePluginEditorLib/pluginEditor.h @@ -4,6 +4,8 @@ #include "../synthLib/buildconfig.h" +#include "../jucePluginLib/event.h" + #include "types.h" namespace pluginLib @@ -23,6 +25,8 @@ namespace jucePluginEditorLib class Editor : public genericUI::Editor, genericUI::EditorInterface { public: + pluginLib::Event<Editor*> onOpenMenu; + Editor(Processor& _processor, pluginLib::ParameterBinding& _binding, std::string _skinFolder); ~Editor() override; @@ -65,6 +69,7 @@ namespace jucePluginEditorLib void copyCurrentPatchToClipboard() const; bool replaceCurrentPatchFromClipboard() const; + virtual void openMenu(); private: bool keyPressed(const juce::KeyPress& _key) override; diff --git a/source/jucePluginEditorLib/pluginEditorState.cpp b/source/jucePluginEditorLib/pluginEditorState.cpp @@ -103,8 +103,14 @@ void PluginEditorState::loadSkin(const Skin& _skin) try { - auto* editor = createEditor(_skin, [this] { openMenu(); }); + auto* editor = createEditor(_skin); m_editor.reset(editor); + + getEditor()->onOpenMenu.addListener([this](Editor*) + { + openMenu(); + }); + m_rootScale = editor->getScale(); m_editor->setTopLeftPosition(0, 0); @@ -134,9 +140,9 @@ void PluginEditorState::setGuiScale(const int _scale) const evSetGuiScale(_scale); } -genericUI::Editor* PluginEditorState::getEditor() const +Editor* PluginEditorState::getEditor() const { - return static_cast<genericUI::Editor*>(m_editor.get()); + return dynamic_cast<Editor*>(m_editor.get()); } void PluginEditorState::openMenu() @@ -200,7 +206,7 @@ void PluginEditorState::openMenu() if(m_editor && m_currentSkin.folder.empty() || m_currentSkin.folder.find(m_skinFolderName) == std::string::npos) { - auto* editor = m_editor.get(); + auto* editor = getEditor(); if(editor) { skinMenu.addSeparator(); @@ -394,10 +400,7 @@ void PluginEditorState::openMenu() void PluginEditorState::exportCurrentSkin() const { - if(!m_editor) - return; - - const auto* editor = dynamic_cast<const genericUI::Editor*>(m_editor.get()); + auto* editor = getEditor(); if(!editor) return; @@ -406,11 +409,11 @@ void PluginEditorState::exportCurrentSkin() const if(!res.empty()) { - juce::NativeMessageBox::showMessageBoxAsync(juce::MessageBoxIconType::WarningIcon, "Export failed", "Failed to export skin:\n\n" + res, m_editor.get(), juce::ModalCallbackFunction::create([](int){})); + juce::NativeMessageBox::showMessageBoxAsync(juce::MessageBoxIconType::WarningIcon, "Export failed", "Failed to export skin:\n\n" + res, editor, juce::ModalCallbackFunction::create([](int){})); } else { - juce::NativeMessageBox::showMessageBoxAsync(juce::MessageBoxIconType::InfoIcon, "Export finished", "Skin successfully exported", m_editor.get(), juce::ModalCallbackFunction::create([](int){})); + juce::NativeMessageBox::showMessageBoxAsync(juce::MessageBoxIconType::InfoIcon, "Export finished", "Skin successfully exported", editor, juce::ModalCallbackFunction::create([](int){})); } } diff --git a/source/jucePluginEditorLib/pluginEditorState.h b/source/jucePluginEditorLib/pluginEditorState.h @@ -7,11 +7,6 @@ #include "../jucePluginLib/parameterbinding.h" -namespace genericUI -{ - class Editor; -} - namespace juce { class Component; @@ -21,6 +16,7 @@ class VirusProcessor; namespace jucePluginEditorLib { + class Editor; class Processor; class PluginEditorState @@ -78,12 +74,12 @@ namespace jucePluginEditorLib void getPerInstanceConfig(std::vector<uint8_t>& _data); protected: - virtual genericUI::Editor* createEditor(const Skin& _skin, std::function<void()> _openMenuCallback) = 0; + virtual Editor* createEditor(const Skin& _skin) = 0; Processor& m_processor; pluginLib::ParameterBinding m_parameterBinding; - genericUI::Editor* getEditor() const; + Editor* getEditor() const; private: void loadSkin(const Skin& _skin); diff --git a/source/mqJucePlugin/PluginEditorState.cpp b/source/mqJucePlugin/PluginEditorState.cpp @@ -65,7 +65,7 @@ bool PluginEditorState::initAdvancedContextMenu(juce::PopupMenu& _menu, bool _en } -genericUI::Editor* PluginEditorState::createEditor(const Skin& _skin, std::function<void()> _openMenuCallback) +jucePluginEditorLib::Editor* PluginEditorState::createEditor(const Skin& _skin) { return new mqJucePlugin::Editor(m_processor, m_parameterBinding, _skin.folder, _skin.jsonFilename); } diff --git a/source/mqJucePlugin/PluginEditorState.h b/source/mqJucePlugin/PluginEditorState.h @@ -18,5 +18,5 @@ public: void initContextMenu(juce::PopupMenu& _menu) override; bool initAdvancedContextMenu(juce::PopupMenu& _menu, bool _enabled) override; private: - genericUI::Editor* createEditor(const Skin& _skin, std::function<void()> _openMenuCallback) override; + jucePluginEditorLib::Editor* createEditor(const Skin& _skin) override; }; diff --git a/source/virusJucePlugin/VirusEditor.cpp b/source/virusJucePlugin/VirusEditor.cpp @@ -16,11 +16,10 @@ namespace genericVirusUI { - VirusEditor::VirusEditor(pluginLib::ParameterBinding& _binding, VirusProcessor& _processorRef, const std::string& _jsonFilename, std::string _skinFolder, std::function<void()> _openMenuCallback) : + VirusEditor::VirusEditor(pluginLib::ParameterBinding& _binding, VirusProcessor& _processorRef, const std::string& _jsonFilename, std::string _skinFolder) : Editor(_processorRef, _binding, std::move(_skinFolder)), m_processor(_processorRef), m_parameterBinding(_binding), - m_openMenuCallback(std::move(_openMenuCallback)), m_romChangedListener(_processorRef.evRomChanged) { create(_jsonFilename); @@ -150,7 +149,12 @@ namespace genericVirusUI auto* menuButton = findComponentT<juce::Button>("Menu", false); if(menuButton) - menuButton->onClick = m_openMenuCallback; + { + menuButton->onClick = [this]() + { + openMenu(); + }; + } updatePresetName(); updatePlayModeButtons(); diff --git a/source/virusJucePlugin/VirusEditor.h b/source/virusJucePlugin/VirusEditor.h @@ -43,8 +43,7 @@ namespace genericVirusUI Arrangement }; - VirusEditor(pluginLib::ParameterBinding& _binding, VirusProcessor& _processorRef, const std::string& _jsonFilename, - std::string _skinFolder, std::function<void()> _openMenuCallback); + VirusEditor(pluginLib::ParameterBinding& _binding, VirusProcessor& _processorRef, const std::string& _jsonFilename, std::string _skinFolder); ~VirusEditor() override; void setPart(size_t _part); @@ -106,8 +105,6 @@ namespace genericVirusUI juce::Label* m_deviceModel = nullptr; - std::function<void()> m_openMenuCallback; - pluginLib::EventListener<const virusLib::ROMFile*> m_romChangedListener; }; } diff --git a/source/virusJucePlugin/VirusEditorState.cpp b/source/virusJucePlugin/VirusEditorState.cpp @@ -12,9 +12,9 @@ VirusEditorState::VirusEditorState(VirusProcessor& _processor, pluginLib::Contro loadDefaultSkin(); } -genericUI::Editor* VirusEditorState::createEditor(const Skin& _skin, std::function<void()> _openMenuCallback) +jucePluginEditorLib::Editor* VirusEditorState::createEditor(const Skin& _skin) { - return new genericVirusUI::VirusEditor(m_parameterBinding, static_cast<VirusProcessor&>(m_processor), _skin.jsonFilename, _skin.folder, _openMenuCallback); + return new genericVirusUI::VirusEditor(m_parameterBinding, static_cast<VirusProcessor&>(m_processor), _skin.jsonFilename, _skin.folder); } void VirusEditorState::initContextMenu(juce::PopupMenu& _menu) diff --git a/source/virusJucePlugin/VirusEditorState.h b/source/virusJucePlugin/VirusEditorState.h @@ -9,7 +9,7 @@ class VirusEditorState : public jucePluginEditorLib::PluginEditorState public: explicit VirusEditorState(VirusProcessor& _processor, pluginLib::Controller& _controller, const std::vector<VirusEditorState::Skin>& _includedSkins); - genericUI::Editor* createEditor(const Skin& _skin, std::function<void()> _openMenuCallback) override; + jucePluginEditorLib::Editor* createEditor(const Skin& _skin) override; void initContextMenu(juce::PopupMenu& _menu) override; bool initAdvancedContextMenu(juce::PopupMenu& _menu, bool _enabled) override; diff --git a/source/xtJucePlugin/PluginEditorState.cpp b/source/xtJucePlugin/PluginEditorState.cpp @@ -64,7 +64,7 @@ bool PluginEditorState::initAdvancedContextMenu(juce::PopupMenu& _menu, bool _en } -genericUI::Editor* PluginEditorState::createEditor(const Skin& _skin, std::function<void()> _openMenuCallback) +jucePluginEditorLib::Editor* PluginEditorState::createEditor(const Skin& _skin) { return new xtJucePlugin::Editor(m_processor, m_parameterBinding, _skin.folder, _skin.jsonFilename); } diff --git a/source/xtJucePlugin/PluginEditorState.h b/source/xtJucePlugin/PluginEditorState.h @@ -18,5 +18,5 @@ public: void initContextMenu(juce::PopupMenu& _menu) override; bool initAdvancedContextMenu(juce::PopupMenu& _menu, bool _enabled) override; private: - genericUI::Editor* createEditor(const Skin& _skin, std::function<void()> _openMenuCallback) override; + jucePluginEditorLib::Editor* createEditor(const Skin& _skin) override; };