diff --git a/src/main/java/de/neemann/digital/draw/elements/Circuit.java b/src/main/java/de/neemann/digital/draw/elements/Circuit.java index d9d74e3f9..a34ca9017 100644 --- a/src/main/java/de/neemann/digital/draw/elements/Circuit.java +++ b/src/main/java/de/neemann/digital/draw/elements/Circuit.java @@ -170,17 +170,18 @@ public class Circuit { * @param graphic the graphic instance used */ public void drawTo(Graphic graphic) { - drawTo(graphic, EMPTY_SET, NoSync.INST); + drawTo(graphic, EMPTY_SET, null, NoSync.INST); } /** - * Draws tis circuit using the given graphic instance + * Draws this circuit using the given graphic instance * * @param graphic the graphic instance used * @param highLighted a list of Drawables to highlight + * @param highlight style used to draw the highlighted elements * @param modelSync sync interface to access the model. Is locked while drawing circuit */ - public void drawTo(Graphic graphic, Collection highLighted, Sync modelSync) { + public void drawTo(Graphic graphic, Collection highLighted, Style highlight, Sync modelSync) { if (!dotsPresent) { new DotCreator(wires).applyDots(); dotsPresent = true; @@ -189,11 +190,11 @@ public class Circuit { modelSync.access(() -> { graphic.openGroup(); for (Wire w : wires) - w.drawTo(graphic, highLighted.contains(w)); + w.drawTo(graphic, highLighted.contains(w) ? highlight : null); graphic.closeGroup(); for (VisualElement p : visualElements) { graphic.openGroup(); - p.drawTo(graphic, highLighted.contains(p)); + p.drawTo(graphic, highLighted.contains(p) ? highlight : null); graphic.closeGroup(); } }); @@ -640,9 +641,9 @@ public class Circuit { * @param circuit the circuit to take the listeners from */ public void getListenersFrom(Circuit circuit) { - if (circuit.listeners!=null) { - if (listeners==null) - listeners=new ArrayList<>(); + if (circuit.listeners != null) { + if (listeners == null) + listeners = new ArrayList<>(); listeners.addAll(circuit.listeners); } } diff --git a/src/main/java/de/neemann/digital/draw/elements/VisualElement.java b/src/main/java/de/neemann/digital/draw/elements/VisualElement.java index b7bfbd69f..eee32f6c2 100644 --- a/src/main/java/de/neemann/digital/draw/elements/VisualElement.java +++ b/src/main/java/de/neemann/digital/draw/elements/VisualElement.java @@ -61,7 +61,7 @@ public class VisualElement implements Drawable, Movable, AttributeListener { this.elementName = proto.elementName; this.elementAttributes = new ElementAttributes(proto.elementAttributes); setPos(new Vector(proto.pos)); - this.shapeFactory=proto.shapeFactory; + this.shapeFactory = proto.shapeFactory; } /** @@ -165,19 +165,19 @@ public class VisualElement implements Drawable, Movable, AttributeListener { } @Override - public void drawTo(Graphic graphic, boolean highLight) { + public void drawTo(Graphic graphic, Style highLight) { drawShape(graphic, highLight); // draw circle around element - if (highLight) { + if (highLight != null) { GraphicMinMax mm = getMinMax(false); Vector delta = mm.getMax().sub(mm.getMin()).add(SIZE, SIZE).div(2); Vector pos = mm.getMax().add(mm.getMin()).div(2); - graphic.drawCircle(pos.sub(delta), pos.add(delta), Style.HIGHLIGHT); + graphic.drawCircle(pos.sub(delta), pos.add(delta), highLight); } } - private void drawShape(Graphic graphic, boolean highLight) { + private void drawShape(Graphic graphic, Style highLight) { Graphic gr = new GraphicTransform(graphic, createTransform()); Shape shape = getShape(); shape.drawTo(gr, highLight); @@ -205,14 +205,14 @@ public class VisualElement implements Drawable, Movable, AttributeListener { if (includeText) { if (minMaxText == null) { GraphicMinMax mm = new GraphicMinMax(true); - drawShape(mm, false); + drawShape(mm, null); minMaxText = mm; } return minMaxText; } else { if (minMax == null) { GraphicMinMax mm = new GraphicMinMax(false); - drawShape(mm, false); + drawShape(mm, null); minMax = mm; } return minMax; @@ -246,7 +246,7 @@ public class VisualElement implements Drawable, Movable, AttributeListener { */ public BufferedImage getBufferedImage(double scale, int maxHeight) { GraphicMinMax mm = new GraphicMinMax(); - drawShape(mm, false); + drawShape(mm, null); if (mm.getMax().y - mm.getMin().y > maxHeight / scale) scale = (double) (maxHeight - 1) / (mm.getMax().y - mm.getMin().y + 4); @@ -266,7 +266,7 @@ public class VisualElement implements Drawable, Movable, AttributeListener { gr.scale(scale, scale); gr.translate(2 - mm.getMin().x, 2 - mm.getMin().y); GraphicSwing grs = new GraphicSwing(gr); - drawTo(grs, false); + drawTo(grs, null); return bi; } diff --git a/src/main/java/de/neemann/digital/draw/elements/Wire.java b/src/main/java/de/neemann/digital/draw/elements/Wire.java index 7f8da2d4a..1a705200c 100644 --- a/src/main/java/de/neemann/digital/draw/elements/Wire.java +++ b/src/main/java/de/neemann/digital/draw/elements/Wire.java @@ -55,9 +55,9 @@ public class Wire implements Drawable, Movable { } @Override - public void drawTo(Graphic graphic, boolean highLight) { - Style style = Style.HIGHLIGHT; - if (!highLight) + public void drawTo(Graphic graphic, Style highLight) { + Style style = highLight; + if (style == null) style = Style.getWireStyle(value); graphic.drawLine(p1, p2, style); diff --git a/src/main/java/de/neemann/digital/draw/graphics/Style.java b/src/main/java/de/neemann/digital/draw/graphics/Style.java index d837593ae..6484083e6 100644 --- a/src/main/java/de/neemann/digital/draw/graphics/Style.java +++ b/src/main/java/de/neemann/digital/draw/graphics/Style.java @@ -84,6 +84,11 @@ public class Style { */ public static final Style HIGHLIGHT = new Style(WIRETHICK, false, Color.CYAN); + /** + * error color used for the circles to mark an element + */ + public static final Style ERROR = new Style(WIRETHICK, false, Color.RED.darker()); + private final int thickness; private final boolean filled; private final Color color; @@ -180,4 +185,5 @@ public class Style { if (value.getValueIgnoreBurn() == 1) return WIRE_HIGH; else return WIRE_LOW; } + } diff --git a/src/main/java/de/neemann/digital/draw/shapes/BreakShape.java b/src/main/java/de/neemann/digital/draw/shapes/BreakShape.java index 49ea439ed..4d15343f4 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/BreakShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/BreakShape.java @@ -48,7 +48,7 @@ public class BreakShape implements Shape { } @Override - public void drawTo(Graphic graphic, boolean highLight) { + public void drawTo(Graphic graphic, Style highLight) { Vector center = new Vector(2 + SIZE, 0); graphic.drawCircle(center.sub(RAD), center.add(RAD), Style.NORMAL); graphic.drawLine(center.sub(D1), center.add(D1), Style.NORMAL); diff --git a/src/main/java/de/neemann/digital/draw/shapes/ButtonShape.java b/src/main/java/de/neemann/digital/draw/shapes/ButtonShape.java index f957a012a..e715f1d38 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/ButtonShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/ButtonShape.java @@ -83,7 +83,7 @@ public class ButtonShape implements Shape { } @Override - public void drawTo(Graphic graphic, boolean heighLight) { + public void drawTo(Graphic graphic, Style heighLight) { boolean down = false; if (ioState != null) down = ioState.getOutput(0).getBool(); diff --git a/src/main/java/de/neemann/digital/draw/shapes/ClockShape.java b/src/main/java/de/neemann/digital/draw/shapes/ClockShape.java index 3cb62e47c..5fa0f4172 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/ClockShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/ClockShape.java @@ -70,7 +70,7 @@ public class ClockShape implements Shape { } @Override - public void drawTo(Graphic graphic, boolean heighLight) { + public void drawTo(Graphic graphic, Style heighLight) { graphic.drawPolygon(new Polygon(true) .add(-SIZE * 2 - 1, -SIZE) .add(-1, -SIZE) diff --git a/src/main/java/de/neemann/digital/draw/shapes/ConstShape.java b/src/main/java/de/neemann/digital/draw/shapes/ConstShape.java index 9d932f532..d0cffa72f 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/ConstShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/ConstShape.java @@ -45,7 +45,7 @@ public class ConstShape implements Shape { } @Override - public void drawTo(Graphic graphic, boolean heighLight) { + public void drawTo(Graphic graphic, Style heighLight) { Vector textPos = new Vector(-3, 0); graphic.drawText(textPos, textPos.add(1, 0), value, Orientation.RIGHTCENTER, Style.NORMAL); } diff --git a/src/main/java/de/neemann/digital/draw/shapes/DILShape.java b/src/main/java/de/neemann/digital/draw/shapes/DILShape.java index 257d7e4b7..e36c51535 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/DILShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/DILShape.java @@ -67,7 +67,7 @@ public class DILShape implements Shape { } @Override - public void drawTo(Graphic graphic, boolean highLight) { + public void drawTo(Graphic graphic, Style highLight) { int dp = SPACING * SIZE; int pin = dp / 4; int x = width * SIZE; diff --git a/src/main/java/de/neemann/digital/draw/shapes/DataShape.java b/src/main/java/de/neemann/digital/draw/shapes/DataShape.java index b68ed948b..fb53067e2 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/DataShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/DataShape.java @@ -10,6 +10,7 @@ import de.neemann.digital.core.element.PinDescriptions; import de.neemann.digital.draw.elements.IOState; import de.neemann.digital.draw.elements.Pins; import de.neemann.digital.draw.graphics.Graphic; +import de.neemann.digital.draw.graphics.Style; import de.neemann.digital.draw.model.ModelCreator; import de.neemann.digital.draw.model.ModelEntry; import de.neemann.digital.gui.components.CircuitComponent; @@ -61,11 +62,11 @@ public class DataShape implements Shape { } @Override - public void drawTo(Graphic graphic, boolean heighLight) { + public void drawTo(Graphic graphic, Style heighLight) { if (dataSet == null) { dataSet = new DataSet(); } - dataSet.drawTo(graphic, false); + dataSet.drawTo(graphic, null); } @Override diff --git a/src/main/java/de/neemann/digital/draw/shapes/DelayShape.java b/src/main/java/de/neemann/digital/draw/shapes/DelayShape.java index 1ac51e243..2d0a69576 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/DelayShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/DelayShape.java @@ -41,7 +41,7 @@ public class DelayShape implements Shape { } @Override - public void drawTo(Graphic graphic, boolean heighLight) { + public void drawTo(Graphic graphic, Style heighLight) { graphic.drawPolygon( new Polygon(true) .add(1, -SIZE2) diff --git a/src/main/java/de/neemann/digital/draw/shapes/DemuxerShape.java b/src/main/java/de/neemann/digital/draw/shapes/DemuxerShape.java index 8d79c8658..ca25c8c37 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/DemuxerShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/DemuxerShape.java @@ -65,7 +65,7 @@ public class DemuxerShape implements Shape { } @Override - public void drawTo(Graphic graphic, boolean highLight) { + public void drawTo(Graphic graphic, Style highLight) { graphic.drawPolygon(new Polygon(true) .add(1, 5) .add(SIZE * 2 - 1, -4) diff --git a/src/main/java/de/neemann/digital/draw/shapes/DiodeBackwardShape.java b/src/main/java/de/neemann/digital/draw/shapes/DiodeBackwardShape.java index 960f67074..e57e76887 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/DiodeBackwardShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/DiodeBackwardShape.java @@ -50,7 +50,7 @@ public class DiodeBackwardShape implements Shape { } @Override - public void drawTo(Graphic graphic, boolean highLight) { + public void drawTo(Graphic graphic, Style highLight) { Style style = blown ? Style.DASH : Style.NORMAL; graphic.drawPolygon( diff --git a/src/main/java/de/neemann/digital/draw/shapes/DiodeForewardShape.java b/src/main/java/de/neemann/digital/draw/shapes/DiodeForewardShape.java index cf133932a..9f12e6459 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/DiodeForewardShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/DiodeForewardShape.java @@ -50,7 +50,7 @@ public class DiodeForewardShape implements Shape { } @Override - public void drawTo(Graphic graphic, boolean highLight) { + public void drawTo(Graphic graphic, Style highLight) { Style style = blown ? Style.DASH : Style.NORMAL; graphic.drawPolygon( diff --git a/src/main/java/de/neemann/digital/draw/shapes/DiodeShape.java b/src/main/java/de/neemann/digital/draw/shapes/DiodeShape.java index 1a08b6665..fc27aa3f7 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/DiodeShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/DiodeShape.java @@ -48,7 +48,7 @@ public class DiodeShape implements Shape { } @Override - public void drawTo(Graphic graphic, boolean highLight) { + public void drawTo(Graphic graphic, Style highLight) { Style style = blown ? Style.DASH : Style.NORMAL; graphic.drawPolygon( diff --git a/src/main/java/de/neemann/digital/draw/shapes/Drawable.java b/src/main/java/de/neemann/digital/draw/shapes/Drawable.java index 9926946cd..98a1ef12d 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/Drawable.java +++ b/src/main/java/de/neemann/digital/draw/shapes/Drawable.java @@ -1,6 +1,7 @@ package de.neemann.digital.draw.shapes; import de.neemann.digital.draw.graphics.Graphic; +import de.neemann.digital.draw.graphics.Style; /** * Interface implemented by the elements which can draw itself to a {@link Graphic} instance. @@ -10,9 +11,8 @@ import de.neemann.digital.draw.graphics.Graphic; public interface Drawable { /** * Draws an element depending on its state. - * - * @param graphic interface to draw to + * @param graphic interface to draw to * @param highLight true if a highlighted drawing is required */ - void drawTo(Graphic graphic, boolean highLight); + void drawTo(Graphic graphic, Style highLight); } diff --git a/src/main/java/de/neemann/digital/draw/shapes/DriverShape.java b/src/main/java/de/neemann/digital/draw/shapes/DriverShape.java index f9ca7ba18..963dc8e4c 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/DriverShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/DriverShape.java @@ -70,7 +70,7 @@ public class DriverShape implements Shape { } @Override - public void drawTo(Graphic graphic, boolean highLight) { + public void drawTo(Graphic graphic, Style highLight) { graphic.drawPolygon( new Polygon(true) .add(-SIZE + 1, -SIZE2 - 2) diff --git a/src/main/java/de/neemann/digital/draw/shapes/FETShape.java b/src/main/java/de/neemann/digital/draw/shapes/FETShape.java index 7e0e5a564..c22709de8 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/FETShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/FETShape.java @@ -51,7 +51,7 @@ public abstract class FETShape implements Shape { } @Override - public void drawTo(Graphic graphic, boolean highLight) { + public void drawTo(Graphic graphic, Style highLight) { final int g = SIZE2 / 2; graphic.drawPolygon(new Polygon(false) .add(SIZE, 0) diff --git a/src/main/java/de/neemann/digital/draw/shapes/FETShapeN.java b/src/main/java/de/neemann/digital/draw/shapes/FETShapeN.java index 2a46c49e9..c5013fea4 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/FETShapeN.java +++ b/src/main/java/de/neemann/digital/draw/shapes/FETShapeN.java @@ -37,7 +37,7 @@ public class FETShapeN extends FETShape { } @Override - public void drawTo(Graphic graphic, boolean highLight) { + public void drawTo(Graphic graphic, Style highLight) { super.drawTo(graphic, highLight); // the arrow diff --git a/src/main/java/de/neemann/digital/draw/shapes/FETShapeP.java b/src/main/java/de/neemann/digital/draw/shapes/FETShapeP.java index fc233074d..8e50ed0aa 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/FETShapeP.java +++ b/src/main/java/de/neemann/digital/draw/shapes/FETShapeP.java @@ -38,7 +38,7 @@ public class FETShapeP extends FETShape { @Override - public void drawTo(Graphic graphic, boolean highLight) { + public void drawTo(Graphic graphic, Style highLight) { super.drawTo(graphic, highLight); // the arrow diff --git a/src/main/java/de/neemann/digital/draw/shapes/FGFETShapeN.java b/src/main/java/de/neemann/digital/draw/shapes/FGFETShapeN.java index 7ef258910..60881057f 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/FGFETShapeN.java +++ b/src/main/java/de/neemann/digital/draw/shapes/FGFETShapeN.java @@ -45,7 +45,7 @@ public class FGFETShapeN extends FETShape { } @Override - public void drawTo(Graphic graphic, boolean highLight) { + public void drawTo(Graphic graphic, Style highLight) { super.drawTo(graphic, highLight); if (programmed) diff --git a/src/main/java/de/neemann/digital/draw/shapes/FGFETShapeP.java b/src/main/java/de/neemann/digital/draw/shapes/FGFETShapeP.java index 3298f0c37..1b577f2bc 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/FGFETShapeP.java +++ b/src/main/java/de/neemann/digital/draw/shapes/FGFETShapeP.java @@ -44,7 +44,7 @@ public class FGFETShapeP extends FETShape { @Override - public void drawTo(Graphic graphic, boolean highLight) { + public void drawTo(Graphic graphic, Style highLight) { super.drawTo(graphic, highLight); if (programmed) diff --git a/src/main/java/de/neemann/digital/draw/shapes/GenericShape.java b/src/main/java/de/neemann/digital/draw/shapes/GenericShape.java index 71bc52854..708affb5b 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/GenericShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/GenericShape.java @@ -171,7 +171,7 @@ public class GenericShape implements Shape { } @Override - public void drawTo(Graphic graphic, boolean highLight) { + public void drawTo(Graphic graphic, Style highLight) { int max = Math.max(inputs.size(), outputs.size()); int height = (max - 1) * SIZE + SIZE2; diff --git a/src/main/java/de/neemann/digital/draw/shapes/GroundShape.java b/src/main/java/de/neemann/digital/draw/shapes/GroundShape.java index 0a74a6075..cbcb3a436 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/GroundShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/GroundShape.java @@ -43,7 +43,7 @@ public class GroundShape implements Shape { } @Override - public void drawTo(Graphic graphic, boolean heighLight) { + public void drawTo(Graphic graphic, Style heighLight) { graphic.drawLine(new Vector(-SIZE2, 0), new Vector(SIZE2, 0), Style.THICK); } } diff --git a/src/main/java/de/neemann/digital/draw/shapes/InputShape.java b/src/main/java/de/neemann/digital/draw/shapes/InputShape.java index 63587cb34..5c85de72c 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/InputShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/InputShape.java @@ -88,7 +88,7 @@ public class InputShape implements Shape { } @Override - public void drawTo(Graphic graphic, boolean heighLight) { + public void drawTo(Graphic graphic, Style heighLight) { Style style = Style.NORMAL; if (ioState != null) { ObservableValue value = ioState.getOutput(0); diff --git a/src/main/java/de/neemann/digital/draw/shapes/LEDShape.java b/src/main/java/de/neemann/digital/draw/shapes/LEDShape.java index 6f984f8e1..08dc13fb4 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/LEDShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/LEDShape.java @@ -54,7 +54,7 @@ public class LEDShape implements Shape { } @Override - public void drawTo(Graphic graphic, boolean heighLight) { + public void drawTo(Graphic graphic, Style heighLight) { boolean fill = true; if (ioState != null) { fill = false; diff --git a/src/main/java/de/neemann/digital/draw/shapes/LightBulbShape.java b/src/main/java/de/neemann/digital/draw/shapes/LightBulbShape.java index 8362c2da6..f48893a9f 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/LightBulbShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/LightBulbShape.java @@ -12,8 +12,6 @@ import de.neemann.digital.draw.graphics.Graphic; import de.neemann.digital.draw.graphics.Style; import de.neemann.digital.draw.graphics.Vector; -import java.awt.*; - import static de.neemann.digital.draw.shapes.GenericShape.SIZE; /** @@ -56,7 +54,7 @@ public class LightBulbShape implements Shape { } @Override - public void drawTo(Graphic graphic, boolean highLight) { + public void drawTo(Graphic graphic, Style highLight) { if (a != null && b != null) { boolean on = !a.isHighZ() && !b.isHighZ() && (a.getBool() != b.getBool()); if (on) diff --git a/src/main/java/de/neemann/digital/draw/shapes/MissingShape.java b/src/main/java/de/neemann/digital/draw/shapes/MissingShape.java index 093dee09a..6825a45eb 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/MissingShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/MissingShape.java @@ -42,7 +42,7 @@ public class MissingShape implements Shape { } @Override - public void drawTo(Graphic graphic, boolean highLight) { + public void drawTo(Graphic graphic, Style highLight) { Style style = Style.NORMAL_TEXT; graphic.drawText(new Vector(4, 4), new Vector(5, 4), message, Orientation.LEFTTOP, style); if (cause != null && cause.length() > 0) diff --git a/src/main/java/de/neemann/digital/draw/shapes/MuxerShape.java b/src/main/java/de/neemann/digital/draw/shapes/MuxerShape.java index f00751ca9..1cf118a12 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/MuxerShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/MuxerShape.java @@ -60,7 +60,7 @@ public class MuxerShape implements Shape { } @Override - public void drawTo(Graphic graphic, boolean heighLight) { + public void drawTo(Graphic graphic, Style heighLight) { graphic.drawPolygon(new Polygon(true) .add(1, -4) .add(SIZE * 2 - 1, 5) diff --git a/src/main/java/de/neemann/digital/draw/shapes/OutputShape.java b/src/main/java/de/neemann/digital/draw/shapes/OutputShape.java index f723b4782..69a706d42 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/OutputShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/OutputShape.java @@ -63,7 +63,7 @@ public class OutputShape implements Shape { } @Override - public void drawTo(Graphic graphic, boolean highLight) { + public void drawTo(Graphic graphic, Style highLight) { Style style = Style.NORMAL; if (ioState != null) { ObservableValue value = ioState.getInput(0); diff --git a/src/main/java/de/neemann/digital/draw/shapes/ProbeShape.java b/src/main/java/de/neemann/digital/draw/shapes/ProbeShape.java index 401766fa0..11be7633c 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/ProbeShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/ProbeShape.java @@ -58,7 +58,7 @@ public class ProbeShape implements Shape { } @Override - public void drawTo(Graphic graphic, boolean highLight) { + public void drawTo(Graphic graphic, Style highLight) { graphic.drawText(new Vector(2, -1), new Vector(3, -1), label, Orientation.LEFTBOTTOM, Style.NORMAL); if (bits > 1) { String v = format.format(inValue); diff --git a/src/main/java/de/neemann/digital/draw/shapes/PullDownShape.java b/src/main/java/de/neemann/digital/draw/shapes/PullDownShape.java index ac574afc8..a781aa5bd 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/PullDownShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/PullDownShape.java @@ -53,7 +53,7 @@ public class PullDownShape implements Shape { } @Override - public void drawTo(Graphic graphic, boolean highLight) { + public void drawTo(Graphic graphic, Style highLight) { graphic.drawPolygon( new Polygon(true) .add(-WIDTH2, 1) diff --git a/src/main/java/de/neemann/digital/draw/shapes/PullUpShape.java b/src/main/java/de/neemann/digital/draw/shapes/PullUpShape.java index 078500308..827f5b515 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/PullUpShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/PullUpShape.java @@ -47,7 +47,7 @@ public class PullUpShape implements Shape { } @Override - public void drawTo(Graphic graphic, boolean highLight) { + public void drawTo(Graphic graphic, Style highLight) { graphic.drawPolygon( new Polygon(true) .add(-WIDTH2, -1) diff --git a/src/main/java/de/neemann/digital/draw/shapes/RelayShape.java b/src/main/java/de/neemann/digital/draw/shapes/RelayShape.java index e812eb687..86806c379 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/RelayShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/RelayShape.java @@ -56,7 +56,7 @@ public class RelayShape implements Shape { } @Override - public void drawTo(Graphic graphic, boolean highLight) { + public void drawTo(Graphic graphic, Style highLight) { int yOffs = 0; boolean closed = invers; diff --git a/src/main/java/de/neemann/digital/draw/shapes/ResetShape.java b/src/main/java/de/neemann/digital/draw/shapes/ResetShape.java index 219498e8c..7ddb8cbe4 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/ResetShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/ResetShape.java @@ -44,7 +44,7 @@ public class ResetShape implements Shape { } @Override - public void drawTo(Graphic graphic, boolean highLight) { + public void drawTo(Graphic graphic, Style highLight) { graphic.drawPolygon(new Polygon(true).add(-SIZE * 2 - 2, -SIZE).add(-2, -SIZE).add(-2, SIZE).add(-SIZE * 2 - 2, SIZE), Style.NORMAL); Vector textPos = new Vector(-SIZE * 2 + 2, -SIZE + 2); diff --git a/src/main/java/de/neemann/digital/draw/shapes/RotEncoderShape.java b/src/main/java/de/neemann/digital/draw/shapes/RotEncoderShape.java index e1e3bc129..55b85d200 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/RotEncoderShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/RotEncoderShape.java @@ -106,7 +106,7 @@ public class RotEncoderShape implements Shape { } @Override - public void drawTo(Graphic graphic, boolean heighLight) { + public void drawTo(Graphic graphic, Style heighLight) { graphic.drawPolygon(new Polygon(true) .add(0, -SIZE) .add(0, SIZE * 2) diff --git a/src/main/java/de/neemann/digital/draw/shapes/SevenSegShape.java b/src/main/java/de/neemann/digital/draw/shapes/SevenSegShape.java index 745efde5d..816e51d96 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/SevenSegShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/SevenSegShape.java @@ -74,7 +74,7 @@ public class SevenSegShape extends SevenShape { } @Override - public void drawTo(Graphic graphic, boolean highLight) { + public void drawTo(Graphic graphic, Style highLight) { super.drawTo(graphic, highLight); if (commonCatode) graphic.drawLine( diff --git a/src/main/java/de/neemann/digital/draw/shapes/SevenShape.java b/src/main/java/de/neemann/digital/draw/shapes/SevenShape.java index 509e5aec1..a3c292d2e 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/SevenShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/SevenShape.java @@ -67,7 +67,7 @@ public abstract class SevenShape implements Shape { } @Override - public void drawTo(Graphic graphic, boolean highLight) { + public void drawTo(Graphic graphic, Style highLight) { graphic.drawPolygon(new Polygon(true) .add(-SIZE2, 1) .add(SIZE * 3 + SIZE2, 1) diff --git a/src/main/java/de/neemann/digital/draw/shapes/SplitterShape.java b/src/main/java/de/neemann/digital/draw/shapes/SplitterShape.java index 6c0099b7a..90a2ca54e 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/SplitterShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/SplitterShape.java @@ -55,7 +55,7 @@ public class SplitterShape implements Shape { } @Override - public void drawTo(Graphic graphic, boolean heighLight) { + public void drawTo(Graphic graphic, Style heighLight) { for (int i = 0; i < inputs.size(); i++) { Vector pos = new Vector(-2, i * SIZE - 3); graphic.drawText(pos, pos.add(2, 0), inputs.get(i).getName(), Orientation.RIGHTBOTTOM, Style.SHAPE_PIN); diff --git a/src/main/java/de/neemann/digital/draw/shapes/SwitchShape.java b/src/main/java/de/neemann/digital/draw/shapes/SwitchShape.java index 9748b6ffc..66da722dc 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/SwitchShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/SwitchShape.java @@ -65,7 +65,7 @@ public class SwitchShape implements Shape { } @Override - public void drawTo(Graphic graphic, boolean highLight) { + public void drawTo(Graphic graphic, Style highLight) { int yOffs = 0; if (closed) { graphic.drawLine(new Vector(0, 0), new Vector(SIZE * 2, 0), Style.NORMAL); diff --git a/src/main/java/de/neemann/digital/draw/shapes/TestCaseShape.java b/src/main/java/de/neemann/digital/draw/shapes/TestCaseShape.java index 4da437587..d10faf645 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/TestCaseShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/TestCaseShape.java @@ -45,7 +45,7 @@ public class TestCaseShape implements Shape { } @Override - public void drawTo(Graphic graphic, boolean highLight) { + public void drawTo(Graphic graphic, Style highLight) { Polygon pol = new Polygon(true) .add(SIZE2, SIZE2) .add(SIZE2 + SIZE * 4, SIZE2) diff --git a/src/main/java/de/neemann/digital/draw/shapes/TextShape.java b/src/main/java/de/neemann/digital/draw/shapes/TextShape.java index 12968aa08..9bb99034f 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/TextShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/TextShape.java @@ -45,7 +45,7 @@ public class TextShape implements Shape { } @Override - public void drawTo(Graphic graphic, boolean highLight) { + public void drawTo(Graphic graphic, Style highLight) { graphic.drawText(new Vector(0, 0), new Vector(1, 0), label, Orientation.LEFTTOP, Style.NORMAL_TEXT); } } diff --git a/src/main/java/de/neemann/digital/draw/shapes/TransGateShape.java b/src/main/java/de/neemann/digital/draw/shapes/TransGateShape.java index 71476857d..0e20520fc 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/TransGateShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/TransGateShape.java @@ -64,7 +64,7 @@ public class TransGateShape implements Shape { } @Override - public void drawTo(Graphic graphic, boolean highLight) { + public void drawTo(Graphic graphic, Style highLight) { graphic.drawPolygon(TOP, Style.NORMAL); graphic.drawPolygon(BOTTOM, Style.NORMAL); graphic.drawLine(new Vector(SIZE, -SIZE), new Vector(SIZE, -SIZE2), Style.NORMAL); diff --git a/src/main/java/de/neemann/digital/draw/shapes/TunnelShape.java b/src/main/java/de/neemann/digital/draw/shapes/TunnelShape.java index 1496a4a30..cb719943c 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/TunnelShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/TunnelShape.java @@ -48,7 +48,7 @@ public class TunnelShape implements Shape { } @Override - public void drawTo(Graphic gr, boolean highLight) { + public void drawTo(Graphic gr, Style highLight) { gr.drawPolygon(new Polygon(true) .add(0, 0) .add(WIDTH, HEIGHT) diff --git a/src/main/java/de/neemann/digital/draw/shapes/VDDShape.java b/src/main/java/de/neemann/digital/draw/shapes/VDDShape.java index 87d83510e..1d8cabea4 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/VDDShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/VDDShape.java @@ -45,7 +45,7 @@ public class VDDShape implements Shape { } @Override - public void drawTo(Graphic graphic, boolean heighLight) { + public void drawTo(Graphic graphic, Style heighLight) { graphic.drawPolygon( new Polygon(false) .add(-SIZE2, DOWNSHIFT) diff --git a/src/main/java/de/neemann/digital/draw/shapes/ieee/IEEEGenericShape.java b/src/main/java/de/neemann/digital/draw/shapes/ieee/IEEEGenericShape.java index 580a27c20..2f9246fd9 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/ieee/IEEEGenericShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/ieee/IEEEGenericShape.java @@ -54,7 +54,7 @@ public abstract class IEEEGenericShape implements Shape { } @Override - public void drawTo(Graphic graphic, boolean highLight) { + public void drawTo(Graphic graphic, Style highLight) { int offs = (inputs.size() / 2 - 1) * SIZE; drawIEEE(new GraphicTransform(graphic, v -> v.add(0, offs))); diff --git a/src/main/java/de/neemann/digital/draw/shapes/ieee/IEEENotShape.java b/src/main/java/de/neemann/digital/draw/shapes/ieee/IEEENotShape.java index e3c6391fe..32aeb1d02 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/ieee/IEEENotShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/ieee/IEEENotShape.java @@ -52,7 +52,7 @@ public class IEEENotShape implements Shape { } @Override - public void drawTo(Graphic graphic, boolean highLight) { + public void drawTo(Graphic graphic, Style highLight) { graphic.drawPolygon( new Polygon(true) .add(1, -SIZE2 - 2) diff --git a/src/main/java/de/neemann/digital/gui/Main.java b/src/main/java/de/neemann/digital/gui/Main.java index 35a78019a..188904c35 100644 --- a/src/main/java/de/neemann/digital/gui/Main.java +++ b/src/main/java/de/neemann/digital/gui/Main.java @@ -917,6 +917,11 @@ public final class Main extends JFrame implements ClosingWindowListener.ConfirmS if (createAndStartModel(false, ModelEvent.MICROSTEP, null)) circuitComponent.setManualChangeObserver(new MicroStepObserver(model)); } + + @Override + public void leave() { + circuitComponent.removeHighLighted(); + } }); } @@ -1009,6 +1014,7 @@ public final class Main extends JFrame implements ClosingWindowListener.ConfirmS BurnException e = (BurnException) cause; circuitComponent.addHighLightedWires(e.getValues()); } + circuitComponent.setHighLightStyle(Style.ERROR); circuitComponent.repaintNeeded(); new ErrorMessage(message).addCause(cause).show(Main.this); stoppedState.enter(); diff --git a/src/main/java/de/neemann/digital/gui/components/CircuitComponent.java b/src/main/java/de/neemann/digital/gui/components/CircuitComponent.java index 5c0df7239..491957a3f 100644 --- a/src/main/java/de/neemann/digital/gui/components/CircuitComponent.java +++ b/src/main/java/de/neemann/digital/gui/components/CircuitComponent.java @@ -107,6 +107,7 @@ public class CircuitComponent extends JComponent implements Circuit.ChangedListe private ArrayList modifications; private Circuit initialCircuit; private int undoPosition; + private Style highLightStyle = Style.HIGHLIGHT; /** @@ -558,8 +559,19 @@ public class CircuitComponent extends JComponent implements Circuit.ChangedListe */ public void removeHighLighted() { highLighted.clear(); + highLightStyle = Style.HIGHLIGHT; } + /** + * Sets the style used to highlight components + * + * @param highLightStyle the style to highlight components + */ + public void setHighLightStyle(Style highLightStyle) { + this.highLightStyle = highLightStyle; + } + + /** * Adds the given element to insert to the circuit * @@ -624,7 +636,7 @@ public class CircuitComponent extends JComponent implements Circuit.ChangedListe GraphicSwing gr = new GraphicSwing(gr2, (int) (2 / transform.getScaleX())); long time = System.currentTimeMillis(); - circuit.drawTo(gr, highLighted, modelSync); + circuit.drawTo(gr, highLighted, highLightStyle, modelSync); time = System.currentTimeMillis() - time; if (time > 500) antiAlias = false; @@ -1137,7 +1149,7 @@ public class CircuitComponent extends JComponent implements Circuit.ChangedListe @Override public void drawTo(Graphic gr) { if (delta != null) - element.drawTo(gr, true); + element.drawTo(gr, Style.HIGHLIGHT); } @Override @@ -1203,7 +1215,7 @@ public class CircuitComponent extends JComponent implements Circuit.ChangedListe @Override public void drawTo(Graphic gr) { - visualElement.drawTo(gr, true); + visualElement.drawTo(gr, Style.HIGHLIGHT); } @Override @@ -1293,7 +1305,7 @@ public class CircuitComponent extends JComponent implements Circuit.ChangedListe @Override public void drawTo(Graphic gr) { // ensure that highlighted wire is visible by drawing it on top of other drawings. - wire.drawTo(gr, true); + wire.drawTo(gr, Style.HIGHLIGHT); } @Override @@ -1350,7 +1362,7 @@ public class CircuitComponent extends JComponent implements Circuit.ChangedListe @Override public void drawTo(Graphic gr) { - wire.drawTo(gr, true); + wire.drawTo(gr, Style.HIGHLIGHT); } @Override @@ -1376,7 +1388,7 @@ public class CircuitComponent extends JComponent implements Circuit.ChangedListe } private void activate(Vector startPos) { - startPos=raster(startPos); + startPos = raster(startPos); activate(startPos, startPos); selectionMade = false; } @@ -1387,7 +1399,7 @@ public class CircuitComponent extends JComponent implements Circuit.ChangedListe wire1 = new Wire(startPos, endPos); wire2 = new Wire(startPos, endPos); selectionMade = true; - lastPosition=endPos; + lastPosition = endPos; setWires(); } @@ -1447,8 +1459,8 @@ public class CircuitComponent extends JComponent implements Circuit.ChangedListe @Override public void drawTo(Graphic gr) { - wire1.drawTo(gr, true); - wire2.drawTo(gr, true); + wire1.drawTo(gr, Style.HIGHLIGHT); + wire2.drawTo(gr, Style.HIGHLIGHT); } @Override @@ -1684,7 +1696,7 @@ public class CircuitComponent extends JComponent implements Circuit.ChangedListe if (elements != null) for (Movable m : elements) if (m instanceof Drawable) - ((Drawable) m).drawTo(gr, true); + ((Drawable) m).drawTo(gr, Style.HIGHLIGHT); } @Override diff --git a/src/main/java/de/neemann/digital/gui/components/data/DataSet.java b/src/main/java/de/neemann/digital/gui/components/data/DataSet.java index 50592c88b..297e98167 100644 --- a/src/main/java/de/neemann/digital/gui/components/data/DataSet.java +++ b/src/main/java/de/neemann/digital/gui/components/data/DataSet.java @@ -140,7 +140,7 @@ public class DataSet implements Iterable, Drawable { @Override - synchronized public void drawTo(Graphic g, boolean highLight) { + synchronized public void drawTo(Graphic g, Style highLight) { int x = getTextBorder(); int yOffs = SIZE / 2; diff --git a/src/main/java/de/neemann/digital/gui/components/data/DataSetComponent.java b/src/main/java/de/neemann/digital/gui/components/data/DataSetComponent.java index 51489b3cc..b30230055 100644 --- a/src/main/java/de/neemann/digital/gui/components/data/DataSetComponent.java +++ b/src/main/java/de/neemann/digital/gui/components/data/DataSetComponent.java @@ -29,7 +29,7 @@ public class DataSetComponent extends JComponent { g.setColor(Color.WHITE); g.fillRect(0, 0, getWidth(), getHeight()); - dataSet.drawTo(new GraphicSwing(g2), false); + dataSet.drawTo(new GraphicSwing(g2), null); } @Override diff --git a/src/test/java/de/neemann/digital/docu/DocuTest.java b/src/test/java/de/neemann/digital/docu/DocuTest.java index cbd36e0c1..f4324251a 100644 --- a/src/test/java/de/neemann/digital/docu/DocuTest.java +++ b/src/test/java/de/neemann/digital/docu/DocuTest.java @@ -117,10 +117,10 @@ public class DocuTest extends TestCase { private void writeSVG(File imageFile, VisualElement ve) throws IOException { GraphicMinMax minMax = new GraphicMinMax(true); - ve.drawTo(minMax, false); + ve.drawTo(minMax, null); try (FileOutputStream out = new FileOutputStream(imageFile)) { try (GraphicSVG svg = new GraphicSVG(out, minMax.getMin(), minMax.getMax(), null, 20)) { - ve.drawTo(svg, false); + ve.drawTo(svg, null); } } }