Some cleanups and listen to deck for transition changes
[SugarCubes.git] / _UIImplementation.pde
index c8b99306d3f6eb9a3c4311872f5a21c580687844..d25df48ade2c65802c5d7daebcdf7572953a8d5d 100644 (file)
@@ -34,7 +34,7 @@ class UIPatternDeck extends UIWindow {
       parameterKnobs[ki].addToContainer(this);
     }
     
-    Engine.Listener lxListener = new Engine.Listener() {
+    Engine.Listener lxListener = new Engine.AbstractListener() {
       public void patternWillChange(Engine.Deck deck, LXPattern pattern, LXPattern nextPattern) {
         patternList.redraw();
       }
@@ -80,28 +80,37 @@ class UIPatternDeck extends UIWindow {
       return deck.getNextPattern() == pattern;
     }
     
-    public void select() {
+    public void onMousePressed() {
       deck.goPattern(pattern);
     }
   }
 }
 
 class UICrossfader extends UIWindow {
-    
+  
+  private final UIToggleSet displayMode;
+  
   public UICrossfader(float x, float y, float w, float h) {
     super("CROSSFADER", 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, 60).setItems(items).addToContainer(this);
-    new UIParameterSlider(6, titleHeight + 66, w-12, 24).setParameter(lx.engine.getDeck(1).getCrossfader()).addToContainer(this);
-    new UIToggleSet(6, 122, w-12, 20) {
-      protected void onToggle(String value) {
-        displayMode = value;
+    }
+    final UIScrollList tList;
+    (tList = 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);
+    (displayMode = new UIToggleSet(4, 182, w-10, 20)).setOptions(new String[] { "A", "COMP", "B" }).setValue("COMP").addToContainer(this);
+    
+    lx.engine.getDeck(1).addListener(new Engine.AbstractListener() {
+      public void blendTransitionDidChange(Engine.Deck deck, LXTransition transition) {
+        tList.redraw();
       }
-    }.setOptions(new String[] { "A", "COMP", "B" }).setValue(displayMode = "COMP").addToContainer(this);
+    });
+  }
+  
+  public String getDisplayMode() {
+    return displayMode.getValue();
   }
 }
 
@@ -119,15 +128,15 @@ class TransitionScrollItem extends AbstractScrollItem {
   }
   
   public boolean isSelected() {
-    return transition == lx.engine.getDeck(1).getBlendTransition();
+    return transition == glucose.getSelectedTransition();
   }
   
   public boolean isPending() {
     return false;
   }
   
-  public void select() {
-    lx.engine.getDeck(1).setBlendTransition(transition);
+  public void onMousePressed() {
+    glucose.setSelectedTransition(transition);
   }
 }
 
@@ -192,10 +201,6 @@ class UIEffects extends UIWindow {
       return effect.isEnabled();
     }
     
-    public void select() {
-      glucose.setSelectedEffect(effect);
-    }
-    
     public void onMousePressed() {
       if (glucose.getSelectedEffect() == effect) {
         if (effect.isMomentary()) {
@@ -203,6 +208,8 @@ class UIEffects extends UIWindow {
         } else {
           effect.toggle();
         }
+      } else {
+        glucose.setSelectedEffect(effect);
       }
     }
     
@@ -220,21 +227,39 @@ class UIOutput extends UIWindow {
   public UIOutput(float x, float y, float w, float h) {
     super("OUTPUT", x, y, w, h);
     float yp = titleHeight;
+    
+    final UIScrollList outputs = new UIScrollList(1, titleHeight, w-2, 80);
+    
+    List<ScrollItem> items = new ArrayList<ScrollItem>();
     for (final PandaDriver panda : pandaBoards) {
-      final UIButton button = new UIButton(4, yp, w-8, 20) {
-        protected void onToggle(boolean active) {
-          panda.setEnabled(active);
-        }
-      }.setLabel(panda.ip);
-      button.addToContainer(this);
+      items.add(new PandaScrollItem(panda));
       panda.setListener(new PandaDriver.Listener() {
         public void onToggle(boolean active) {
-          button.setActive(active);
+           outputs.redraw();
         }
       });
-      yp += 24;
     }
-  }  
+    outputs.setItems(items).addToContainer(this);
+  } 
+  class PandaScrollItem extends AbstractScrollItem {
+    final PandaDriver panda;
+    PandaScrollItem(PandaDriver panda) {
+      this.panda = panda;
+    }
+    
+    public String getLabel() {
+      return panda.ip;
+    }
+    
+    public boolean isSelected() {
+      return panda.isEnabled();
+    }
+    
+    public void onMousePressed() {
+      panda.toggle();
+    }
+  } 
 }
 
 class UITempo extends UIWindow {
@@ -243,7 +268,7 @@ class UITempo extends UIWindow {
   
   UITempo(float x, float y, float w, float h) {
     super("TEMPO", x, y, w, h);
-    tempoButton = new UIButton(4, titleHeight, w-8, 20) {
+    tempoButton = new UIButton(4, titleHeight, w-10, 20) {
       protected void onToggle(boolean active) {
         if (active) {
           lx.tempo.tap();
@@ -285,7 +310,7 @@ class UIMapping extends UIWindow {
     mappingTool = tool;
     
     int yp = titleHeight;
-    new UIToggleSet(4, yp, w-8, 20) {
+    new UIToggleSet(4, yp, w-10, 20) {
       protected void onToggle(String value) {
         if (value == MAP_MODE_ALL) mappingTool.mappingMode = mappingTool.MAPPING_MODE_ALL;
         else if (value == MAP_MODE_CHANNEL) mappingTool.mappingMode = mappingTool.MAPPING_MODE_CHANNEL;
@@ -293,25 +318,25 @@ class UIMapping extends UIWindow {
       }
     }.setOptions(new String[] { MAP_MODE_ALL, MAP_MODE_CHANNEL, MAP_MODE_CUBE }).addToContainer(this);
     yp += 24;
-    new UILabel(4, yp+8, w-8, 20).setLabel("CHANNEL ID").addToContainer(this);
+    new UILabel(4, yp+8, w-10, 20).setLabel("CHANNEL ID").addToContainer(this);
     yp += 24;
-    (channelBox = new UIIntegerBox(4, yp, w-8, 20) {
+    (channelBox = new UIIntegerBox(4, yp, w-10, 20) {
       protected void onValueChange(int value) {
         mappingTool.setChannel(value-1);
       }
     }).setRange(1, mappingTool.numChannels()).addToContainer(this);
     yp += 24;
     
-    new UILabel(4, yp+8, w-8, 20).setLabel("CUBE ID").addToContainer(this);
+    new UILabel(4, yp+8, w-10, 20).setLabel("CUBE ID").addToContainer(this);
     yp += 24;
-    (cubeBox = new UIIntegerBox(4, yp, w-8, 20) {
+    (cubeBox = new UIIntegerBox(4, yp, w-10, 20) {
       protected void onValueChange(int value) {
         mappingTool.setCube(value-1);
       }
     }).setRange(1, glucose.model.cubes.size()).addToContainer(this);
     yp += 24;
     
-    new UILabel(4, yp+8, w-8, 20).setLabel("COLORS").addToContainer(this);
+    new UILabel(4, yp+8, w-10, 20).setLabel("COLORS").addToContainer(this);
     yp += 24;
     
     new UIScrollList(1, yp, w-2, 60).setItems(Arrays.asList(new ScrollItem[] {
@@ -321,10 +346,10 @@ class UIMapping extends UIWindow {
     })).addToContainer(this);
     yp += 64;
 
-    new UILabel(4, yp+8, w-8, 20).setLabel("STRIP MODE").addToContainer(this);
+    new UILabel(4, yp+8, w-10, 20).setLabel("STRIP MODE").addToContainer(this);
     yp += 24;
     
-    new UIToggleSet(4, yp, w-8, 20) {
+    new UIToggleSet(4, yp, w-10, 20) {
       protected void onToggle(String value) {
         if (value == CUBE_MODE_ALL) mappingTool.cubeMode = mappingTool.CUBE_MODE_ALL;
         else if (value == CUBE_MODE_STRIP) mappingTool.cubeMode = mappingTool.CUBE_MODE_SINGLE_STRIP;
@@ -333,10 +358,10 @@ class UIMapping extends UIWindow {
     }.setOptions(new String[] { CUBE_MODE_ALL, CUBE_MODE_STRIP, CUBE_MODE_PATTERN }).addToContainer(this);
     
     yp += 24;
-    new UILabel(4, yp+8, w-8, 20).setLabel("STRIP ID").addToContainer(this);
+    new UILabel(4, yp+8, w-10, 20).setLabel("STRIP ID").addToContainer(this);
     
     yp += 24;
-    (stripBox = new UIIntegerBox(4, yp, w-8, 20) {
+    (stripBox = new UIIntegerBox(4, yp, w-10, 20) {
       protected void onValueChange(int value) {
         mappingTool.setStrip(value-1);
       }