diff --git a/src/com/lushprojects/circuitjs1/client/ADCElm.java b/src/com/lushprojects/circuitjs1/client/ADCElm.java index e5f0ba52..1d3fa16d 100644 --- a/src/com/lushprojects/circuitjs1/client/ADCElm.java +++ b/src/com/lushprojects/circuitjs1/client/ADCElm.java @@ -53,19 +53,13 @@ class ADCElm extends ChipElm { int getVoltageSourceCount() { return bits; } int getPostCount() { return bits+2; } int getDumpType() { return 167; } - public EditInfo getEditInfo(int n) { - if (n < 2) - return super.getEditInfo(n); - if (n == 2) + public EditInfo getChipEditInfo(int n) { + if (n == 0) return new EditInfo("# of Bits", bits, 1, 1).setDimensionless(); return null; } - public void setEditValue(int n, EditInfo ei) { - if (n < 2) { - super.setEditValue(n, ei); - return; - } - if (n == 2 && ei.value >= 2) { + public void setChipEditValue(int n, EditInfo ei) { + if (n == 0 && ei.value >= 2) { bits = (int)ei.value; setupPins(); setPoints(); diff --git a/src/com/lushprojects/circuitjs1/client/CCVSElm.java b/src/com/lushprojects/circuitjs1/client/CCVSElm.java index 9aeab48d..87b72459 100644 --- a/src/com/lushprojects/circuitjs1/client/CCVSElm.java +++ b/src/com/lushprojects/circuitjs1/client/CCVSElm.java @@ -177,7 +177,7 @@ class CCVSElm extends VCCSElm { } } - public void setEditValue(int n, EditInfo ei) { + public void setChipEditValue(int n, EditInfo ei) { if (n == 1) { // make sure number of inputs is even if (ei.value < 0 || ei.value > 8 || (ei.value % 2) == 1) @@ -187,7 +187,7 @@ class CCVSElm extends VCCSElm { allocNodes(); setPoints(); } else - super.setEditValue(n, ei); + super.setChipEditValue(n, ei); } void setParentList(Vector elmList) { diff --git a/src/com/lushprojects/circuitjs1/client/ChipElm.java b/src/com/lushprojects/circuitjs1/client/ChipElm.java index 4b575900..ec4f7ba8 100644 --- a/src/com/lushprojects/circuitjs1/client/ChipElm.java +++ b/src/com/lushprojects/circuitjs1/client/ChipElm.java @@ -23,8 +23,9 @@ abstract class ChipElm extends CircuitElm { int csize, cspc, cspc2; int bits; static final int FLAG_SMALL = 1; - static final int FLAG_FLIP_X = 1024; - static final int FLAG_FLIP_Y = 2048; + static final int FLAG_FLIP_X = 1<<10; + static final int FLAG_FLIP_Y = 1<<11; + static final int FLAG_FLIP_XY = 1<<12; public ChipElm(int xx, int yy) { super(xx, yy); if (needsBits()) @@ -114,10 +115,9 @@ abstract class ChipElm extends CircuitElm { int asc=(int)g.currentFontSize; int tx; // put text closer to edge if it's on left or right. - // we could do extra work to handle flipped case, but we don't - if (p.side == SIDE_W && !isFlippedX()) + if (p.side == flippedXSide(SIDE_W)) tx = p.textloc.x-(cspc-5); - else if (p.side == SIDE_E && !isFlippedX()) + else if (p.side == flippedXSide(SIDE_E)) tx = p.textloc.x+(cspc-5)-sw; else tx = p.textloc.x-sw/2; @@ -139,7 +139,7 @@ abstract class ChipElm extends CircuitElm { int rectPointsX[], rectPointsY[]; int clockPointsX[], clockPointsY[]; Pin pins[]; - int sizeX, sizeY; + int sizeX, sizeY, flippedSizeX, flippedSizeY; boolean lastClock; void drag(int xx, int yy) { yy = sim.snapGrid(yy); @@ -155,18 +155,23 @@ abstract class ChipElm extends CircuitElm { clockPointsX = null; if (x2-x > sizeX*cspc2 && this == sim.dragElm) setSize(2); - int hs = cspc; int x0 = x+cspc2; int y0 = y; int xr = x0-cspc; int yr = y0-cspc; - int xs = sizeX*cspc2; - int ys = sizeY*cspc2; - rectPointsX = new int[] { xr, xr+xs, xr+xs, xr }; - rectPointsY = new int[] { yr, yr, yr+ys, yr+ys }; - setBbox(xr, yr, rectPointsX[2], rectPointsY[2]); + flippedSizeX = sizeX; + flippedSizeY = sizeY; + if (isFlippedXY()) { + flippedSizeX = sizeY; + flippedSizeY = sizeX; + } + int xs = flippedSizeX*cspc2; + int ys = flippedSizeY*cspc2; int i; for (i = 0; i != getPostCount(); i++) { Pin p = pins[i]; + p.side = p.side0; + if ((flags & FLAG_FLIP_XY) != 0) + p.side = sideFlipXY[p.side]; switch (p.side) { case SIDE_N: p.setPoint(x0, y0, 1, 0, 0, -1, 0, 0); break; case SIDE_S: p.setPoint(x0, y0, 1, 0, 0, 1, 0, ys-cspc2);break; @@ -174,6 +179,9 @@ abstract class ChipElm extends CircuitElm { case SIDE_E: p.setPoint(x0, y0, 0, 1, 1, 0, xs-cspc2, 0);break; } } + rectPointsX = new int[] { xr, xr+xs, xr+xs, xr }; + rectPointsY = new int[] { yr, yr, yr+ys, yr+ys }; + setBbox(xr, yr, rectPointsX[2], rectPointsY[2]); } // see if we can move pin to position xp, yp, and return the new position @@ -324,7 +332,7 @@ abstract class ChipElm extends CircuitElm { return pins[n].current; } - boolean isFlippedX() { return (flags & FLAG_FLIP_X) != 0; } + boolean isFlippedXY() { return (flags & FLAG_FLIP_XY) != 0; } public EditInfo getEditInfo(int n) { if (n == 0) { @@ -337,7 +345,12 @@ abstract class ChipElm extends CircuitElm { ei.checkbox = new Checkbox("Flip Y", (flags & FLAG_FLIP_Y) != 0); return ei; } - return null; + if (n == 2) { + EditInfo ei = new EditInfo("", 0, -1, -1); + ei.checkbox = new Checkbox("Flip X/Y", (flags & FLAG_FLIP_XY) != 0); + return ei; + } + return getChipEditInfo(n-3); } public void setEditValue(int n, EditInfo ei) { if (n == 0) { @@ -348,8 +361,17 @@ abstract class ChipElm extends CircuitElm { flags = ei.changeFlag(flags, FLAG_FLIP_Y); setPoints(); } + if (n == 2) { + flags = ei.changeFlag(flags, FLAG_FLIP_XY); + setPoints(); + } + if (n >= 3) + setChipEditValue(n-3, ei); } + public EditInfo getChipEditInfo(int n) { return null; } + public void setChipEditValue(int n, EditInfo ei) { } + static String writeBits(boolean[] data) { StringBuilder sb = new StringBuilder(); int integer = 0; @@ -393,28 +415,39 @@ abstract class ChipElm extends CircuitElm { static final int SIDE_W = 2; static final int SIDE_E = 3; + static final int sideFlipXY[] = { SIDE_W, SIDE_E, SIDE_N, SIDE_S }; + + int flippedXSide(int s) { + if ((flags & FLAG_FLIP_X) == 0) + return s; + if (s == SIDE_W) + return SIDE_E; + if (s == SIDE_E) + return SIDE_W; + return s; + } + class Pin { Pin(int p, int s, String t) { - pos = p; side = s; text = t; + pos = p; side0 = side = s; text = t; } Point post, stub; Point textloc; - int pos, side, voltSource, bubbleX, bubbleY; + int pos, side, side0, voltSource, bubbleX, bubbleY; String text; boolean lineOver, bubble, clock, output, value, state, selected; double curcount, current; - void setPoint(int px, int py, int dx, int dy, int dax, int day, - int sx, int sy) { + void setPoint(int px, int py, int dx, int dy, int dax, int day, int sx, int sy) { if ((flags & FLAG_FLIP_X) != 0) { dx = -dx; dax = -dax; - px += cspc2*(sizeX-1); + px += cspc2*(flippedSizeX-1); sx = -sx; } if ((flags & FLAG_FLIP_Y) != 0) { dy = -dy; day = -day; - py += cspc2*(sizeY-1); + py += cspc2*(flippedSizeY-1); sy = -sy; } int xa = px+cspc2*dx*pos+sx; diff --git a/src/com/lushprojects/circuitjs1/client/Counter2Elm.java b/src/com/lushprojects/circuitjs1/client/Counter2Elm.java index 7342b839..b4fe121c 100644 --- a/src/com/lushprojects/circuitjs1/client/Counter2Elm.java +++ b/src/com/lushprojects/circuitjs1/client/Counter2Elm.java @@ -81,23 +81,22 @@ package com.lushprojects.circuitjs1.client; int getPostCount() { return bits*2+6; } - public EditInfo getEditInfo(int n) { - if (n == 2) + public EditInfo getChipEditInfo(int n) { + if (n == 0) return new EditInfo("# of Bits", bits, 1, 1).setDimensionless(); - if (n == 3) + if (n == 1) return new EditInfo("Modulus", modulus, 1, 1).setDimensionless(); - return super.getEditInfo(n); + return null; } - public void setEditValue(int n, EditInfo ei) { - if (n == 2 && ei.value >= 2) { + public void setChipEditValue(int n, EditInfo ei) { + if (n == 0 && ei.value >= 2) { bits = (int)ei.value; setupPins(); setPoints(); allocNodes(); } - if (n == 3) + if (n == 1) modulus = (int)ei.value; - super.setEditValue(n, ei); } int getVoltageSourceCount() { return bits+1; } diff --git a/src/com/lushprojects/circuitjs1/client/CounterElm.java b/src/com/lushprojects/circuitjs1/client/CounterElm.java index b62e2e64..fc49d8df 100644 --- a/src/com/lushprojects/circuitjs1/client/CounterElm.java +++ b/src/com/lushprojects/circuitjs1/client/CounterElm.java @@ -72,71 +72,47 @@ package com.lushprojects.circuitjs1.client; int getPostCount() { return (hasUpDown()) ? bits+3 : bits+2; } - public EditInfo getEditInfo(int n) { - if (n == 0) { - EditInfo ei = new EditInfo("", 0, -1, -1); - ei.checkbox = new Checkbox("Flip X", (flags & FLAG_FLIP_X) != 0); - return ei; - } - if (n == 1) { - EditInfo ei = new EditInfo("", 0, -1, -1); - ei.checkbox = new Checkbox("Flip Y", (flags & FLAG_FLIP_Y) != 0); - return ei; - } - if (n == 2) { + public EditInfo getChipEditInfo(int n) { + if (n == 0) { EditInfo ei = new EditInfo("", 0, -1, -1); ei.checkbox = new Checkbox("Invert reset pin",invertreset); return ei; } - if (n == 3) + if (n == 1) return new EditInfo("# of Bits", bits, 1, 1).setDimensionless(); - if (n == 4) + if (n == 2) return new EditInfo("Modulus", modulus, 1, 1).setDimensionless(); - if (n == 5) { + if (n == 3) { EditInfo ei = new EditInfo("", 0, -1, -1); ei.checkbox = new Checkbox("Up/Down Pin", hasUpDown()); return ei; } - if (n == 6) { + if (n == 4) { EditInfo ei = new EditInfo("", 0, -1, -1); ei.checkbox = new Checkbox("Negative Edge Triggered", negativeEdgeTriggered()); return ei; } return null; } - public void setEditValue(int n, EditInfo ei) { + public void setChipEditValue(int n, EditInfo ei) { if (n == 0) { - if (ei.checkbox.getState()) - flags |= FLAG_FLIP_X; - else - flags &= ~FLAG_FLIP_X; - setPoints(); - } - if (n == 1) { - if (ei.checkbox.getState()) - flags |= FLAG_FLIP_Y; - else - flags &= ~FLAG_FLIP_Y; - setPoints(); - } - if (n == 2) { invertreset = ei.checkbox.getState(); setupPins(); setPoints(); } - if (n == 3 && ei.value >= 3) { + if (n == 1 && ei.value >= 3) { bits = (int)ei.value; setupPins(); setPoints(); } - if (n == 4) + if (n == 2) modulus = (int)ei.value; - if (n == 5) { + if (n == 3) { flags = ei.changeFlag(flags, FLAG_UP_DOWN); setupPins(); setPoints(); } - if (n == 6) { + if (n == 4) { flags = ei.changeFlag(flags, FLAG_NEGATIVE_EDGE); setupPins(); setPoints(); diff --git a/src/com/lushprojects/circuitjs1/client/CustomCompositeElm.java b/src/com/lushprojects/circuitjs1/client/CustomCompositeElm.java index ea75a3a6..3398a449 100644 --- a/src/com/lushprojects/circuitjs1/client/CustomCompositeElm.java +++ b/src/com/lushprojects/circuitjs1/client/CustomCompositeElm.java @@ -88,7 +88,7 @@ public class CustomCompositeElm extends CompositeElm { chip = new CustomCompositeChipElm(x, y); chip.x2 = x2; chip.y2 = y2; - chip.flags = (flags & (ChipElm.FLAG_FLIP_X | ChipElm.FLAG_FLIP_Y)); + chip.flags = (flags & (ChipElm.FLAG_FLIP_X | ChipElm.FLAG_FLIP_Y | ChipElm.FLAG_FLIP_XY)); chip.sizeX = model.sizeX; chip.sizeY = model.sizeY; @@ -157,14 +157,19 @@ public class CustomCompositeElm extends CompositeElm { ei.checkbox = new Checkbox("Flip Y", (flags & ChipElm.FLAG_FLIP_Y) != 0); return ei; } - if (n == 4 && model.canLoadModelCircuit()) { + if (n == 4) { + EditInfo ei = new EditInfo("", 0, -1, -1); + ei.checkbox = new Checkbox("Flip X/Y", (flags & ChipElm.FLAG_FLIP_XY) != 0); + return ei; + } + if (n == 5 && model.canLoadModelCircuit()) { EditInfo ei = new EditInfo("", 0, -1, -1); ei.button = new Button(sim.LS("Load Model Circuit")); return ei; } return null; } - + public void setEditValue(int n, EditInfo ei) { if (n == 0) { model = models.get(ei.choice.getSelectedIndex()); @@ -194,6 +199,10 @@ public class CustomCompositeElm extends CompositeElm { setPoints(); } if (n == 4) { + flags = ei.changeFlag(flags, ChipElm.FLAG_FLIP_XY); + setPoints(); + } + if (n == 5) { sim.readCircuit(model.modelCircuit); sim.editDialog.closeDialog(); } diff --git a/src/com/lushprojects/circuitjs1/client/CustomLogicElm.java b/src/com/lushprojects/circuitjs1/client/CustomLogicElm.java index 3a20f6a9..15e3f851 100644 --- a/src/com/lushprojects/circuitjs1/client/CustomLogicElm.java +++ b/src/com/lushprojects/circuitjs1/client/CustomLogicElm.java @@ -216,23 +216,23 @@ public class CustomLogicElm extends ChipElm { } } - public EditInfo getEditInfo(int n) { - if (n == 2) { + public EditInfo getChipEditInfo(int n) { + if (n == 0) { EditInfo ei = new EditInfo("Model Name", 0, -1, -1); ei.text = modelName; ei.disallowSliders(); return ei; } - if (n == 3) { + if (n == 1) { EditInfo ei = new EditInfo("", 0, -1, -1); ei.button = new Button(sim.LS("Edit Model")); return ei; } - return super.getEditInfo(n); + return null; } - public void setEditValue(int n, EditInfo ei) { - if (n == 2) { + public void setChipEditValue(int n, EditInfo ei) { + if (n == 0) { modelName = lastModelName = ei.textf.getText(); model = CustomLogicModel.getModelWithNameOrCopy(modelName, model); setupPins(); @@ -240,15 +240,13 @@ public class CustomLogicElm extends ChipElm { setPoints(); return; } - if (n == 3) + if (n == 1) { EditDialog editDialog = new EditDialog(model, sim); CirSim.customLogicEditDialog = editDialog; editDialog.show(); return; } - - super.setEditValue(n, ei); } int getDumpType() { return 208; } diff --git a/src/com/lushprojects/circuitjs1/client/DACElm.java b/src/com/lushprojects/circuitjs1/client/DACElm.java index 594723e9..5cdd5d2d 100644 --- a/src/com/lushprojects/circuitjs1/client/DACElm.java +++ b/src/com/lushprojects/circuitjs1/client/DACElm.java @@ -52,19 +52,13 @@ class DACElm extends ChipElm { int getVoltageSourceCount() { return 1; } int getPostCount() { return bits+2; } int getDumpType() { return 166; } - public EditInfo getEditInfo(int n) { - if (n < 2) - return super.getEditInfo(n); - if (n == 2) + public EditInfo getChipEditInfo(int n) { + if (n == 0) return new EditInfo("# of Bits", bits, 1, 1).setDimensionless(); return null; } - public void setEditValue(int n, EditInfo ei) { - if (n < 2) { - super.setEditValue(n, ei); - return; - } - if (n == 2 && ei.value >= 2) { + public void setChipEditValue(int n, EditInfo ei) { + if (n == 0 && ei.value >= 2) { bits = (int)ei.value; setupPins(); setPoints(); diff --git a/src/com/lushprojects/circuitjs1/client/DFlipFlopElm.java b/src/com/lushprojects/circuitjs1/client/DFlipFlopElm.java index 01b50505..9f769ab8 100644 --- a/src/com/lushprojects/circuitjs1/client/DFlipFlopElm.java +++ b/src/com/lushprojects/circuitjs1/client/DFlipFlopElm.java @@ -89,26 +89,26 @@ package com.lushprojects.circuitjs1.client; lastClock = pins[3].value; } int getDumpType() { return 155; } - public EditInfo getEditInfo(int n) { - if (n == 2) { + public EditInfo getChipEditInfo(int n) { + if (n == 0) { EditInfo ei = new EditInfo("", 0, -1, -1); ei.checkbox = new Checkbox("Reset Pin", hasReset()); return ei; } - if (n == 3) { + if (n == 1) { EditInfo ei = new EditInfo("", 0, -1, -1); ei.checkbox = new Checkbox("Set Pin", hasSet()); return ei; } - if (n == 4) { + if (n == 2) { EditInfo ei = new EditInfo("", 0, -1, -1); ei.checkbox = new Checkbox("Invert Set/Reset", invertSetReset()); return ei; } - return super.getEditInfo(n); + return super.getChipEditInfo(n); } - public void setEditValue(int n, EditInfo ei) { - if (n == 2) { + public void setChipEditValue(int n, EditInfo ei) { + if (n == 0) { if (ei.checkbox.getState()) flags |= FLAG_RESET; else @@ -117,7 +117,7 @@ package com.lushprojects.circuitjs1.client; allocNodes(); setPoints(); } - if (n == 3) { + if (n == 1) { if (ei.checkbox.getState()) flags |= FLAG_SET; else @@ -126,11 +126,11 @@ package com.lushprojects.circuitjs1.client; allocNodes(); setPoints(); } - if (n == 4) { + if (n == 2) { flags = ei.changeFlag(flags, FLAG_INVERT_SET_RESET); setupPins(); setPoints(); } - super.setEditValue(n, ei); + super.setChipEditValue(n, ei); } } diff --git a/src/com/lushprojects/circuitjs1/client/DeMultiplexerElm.java b/src/com/lushprojects/circuitjs1/client/DeMultiplexerElm.java index ce02ba14..2e336eeb 100644 --- a/src/com/lushprojects/circuitjs1/client/DeMultiplexerElm.java +++ b/src/com/lushprojects/circuitjs1/client/DeMultiplexerElm.java @@ -74,19 +74,13 @@ package com.lushprojects.circuitjs1.client; pins[val].value = pins[qPin].value; } - public EditInfo getEditInfo(int n) { - if (n < 2) - return super.getEditInfo(n); - if (n == 2) + public EditInfo getChipEditInfo(int n) { + if (n == 0) return new EditInfo("# of Select Bits", selectBitCount).setDimensionless(); return null; } - public void setEditValue(int n, EditInfo ei) { - if (n < 2) { - super.setEditValue(n, ei); - return; - } - if (n == 2 && ei.value >= 1 && ei.value <= 6) { + public void setChipEditValue(int n, EditInfo ei) { + if (n == 0 && ei.value >= 1 && ei.value <= 6) { selectBitCount = (int)ei.value; setupPins(); setPoints(); diff --git a/src/com/lushprojects/circuitjs1/client/DecimalDisplayElm.java b/src/com/lushprojects/circuitjs1/client/DecimalDisplayElm.java index 79b9fe06..7ae363e8 100644 --- a/src/com/lushprojects/circuitjs1/client/DecimalDisplayElm.java +++ b/src/com/lushprojects/circuitjs1/client/DecimalDisplayElm.java @@ -71,20 +71,20 @@ class DecimalDisplayElm extends ChipElm { int getPostCount() { return bitCount; } int getDumpType() { return 419; } int getVoltageSourceCount() { return 0; } - public EditInfo getEditInfo(int n) { - if (n == 2) + public EditInfo getChipEditInfo(int n) { + if (n == 0) return new EditInfo("# of Bits", bitCount, 1, 8). setDimensionless(); - return super.getEditInfo(n); + return super.getChipEditInfo(n); } - public void setEditValue(int n, EditInfo ei) { - if (n == 2 && ei.value >= 1 && ei.value <= 16) { + public void setChipEditValue(int n, EditInfo ei) { + if (n == 0 && ei.value >= 1 && ei.value <= 16) { bitCount = (int) ei.value; setupPins(); setPoints(); return; } - super.setEditValue(n, ei); + super.setChipEditValue(n, ei); } } diff --git a/src/com/lushprojects/circuitjs1/client/FullAdderElm.java b/src/com/lushprojects/circuitjs1/client/FullAdderElm.java index d86e324a..c3e41a6f 100644 --- a/src/com/lushprojects/circuitjs1/client/FullAdderElm.java +++ b/src/com/lushprojects/circuitjs1/client/FullAdderElm.java @@ -75,13 +75,13 @@ package com.lushprojects.circuitjs1.client; int getDumpType() { return 196; } boolean needsBits() { return (flags & FLAG_BITS) != 0; } - public EditInfo getEditInfo(int n) { - if (n == 2) + public EditInfo getChipEditInfo(int n) { + if (n == 0) return new EditInfo("# of Bits", bits, 1, 1).setDimensionless(); - return super.getEditInfo(n); + return super.getChipEditInfo(n); } - public void setEditValue(int n, EditInfo ei) { - if (n == 2 && ei.value >= 2) { + public void setChipEditValue(int n, EditInfo ei) { + if (n == 0 && ei.value > 0) { bits = (int)ei.value; flags |= FLAG_BITS; setupPins(); @@ -89,7 +89,7 @@ package com.lushprojects.circuitjs1.client; allocNodes(); return; } - super.setEditValue(n, ei); + super.setChipEditValue(n, ei); } } diff --git a/src/com/lushprojects/circuitjs1/client/JKFlipFlopElm.java b/src/com/lushprojects/circuitjs1/client/JKFlipFlopElm.java index dd1ef959..4ba22ad5 100644 --- a/src/com/lushprojects/circuitjs1/client/JKFlipFlopElm.java +++ b/src/com/lushprojects/circuitjs1/client/JKFlipFlopElm.java @@ -93,31 +93,31 @@ package com.lushprojects.circuitjs1.client; } int getDumpType() { return 156; } - public EditInfo getEditInfo(int n){ - if (n == 2){ + public EditInfo getChipEditInfo(int n){ + if (n == 0){ EditInfo ei = new EditInfo("", 0, -1, -1); ei.checkbox = new Checkbox("Reset Pin", hasReset()); return ei; } - if (n == 3){ + if (n == 1){ EditInfo ei = new EditInfo("", 0, -1, -1); ei.checkbox = new Checkbox("Positive Edge Triggered", positiveEdgeTriggered()); return ei; } - if (n == 4){ + if (n == 2){ EditInfo ei = new EditInfo("", 0, -1, -1); ei.checkbox = new Checkbox("Invert Reset", invertReset()); return ei; } - return super.getEditInfo(n); + return super.getChipEditInfo(n); } - public void setEditValue(int n, EditInfo ei){ - if (n == 2){ + public void setChipEditValue(int n, EditInfo ei){ + if (n == 0){ if(ei.checkbox.getState()){ flags |= FLAG_RESET; } else { @@ -128,16 +128,16 @@ package com.lushprojects.circuitjs1.client; allocNodes(); setPoints(); } - if (n == 3) { + if (n == 1) { flags = ei.changeFlag(flags, FLAG_POSITIVE_EDGE); pins[1].bubble = !positiveEdgeTriggered(); } - if (n == 4) { + if (n == 2) { flags = ei.changeFlag(flags, FLAG_INVERT_RESET); setupPins(); setPoints(); } - super.setEditValue(n, ei); + super.setChipEditValue(n, ei); } } diff --git a/src/com/lushprojects/circuitjs1/client/LEDArrayElm.java b/src/com/lushprojects/circuitjs1/client/LEDArrayElm.java index f582a26d..95f0c8c6 100644 --- a/src/com/lushprojects/circuitjs1/client/LEDArrayElm.java +++ b/src/com/lushprojects/circuitjs1/client/LEDArrayElm.java @@ -87,7 +87,10 @@ package com.lushprojects.circuitjs1.client; for (iy = 0; iy != sizeY; iy++) { int i = ix+iy*sizeX; setColor(g, i); - g.fillOval(pins[ix].post.x-cspc/2, pins[iy+sizeX].post.y-cspc/2, cspc, cspc); + if (isFlippedXY()) + g.fillOval(pins[iy+sizeX].post.x-cspc/2, pins[ix].post.y-cspc/2, cspc, cspc); + else + g.fillOval(pins[ix].post.x-cspc/2, pins[iy+sizeX].post.y-cspc/2, cspc, cspc); } } @@ -143,30 +146,29 @@ package com.lushprojects.circuitjs1.client; // this is true but it causes strange behavior with unconnected pins so we don't do it // boolean getConnection(int n1, int n2) { return true; } - public EditInfo getEditInfo(int n) { - if (n == 2) + public EditInfo getChipEditInfo(int n) { + if (n == 0) return new EditInfo("Grid Width", sizeX).setDimensionless(); - if (n == 3) - return new EditInfo("Grid Height", sizeY).setDimensionless(); - return super.getEditInfo(n); + if (n == 1) + return new EditInfo("Grid Height", sizeY).setDimensionless(); + return null; } - public void setEditValue(int n, EditInfo ei) { - if (n == 2 && ei.value >= 2 && ei.value <= 16) { + public void setChipEditValue(int n, EditInfo ei) { + if (n == 0 && ei.value >= 2 && ei.value <= 16) { sizeX = (int)ei.value; allocNodes(); setupPins(); setPoints(); return; } - if (n == 3 && ei.value >= 2 && ei.value <= 16) { + if (n == 1 && ei.value >= 2 && ei.value <= 16) { sizeY = (int)ei.value; allocNodes(); setupPins(); setPoints(); return; } - super.setEditValue(n, ei); } // default getInfo doesn't work because the pins are unlabeled diff --git a/src/com/lushprojects/circuitjs1/client/LatchElm.java b/src/com/lushprojects/circuitjs1/client/LatchElm.java index cb73546f..cafa6642 100644 --- a/src/com/lushprojects/circuitjs1/client/LatchElm.java +++ b/src/com/lushprojects/circuitjs1/client/LatchElm.java @@ -65,19 +65,13 @@ class LatchElm extends ChipElm { int getVoltageSourceCount() { return bits; } int getPostCount() { return bits*2+1; } int getDumpType() { return 168; } - public EditInfo getEditInfo(int n) { - if (n < 2) - return super.getEditInfo(n); - if (n == 2) + public EditInfo getChipEditInfo(int n) { + if (n == 0) return new EditInfo("# of Bits", bits, 1, 1).setDimensionless(); return null; } - public void setEditValue(int n, EditInfo ei) { - if (n < 2) { - super.setEditValue(n, ei); - return; - } - if (n == 2 && ei.value >= 2) { + public void setChipEditValue(int n, EditInfo ei) { + if (n == 0 && ei.value >= 2) { bits = (int)ei.value; setupPins(); setPoints(); diff --git a/src/com/lushprojects/circuitjs1/client/MonostableElm.java b/src/com/lushprojects/circuitjs1/client/MonostableElm.java index 5b5f9cd1..5c4a1b89 100644 --- a/src/com/lushprojects/circuitjs1/client/MonostableElm.java +++ b/src/com/lushprojects/circuitjs1/client/MonostableElm.java @@ -84,25 +84,25 @@ package com.lushprojects.circuitjs1.client; return super.dump() + " " + retriggerable + " " + delay; } int getDumpType() { return 194; } - public EditInfo getEditInfo(int n) { - if (n == 2) { + public EditInfo getChipEditInfo(int n) { + if (n == 0) { EditInfo ei = new EditInfo("", 0, -1, -1); ei.checkbox=new Checkbox("Retriggerable",retriggerable); return ei; } - if (n == 3) { + if (n == 1) { EditInfo ei = new EditInfo("Period (s)",delay, 0.001,0.1); return ei; } - return super.getEditInfo(n); + return super.getChipEditInfo(n); } - public void setEditValue(int n, EditInfo ei) { - if (n == 2) { + public void setChipEditValue(int n, EditInfo ei) { + if (n == 0) { retriggerable=ei.checkbox.getState(); } - if (n == 3) { + if (n == 1) { delay=ei.value; } - super.setEditValue(n, ei); + super.setChipEditValue(n, ei); } } diff --git a/src/com/lushprojects/circuitjs1/client/MultiplexerElm.java b/src/com/lushprojects/circuitjs1/client/MultiplexerElm.java index 8426ed5f..24aead18 100644 --- a/src/com/lushprojects/circuitjs1/client/MultiplexerElm.java +++ b/src/com/lushprojects/circuitjs1/client/MultiplexerElm.java @@ -82,21 +82,21 @@ package com.lushprojects.circuitjs1.client; int getDumpType() { return 184; } - public EditInfo getEditInfo(int n) { - if (n == 2) + public EditInfo getChipEditInfo(int n) { + if (n == 0) return new EditInfo("# of Select Bits", selectBitCount, 1, 8). setDimensionless(); - return super.getEditInfo(n); + return super.getChipEditInfo(n); } - public void setEditValue(int n, EditInfo ei) { - if (n == 2 && ei.value >= 1 && ei.value <= 6) { + public void setChipEditValue(int n, EditInfo ei) { + if (n == 0 && ei.value >= 1 && ei.value <= 6) { selectBitCount = (int) ei.value; setupPins(); setPoints(); return; } - super.setEditValue(n, ei); + super.setChipEditValue(n, ei); } } diff --git a/src/com/lushprojects/circuitjs1/client/PisoShiftElm.java b/src/com/lushprojects/circuitjs1/client/PisoShiftElm.java index 1a89db85..9ef7148a 100644 --- a/src/com/lushprojects/circuitjs1/client/PisoShiftElm.java +++ b/src/com/lushprojects/circuitjs1/client/PisoShiftElm.java @@ -128,19 +128,13 @@ class PisoShiftElm extends ChipElm { } } - public EditInfo getEditInfo(int n) { - if (n < 2) - return super.getEditInfo(n); - if (n == 2) + public EditInfo getChipEditInfo(int n) { + if (n == 0) return new EditInfo("# of Bits", bits, 1, 1).setDimensionless(); return null; } - public void setEditValue(int n, EditInfo ei) { - if (n < 2) { - super.setEditValue(n, ei); - return; - } - if (n == 2) { + public void setChipEditValue(int n, EditInfo ei) { + if (n == 0) { if (ei.value != bits && ei.value >= 1) { bits = (int)ei.value; data = new boolean[bits]; diff --git a/src/com/lushprojects/circuitjs1/client/RingCounterElm.java b/src/com/lushprojects/circuitjs1/client/RingCounterElm.java index 7424c499..b8c895d6 100644 --- a/src/com/lushprojects/circuitjs1/client/RingCounterElm.java +++ b/src/com/lushprojects/circuitjs1/client/RingCounterElm.java @@ -99,24 +99,18 @@ package com.lushprojects.circuitjs1.client; } lastClock = pins[0].value; } - public EditInfo getEditInfo(int n) { - if (n < 2) - return super.getEditInfo(n); - if (n == 2) { + public EditInfo getChipEditInfo(int n) { + if (n == 0) { EditInfo ei = new EditInfo("", 0, -1, -1); ei.checkbox = new Checkbox("Invert reset pin", hasInvertReset()); return ei; } - if (n == 3) + if (n == 1) return new EditInfo("# of Bits", bits, 1, 1).setDimensionless(); return null; } - public void setEditValue(int n, EditInfo ei) { - if (n < 2) { - super.setEditValue(n, ei); - return; - } - if (n == 2) { + public void setChipEditValue(int n, EditInfo ei) { + if (n == 0) { if (ei.checkbox.getState()) flags &= ~FLAG_RESET_HIGH; else @@ -125,7 +119,7 @@ package com.lushprojects.circuitjs1.client; setPoints(); return; } - if (n == 3 && ei.value >= 2) { + if (n == 1 && ei.value >= 2) { bits = (int)ei.value; setupPins(); setPoints(); diff --git a/src/com/lushprojects/circuitjs1/client/SRAMElm.java b/src/com/lushprojects/circuitjs1/client/SRAMElm.java index 643af8be..cd596665 100644 --- a/src/com/lushprojects/circuitjs1/client/SRAMElm.java +++ b/src/com/lushprojects/circuitjs1/client/SRAMElm.java @@ -114,12 +114,12 @@ import com.google.gwt.user.client.ui.TextArea; int getPostCount() { return 2 + addressBits + dataBits; } - public EditInfo getEditInfo(int n) { - if (n == 2) + public EditInfo getChipEditInfo(int n) { + if (n == 0) return new EditInfo("# of Address Bits", addressBits, 1, 1).setDimensionless(); - if (n == 3) + if (n == 1) return new EditInfo("# of Data Bits", dataBits, 1, 1).setDimensionless(); - if (n == 4) { + if (n == 2) { EditInfo ei = new EditInfo("Contents", 0); ei.textArea = new TextArea(); ei.textArea.setVisibleLines(5); @@ -151,30 +151,28 @@ import com.google.gwt.user.client.ui.TextArea; ei.textArea.setText(s); return ei; } - if (n == 5 && SRAMLoadFile.isSupported()) { + if (n == 3 && SRAMLoadFile.isSupported()) { EditInfo ei = new EditInfo("", 0, -1, -1); ei.loadFile = new SRAMLoadFile(); ei.button = new Button("Load Contents From File"); ei.newDialog = true; return ei; } - return super.getEditInfo(n); + return super.getChipEditInfo(n); } - public void setEditValue(int n, EditInfo ei) { - if (n < 2) - super.setEditValue(n, ei); - if (n == 2 && ei.value >= 2 && ei.value <= 16) { + public void setChipEditValue(int n, EditInfo ei) { + if (n == 0 && ei.value >= 2 && ei.value <= 16) { addressBits = (int)ei.value; setupPins(); setPoints(); } - if (n == 3 && ei.value >= 2 && ei.value <= 16) { + if (n == 1 && ei.value >= 2 && ei.value <= 16) { dataBits = (int)ei.value; setupPins(); setPoints(); } - if (n == 4) { + if (n == 2) { String s = ei.textArea.getText(); String lines[] = s.split("\n"); int i; diff --git a/src/com/lushprojects/circuitjs1/client/SeqGenElm.java b/src/com/lushprojects/circuitjs1/client/SeqGenElm.java index 47e86a8d..33a95a74 100644 --- a/src/com/lushprojects/circuitjs1/client/SeqGenElm.java +++ b/src/com/lushprojects/circuitjs1/client/SeqGenElm.java @@ -145,15 +145,13 @@ class SeqGenElm extends ChipElm { } return sb.toString(); } - public EditInfo getEditInfo(int n) { - if (n < 2) - return super.getEditInfo(n); - if (n == 2) { + public EditInfo getChipEditInfo(int n) { + if (n == 0) { EditInfo ei = new EditInfo("", 0, -1, -1); ei.checkbox = new Checkbox("Play Once", hasPlayOnce()); return ei; } - if (n == 3) { + if (n == 1) { EditInfo ei = new EditInfo("Sequence", 0, -1, -1); ei.textArea = new TextArea(); ei.textArea.setVisibleLines(5); @@ -165,16 +163,12 @@ class SeqGenElm extends ChipElm { } return null; } - public void setEditValue(int n, EditInfo ei) { - if (n < 2) { - super.setEditValue(n, ei); - return; - } - if (n == 2) { + public void setChipEditValue(int n, EditInfo ei) { + if (n == 0) { flags = ei.changeFlag(flags, FLAG_PLAY_ONCE); return; } - if (n == 3) { + if (n == 1) { String s = ei.textArea.getText(); // First count the number of bits so we can initialize the data array diff --git a/src/com/lushprojects/circuitjs1/client/SevenSegDecoderElm.java b/src/com/lushprojects/circuitjs1/client/SevenSegDecoderElm.java index 3d1b5ddc..27f05bc4 100644 --- a/src/com/lushprojects/circuitjs1/client/SevenSegDecoderElm.java +++ b/src/com/lushprojects/circuitjs1/client/SevenSegDecoderElm.java @@ -107,29 +107,29 @@ package com.lushprojects.circuitjs1.client; } } - public EditInfo getEditInfo(int n) { - if (n == 2) { + public EditInfo getChipEditInfo(int n) { + if (n == 0) { EditInfo ei = new EditInfo("", 0, -1, -1); ei.checkbox = new Checkbox("Blank Pin", hasBlank()); return ei; } - if (n == 3) { + if (n == 1) { EditInfo ei = new EditInfo("", 0, -1, -1); ei.checkbox = new Checkbox("Blank on 1111", blankOnF()); return ei; } - return super.getEditInfo(n); + return super.getChipEditInfo(n); } - public void setEditValue(int n, EditInfo ei) { - if (n == 2) { + public void setChipEditValue(int n, EditInfo ei) { + if (n == 0) { flags = ei.changeFlag(flags, FLAG_ENABLE); setupPins(); setPoints(); return; } - if (n == 3) + if (n == 1) flags = ei.changeFlag(flags, FLAG_BLANK_F); - super.setEditValue(n, ei); + super.setChipEditValue(n, ei); } int getDumpType() { return 197; } diff --git a/src/com/lushprojects/circuitjs1/client/SevenSegElm.java b/src/com/lushprojects/circuitjs1/client/SevenSegElm.java index ec998d60..1af48b09 100644 --- a/src/com/lushprojects/circuitjs1/client/SevenSegElm.java +++ b/src/com/lushprojects/circuitjs1/client/SevenSegElm.java @@ -294,8 +294,8 @@ package com.lushprojects.circuitjs1.client; int getVoltageSourceCount() { return 0; } int getDumpType() { return 157; } - public EditInfo getEditInfo(int n) { - if (n == 2) { + public EditInfo getChipEditInfo(int n) { + if (n == 0) { EditInfo ei = new EditInfo("Segments", 0, -1, -1); ei.choice = new Choice(); ei.choice.add("7 Segment"); @@ -304,7 +304,7 @@ package com.lushprojects.circuitjs1.client; ei.choice.select(baseSegmentCount == 7 ? 0 : baseSegmentCount == 14 ? 1 : 2); return ei; } - if (n == 3) { + if (n == 1) { EditInfo ei = new EditInfo("Extra Segment", 0, -1, -1); ei.choice = new Choice(); ei.choice.add("None"); @@ -313,7 +313,7 @@ package com.lushprojects.circuitjs1.client; ei.choice.select(extraSegment); return ei; } - if (n == 4) { + if (n == 2) { EditInfo ei = new EditInfo("Diodes", 0, -1, -1); ei.choice = new Choice(); ei.choice.add("Common Cathode"); @@ -322,28 +322,28 @@ package com.lushprojects.circuitjs1.client; ei.choice.select(diodeDirection == 1 ? 0 : diodeDirection == -1 ? 1 : 2); return ei; } - return super.getEditInfo(n); + return super.getChipEditInfo(n); } - public void setEditValue(int n, EditInfo ei) { - if (n == 2) { + public void setChipEditValue(int n, EditInfo ei) { + if (n == 0) { int ix = ei.choice.getSelectedIndex(); baseSegmentCount = (ix == 0) ? 7 : (ix == 1) ? 14 : 16; setPinCount(); return; } - if (n == 3) { + if (n == 1) { extraSegment = ei.choice.getSelectedIndex(); setPinCount(); return; } - if (n == 4) { + if (n == 2) { int ix = ei.choice.getSelectedIndex(); diodeDirection = (ix == 0) ? 1 : (ix == 1) ? -1 : 0; setPinCount(); return; } - super.setEditValue(n, ei); + super.setChipEditValue(n, ei); } void setPinCount() { diff --git a/src/com/lushprojects/circuitjs1/client/SipoShiftElm.java b/src/com/lushprojects/circuitjs1/client/SipoShiftElm.java index 60b43088..16252a49 100644 --- a/src/com/lushprojects/circuitjs1/client/SipoShiftElm.java +++ b/src/com/lushprojects/circuitjs1/client/SipoShiftElm.java @@ -84,19 +84,13 @@ class SipoShiftElm extends ChipElm { } } - public EditInfo getEditInfo(int n) { - if (n < 2) - return super.getEditInfo(n); - if (n == 2) + public EditInfo getChipEditInfo(int n) { + if (n == 0) return new EditInfo("# of Bits", bits, 1, 1).setDimensionless(); return null; } - public void setEditValue(int n, EditInfo ei) { - if (n < 2) { - super.setEditValue(n, ei); - return; - } - if (n == 2) { + public void setChipEditValue(int n, EditInfo ei) { + if (n == 0) { if (ei.value != bits && ei.value >= 1) { bits = (int)ei.value; setupPins(); diff --git a/src/com/lushprojects/circuitjs1/client/TFlipFlopElm.java b/src/com/lushprojects/circuitjs1/client/TFlipFlopElm.java index d13d5a46..680dccb9 100644 --- a/src/com/lushprojects/circuitjs1/client/TFlipFlopElm.java +++ b/src/com/lushprojects/circuitjs1/client/TFlipFlopElm.java @@ -82,21 +82,21 @@ package com.lushprojects.circuitjs1.client; lastClock = pins[3].value; } int getDumpType() { return 193; } - public EditInfo getEditInfo(int n) { - if (n == 2) { + public EditInfo getChipEditInfo(int n) { + if (n == 0) { EditInfo ei = new EditInfo("", 0, -1, -1); ei.checkbox = new Checkbox("Reset Pin", hasReset()); return ei; } - if (n == 3) { + if (n == 1) { EditInfo ei = new EditInfo("", 0, -1, -1); ei.checkbox = new Checkbox("Set Pin", hasSet()); return ei; } - return super.getEditInfo(n); + return super.getChipEditInfo(n); } - public void setEditValue(int n, EditInfo ei) { - if (n == 2) { + public void setChipEditValue(int n, EditInfo ei) { + if (n == 0) { if (ei.checkbox.getState()) flags |= FLAG_RESET; else @@ -105,7 +105,7 @@ package com.lushprojects.circuitjs1.client; allocNodes(); setPoints(); } - if (n == 3) { + if (n == 1) { if (ei.checkbox.getState()) flags |= FLAG_SET; else @@ -114,6 +114,6 @@ package com.lushprojects.circuitjs1.client; allocNodes(); setPoints(); } - super.setEditValue(n, ei); + super.setChipEditValue(n, ei); } } diff --git a/src/com/lushprojects/circuitjs1/client/TimeDelayRelayElm.java b/src/com/lushprojects/circuitjs1/client/TimeDelayRelayElm.java index c7c3dd14..8495ba37 100644 --- a/src/com/lushprojects/circuitjs1/client/TimeDelayRelayElm.java +++ b/src/com/lushprojects/circuitjs1/client/TimeDelayRelayElm.java @@ -94,7 +94,7 @@ package com.lushprojects.circuitjs1.client; int getVoltageSourceCount() { return 0; } int getDumpType() { return 414; } - public EditInfo getEditInfo(int n) { + public EditInfo getChipEditInfo(int n) { if (n == 0) return new EditInfo("On Delay (s)", onDelay, 0, 0); if (n == 1) @@ -105,7 +105,7 @@ package com.lushprojects.circuitjs1.client; return new EditInfo("Off Resistance (ohms)", offResistance, 0, 0); return null; } - public void setEditValue(int n, EditInfo ei) { + public void setChipEditValue(int n, EditInfo ei) { if (n == 0) onDelay = ei.value; if (n == 1) diff --git a/src/com/lushprojects/circuitjs1/client/TimerElm.java b/src/com/lushprojects/circuitjs1/client/TimerElm.java index 6370d666..39ed5470 100644 --- a/src/com/lushprojects/circuitjs1/client/TimerElm.java +++ b/src/com/lushprojects/circuitjs1/client/TimerElm.java @@ -114,22 +114,22 @@ class TimerElm extends ChipElm { int getPostCount() { return hasGroundPin() ? 8 : hasReset() ? 7 : 6; } int getVoltageSourceCount() { return 0; } int getDumpType() { return 165; } - public EditInfo getEditInfo(int n) { - if (n == 2) { + public EditInfo getChipEditInfo(int n) { + if (n == 0) { EditInfo ei = new EditInfo("", 0, 0, 0); ei.checkbox = new Checkbox("Ground Pin", hasGroundPin()); return ei; } - return super.getEditInfo(n); + return super.getChipEditInfo(n); } - public void setEditValue(int n, EditInfo ei) { - if (n == 2) { + public void setChipEditValue(int n, EditInfo ei) { + if (n == 0) { flags = ei.changeFlag(flags, FLAG_GROUND); allocNodes(); setPoints(); return; } - super.setEditValue(n, ei); + super.setChipEditValue(n, ei); } } diff --git a/src/com/lushprojects/circuitjs1/client/VCCSElm.java b/src/com/lushprojects/circuitjs1/client/VCCSElm.java index aad5b25b..ce5ed349 100644 --- a/src/com/lushprojects/circuitjs1/client/VCCSElm.java +++ b/src/com/lushprojects/circuitjs1/client/VCCSElm.java @@ -166,7 +166,7 @@ class VCCSElm extends ChipElm { return false; } - public EditInfo getEditInfo(int n) { + public EditInfo getChipEditInfo(int n) { if (n == 0) { EditInfo ei = new EditInfo(EditInfo.makeLink("customfunction.html", "Output Function"), 0, -1, -1); ei.text = exprString; @@ -178,7 +178,7 @@ class VCCSElm extends ChipElm { setDimensionless(); return null; } - public void setEditValue(int n, EditInfo ei) { + public void setChipEditValue(int n, EditInfo ei) { if (n == 0) { exprString = ei.textf.getText(); parseExpr();