New preset listening code and keyboard buttons for presets
[SugarCubes.git] / _MIDI.pde
index 2abd30de260961aff679082b277dec2aeee86156..5747a1fce2c6836572f8e8c4ab52d1d65ecb0317 100644 (file)
--- a/_MIDI.pde
+++ b/_MIDI.pde
@@ -84,7 +84,7 @@ class MidiEngine {
     return this.midiControllers;
   }
 
-  public Engine.Deck getFocusedDeck() {
+  public LXDeck getFocusedDeck() {
     return lx.engine.getDeck(activeDeckIndex);
   }
 
@@ -352,7 +352,7 @@ public class APC40MidiInput extends GenericDeviceMidiInput {
 
   private boolean shiftOn = false;
   private LXEffect releaseEffect = null;
-  final private Engine.Deck targetDeck;
+  final private LXDeck targetDeck;
   
   APC40MidiInput(MidiEngine midiEngine, MidiInputDevice d) {
     this(midiEngine, d, -1);
@@ -363,11 +363,8 @@ public class APC40MidiInput extends GenericDeviceMidiInput {
     targetDeck = (deckIndex < 0) ? null : lx.engine.getDecks().get(deckIndex);
   }
   
-  protected Engine.Deck getTargetDeck() {
-    if (targetDeck != null) {
-      return targetDeck;
-    }
-    return midiEngine.getFocusedDeck();
+  protected LXDeck getTargetDeck() {
+    return (targetDeck != null) ? targetDeck : midiEngine.getFocusedDeck();
   }
   
   protected SCPattern getTargetPattern() {
@@ -443,7 +440,7 @@ public class APC40MidiInput extends GenericDeviceMidiInput {
 
     // Crossfader
     case 15:
-      lx.engine.getDeck(1).getCrossfader().setValue(value);
+      lx.engine.getDeck(GLucose.RIGHT_DECK).getFader().setValue(value);
       break;
     }
     
@@ -585,9 +582,9 @@ public class APC40MidiInput extends GenericDeviceMidiInput {
     case 52: // CLIP STOP
       if (nChan < PresetManager.NUM_PRESETS) {
         if (shiftOn) {
-          presetManager.store(nChan);
+          presetManager.store(getTargetDeck(), nChan);
         } else {
-          presetManager.select(nChan);
+          presetManager.select(getTargetDeck(), nChan);
         }
       }
       break;
@@ -665,7 +662,7 @@ class APC40MidiOutput implements LXParameter.Listener, GridOutput {
   private final MidiOutput output;
   private LXPattern focusedPattern = null;
   private LXEffect focusedEffect = null;
-  private final Engine.Deck targetDeck;
+  private final LXDeck targetDeck;
   
   APC40MidiOutput(MidiEngine midiEngine, MidiOutputDevice device) {
     this(midiEngine, device, -1);
@@ -680,6 +677,9 @@ class APC40MidiOutput implements LXParameter.Listener, GridOutput {
       midiEngine.addListener(new MidiEngineListener() {
         public void onFocusedDeck(int deckIndex) {
           resetPatternParameters();
+          for (int i = 0; i < 8; ++i) {
+            output.sendNoteOn(i, 52, 0);
+          }
         }
       });
     }
@@ -688,31 +688,34 @@ class APC40MidiOutput implements LXParameter.Listener, GridOutput {
         resetEffectParameters();
       }
     });
-    Engine.Listener deckListener = new Engine.AbstractListener() {
-      public void patternDidChange(Engine.Deck deck, LXPattern pattern) {
-        resetPatternParameters();
+    LXDeck.Listener deckListener = new LXDeck.AbstractListener() {
+      public void patternDidChange(LXDeck deck, LXPattern pattern) {
+        if (deck == getTargetDeck()) {
+          resetPatternParameters();
+        }
       }
     };
-    for (Engine.Deck d : lx.engine.getDecks()) {
+    for (LXDeck d : lx.engine.getDecks()) {
       if (targetDeck == null || d == targetDeck) {
         d.addListener(deckListener);
       }
     }
     presetManager.addListener(new PresetListener() {
-      public void onPresetLoaded(Preset preset) {
-        for (int i = 0; i < 8; ++i) {
-          output.sendNoteOn(i, 52, (preset.index == i) ? 1 : 0);
+      public void onPresetSelected(LXDeck deck, Preset preset) {
+        if (deck == getTargetDeck()) {
+          for (int i = 0; i < 8; ++i) {
+            output.sendNoteOn(i, 52, (preset.index == i) ? 1 : 0);
+          }
         }
       }
-      public void onPresetDirty(Preset preset) {
-        output.sendNoteOn(preset.index, 52, 2);
-      }
-      public void onPresetStored(Preset preset) {
-        onPresetLoaded(preset);
+      public void onPresetDirty(LXDeck deck, Preset preset) {
+        if (deck == getTargetDeck()) {
+          output.sendNoteOn(preset.index, 52, 2);
+        }
       }
-      public void onPresetUnloaded() {
-        for (int i = 0; i < 8; ++i) {
-          output.sendNoteOn(i, 52, 0);
+      public void onPresetStored(LXDeck deck, Preset preset) {
+        if (deck == getTargetDeck()) {
+          onPresetStored(deck, preset);
         }
       }
     });
@@ -733,7 +736,7 @@ class APC40MidiOutput implements LXParameter.Listener, GridOutput {
   }
   
   private void setDPatternOutputs() {
-    for (Engine.Deck deck : lx.engine.getDecks()) {
+    for (LXDeck deck : lx.engine.getDecks()) {
       if (targetDeck == null || deck == targetDeck) {
         for (LXPattern pattern : deck.getPatterns()) {
           if (pattern instanceof DPat) {
@@ -744,11 +747,8 @@ class APC40MidiOutput implements LXParameter.Listener, GridOutput {
     }
   }
   
-  protected Engine.Deck getTargetDeck() {
-    if (targetDeck != null) {
-      return targetDeck;
-    }
-    return midiEngine.getFocusedDeck();
+  protected LXDeck getTargetDeck() {
+    return (targetDeck != null) ? targetDeck : midiEngine.getFocusedDeck();
   }
 
   private void resetParameters() {