X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=_Presets.pde;h=f4371d600812899eaf88d8643e06e0c7c4d5b9e2;hb=66067e53a4adab2860ba09f88e2c3f8984ff65ba;hp=ada8bb1ba21a5f986d2dde8a05b5484e06b495a1;hpb=e0794d3a20f8c2c301f6c7541925f3d403277fab;p=SugarCubes.git diff --git a/_Presets.pde b/_Presets.pde index ada8bb1..f4371d6 100644 --- a/_Presets.pde +++ b/_Presets.pde @@ -2,9 +2,10 @@ interface PresetListener { public void onPresetLoaded(Preset preset); public void onPresetDirty(Preset preset); public void onPresetStored(Preset preset); + public void onPresetUnloaded(); } -class PresetManager { +class PresetManager implements LXParameter.Listener { public static final int NUM_PRESETS = 8; public static final String FILENAME = "data/presets.txt"; @@ -13,7 +14,8 @@ class PresetManager { private final Preset[] presets = new Preset[NUM_PRESETS]; private final List listeners = new ArrayList(); - private LXPattern loadedPreset = null; + private Preset loadedPreset = null; + private LXPattern loadedPattern = null; PresetManager() { for (int i = 0; i < presets.length; ++i) { @@ -31,6 +33,28 @@ class PresetManager { } } } + for (Engine.Deck deck : lx.engine.getDecks()) { + deck.addListener(new Engine.AbstractListener() { + public void patternDidChange(Engine.Deck deck, LXPattern pattern) { + if (midiEngine.getFocusedDeck() == deck) { + if (pattern != loadedPattern) { + onPresetDirty(); + } + } + } + }); + } + } + + public void setMidiEngine(MidiEngine midiEngine) { + midiEngine.addListener(new MidiEngineListener() { + public void onFocusedDeck(int deckIndex) { + loadedPreset = null; + for (PresetListener listener : listeners) { + listener.onPresetUnloaded(); + } + } + }); } public void addListener(PresetListener listener) { @@ -43,12 +67,40 @@ class PresetManager { public void store(int index) { presets[index].store(midiEngine.getFocusedPattern()); + for (PresetListener listener : listeners) { + listener.onPresetStored(presets[index]); + } + select(index); } public void onPresetLoaded(Preset preset, LXPattern pattern) { + if (loadedPattern != pattern) { + if (loadedPattern != null) { + for (LXParameter p : loadedPattern.getParameters()) { + ((LXListenableParameter) p).removeListener(this); + } + } + } for (PresetListener listener : listeners) { listener.onPresetLoaded(preset); } + loadedPreset = preset; + loadedPattern = pattern; + for (LXParameter p : loadedPattern.getParameters()) { + ((LXListenableParameter) p).addListener(this); + } + } + + private void onPresetDirty() { + if (loadedPreset != null) { + for (PresetListener listener : listeners) { + listener.onPresetDirty(loadedPreset); + } + } + } + + public void onParameterChanged(LXParameter p) { + onPresetDirty(); } public void write() {