+ class DeckState implements LXParameterListener {
+
+ final LXDeck deck;
+ LXPattern selectedPattern = null;
+ Preset selectedPreset = null;
+ boolean isDirty = false;
+
+ DeckState(LXDeck deck) {
+ this.deck = deck;
+ deck.addListener(new LXDeck.AbstractListener() {
+ public void patternDidChange(LXDeck deck, LXPattern pattern) {
+ if (selectedPattern != pattern) {
+ onDirty();
+ }
+ }
+ });
+ }
+
+ private void onSelect(Preset preset, LXPattern pattern) {
+ if ((selectedPattern != pattern) && (selectedPattern != null)) {
+ for (LXParameter p : selectedPattern.getParameters()) {
+ ((LXListenableParameter) p).removeListener(this);
+ }
+ }
+ selectedPreset = preset;
+ selectedPattern = pattern;
+ isDirty = false;
+ for (LXParameter p : pattern.getParameters()) {
+ ((LXListenableParameter) p).addListener(this);
+ }
+ for (PresetListener listener : listeners) {
+ listener.onPresetSelected(deck, preset);
+ }
+ }
+
+ private void onStore(Preset preset, LXPattern pattern) {
+ selectedPreset = preset;
+ selectedPattern = pattern;
+ isDirty = false;
+ for (PresetListener listener : listeners) {
+ listener.onPresetStored(deck, preset);
+ }
+ }
+
+ private void onDirty() {
+ if (selectedPreset != null) {
+ isDirty = true;
+ for (PresetListener listener : listeners) {
+ listener.onPresetDirty(deck, selectedPreset);
+ }
+ }
+ }
+
+ public void onParameterChanged(LXParameter parameter) {
+ onDirty();
+ }
+ }
+
+ private final DeckState[] deckState = new DeckState[lx.engine.getDecks().size()];