X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=_UIImplementation.pde;h=1257f6fffd435068e0387f860174dedbbe2eeaf7;hb=3f16fd027656eaca0ed62f9c90c4da56385bb3bf;hp=a12c189219ba646d563f459608a508d7519a4209;hpb=30bf6510d87dbce8e36b03564807c1a5f4718f9d;p=SugarCubes.git diff --git a/_UIImplementation.pde b/_UIImplementation.pde index a12c189..1257f6f 100644 --- a/_UIImplementation.pde +++ b/_UIImplementation.pde @@ -10,106 +10,34 @@ * * Custom UI components using the framework. */ - -class UIPatternDeck extends UIWindow { - - Engine.Deck deck; - - public UIPatternDeck(Engine.Deck 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); - } - - Engine.Listener lxListener = new Engine.AbstractListener() { - public void patternWillChange(Engine.Deck deck, LXPattern pattern, LXPattern nextPattern) { - patternList.redraw(); - } - public void patternDidChange(Engine.Deck 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); - } - } - }; - - deck.addListener(lxListener); - lxListener.patternDidChange(deck, deck.getActivePattern()); - - } - - 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); - } - } -} 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(); + int i = 0; + for (LXTransition t : transitions) { + items.add(new TransitionScrollItem(t, i++)); } final UIScrollList tList; - (tList = new UIScrollList(1, titleHeight, w-2, 60)).setItems(items).addToContainer(this); + (tList = new UIScrollList(1, UIWindow.TITLE_LABEL_HEIGHT, w-2, 60)).setItems(items).addToContainer(this); - lx.engine.getDeck(1).addListener(new Engine.AbstractListener() { - public void blendTransitionDidChange(Engine.Deck deck, LXTransition transition) { + lx.engine.getDeck(GLucose.RIGHT_DECK).addListener(new LXDeck.AbstractListener() { + public void faderTransitionDidChange(LXDeck deck, LXTransition transition) { tList.redraw(); } }); } - class TransitionScrollItem extends AbstractScrollItem { + class TransitionScrollItem extends UIScrollList.AbstractItem { private final LXTransition transition; - private String label; + private final int index; + private final String label; - TransitionScrollItem(LXTransition transition) { + TransitionScrollItem(LXTransition transition, int index) { this.transition = transition; - label = className(transition, "Transition"); + this.index = index; + this.label = className(transition, "Transition"); } public String getLabel() { @@ -117,7 +45,7 @@ class UIBlendMode extends UIWindow { } public boolean isSelected() { - return transition == glucose.getSelectedTransition(); + return index == activeTransition.getValuei(); } public boolean isPending() { @@ -125,7 +53,7 @@ class UIBlendMode extends UIWindow { } public void onMousePressed() { - glucose.setSelectedTransition(transition); + activeTransition.setValue(this.index); } } @@ -136,10 +64,15 @@ 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(1).getCrossfader()).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(GLucose.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) { + displayMode.setValue(value); + return this; } public String getDisplayMode() { @@ -149,20 +82,20 @@ 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(); + int yp = UIWindow.TITLE_LABEL_HEIGHT; + List items = new ArrayList(); for (LXEffect fx : glucose.lx.getEffects()) { items.add(new FXScrollItem(fx)); } final UIScrollList effectsList = new UIScrollList(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); } @@ -173,7 +106,9 @@ class UIEffects extends UIWindow { 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,7 +121,7 @@ class UIEffects extends UIWindow { } - class FXScrollItem extends AbstractScrollItem { + class FXScrollItem extends UIScrollList.AbstractItem { private LXEffect effect; private String label; @@ -231,17 +166,17 @@ 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; + public UIOutput(GrizzlyOutput[] grizzlies, float x, float y, float w, float h) { + super(lx.ui, "OUTPUT", x, y, w, h); + float yp = UIWindow.TITLE_LABEL_HEIGHT; - final UIScrollList outputs = new UIScrollList(1, titleHeight, w-2, 80); + final UIScrollList outputs = new UIScrollList(1, UIWindow.TITLE_LABEL_HEIGHT, 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) { + List items = new ArrayList(); + for (GrizzlyOutput grizzly : grizzlies) { + items.add(new GrizzlyScrollItem(grizzly)); + grizzly.enabled.addListener(new LXParameterListener() { + public void onParameterChanged(LXParameter parameter) { outputs.redraw(); } }); @@ -249,22 +184,23 @@ class UIOutput extends UIWindow { outputs.setItems(items).addToContainer(this); } - class PandaScrollItem extends AbstractScrollItem { - final PandaDriver panda; - PandaScrollItem(PandaDriver panda) { - this.panda = panda; + class GrizzlyScrollItem extends UIScrollList.AbstractItem { + final GrizzlyOutput output; + + GrizzlyScrollItem(GrizzlyOutput 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()); } } } @@ -274,8 +210,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(); @@ -283,17 +219,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(); - - // 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); + class UITempoBlipper extends UIObject { + UITempoBlipper(float x, float y, float w, float h) { + super(x, y, w, h); + } + + 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,10 +258,10 @@ class UIMapping extends UIWindow { 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; @@ -340,12 +285,12 @@ class UIMapping extends UIWindow { 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 UIScrollList(1, yp, w-2, 60).setItems(Arrays.asList(new UIScrollList.Item[] { new ColorScrollItem(ColorScrollItem.COLOR_RED), new ColorScrollItem(ColorScrollItem.COLOR_GREEN), new ColorScrollItem(ColorScrollItem.COLOR_BLUE), @@ -387,7 +332,7 @@ class UIMapping extends UIWindow { stripBox.setValue(value); } - class ColorScrollItem extends AbstractScrollItem { + class ColorScrollItem extends UIScrollList.AbstractItem { public static final int COLOR_RED = 1; public static final int COLOR_GREEN = 2; @@ -433,7 +378,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) { @@ -450,13 +395,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); @@ -467,14 +412,18 @@ 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); - new UIParameterSlider(4, titleHeight, w-10, 20) - .setParameter(new BasicParameter("SPEED", 0.5).addListener(new LXParameter.Listener() { + super(lx.ui, "SPEED", x, y, w, h); + speed = new BasicParameter("SPEED", 0.5); + 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); } } @@ -483,16 +432,21 @@ class UIMidi extends UIWindow { private final UIToggleSet deckMode; private final UIButton logMode; - UIMidi(List midiControllers, float x, float y, float w, float h) { - super("MIDI", x, y, w, h); + UIMidi(final MidiEngine midiEngine, float x, float y, float w, float 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(); - for (SCMidiInput mc : midiControllers) { + 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); - (deckMode = new UIToggleSet(4, 130, 90, 20)).setOptions(new String[] { "A", "B" }).addToContainer(this); + (scrollList = new UIScrollList(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); + } + }).setOptions(new String[] { "A", "B" }).addToContainer(this); (logMode = new UIButton(98, 130, w-103, 20)).setLabel("LOG").addToContainer(this); SCMidiInputListener listener = new SCMidiInputListener() { @@ -500,9 +454,15 @@ class UIMidi extends UIWindow { scrollList.redraw(); } }; - for (SCMidiInput mc : midiControllers) { + for (SCMidiInput mc : midiEngine.getControllers()) { mc.addListener(listener); } + + midiEngine.addListener(new MidiEngineListener() { + public void onFocusedDeck(int deckIndex) { + deckMode.setValue(deckIndex == 0 ? "A" : "B"); + } + }); } @@ -510,8 +470,8 @@ class UIMidi extends UIWindow { return logMode.isActive(); } - public Engine.Deck getFocusedDeck() { - return lx.engine.getDeck(deckMode.getValue() == "A" ? 0 : 1); + public LXDeck getFocusedDeck() { + return lx.engine.getDeck(deckMode.getValue() == "A" ? GLucose.LEFT_DECK : GLucose.RIGHT_DECK); } }