X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=LogicUI%2Fsrc%2Fera%2Fmi%2Fgui%2FLogicUICanvas.java;fp=LogicUI%2Fsrc%2Fera%2Fmi%2Fgui%2FLogicUICanvas.java;h=4e6198843db6bf104740a950b1b70e2673741b1d;hb=4d29cabdc45d68b5e5f210266dc4fbc5560dbcdd;hp=fd6d4daa030e919e9d55679a1dc011b3e335c3df;hpb=34fbe2b9bd5bdf6eda0506d9bf00c8840c6cc28a;p=Mograsim.git diff --git a/LogicUI/src/era/mi/gui/LogicUICanvas.java b/LogicUI/src/era/mi/gui/LogicUICanvas.java index fd6d4daa..4e619884 100644 --- a/LogicUI/src/era/mi/gui/LogicUICanvas.java +++ b/LogicUI/src/era/mi/gui/LogicUICanvas.java @@ -1,19 +1,18 @@ package era.mi.gui; -import java.util.HashMap; import java.util.HashSet; -import java.util.Map; import java.util.Set; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Event; -import era.mi.gui.components.BasicGUIComponent; -import era.mi.gui.wires.GUIWire; +import era.mi.gui.model.components.GUIComponent; +import era.mi.gui.model.wires.GUIWire; +import era.mi.gui.model.wires.Pin; import net.haspamelodica.swt.helper.gcs.GeneralGC; -import net.haspamelodica.swt.helper.gcs.TranslatedGC; import net.haspamelodica.swt.helper.swtobjectwrappers.Point; +import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle; import net.haspamelodica.swt.helper.zoomablecanvas.ZoomableCanvas; /** @@ -23,8 +22,7 @@ import net.haspamelodica.swt.helper.zoomablecanvas.ZoomableCanvas; */ public class LogicUICanvas extends ZoomableCanvas { - private final Set components; - private final Map componentPositions; + private final Set components; private final Set wires; public LogicUICanvas(Composite parent, int style) @@ -32,10 +30,13 @@ public class LogicUICanvas extends ZoomableCanvas super(parent, style); components = new HashSet<>(); - componentPositions = new HashMap<>(); wires = new HashSet<>(); - addZoomedRenderer(gc -> components.forEach(c -> drawComponent(gc, c))); + addZoomedRenderer(gc -> + { + Rectangle visibleRegion = new Rectangle(offX, offY, gW / zoom, gH / zoom); + components.forEach(c -> drawComponent(gc, c, visibleRegion)); + }); addZoomedRenderer(gc -> wires.forEach(w -> w.render(gc))); addListener(SWT.MouseDown, this::mouseDown); } @@ -45,10 +46,10 @@ public class LogicUICanvas extends ZoomableCanvas * * @author Daniel Kirschten */ - public C addComponent(C component, double x, double y) + // TODO replace with model change listener + public C addComponent(C component) { components.add(component); - componentPositions.put(component, new Point(x, y)); return component; } @@ -58,18 +59,21 @@ public class LogicUICanvas extends ZoomableCanvas * * @author Daniel Kirschten */ - public void addWire(BasicGUIComponent component1, int component1ConnectionIndex, BasicGUIComponent component2, - int component2ConnectionIndex, Point... path) + // TODO replace with model change listener + public void addWire(Pin pin1, Pin pin2, Point... path) { - wires.add(new GUIWire(this::redrawThreadsafe, component1, component1ConnectionIndex, componentPositions.get(component1), component2, - component2ConnectionIndex, componentPositions.get(component2), path)); + wires.add(new GUIWire(this::redrawThreadsafe, pin1, pin2, path)); } - private void drawComponent(GeneralGC gc, BasicGUIComponent component) + private void drawComponent(GeneralGC gc, GUIComponent component, Rectangle visibleRegion) { - TranslatedGC tgc = new TranslatedGC(gc, componentPositions.get(component)); - component.render(tgc); - tgc.setBackground(getDisplay().getSystemColor(SWT.COLOR_BLUE)); + component.render(gc, visibleRegion); + gc.setBackground(getDisplay().getSystemColor(SWT.COLOR_CYAN)); + for (Pin p : component.getPins()) + { + Point pos = p.getPos(); + gc.fillOval(pos.x - 1, pos.y - 1, 2, 2); + } } private void mouseDown(Event e) @@ -77,8 +81,8 @@ public class LogicUICanvas extends ZoomableCanvas if (e.button == 1) { Point click = displayToWorldCoords(e.x, e.y); - for (BasicGUIComponent component : components) - if (component.getBounds().translate(componentPositions.get(component)).contains(click)) + for (GUIComponent component : components) + if (component.getBounds().contains(click)) { if (component.clicked(click.x, click.y)) redraw();