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