public void onPresetLoaded(Preset preset);
public void onPresetDirty(Preset preset);
public void onPresetStored(Preset preset);
+ public void onPresetUnloaded();
}
class PresetManager implements LXParameter.Listener {
}
}
}
+ 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) {
listeners.add(listener);
}
- public void select(int index) {
- presets[index].select();
+ public void dirty(LXPattern pattern) {
+ if (loadedPattern == pattern) {
+ onPresetDirty();
+ }
+ }
+
+ public void select(Engine.Deck deck, int index) {
+ presets[index].select(deck);
}
- public void store(int index) {
+ public void store(Engine.Deck deck, int index) {
presets[index].store(midiEngine.getFocusedPattern());
- select(index);
+ for (PresetListener listener : listeners) {
+ listener.onPresetStored(presets[index]);
+ }
+ select(deck, index);
}
public void onPresetLoaded(Preset preset, LXPattern pattern) {
}
}
- public void onParameterChanged(LXParameter p) {
- for (PresetListener listener : listeners) {
- listener.onPresetDirty(loadedPreset);
+ private void onPresetDirty() {
+ if (loadedPreset != null) {
+ for (PresetListener listener : listeners) {
+ listener.onPresetDirty(loadedPreset);
+ }
}
}
+ public void onParameterChanged(LXParameter p) {
+ onPresetDirty();
+ }
+
public void write() {
String[] lines = new String[NUM_PRESETS];
int i = 0;
for (LXParameter p : pattern.getParameters()) {
parameters.put(p.getLabel(), p.getValuef());
}
+ if (pattern instanceof DPat) {
+ DPat dpattern = (DPat) pattern;
+ for (DBool bool : dpattern.bools) {
+ parameters.put(bool.tag, bool.b ? 1.f : 0.f);
+ }
+ for (Pick pick : dpattern.picks) {
+ parameters.put(pick.tag, pick.CurRow + pick.CurCol/100.f);
+ }
+ }
manager.write();
}
- public void select() {
- Engine.Deck deck = midiEngine.getFocusedDeck();
+ public void select(Engine.Deck deck) {
for (LXPattern pattern : deck.getPatterns()) {
if (pattern.getClass().getName().equals(className)) {
for (String pLabel : parameters.keySet()) {
p.setValue(parameters.get(pLabel));
}
}
+ if (pattern instanceof DPat) {
+ DPat dpattern = (DPat) pattern;
+ for (DBool bool : dpattern.bools) {
+ if (bool.tag.equals(pLabel)) {
+ bool.set(bool.row, bool.col, parameters.get(pLabel) > 0);
+ }
+ }
+ for (Pick pick : dpattern.picks) {
+ if (pick.tag.equals(pLabel)) {
+ float f = parameters.get(pLabel);
+ pick.set((int) floor(f), (int) round((f%1)*100.));
+ }
+ }
+ }
}
deck.goPattern(pattern);
+ if (pattern instanceof DPat) {
+ ((DPat)pattern).updateLights();
+ }
manager.onPresetLoaded(this, pattern);
break;
}