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