X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;ds=sidebyside;f=org.simantics.district.maps%2Fsrc%2Forg%2Fsimantics%2Fmaps%2Feclipse%2FMapPainter.java;fp=org.simantics.district.maps%2Fsrc%2Forg%2Fsimantics%2Fmaps%2Feclipse%2FMapPainter.java;h=ef88e1c55ea9fdf266506ffbcd82c41b6a75a954;hb=17c52752fcc15ee30a7790b96e3976214077761b;hp=c519b9a5f1a3d53cadb779ded4ce78e07929b249;hpb=835710a4f22ec2d91c287295fb176a0af62d1186;p=simantics%2Fdistrict.git diff --git a/org.simantics.district.maps/src/org/simantics/maps/eclipse/MapPainter.java b/org.simantics.district.maps/src/org/simantics/maps/eclipse/MapPainter.java index c519b9a5..ef88e1c5 100644 --- a/org.simantics.district.maps/src/org/simantics/maps/eclipse/MapPainter.java +++ b/org.simantics.district.maps/src/org/simantics/maps/eclipse/MapPainter.java @@ -13,24 +13,35 @@ package org.simantics.maps.eclipse; import java.awt.Color; import java.awt.geom.AffineTransform; +import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.TimeUnit; import org.simantics.g2d.canvas.Hints; import org.simantics.g2d.canvas.ICanvasContext; import org.simantics.g2d.canvas.impl.AbstractCanvasParticipant; import org.simantics.g2d.canvas.impl.SGNodeReflection.SGCleanup; import org.simantics.g2d.canvas.impl.SGNodeReflection.SGInit; +import org.simantics.g2d.participant.MouseUtil; +import org.simantics.maps.sg.MapAttributionNode; +import org.simantics.maps.sg.MapLocationZoomInfoNode; import org.simantics.maps.sg.MapNode; import org.simantics.maps.sg.MapScaleNode; import org.simantics.maps.sg.commands.MapCommands; import org.simantics.scenegraph.g2d.G2DParentNode; +import org.simantics.scenegraph.g2d.events.Event; import org.simantics.scenegraph.g2d.events.EventHandlerReflection.EventHandler; +import org.simantics.scenegraph.g2d.events.MouseEvent.MouseMovedEvent; import org.simantics.scenegraph.g2d.events.command.CommandEvent; import org.simantics.scenegraph.g2d.events.command.Commands; import org.simantics.utils.datastructures.hints.HintListenerAdapter; -import org.simantics.utils.datastructures.hints.IHintListener; -import org.simantics.utils.datastructures.hints.IHintObservable; import org.simantics.utils.datastructures.hints.IHintContext.Key; import org.simantics.utils.datastructures.hints.IHintContext.KeyOf; +import org.simantics.utils.datastructures.hints.IHintListener; +import org.simantics.utils.datastructures.hints.IHintObservable; +import org.simantics.utils.threads.AWTThread; +import org.simantics.utils.threads.ThreadUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * MapPainter is an ICanvasContext participant that uses the scene graph @@ -42,6 +53,8 @@ import org.simantics.utils.datastructures.hints.IHintContext.KeyOf; */ public class MapPainter extends AbstractCanvasParticipant { + private static final Logger LOGGER = LoggerFactory.getLogger(MapPainter.class); + /** * Grid enabled status. Default value is True */ @@ -68,6 +81,10 @@ public class MapPainter extends AbstractCanvasParticipant { private AffineTransform transform; + private MapLocationZoomInfoNode locationZoomInfoNode; + + private ScheduledFuture schedule; + public MapPainter(AffineTransform transform) { this.transform = transform; } @@ -118,6 +135,24 @@ public class MapPainter extends AbstractCanvasParticipant { return false; } + @EventHandler(priority = 31) + public boolean handleEvent(Event e) { + if (e instanceof MouseMovedEvent) { + // here we should somehow re-render ? + if (locationZoomInfoNode.isEnabled()) { + if (schedule == null || schedule.isDone()) { + LOGGER.debug("current setDirty time" + System.currentTimeMillis()); + schedule = ThreadUtils.getNonBlockingWorkExecutor().schedule(() -> { + AWTThread.getThreadAccess().asyncExec(this::setDirty); + }, 100, TimeUnit.MILLISECONDS); + } else { + //LOGGER.debug("ingoring setDirty time" + System.currentTimeMillis()); + } + } + } + return false; + } + @SGInit public void initSG(G2DParentNode parent) { node = parent.addNode("map", MapNode.class); @@ -129,6 +164,18 @@ public class MapPainter extends AbstractCanvasParticipant { scaleNode.setTransform(transform); scaleNode.setEnabled(true); scaleNode.setZIndex(Integer.MAX_VALUE - 999); // Just under the grid + + locationZoomInfoNode = parent.addNode("locationZoomInfo", MapLocationZoomInfoNode.class); + locationZoomInfoNode.setTransform(transform); + locationZoomInfoNode.setEnabled(true); + MouseUtil mouseUtil = getContext().getAtMostOneItemOfClass(MouseUtil.class); + locationZoomInfoNode.setMouseUtil(mouseUtil); + locationZoomInfoNode.setZIndex(Integer.MAX_VALUE - 999); // Just under the grid + + MapAttributionNode addNode = parent.addNode("mapAttribution", MapAttributionNode.class); + addNode.setTransform(transform); + addNode.setEnabled(true); + addNode.setZIndex(Integer.MAX_VALUE - 999); } @SGCleanup