X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=LogicUI%2Fsrc%2Fera%2Fmi%2Fgui%2FLogicUICanvas.java;h=6610e2e3d30cccde648ee22be5ef5111a15ecddd;hb=d27165bc7b5dcff6c1e3d7f88f7195c5418ab9df;hp=0b7641ebeb3aae989171189758b7494271b34f2c;hpb=8eb61f917f31b0cff935538606df04e1c610bdf9;p=Mograsim.git diff --git a/LogicUI/src/era/mi/gui/LogicUICanvas.java b/LogicUI/src/era/mi/gui/LogicUICanvas.java index 0b7641eb..6610e2e3 100644 --- a/LogicUI/src/era/mi/gui/LogicUICanvas.java +++ b/LogicUI/src/era/mi/gui/LogicUICanvas.java @@ -1,11 +1,14 @@ package era.mi.gui; +import java.util.function.Consumer; + import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Event; import era.mi.gui.model.ViewModel; 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.swtobjectwrappers.Point; @@ -19,6 +22,8 @@ import net.haspamelodica.swt.helper.zoomablecanvas.ZoomableCanvas; */ public class LogicUICanvas extends ZoomableCanvas { + private static final boolean DRAW_PINS = false; + private final ViewModel model; public LogicUICanvas(Composite parent, int style, ViewModel model) @@ -27,10 +32,47 @@ public class LogicUICanvas extends ZoomableCanvas this.model = model; - model.addComponentAddedListener(c -> redrawThreadsafe()); - model.addWireAddedListener(c -> redrawThreadsafe()); - model.addComponentRemovedListener(c -> redrawThreadsafe()); - model.addWireRemovedListener(c -> redrawThreadsafe()); + Consumer redrawConsumer = o -> redrawThreadsafe(); + Consumer pinAddedListener = p -> + { + p.addPinMovedListener(redrawConsumer); + redrawThreadsafe(); + }; + Consumer pinRemovedListener = p -> + { + p.removePinMovedListener(redrawConsumer); + redrawThreadsafe(); + }; + Consumer componentAddedListener = c -> + { + c.addComponentLookChangedListener(redrawConsumer); + c.addComponentMovedListener(redrawConsumer); + c.addPinAddedListener(pinAddedListener); + c.addPinRemovedListener(pinRemovedListener); + redrawThreadsafe(); + }; + model.addComponentAddedListener(componentAddedListener); + model.getComponents().forEach(componentAddedListener); + model.addComponentRemovedListener(c -> + { + c.removeComponentLookChangedListener(redrawConsumer); + c.removeComponentMovedListener(redrawConsumer); + c.removePinAddedListener(pinAddedListener); + c.removePinRemovedListener(pinRemovedListener); + redrawThreadsafe(); + }); + Consumer wireAddedListener = w -> + { + w.addWireLookChangedListener(redrawConsumer); + redrawThreadsafe(); + }; + model.addWireAddedListener(wireAddedListener); + model.getWires().forEach(wireAddedListener); + model.addWireRemovedListener(w -> + { + w.removeWireLookChangedListener(redrawConsumer); + redrawThreadsafe(); + }); addZoomedRenderer(gc -> { @@ -44,11 +86,14 @@ public class LogicUICanvas extends ZoomableCanvas private void drawComponent(GeneralGC gc, GUIComponent component, Rectangle visibleRegion) { component.render(gc, visibleRegion); - gc.setBackground(getDisplay().getSystemColor(SWT.COLOR_CYAN)); - for (Pin p : component.getPins()) + if (DRAW_PINS) { - Point pos = p.getPos(); - gc.fillOval(pos.x - 1, pos.y - 1, 2, 2); + gc.setBackground(getDisplay().getSystemColor(SWT.COLOR_DARK_CYAN)); + for (Pin p : component.getPins()) + { + Point pos = p.getPos(); + gc.fillOval(pos.x - 1, pos.y - 1, 2, 2); + } } }