Add placeholders in the grid component, and sort effect types

pull/307/head
James H Ball 2025-08-10 21:56:35 +01:00
rodzic fe44875daa
commit e4261f5ebe
6 zmienionych plików z 66 dodań i 12 usunięć

Wyświetl plik

@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12,2C17.53,2 22,6.47 22,12C22,17.53 17.53,22 12,22C6.47,22 2,17.53 2,12C2,6.47 6.47,2 12,2M15.59,7L12,10.59L8.41,7L7,8.41L10.59,12L7,15.59L8.41,17L12,13.41L15.59,17L17,15.59L13.41,12L17,8.41L15.59,7Z" /></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19,6.41L17.59,5L12,10.59L6.41,5L5,6.41L10.59,12L5,17.59L6.41,19L12,13.41L17.59,19L19,17.59L13.41,12L19,6.41Z" /></svg>

Przed

Szerokość:  |  Wysokość:  |  Rozmiar: 279 B

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 188 B

Wyświetl plik

@ -17,7 +17,7 @@ void OscirenderAudioProcessorEditor::registerFileRemovedCallback() {
});
}
OscirenderAudioProcessorEditor::OscirenderAudioProcessorEditor(OscirenderAudioProcessor& p) : CommonPluginEditor(p, "osci-render", "osci", 1100, 750), audioProcessor(p), collapseButton("Collapse", juce::Colours::white, juce::Colours::white, juce::Colours::white) {
OscirenderAudioProcessorEditor::OscirenderAudioProcessorEditor(OscirenderAudioProcessor& p) : CommonPluginEditor(p, "osci-render", "osci", 1100, 770), audioProcessor(p), collapseButton("Collapse", juce::Colours::white, juce::Colours::white, juce::Colours::white) {
// Register the file removal callback
registerFileRemovedCallback();

Wyświetl plik

@ -13,7 +13,7 @@ SettingsComponent::SettingsComponent(OscirenderAudioProcessor& p, OscirenderAudi
addChildComponent(frame);
double midiLayoutPreferredSize = std::any_cast<double>(audioProcessor.getProperty("midiLayoutPreferredSize", pluginEditor.CLOSED_PREF_SIZE));
double mainLayoutPreferredSize = std::any_cast<double>(audioProcessor.getProperty("mainLayoutPreferredSize", -0.4));
double mainLayoutPreferredSize = std::any_cast<double>(audioProcessor.getProperty("mainLayoutPreferredSize", -0.5));
midiLayout.setItemLayout(0, -0.1, -1.0, -(1.0 + midiLayoutPreferredSize));
midiLayout.setItemLayout(1, pluginEditor.RESIZER_BAR_SIZE, pluginEditor.RESIZER_BAR_SIZE, pluginEditor.RESIZER_BAR_SIZE);
@ -46,8 +46,6 @@ void SettingsComponent::resized() {
mainLayout.layOutComponents(columns, 3, dummy.getX(), dummy.getY(), dummy.getWidth(), dummy.getHeight(), false, true);
auto bounds = dummy2.getBounds();
perspective.setBounds(bounds.removeFromBottom(120));
bounds.removeFromBottom(pluginEditor.RESIZER_BAR_SIZE);
main.setBounds(bounds);
juce::Component* effectSettings = nullptr;
@ -65,6 +63,9 @@ void SettingsComponent::resized() {
dummyBounds.removeFromBottom(pluginEditor.RESIZER_BAR_SIZE);
}
perspective.setBounds(dummyBounds.removeFromBottom(120));
dummyBounds.removeFromBottom(pluginEditor.RESIZER_BAR_SIZE);
effects.setBounds(dummyBounds);
if (isVisible() && getWidth() > 0 && getHeight() > 0) {

Wyświetl plik

@ -1,6 +1,8 @@
#include "EffectTypeGridComponent.h"
#include "../LookAndFeel.h"
#include <unordered_set>
#include <algorithm>
#include <numeric>
EffectTypeGridComponent::EffectTypeGridComponent(OscirenderAudioProcessor& processor)
: audioProcessor(processor)
@ -31,14 +33,28 @@ void EffectTypeGridComponent::setupEffectItems()
// Get effect types directly from the audio processor's toggleableEffects
juce::SpinLock::ScopedLockType lock(audioProcessor.effectsLock);
for (const auto& effect : audioProcessor.toggleableEffects)
const int n = (int) audioProcessor.toggleableEffects.size();
std::vector<int> order(n);
std::iota(order.begin(), order.end(), 0);
std::sort(order.begin(), order.end(), [this](int a, int b) {
auto ea = audioProcessor.toggleableEffects[a];
auto eb = audioProcessor.toggleableEffects[b];
const int cmp = ea->getName().compareIgnoreCase(eb->getName());
if (cmp != 0)
return cmp < 0; // ascending alphabetical, case-insensitive
// Stable tie-breaker to ensure deterministic layout
return ea->getId().compare(eb->getId()) < 0;
});
for (int idx : order)
{
// Extract effect name from the effect ID or first parameter name
auto effect = audioProcessor.toggleableEffects[idx];
// Extract effect name from the effect
juce::String effectName = effect->getName();
// Create new item component
auto* item = new EffectTypeItemComponent(effectName, effect->getIcon(), effect->getId());
// Set up callback to forward effect selection
item->onEffectSelected = [this](const juce::String& effectId) {
if (onEffectSelected)
@ -53,9 +69,9 @@ void EffectTypeGridComponent::setupEffectItems()
juce::SpinLock::ScopedLockType lock(audioProcessor.effectsLock);
audioProcessor.clearPreviewEffect();
};
effectItems.add(item);
content.addAndMakeVisible(item);
effectItems.add(item);
content.addAndMakeVisible(item);
}
}

Wyświetl plik

@ -51,14 +51,23 @@
file="Resources/sosci/vector_display.sosci"/>
</GROUP>
<GROUP id="{82BCD6F1-A8BF-F30B-5587-81EE70168883}" name="svg">
<FILE id="FIXHhD" name="bit-crush.svg" compile="0" resource="1" file="Resources/svg/bit-crush.svg"/>
<FILE id="eAm6Vd" name="bulge.svg" compile="0" resource="1" file="Resources/svg/bulge.svg"/>
<FILE id="gqROYg" name="close.svg" compile="0" resource="1" file="Resources/svg/close.svg"/>
<FILE id="rl17ZK" name="cog.svg" compile="0" resource="1" file="Resources/svg/cog.svg"/>
<FILE id="bMtE0O" name="dash.svg" compile="0" resource="1" file="Resources/svg/dash.svg"/>
<FILE id="GmHXfS" name="delay.svg" compile="0" resource="1" file="Resources/svg/delay.svg"/>
<FILE id="sDajXu" name="delete.svg" compile="0" resource="1" file="Resources/svg/delete.svg"/>
<FILE id="IqXIZW" name="demo.svg" compile="0" resource="1" file="Resources/svg/demo.svg"/>
<FILE id="jhZqJb" name="distort.svg" compile="0" resource="1" file="Resources/svg/distort.svg"/>
<FILE id="YwkQpy" name="fixed_rotate.svg" compile="0" resource="1"
file="Resources/svg/fixed_rotate.svg"/>
<FILE id="WIkl6l" name="fullscreen.svg" compile="0" resource="1" file="Resources/svg/fullscreen.svg"/>
<FILE id="n1esUp" name="left_arrow.svg" compile="0" resource="1" file="Resources/svg/left_arrow.svg"/>
<FILE id="lVwGO7" name="link.svg" compile="0" resource="1" file="Resources/svg/link.svg"/>
<FILE id="LujqKC" name="lua.svg" compile="0" resource="1" file="Resources/svg/lua.svg"/>
<FILE id="PxYKbt" name="microphone.svg" compile="0" resource="1" file="Resources/svg/microphone.svg"/>
<FILE id="apDx43" name="multiplex.svg" compile="0" resource="1" file="Resources/svg/multiplex.svg"/>
<FILE id="WoY9r2" name="mute.svg" compile="0" resource="1" file="Resources/svg/mute.svg"/>
<FILE id="hJHxFY" name="open_in_new.svg" compile="0" resource="1" file="Resources/svg/open_in_new.svg"/>
<FILE id="pSc1mq" name="osci.svg" compile="0" resource="1" file="Resources/svg/osci.svg"/>
@ -70,11 +79,21 @@
<FILE id="n79IAy" name="record.svg" compile="0" resource="1" file="Resources/svg/record.svg"/>
<FILE id="WDxwSi" name="repeat.svg" compile="0" resource="1" file="Resources/svg/repeat.svg"/>
<FILE id="OaqZb1" name="right_arrow.svg" compile="0" resource="1" file="Resources/svg/right_arrow.svg"/>
<FILE id="HF5Lko" name="ripple.svg" compile="0" resource="1" file="Resources/svg/ripple.svg"/>
<FILE id="g91LQf" name="rotate.svg" compile="0" resource="1" file="Resources/svg/rotate.svg"/>
<FILE id="mplh74" name="scale.svg" compile="0" resource="1" file="Resources/svg/scale.svg"/>
<FILE id="vQyuyd" name="smoothing.svg" compile="0" resource="1" file="Resources/svg/smoothing.svg"/>
<FILE id="z3A7FT" name="spout.svg" compile="0" resource="1" file="Resources/svg/spout.svg"/>
<FILE id="wD6mre" name="stop.svg" compile="0" resource="1" file="Resources/svg/stop.svg"/>
<FILE id="OBmfqb" name="swirl.svg" compile="0" resource="1" file="Resources/svg/swirl.svg"/>
<FILE id="rXjNlx" name="threshold.svg" compile="0" resource="1" file="Resources/svg/threshold.svg"/>
<FILE id="rFYmV8" name="timer.svg" compile="0" resource="1" file="Resources/svg/timer.svg"/>
<FILE id="E16zAj" name="trace.svg" compile="0" resource="1" file="Resources/svg/trace.svg"/>
<FILE id="zQOV5n" name="translate.svg" compile="0" resource="1" file="Resources/svg/translate.svg"/>
<FILE id="pZPfFZ" name="vector-cancelling.svg" compile="0" resource="1"
file="Resources/svg/vector-cancelling.svg"/>
<FILE id="qC6QiP" name="volume.svg" compile="0" resource="1" file="Resources/svg/volume.svg"/>
<FILE id="EUejM5" name="wobble.svg" compile="0" resource="1" file="Resources/svg/wobble.svg"/>
</GROUP>
</GROUP>
<GROUP id="{75439074-E50C-362F-1EDF-8B4BE9011259}" name="Source">

Wyświetl plik

@ -50,15 +50,23 @@
file="Resources/sosci/vector_display.sosci"/>
</GROUP>
<GROUP id="{82BCD6F1-A8BF-F30B-5587-81EE70168883}" name="svg">
<FILE id="YzPzNV" name="bit-crush.svg" compile="0" resource="1" file="Resources/svg/bit-crush.svg"/>
<FILE id="CHkskO" name="bulge.svg" compile="0" resource="1" file="Resources/svg/bulge.svg"/>
<FILE id="k5TKs2" name="close.svg" compile="0" resource="1" file="Resources/svg/close.svg"/>
<FILE id="rl17ZK" name="cog.svg" compile="0" resource="1" file="Resources/svg/cog.svg"/>
<FILE id="XC04mb" name="dash.svg" compile="0" resource="1" file="Resources/svg/dash.svg"/>
<FILE id="qIMww8" name="delay.svg" compile="0" resource="1" file="Resources/svg/delay.svg"/>
<FILE id="sDajXu" name="delete.svg" compile="0" resource="1" file="Resources/svg/delete.svg"/>
<FILE id="IqXIZW" name="demo.svg" compile="0" resource="1" file="Resources/svg/demo.svg"/>
<FILE id="kTJy4S" name="distort.svg" compile="0" resource="1" file="Resources/svg/distort.svg"/>
<FILE id="YwkQpy" name="fixed_rotate.svg" compile="0" resource="1"
file="Resources/svg/fixed_rotate.svg"/>
<FILE id="WIkl6l" name="fullscreen.svg" compile="0" resource="1" file="Resources/svg/fullscreen.svg"/>
<FILE id="n1esUp" name="left_arrow.svg" compile="0" resource="1" file="Resources/svg/left_arrow.svg"/>
<FILE id="Q2mSgZ" name="link.svg" compile="0" resource="1" file="Resources/svg/link.svg"/>
<FILE id="e19TQV" name="lua.svg" compile="0" resource="1" file="Resources/svg/lua.svg"/>
<FILE id="PxYKbt" name="microphone.svg" compile="0" resource="1" file="Resources/svg/microphone.svg"/>
<FILE id="uEmfHD" name="multiplex.svg" compile="0" resource="1" file="Resources/svg/multiplex.svg"/>
<FILE id="WoY9r2" name="mute.svg" compile="0" resource="1" file="Resources/svg/mute.svg"/>
<FILE id="hJHxFY" name="open_in_new.svg" compile="0" resource="1" file="Resources/svg/open_in_new.svg"/>
<FILE id="pSc1mq" name="osci.svg" compile="0" resource="1" file="Resources/svg/osci.svg"/>
@ -70,11 +78,21 @@
<FILE id="n79IAy" name="record.svg" compile="0" resource="1" file="Resources/svg/record.svg"/>
<FILE id="WDxwSi" name="repeat.svg" compile="0" resource="1" file="Resources/svg/repeat.svg"/>
<FILE id="OaqZb1" name="right_arrow.svg" compile="0" resource="1" file="Resources/svg/right_arrow.svg"/>
<FILE id="gmY7I3" name="ripple.svg" compile="0" resource="1" file="Resources/svg/ripple.svg"/>
<FILE id="hmbfOe" name="rotate.svg" compile="0" resource="1" file="Resources/svg/rotate.svg"/>
<FILE id="JlQNYG" name="scale.svg" compile="0" resource="1" file="Resources/svg/scale.svg"/>
<FILE id="cPSI5m" name="smoothing.svg" compile="0" resource="1" file="Resources/svg/smoothing.svg"/>
<FILE id="z3A7FT" name="spout.svg" compile="0" resource="1" file="Resources/svg/spout.svg"/>
<FILE id="wD6mre" name="stop.svg" compile="0" resource="1" file="Resources/svg/stop.svg"/>
<FILE id="xs9WHW" name="swirl.svg" compile="0" resource="1" file="Resources/svg/swirl.svg"/>
<FILE id="rXjNlx" name="threshold.svg" compile="0" resource="1" file="Resources/svg/threshold.svg"/>
<FILE id="rFYmV8" name="timer.svg" compile="0" resource="1" file="Resources/svg/timer.svg"/>
<FILE id="xcg1tN" name="trace.svg" compile="0" resource="1" file="Resources/svg/trace.svg"/>
<FILE id="JOyYQQ" name="translate.svg" compile="0" resource="1" file="Resources/svg/translate.svg"/>
<FILE id="km6nQQ" name="vector-cancelling.svg" compile="0" resource="1"
file="Resources/svg/vector-cancelling.svg"/>
<FILE id="qC6QiP" name="volume.svg" compile="0" resource="1" file="Resources/svg/volume.svg"/>
<FILE id="Zc5gBX" name="wobble.svg" compile="0" resource="1" file="Resources/svg/wobble.svg"/>
</GROUP>
</GROUP>
<GROUP id="{75439074-E50C-362F-1EDF-8B4BE9011259}" name="Source">