Apat and added acos to spherycolor, not included in color yet but working
[SugarCubes.git] / _UIImplementation.pde
index c2d073cb24d0a4d71e55817a5480504950bae0b3..0ea8073ddb57d6701a6a0a1b55df6fc88c89bbe8 100644 (file)
@@ -13,9 +13,9 @@
  
 class UIPatternDeck extends UIWindow {
     
-  Engine.Deck deck;
+  LXDeck deck;
   
-  public UIPatternDeck(Engine.Deck deck, String label, float x, float y, float w, float h) {
+  public UIPatternDeck(LXDeck deck, String label, float x, float y, float w, float h) {
     super(label, x, y, w, h);
     this.deck = deck;
     int yp = titleHeight;
@@ -24,7 +24,7 @@ class UIPatternDeck extends UIWindow {
     for (LXPattern p : deck.getPatterns()) {
       items.add(new PatternScrollItem(p));
     }    
-    final UIScrollList patternList = new UIScrollList(1, yp, w-2, 160).setItems(items);
+    final UIScrollList patternList = new UIScrollList(1, yp, w-2, 140).setItems(items);
     patternList.addToContainer(this);
     yp += patternList.h + 10;
     
@@ -34,11 +34,11 @@ class UIPatternDeck extends UIWindow {
       parameterKnobs[ki].addToContainer(this);
     }
     
-    Engine.Listener lxListener = new Engine.Listener() {
-      public void patternWillChange(Engine.Deck deck, LXPattern pattern, LXPattern nextPattern) {
+    LXDeck.Listener lxListener = new LXDeck.AbstractListener() {
+      public void patternWillChange(LXDeck deck, LXPattern pattern, LXPattern nextPattern) {
         patternList.redraw();
       }
-      public void patternDidChange(Engine.Deck deck, LXPattern pattern) {
+      public void patternDidChange(LXDeck deck, LXPattern pattern) {
         patternList.redraw();
         int pi = 0;
         for (LXParameter parameter : pattern.getParameters()) {
@@ -86,48 +86,69 @@ class UIPatternDeck extends UIWindow {
   }
 }
 
-class UICrossfader extends UIWindow {
-    
-  public UICrossfader(float x, float y, float w, float h) {
-    super("CROSSFADER", x, y, w, h);
-
+class UIBlendMode extends UIWindow {
+  public UIBlendMode(float x, float y, float w, float h) {
+    super("BLEND MODE", x, y, w, h);
     List<ScrollItem> items = new ArrayList<ScrollItem>();
-    for (LXTransition t : transitions) {
+    for (LXTransition t : glucose.getTransitions()) {
       items.add(new TransitionScrollItem(t));
-    }    
-    new UIScrollList(1, titleHeight, w-2, 120).setItems(items).addToContainer(this);
-    new UIParameterSlider(4, titleHeight + 126, w-10, 24).setParameter(lx.engine.getDeck(1).getCrossfader()).addToContainer(this);
-    new UIToggleSet(4, 182, w-10, 20) {
-      protected void onToggle(String value) {
-        displayMode = value;
+    }
+    final UIScrollList tList;
+    (tList = new UIScrollList(1, titleHeight, w-2, 60)).setItems(items).addToContainer(this);
+
+    lx.engine.getDeck(GLucose.RIGHT_DECK).addListener(new LXDeck.AbstractListener() {
+      public void faderTransitionDidChange(LXDeck deck, LXTransition transition) {
+        tList.redraw();
       }
-    }.setOptions(new String[] { "A", "COMP", "B" }).setValue(displayMode = "COMP").addToContainer(this);
+    });
   }
-}
 
-class TransitionScrollItem extends AbstractScrollItem {
-  private final LXTransition transition;
-  private String label;
-  
-  TransitionScrollItem(LXTransition transition) {
-    this.transition = transition;
-    label = className(transition, "Transition");
+  class TransitionScrollItem extends AbstractScrollItem {
+    private final LXTransition transition;
+    private String label;
+    
+    TransitionScrollItem(LXTransition transition) {
+      this.transition = transition;
+      label = className(transition, "Transition");
+    }
+    
+    public String getLabel() {
+      return label;
+    }
+    
+    public boolean isSelected() {
+      return transition == glucose.getSelectedTransition();
+    }
+    
+    public boolean isPending() {
+      return false;
+    }
+    
+    public void onMousePressed() {
+      glucose.setSelectedTransition(transition);
+    }
   }
+
+}
+
+class UICrossfader extends UIWindow {
   
-  public String getLabel() {
-    return label;
-  }
+  private final UIToggleSet displayMode;
   
-  public boolean isSelected() {
-    return transition == lx.engine.getDeck(1).getBlendTransition();
+  public UICrossfader(float x, float y, float w, float h) {
+    super("CROSSFADER", x, y, w, h);
+
+    new UIParameterSlider(4, titleHeight, w-9, 32).setParameter(lx.engine.getDeck(GLucose.RIGHT_DECK).getFader()).addToContainer(this);
+    (displayMode = new UIToggleSet(4, titleHeight + 36, w-9, 20)).setOptions(new String[] { "A", "COMP", "B" }).setValue("COMP").addToContainer(this);
   }
   
-  public boolean isPending() {
-    return false;
+  public UICrossfader setDisplayMode(String value) {
+    displayMode.setValue(value);
+    return this;
   }
   
-  public void onMousePressed() {
-    lx.engine.getDeck(1).setBlendTransition(transition);
+  public String getDisplayMode() {
+    return displayMode.getValue();
   }
 }
 
@@ -327,9 +348,8 @@ class UIMapping extends UIWindow {
     }).setRange(1, glucose.model.cubes.size()).addToContainer(this);
     yp += 24;
     
-    new UILabel(4, yp+8, w-10, 20).setLabel("COLORS").addToContainer(this);
-    yp += 24;
-    
+    yp += 10;
+        
     new UIScrollList(1, yp, w-2, 60).setItems(Arrays.asList(new ScrollItem[] {
       new ColorScrollItem(ColorScrollItem.COLOR_RED),
       new ColorScrollItem(ColorScrollItem.COLOR_GREEN),
@@ -402,7 +422,7 @@ class UIMapping extends UIWindow {
       return false;
     }
     
-    public void select() {
+    public void onMousePressed() {
       switch (colorChannel) {
         case COLOR_RED: mappingTool.channelModeRed = !mappingTool.channelModeRed; break;
         case COLOR_GREEN: mappingTool.channelModeGreen = !mappingTool.channelModeGreen; break;
@@ -442,6 +462,7 @@ class UIDebugText extends UIContext {
       pg.fill(#444444);
       pg.rect(0, 0, w, h);
       pg.textFont(defaultItemFont);
+      pg.textSize(10);
       pg.textAlign(LEFT, TOP);
       pg.fill(#cccccc);
       pg.text(line1, 4, 4);
@@ -450,6 +471,70 @@ class UIDebugText extends UIContext {
   }
 }
 
+class UISpeed extends UIWindow {
+  
+  final BasicParameter speed;
+  
+  UISpeed(float x, float y, float w, float h) {
+    super("SPEED", x, y, w, h);
+    speed = new BasicParameter("SPEED", 0.5);
+    new UIParameterSlider(4, titleHeight, w-10, 20)
+    .setParameter(speed.addListener(new LXParameterListener() {
+      public void onParameterChanged(LXParameter parameter) {
+        lx.setSpeed(parameter.getValuef() * 2);
+      }
+    })).addToContainer(this);
+  }
+}
+
+class UIMidi extends UIWindow {
+  
+  private final UIToggleSet deckMode;
+  private final UIButton logMode;
+  
+  UIMidi(final MidiEngine midiEngine, float x, float y, float w, float h) {
+    super("MIDI", x, y, w, h);
+
+    // Processing compiler doesn't seem to get that list of class objects also conform to interface
+    List<ScrollItem> scrollItems = new ArrayList<ScrollItem>();
+    for (SCMidiInput mc : midiEngine.getControllers()) {
+      scrollItems.add(mc);
+    }
+    final UIScrollList scrollList;
+    (scrollList = new UIScrollList(1, titleHeight, w-2, 100)).setItems(scrollItems).addToContainer(this);
+    (deckMode = new UIToggleSet(4, 130, 90, 20) {
+      protected void onToggle(String value) {
+        midiEngine.setFocusedDeck(value == "A" ? 0 : 1);
+      }
+    }).setOptions(new String[] { "A", "B" }).addToContainer(this);
+    (logMode = new UIButton(98, 130, w-103, 20)).setLabel("LOG").addToContainer(this);
+    
+    SCMidiInputListener listener = new SCMidiInputListener() {
+      public void onEnabled(SCMidiInput controller, boolean enabled) {
+        scrollList.redraw();
+      }
+    };
+    for (SCMidiInput mc : midiEngine.getControllers()) {
+      mc.addListener(listener);
+    }
+    
+    midiEngine.addListener(new MidiEngineListener() {
+      public void onFocusedDeck(int deckIndex) {
+        deckMode.setValue(deckIndex == 0 ? "A" : "B");
+      }
+    });
+
+  }
+  
+  public boolean logMidi() {
+    return logMode.isActive();
+  }
+  
+  public LXDeck getFocusedDeck() {
+    return lx.engine.getDeck(deckMode.getValue() == "A" ? GLucose.LEFT_DECK : GLucose.RIGHT_DECK);
+  }
+}
+
 String className(Object p, String suffix) {
   String s = p.getClass().getName();
   int li;