Add full DPat compatibility to presets
authorMark Slee <mcslee@Mark-Slees-MacBook-Pro.local>
Sat, 19 Oct 2013 21:26:17 +0000 (14:26 -0700)
committerMark Slee <mcslee@Mark-Slees-MacBook-Pro.local>
Sat, 19 Oct 2013 21:28:30 +0000 (14:28 -0700)
DanUtil.pde
_MIDI.pde
_Presets.pde

index 4861f470e35c2ed184623d95a052e142f393c200..84bcdb51b88038b794c5bad4a30dc5d13f535885 100644 (file)
@@ -152,14 +152,14 @@ public class DPat extends SCPattern
 
     boolean    noteOff(Note note) {
                int row = note.getPitch(), col = note.getChannel();
-               for (int i=0; i<bools.size(); i++) if (bools.get(i).set(row, col, false)) return true;
+               for (int i=0; i<bools.size(); i++) if (bools.get(i).set(row, col, false)) { presetManager.dirty(this); return true; }
                updateLights(); return false;
        }
 
     boolean    noteOn(Note note) {
                int row = note.getPitch(), col = note.getChannel();
-               for (int i=0; i<picks.size(); i++) if (picks.get(i).set(row, col))                      return true;
-               for (int i=0; i<bools.size(); i++) if (bools.get(i).set(row, col, true))        return true;
+               for (int i=0; i<picks.size(); i++) if (picks.get(i).set(row, col))                      { presetManager.dirty(this); return true; }
+               for (int i=0; i<bools.size(); i++) if (bools.get(i).set(row, col, true))        { presetManager.dirty(this); return true; }
                if (row == 84 && col==0) { onReset(); return true; }
                println("row: " + row + "  col:   " + col); return false;
        }
@@ -169,6 +169,7 @@ public class DPat extends SCPattern
                for (int i=0; i<params.size(); i++) params.get(i).reset();
                for (int i=0; i<bools .size(); i++) bools.get(i).reset();
                for (int i=0; i<picks .size(); i++) picks.get(i).reset();
+               presetManager.dirty(this); 
                updateLights(); 
        }
 
index 79c3860e487aa74489806029fa34eebe65bc1dd1..535194f8264d63d40c7cf403464fde4cc841b666 100644 (file)
--- a/_MIDI.pde
+++ b/_MIDI.pde
@@ -706,6 +706,9 @@ class APC40MidiOutput implements LXParameter.Listener, GridOutput {
     if (focusedPattern instanceof DPat) {
       ((DPat)focusedPattern).updateLights();
     } else {
+      for (int j = 0; j < 8; ++j) {
+        output.sendNoteOn(j, 48, 0);
+      }
       for (int row = 0; row < 7; ++row) {
         for (int col = 0; col < 8; ++col) {
           setGridState(row, col, 0);
index f4371d600812899eaf88d8643e06e0c7c4d5b9e2..2f716f2f1da9b27246137dda3116136b988460b8 100644 (file)
@@ -61,6 +61,12 @@ class PresetManager implements LXParameter.Listener {
     listeners.add(listener);
   }
 
+  public void dirty(LXPattern pattern) {
+    if (loadedPattern == pattern) {
+      onPresetDirty();
+    }
+  }
+
   public void select(int index) {
     presets[index].select();
   }
@@ -161,6 +167,15 @@ class Preset {
     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();
   }
   
@@ -174,8 +189,25 @@ class Preset {
               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;
       }