X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=UIImplementation.pde;h=0e46e576894b00c7fae89f64848431d6f83a130d;hb=e0b9d8726c661f54f47340449037ac7f6b410de6;hp=0ea8073ddb57d6701a6a0a1b55df6fc88c89bbe8;hpb=cc9e8c8be45767207e09c434bad100b0156877e6;p=SugarCubes.git diff --git a/UIImplementation.pde b/UIImplementation.pde index 0ea8073..0e46e57 100644 --- a/UIImplementation.pde +++ b/UIImplementation.pde @@ -10,106 +10,241 @@ * * Custom UI components using the framework. */ + +import java.nio.*; +import java.util.Arrays; +class UICubesLayer extends UICameraComponent { -class UIPatternDeck extends UIWindow { - - LXDeck deck; - - 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; - - List items = new ArrayList(); - for (LXPattern p : deck.getPatterns()) { - items.add(new PatternScrollItem(p)); - } - final UIScrollList patternList = new UIScrollList(1, yp, w-2, 140).setItems(items); - patternList.addToContainer(this); - yp += patternList.h + 10; - - final UIParameterKnob[] parameterKnobs = new UIParameterKnob[12]; - for (int ki = 0; ki < parameterKnobs.length; ++ki) { - parameterKnobs[ki] = new UIParameterKnob(5 + 34*(ki % 4), yp + (ki/4) * 48); - parameterKnobs[ki].addToContainer(this); +int nvert = 200000; +int SIZEOF_INT = Integer.SIZE / 8; +int SIZEOF_FLOAT = Float.SIZE / 8; + +PGL pgl; +PShader sh; + +int vertLoc; +int colorLoc; + +IntBuffer vboName; +FloatBuffer vertData; + + boolean initted = false; + PShape sha1; + int numPoints = 10000; + + void initme() + { + nvert = model.points.size(); + sh = loadShader("frag.glsl", "vert.glsl"); + /*color[] simulationColors = lx.getColors(); + sha1= createShape(); + sha1.beginShape(POINTS); + for (LXPoint p : model.points) { + stroke(simulationColors[p.index]); + //pointColor(simulationColors[p.index]); + gl2.glPointColor=100; + sha1.vertex(p.x, p.y, p.z); + } + sha1.endShape();*/ + float[] temp = new float[nvert * 7]; + for (LXPoint p : model.points) { + // position + temp[p.index * 7 + 0] = p.x; + temp[p.index * 7 + 1] = p.y; + temp[p.index * 7 + 2] = p.z; + + // color + temp[p.index * 7 + 3] = 0.0; + temp[p.index * 7 + 4] = 0.0; + temp[p.index * 7 + 5] = 0.0; + temp[p.index * 7 + 6] = 1.0; + } + + vertData = allocateDirectFloatBuffer(nvert * 7); + vertData.rewind(); + vertData.put(temp); + vertData.position(0); + vboName = allocateDirectIntBuffer(1); + initVBO(); + } + void onDraw(UI ui) { + if(!initted) + { + initted=true; + initme(); + } + color[] simulationColors = lx.getColors(); + String displayMode = uiCrossfader.getDisplayMode(); + if (displayMode == "A") { + simulationColors = lx.engine.getDeck(LEFT_DECK).getColors(); + } else if (displayMode == "B") { + simulationColors = lx.engine.getDeck(RIGHT_DECK).getColors(); } + + long simulationStart = System.nanoTime(); + if (simulationOn) { + hint(DISABLE_DEPTH_TEST); + drawSimulation(simulationColors); + hint(ENABLE_DEPTH_TEST); + } + simulationNanos = System.nanoTime() - simulationStart; + camera(); + strokeWeight(1); + } + + void drawSimulation(color[] simulationColors) { + translate(0, 30, 0); + + fill(#141414); + drawBox(0, -TRAILER_HEIGHT, 0, 0, 0, 0, TRAILER_WIDTH, TRAILER_HEIGHT, TRAILER_DEPTH, TRAILER_HEIGHT/2.); + fill(#070707); + stroke(#222222); + beginShape(); + vertex(0, 0, 0); + vertex(TRAILER_WIDTH, 0, 0); + vertex(TRAILER_WIDTH, 0, TRAILER_DEPTH); + vertex(0, 0, TRAILER_DEPTH); + endShape(); + + // Draw the logo on the front of platform + pushMatrix(); + translate(0, 0, -1); + float s = .07; + scale(s, -s, s); + image(logo, TRAILER_WIDTH/2/s-logo.width/2, TRAILER_HEIGHT/2/s-logo.height/2-2/s); + popMatrix(); - LXDeck.Listener lxListener = new LXDeck.AbstractListener() { - public void patternWillChange(LXDeck deck, LXPattern pattern, LXPattern nextPattern) { - patternList.redraw(); + noStroke(); + if (structureOn) { + for (Cube c : model.cubes) { + drawCube(c); } - public void patternDidChange(LXDeck deck, LXPattern pattern) { - patternList.redraw(); - int pi = 0; - for (LXParameter parameter : pattern.getParameters()) { - if (pi >= parameterKnobs.length) { - break; - } - parameterKnobs[pi++].setParameter(parameter); - } - while (pi < parameterKnobs.length) { - parameterKnobs[pi++].setParameter(null); - } + } + + noFill(); + //strokeWeight(2); + int count=0; + + ///magic: + + pgl = beginPGL(); + + + sh.bind(); + + vertLoc = pgl.getAttribLocation(sh.glProgram, "vertex"); + colorLoc = pgl.getAttribLocation(sh.glProgram, "color"); + + pgl.bindBuffer(PGL.ARRAY_BUFFER, vboName.get(0)); + pgl.enableVertexAttribArray(vertLoc); + pgl.enableVertexAttribArray(colorLoc); + + pgl.vertexAttribPointer(vertLoc, 3, PGL.FLOAT, false, 7 * SIZEOF_FLOAT, 0); + pgl.vertexAttribPointer(colorLoc, 4, PGL.FLOAT, false, 7 * SIZEOF_FLOAT, 3 * SIZEOF_FLOAT); + javax.media.opengl.GL2 gl2 = (javax.media.opengl.GL2) ((PJOGL)pgl).gl; + gl2.glPointSize(2f); + pgl.drawArrays(PGL.POINTS, 0, nvert); + + pgl.disableVertexAttribArray(vertLoc); + pgl.disableVertexAttribArray(colorLoc); + pgl.bindBuffer(PGL.ARRAY_BUFFER, 0); + + sh.unbind(); + endPGL(); + createGeometry(simulationColors); + pgl.bindBuffer(PGL.ARRAY_BUFFER, vboName.get(0)); + pgl.bufferData(PGL.ARRAY_BUFFER, nvert * 7 * SIZEOF_FLOAT, vertData, PGL.STATIC_DRAW); + } + + void createGeometry(color[] simulationColors) { + for (LXPoint p : model.points) { + vertData.put(p.index * 7 + 3, ((simulationColors[p.index] >> 16) & 0xFF)/255.0); + vertData.put(p.index * 7 + 4, ((simulationColors[p.index] >> 8) & 0xFF)/255.0); + vertData.put(p.index * 7 + 5, (simulationColors[p.index]& 0xFF)/255.0); } - }; - - deck.addListener(lxListener); - lxListener.patternDidChange(deck, deck.getActivePattern()); - } +void initVBO() { - class PatternScrollItem extends AbstractScrollItem { - - private LXPattern pattern; - private String label; - - PatternScrollItem(LXPattern pattern) { - this.pattern = pattern; - label = className(pattern, "Pattern"); - } - - public String getLabel() { - return label; - } - - public boolean isSelected() { - return deck.getActivePattern() == pattern; - } - - public boolean isPending() { - return deck.getNextPattern() == pattern; - } - - public void onMousePressed() { - deck.goPattern(pattern); + pgl = beginPGL(); + pgl.genBuffers(1, vboName); + pgl.bindBuffer(PGL.ARRAY_BUFFER, vboName.get(0)); + pgl.bufferData(PGL.ARRAY_BUFFER, nvert * 7 * SIZEOF_FLOAT, vertData, PGL.DYNAMIC_DRAW); + pgl.bindBuffer(PGL.ARRAY_BUFFER, 0); + endPGL(); +} + +IntBuffer allocateDirectIntBuffer(int n) { + return ByteBuffer.allocateDirect(n * SIZEOF_INT).order(ByteOrder.nativeOrder()).asIntBuffer(); +} + +FloatBuffer allocateDirectFloatBuffer(int n) { + return ByteBuffer.allocateDirect(n * SIZEOF_FLOAT).order(ByteOrder.nativeOrder()).asFloatBuffer(); +} + + void drawCube(Cube c) { + float in = .15; + noStroke(); + fill(#393939); + drawBox(c.x+in, c.y+in, c.z+in, c.rx, c.ry, c.rz, Cube.EDGE_WIDTH-in*2, Cube.EDGE_HEIGHT-in*2, Cube.EDGE_WIDTH-in*2, Cube.CHANNEL_WIDTH-in); + } + + void drawBox(float x, float y, float z, float rx, float ry, float rz, float xd, float yd, float zd, float sw) { + pushMatrix(); + translate(x, y, z); + rotate(rx / 180. * PI, -1, 0, 0); + rotate(ry / 180. * PI, 0, -1, 0); + rotate(rz / 180. * PI, 0, 0, -1); + for (int i = 0; i < 4; ++i) { + float wid = (i % 2 == 0) ? xd : zd; + + beginShape(); + vertex(0, 0); + vertex(wid, 0); + vertex(wid, yd); + vertex(wid - sw, yd); + vertex(wid - sw, sw); + vertex(0, sw); + endShape(); + beginShape(); + vertex(0, sw); + vertex(0, yd); + vertex(wid - sw, yd); + vertex(wid - sw, yd - sw); + vertex(sw, yd - sw); + vertex(sw, sw); + endShape(); + + translate(wid, 0, 0); + rotate(HALF_PI, 0, -1, 0); } + popMatrix(); } } class UIBlendMode extends UIWindow { public UIBlendMode(float x, float y, float w, float h) { - super("BLEND MODE", x, y, w, h); - List items = new ArrayList(); - for (LXTransition t : glucose.getTransitions()) { - items.add(new TransitionScrollItem(t)); + super(lx.ui, "BLEND MODE", x, y, w, h); + List items = new ArrayList(); + for (LXTransition t : transitions) { + items.add(new TransitionItem(t)); } - final UIScrollList tList; - (tList = new UIScrollList(1, titleHeight, w-2, 60)).setItems(items).addToContainer(this); + final UIItemList tList; + (tList = new UIItemList(1, UIWindow.TITLE_LABEL_HEIGHT, w-2, 60)).setItems(items).addToContainer(this); - lx.engine.getDeck(GLucose.RIGHT_DECK).addListener(new LXDeck.AbstractListener() { + lx.engine.getDeck(RIGHT_DECK).addListener(new LXDeck.AbstractListener() { public void faderTransitionDidChange(LXDeck deck, LXTransition transition) { tList.redraw(); } }); } - class TransitionScrollItem extends AbstractScrollItem { + class TransitionItem extends UIItemList.AbstractItem { private final LXTransition transition; - private String label; + private final String label; - TransitionScrollItem(LXTransition transition) { + TransitionItem(LXTransition transition) { this.transition = transition; - label = className(transition, "Transition"); + this.label = className(transition, "Transition"); } public String getLabel() { @@ -117,7 +252,7 @@ class UIBlendMode extends UIWindow { } public boolean isSelected() { - return transition == glucose.getSelectedTransition(); + return this.transition == lx.engine.getDeck(RIGHT_DECK).getFaderTransition(); } public boolean isPending() { @@ -125,7 +260,7 @@ class UIBlendMode extends UIWindow { } public void onMousePressed() { - glucose.setSelectedTransition(transition); + lx.engine.getDeck(RIGHT_DECK).setFaderTransition(this.transition); } } @@ -136,10 +271,10 @@ class UICrossfader extends UIWindow { private final UIToggleSet displayMode; public UICrossfader(float x, float y, float w, float h) { - super("CROSSFADER", x, y, w, h); + super(lx.ui, "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); + new UISlider(4, UIWindow.TITLE_LABEL_HEIGHT, w-9, 32).setParameter(lx.engine.getDeck(RIGHT_DECK).getFader()).addToContainer(this); + (displayMode = new UIToggleSet(4, UIWindow.TITLE_LABEL_HEIGHT + 36, w-9, 20)).setOptions(new String[] { "A", "COMP", "B" }).setValue("COMP").addToContainer(this); } public UICrossfader setDisplayMode(String value) { @@ -154,31 +289,34 @@ class UICrossfader extends UIWindow { class UIEffects extends UIWindow { UIEffects(float x, float y, float w, float h) { - super("FX", x, y, w, h); + super(lx.ui, "FX", x, y, w, h); - int yp = titleHeight; - List items = new ArrayList(); - for (LXEffect fx : glucose.lx.getEffects()) { - items.add(new FXScrollItem(fx)); + int yp = UIWindow.TITLE_LABEL_HEIGHT; + List items = new ArrayList(); + int i = 0; + for (LXEffect fx : effectsArr) { + items.add(new FXScrollItem(fx, i++)); } - final UIScrollList effectsList = new UIScrollList(1, yp, w-2, 60).setItems(items); + final UIItemList effectsList = new UIItemList(1, yp, w-2, 60).setItems(items); effectsList.addToContainer(this); - yp += effectsList.h + 10; + yp += effectsList.getHeight() + 10; - final UIParameterKnob[] parameterKnobs = new UIParameterKnob[4]; + final UIKnob[] parameterKnobs = new UIKnob[4]; for (int ki = 0; ki < parameterKnobs.length; ++ki) { - parameterKnobs[ki] = new UIParameterKnob(5 + 34*(ki % 4), yp + (ki/4) * 48); + parameterKnobs[ki] = new UIKnob(5 + 34*(ki % 4), yp + (ki/4) * 48); parameterKnobs[ki].addToContainer(this); } - GLucose.EffectListener fxListener = new GLucose.EffectListener() { - public void effectSelected(LXEffect effect) { + LXParameterListener fxListener = new LXParameterListener() { + public void onParameterChanged(LXParameter parameter) { int i = 0; - for (LXParameter p : effect.getParameters()) { + for (LXParameter p : getSelectedEffect().getParameters()) { if (i >= parameterKnobs.length) { break; } - parameterKnobs[i++].setParameter(p); + if (p instanceof BasicParameter) { + parameterKnobs[i++].setParameter((BasicParameter) p); + } } while (i < parameterKnobs.length) { parameterKnobs[i++].setParameter(null); @@ -186,19 +324,21 @@ class UIEffects extends UIWindow { } }; - glucose.addEffectListener(fxListener); - fxListener.effectSelected(glucose.getSelectedEffect()); + selectedEffect.addListener(fxListener); + fxListener.onParameterChanged(null); } - class FXScrollItem extends AbstractScrollItem { + class FXScrollItem extends UIItemList.AbstractItem { - private LXEffect effect; - private String label; + private final LXEffect effect; + private final int index; + private final String label; - FXScrollItem(LXEffect effect) { + FXScrollItem(LXEffect effect, int index) { this.effect = effect; - label = className(effect, "Effect"); + this.index = index; + this.label = className(effect, "Effect"); } public String getLabel() { @@ -206,7 +346,7 @@ class UIEffects extends UIWindow { } public boolean isSelected() { - return !effect.isEnabled() && (glucose.getSelectedEffect() == effect); + return !effect.isEnabled() && (effect == getSelectedEffect()); } public boolean isPending() { @@ -214,14 +354,14 @@ class UIEffects extends UIWindow { } public void onMousePressed() { - if (glucose.getSelectedEffect() == effect) { + if (effect == getSelectedEffect()) { if (effect.isMomentary()) { effect.enable(); } else { effect.toggle(); } } else { - glucose.setSelectedEffect(effect); + selectedEffect.setValue(index); } } @@ -236,40 +376,41 @@ class UIEffects extends UIWindow { } 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 items = new ArrayList(); - for (final PandaDriver panda : pandaBoards) { - items.add(new PandaScrollItem(panda)); - panda.setListener(new PandaDriver.Listener() { - public void onToggle(boolean active) { - outputs.redraw(); + public UIOutput(IPOutput[] outputs, float x, float y, float w, float h) { + super(lx.ui, "OUTPUT", x, y, w, h); + float yp = UIWindow.TITLE_LABEL_HEIGHT; + + final UIItemList itemList = new UIItemList(1, UIWindow.TITLE_LABEL_HEIGHT, w-2, 80); + + List items = new ArrayList(); + for (IPOutput output : outputs) { + items.add(new OutputItem(output)); + output.enabled.addListener(new LXParameterListener() { + public void onParameterChanged(LXParameter parameter) { + itemList.redraw(); } }); } - outputs.setItems(items).addToContainer(this); + itemList.setItems(items).addToContainer(this); } - class PandaScrollItem extends AbstractScrollItem { - final PandaDriver panda; - PandaScrollItem(PandaDriver panda) { - this.panda = panda; + class OutputItem extends UIItemList.AbstractItem { + final IPOutput output; + + OutputItem(IPOutput output) { + this.output = output; } public String getLabel() { - return panda.ip; + return output.ipAddress; } public boolean isSelected() { - return panda.isEnabled(); + return output.enabled.isOn(); } public void onMousePressed() { - panda.toggle(); + output.enabled.setValue(!isSelected()); } } } @@ -279,8 +420,8 @@ class UITempo extends UIWindow { private final UIButton tempoButton; UITempo(float x, float y, float w, float h) { - super("TEMPO", x, y, w, h); - tempoButton = new UIButton(4, titleHeight, w-10, 20) { + super(lx.ui, "TEMPO", x, y, w, h); + tempoButton = new UIButton(4, UIWindow.TITLE_LABEL_HEIGHT, w-10, 20) { protected void onToggle(boolean active) { if (active) { lx.tempo.tap(); @@ -288,17 +429,26 @@ class UITempo extends UIWindow { } }.setMomentary(true); tempoButton.addToContainer(this); + new UITempoBlipper(8, UIWindow.TITLE_LABEL_HEIGHT + 5, 12, 12).addToContainer(this); } - public void draw() { - tempoButton.setLabel("" + ((int)(lx.tempo.bpm() * 10)) / 10.); - super.draw(); + class UITempoBlipper extends UIObject { + UITempoBlipper(float x, float y, float w, float h) { + super(x, y, w, h); + } - // Overlay tempo thing with openGL, redraw faster than button UI - fill(color(0, 0, 24 - 8*lx.tempo.rampf())); - noStroke(); - rect(x + 8, y + titleHeight + 5, 12, 12); + void onDraw(UI ui, PGraphics pg) { + tempoButton.setLabel("" + ((int)(lx.tempo.bpm() * 10)) / 10.); + + // Overlay tempo thing with openGL, redraw faster than button UI + pg.fill(color(0, 0, 24 - 8*lx.tempo.rampf())); + pg.noStroke(); + pg.rect(0, 0, width, height); + + redraw(); + } } + } class UIMapping extends UIWindow { @@ -313,44 +463,45 @@ class UIMapping extends UIWindow { private final MappingTool mappingTool; - private final UIIntegerBox channelBox; + private final UILabel cubeLabel; private final UIIntegerBox cubeBox; private final UIIntegerBox stripBox; UIMapping(MappingTool tool, float x, float y, float w, float h) { - super("MAPPING", x, y, w, h); + super(lx.ui, "MAPPING", x, y, w, h); mappingTool = tool; - int yp = titleHeight; + int yp = UIWindow.TITLE_LABEL_HEIGHT; 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; else if (value == MAP_MODE_CUBE) mappingTool.mappingMode = mappingTool.MAPPING_MODE_SINGLE_CUBE; } - }.setOptions(new String[] { MAP_MODE_ALL, MAP_MODE_CHANNEL, MAP_MODE_CUBE }).addToContainer(this); + }.setOptions(new String[] { MAP_MODE_ALL, MAP_MODE_CUBE }).addToContainer(this); yp += 24; - new UILabel(4, yp+8, w-10, 20).setLabel("CHANNEL ID").addToContainer(this); + new UILabel(4, yp+8, w-10, 20).setLabel("CUBE ID").addToContainer(this); yp += 24; - (channelBox = new UIIntegerBox(4, yp, w-10, 20) { - protected void onValueChange(int value) { - mappingTool.setChannel(value-1); - } - }).setRange(1, mappingTool.numChannels()).addToContainer(this); + (cubeLabel = new UILabel(4, yp, w-10, 20)) + .setAlignment(CENTER, CENTER) + .setLabel(model.cubes.get(0).id) + .setBackgroundColor(#222222) + .setBorderColor(#666666) + .addToContainer(this); yp += 24; - new UILabel(4, yp+8, w-10, 20).setLabel("CUBE ID").addToContainer(this); + new UILabel(4, yp+8, w-10, 20).setLabel("CUBE NUMBER").addToContainer(this); yp += 24; (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); + }).setRange(1, model.cubes.size()).addToContainer(this); yp += 24; yp += 10; - new UIScrollList(1, yp, w-2, 60).setItems(Arrays.asList(new ScrollItem[] { + new UIItemList(1, yp, w-2, 60).setItems(Arrays.asList(new UIItemList.Item[] { new ColorScrollItem(ColorScrollItem.COLOR_RED), new ColorScrollItem(ColorScrollItem.COLOR_GREEN), new ColorScrollItem(ColorScrollItem.COLOR_BLUE), @@ -380,19 +531,16 @@ class UIMapping extends UIWindow { } - public void setChannelID(int value) { - channelBox.setValue(value); - } - public void setCubeID(int value) { cubeBox.setValue(value); + cubeLabel.setLabel(model.getCubeByRawIndex(value).id); } public void setStripID(int value) { stripBox.setValue(value); } - class ColorScrollItem extends AbstractScrollItem { + class ColorScrollItem extends UIItemList.AbstractItem { public static final int COLOR_RED = 1; public static final int COLOR_GREEN = 2; @@ -438,7 +586,7 @@ class UIDebugText extends UIContext { private String line2 = ""; UIDebugText(float x, float y, float w, float h) { - super(x, y, w, h); + super(lx.ui, x, y, w, h); } public UIDebugText setText(String line1) { @@ -455,13 +603,13 @@ class UIDebugText extends UIContext { return this; } - protected void onDraw(PGraphics pg) { - super.onDraw(pg); + protected void onDraw(UI ui, PGraphics pg) { + super.onDraw(ui, pg); if (line1.length() + line2.length() > 0) { pg.noStroke(); pg.fill(#444444); - pg.rect(0, 0, w, h); - pg.textFont(defaultItemFont); + pg.rect(0, 0, width, height); + pg.textFont(ui.getItemFont()); pg.textSize(10); pg.textAlign(LEFT, TOP); pg.fill(#cccccc); @@ -476,14 +624,14 @@ class UISpeed extends UIWindow { final BasicParameter speed; UISpeed(float x, float y, float w, float h) { - super("SPEED", x, y, w, h); + super(lx.ui, "SPEED", x, y, w, h); speed = new BasicParameter("SPEED", 0.5); - new UIParameterSlider(4, titleHeight, w-10, 20) - .setParameter(speed.addListener(new LXParameterListener() { + speed.addListener(new LXParameterListener() { public void onParameterChanged(LXParameter parameter) { lx.setSpeed(parameter.getValuef() * 2); } - })).addToContainer(this); + }); + new UISlider(4, UIWindow.TITLE_LABEL_HEIGHT, w-10, 20).setParameter(speed).addToContainer(this); } } @@ -493,15 +641,15 @@ class UIMidi extends UIWindow { private final UIButton logMode; UIMidi(final MidiEngine midiEngine, float x, float y, float w, float h) { - super("MIDI", x, y, w, h); + super(lx.ui, "MIDI", x, y, w, h); // Processing compiler doesn't seem to get that list of class objects also conform to interface - List scrollItems = new ArrayList(); + List scrollItems = new ArrayList(); for (SCMidiInput mc : midiEngine.getControllers()) { scrollItems.add(mc); } - final UIScrollList scrollList; - (scrollList = new UIScrollList(1, titleHeight, w-2, 100)).setItems(scrollItems).addToContainer(this); + final UIItemList scrollList; + (scrollList = new UIItemList(1, UIWindow.TITLE_LABEL_HEIGHT, 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); @@ -531,7 +679,7 @@ class UIMidi extends UIWindow { } public LXDeck getFocusedDeck() { - return lx.engine.getDeck(deckMode.getValue() == "A" ? GLucose.LEFT_DECK : GLucose.RIGHT_DECK); + return lx.engine.getDeck(deckMode.getValue() == "A" ? LEFT_DECK : RIGHT_DECK); } }