X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=LogicUI%2Fsrc%2Fera%2Fmi%2Fgui%2FLogicUICanvas.java;h=2115e7b1cd3380ac6055e793258a18e29cb0842e;hb=e618fa725540dd5f92ccf0ed7d65acdc8eb83f93;hp=da338013fe528388956f67920d90eb8fad149760;hpb=f2886cbd57dd08b797921fc2421b41bd92915799;p=Mograsim.git diff --git a/LogicUI/src/era/mi/gui/LogicUICanvas.java b/LogicUI/src/era/mi/gui/LogicUICanvas.java index da338013..2115e7b1 100644 --- a/LogicUI/src/era/mi/gui/LogicUICanvas.java +++ b/LogicUI/src/era/mi/gui/LogicUICanvas.java @@ -1,5 +1,7 @@ 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; @@ -27,8 +29,43 @@ public class LogicUICanvas extends ZoomableCanvas this.model = model; - model.addComponentAddedListener(c -> redrawThreadsafe()); - model.addWireAddedListener(c -> redrawThreadsafe()); + Consumer redrawConsumer = o -> redrawThreadsafe(); + Consumer pinAddedListener = p -> + { + p.addPinMovedListener(redrawConsumer); + redrawThreadsafe(); + }; + Consumer pinRemovedListener = p -> + { + p.removePinMovedListener(redrawConsumer); + redrawThreadsafe(); + }; + model.addComponentAddedListener(c -> + { + c.addComponentChangedListener(redrawConsumer); + c.addComponentMovedListener(redrawConsumer); + c.addPinAddedListener(pinAddedListener); + c.addPinRemovedListener(pinRemovedListener); + redrawThreadsafe(); + }); + model.addComponentRemovedListener(c -> + { + c.removeComponentChangedListener(redrawConsumer); + c.removeComponentMovedListener(redrawConsumer); + c.removePinAddedListener(pinAddedListener); + c.removePinRemovedListener(pinRemovedListener); + redrawThreadsafe(); + }); + model.addWireAddedListener(w -> + { + w.addWireChangedListener(redrawConsumer); + redrawThreadsafe(); + }); + model.addWireRemovedListener(w -> + { + w.removeWireChangedListener(redrawConsumer); + redrawThreadsafe(); + }); addZoomedRenderer(gc -> {