]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scenegraph/testcases/org/simantics/scenegraph/tests/TestRouteGraphNodeApplet.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.scenegraph / testcases / org / simantics / scenegraph / tests / TestRouteGraphNodeApplet.java
diff --git a/bundles/org.simantics.scenegraph/testcases/org/simantics/scenegraph/tests/TestRouteGraphNodeApplet.java b/bundles/org.simantics.scenegraph/testcases/org/simantics/scenegraph/tests/TestRouteGraphNodeApplet.java
new file mode 100644 (file)
index 0000000..edfb34b
--- /dev/null
@@ -0,0 +1,221 @@
+package org.simantics.scenegraph.tests;\r
+import java.awt.AWTEvent;\r
+import java.awt.BasicStroke;\r
+import java.awt.Color;\r
+import java.awt.Graphics;\r
+import java.awt.Graphics2D;\r
+import java.awt.Stroke;\r
+import java.awt.event.ComponentEvent;\r
+import java.awt.event.FocusEvent;\r
+import java.awt.event.KeyEvent;\r
+import java.awt.event.MouseEvent;\r
+import java.awt.event.MouseWheelEvent;\r
+import java.awt.geom.AffineTransform;\r
+import java.awt.image.VolatileImage;\r
+import java.util.Timer;\r
+import java.util.TimerTask;\r
+\r
+import javax.swing.JApplet;\r
+\r
+import org.simantics.diagram.connection.RouteGraph;\r
+import org.simantics.diagram.connection.RouteLine;\r
+import org.simantics.diagram.connection.RouteTerminal;\r
+import org.simantics.diagram.connection.rendering.BasicConnectionStyle;\r
+import org.simantics.diagram.connection.rendering.StyledRouteGraphRenderer;\r
+import org.simantics.diagram.connection.rendering.arrows.ILineEndStyle;\r
+import org.simantics.diagram.connection.rendering.arrows.PlainExampleLineEndStyle;\r
+import org.simantics.scenegraph.g2d.G2DFocusManager;\r
+import org.simantics.scenegraph.g2d.G2DParentNode;\r
+import org.simantics.scenegraph.g2d.G2DSceneGraph;\r
+import org.simantics.scenegraph.g2d.events.EventDelegator;\r
+import org.simantics.scenegraph.g2d.nodes.NavigationNode;\r
+import org.simantics.scenegraph.g2d.nodes.connection.IRouteGraphListener;\r
+import org.simantics.scenegraph.g2d.nodes.connection.RouteGraphChangeEvent;\r
+import org.simantics.scenegraph.g2d.nodes.connection.RouteGraphNode;\r
+\r
+\r
+/**\r
+ * @author Tuukka Lehtonen\r
+ */\r
+public class TestRouteGraphNodeApplet extends JApplet implements Runnable {\r
+\r
+    private static final long serialVersionUID = -2097427018689455381L;\r
+\r
+    private static final int FPS = 60;\r
+\r
+    protected VolatileImage backbuffer = null;\r
+    protected boolean interrupted = false;\r
+\r
+    Color LINE_COLOR1 = Color.RED;\r
+    Color LINE_COLOR2 = Color.GREEN;\r
+    Stroke LINE_STROKE = new BasicStroke(1, BasicStroke.CAP_SQUARE, BasicStroke.JOIN_BEVEL);\r
+    Stroke ROUTE_LINE_STROKE = new BasicStroke(3, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL);\r
+\r
+    G2DSceneGraph sg;\r
+    RouteGraph rg;\r
+    RouteGraphNode rgn;\r
+    BasicConnectionStyle style = new BasicConnectionStyle(LINE_COLOR1, Color.BLACK, 3.0, LINE_STROKE, ROUTE_LINE_STROKE, 8);\r
+\r
+    Timer timer = new Timer();\r
+    TimerTask task = new TimerTask() {\r
+        boolean toggle = false;\r
+        @Override\r
+        public void run() {\r
+            //Color color = toggle ? LINE_COLOR1 : LINE_COLOR2;\r
+            //style.setLineColor(color);\r
+            rgn.setRenderer(new StyledRouteGraphRenderer(style));\r
+            toggle ^= true;\r
+        }\r
+    };\r
+\r
+    public void init() {\r
+        setSize(600, 600);\r
+        setFocusable(true);\r
+        setFocusCycleRoot(true);\r
+        enableInputMethods(true);\r
+        enableEvents(AWTEvent.INPUT_METHOD_EVENT_MASK | AWTEvent.MOUSE_EVENT_MASK | AWTEvent.MOUSE_MOTION_EVENT_MASK | AWTEvent.KEY_EVENT_MASK | AWTEvent.TEXT_EVENT_MASK | AWTEvent.MOUSE_WHEEL_EVENT_MASK | AWTEvent.COMPONENT_EVENT_MASK | AWTEvent.PAINT_EVENT_MASK | AWTEvent.FOCUS_EVENT_MASK);\r
+\r
+        backbuffer = createVolatileImage(getWidth(), getHeight());\r
+\r
+        this.rg = new RouteGraph();\r
+        RouteLine v = rg.addLine(false, 0);\r
+        v.setData( "L1" );\r
+\r
+        rg.link(addTerminal("T1", rg, -100, -100, 1, PlainExampleLineEndStyle.INSTANCE), v);\r
+//        rg.link(addTerminal("T2", rg, -100, 100, 1, PlainExampleLineEndStyle.INSTANCE), v);\r
+//        rg.link(addTerminal("T3", rg, 100, -80, 1, ArrowExampleLineEndStyle.INSTANCE), v);\r
+//        rg.link(addTerminal("T4", rg, 100, 100, 4, ArrowExampleLineEndStyle.INSTANCE), v);\r
+\r
+        sg = new G2DSceneGraph();\r
+        NavigationNode nav = sg.addNode("navigation", NavigationNode.class);\r
+\r
+        // This just tests that RouteGraphNode handles transforms correctly\r
+        final G2DParentNode temp = nav.addNode("temp", G2DParentNode.class);\r
+        temp.setTransform(AffineTransform.getTranslateInstance(50, 50));\r
+\r
+        rgn = temp.addNode("rg1", RouteGraphNode.class);\r
+        rgn.setTransform(AffineTransform.getTranslateInstance(100, 100));\r
+        rgn.setRouteGraph(rg);\r
+        rgn.setRenderer(new StyledRouteGraphRenderer(style));\r
+\r
+        rgn.setRouteGraphListener(new IRouteGraphListener() {\r
+            @Override\r
+            public void routeGraphChanged(RouteGraphChangeEvent event) {\r
+                event.node.getRouteGraphDelta().print();\r
+            }\r
+        });\r
+\r
+        Thread t = new Thread(this);\r
+        t.start();\r
+\r
+        timer.schedule(task, 1000, 1000);\r
+    }\r
+\r
+    private static RouteTerminal addTerminal(Object data, RouteGraph rg, double x, double y, int allowedDirections, ILineEndStyle style) {\r
+        RouteTerminal rt = rg.addTerminal(x, y, x-20, y-20, x+20, y+20, allowedDirections, style);\r
+        rt.setData( data );\r
+        return rt;\r
+    }\r
+\r
+    public void run() {\r
+        while(!interrupted) {\r
+            repaint();\r
+            long ival = 1000 / FPS;\r
+            try {\r
+                Thread.sleep(ival);\r
+            } catch (InterruptedException e) {\r
+                e.printStackTrace();\r
+            }\r
+        }\r
+    }\r
+\r
+    public void update(Graphics g) {\r
+        int result = backbuffer.validate(getGraphicsConfiguration());           \r
+        if (result == VolatileImage.IMAGE_INCOMPATIBLE) {\r
+            backbuffer = this.createVolatileImage(getWidth(), getHeight());\r
+        }\r
+\r
+        Graphics2D g2d = backbuffer.createGraphics();\r
+        g2d.clearRect(0, 0, getWidth(), getHeight());\r
+        g2d.setClip(0, 0, getWidth(), getHeight());\r
+        sg.render(g2d);\r
+        g2d.dispose();\r
+        g.drawImage(backbuffer, 0, 0, this);\r
+    }\r
+    \r
+    public void paint(Graphics g) {\r
+        update(g);\r
+    }\r
+\r
+    public void processEvent(AWTEvent event) {\r
+        if(event.getID() == ComponentEvent.COMPONENT_RESIZED) {\r
+            backbuffer = this.createVolatileImage(getWidth(), getHeight());\r
+            repaint();\r
+        }\r
+\r
+        {\r
+            EventDelegator handler = sg.getEventDelegator();\r
+            switch(event.getID()) {\r
+                case MouseEvent.MOUSE_PRESSED:\r
+                    G2DFocusManager.INSTANCE.clearFocus();\r
+                    handler.mousePressed((MouseEvent)event);\r
+                    if(G2DFocusManager.INSTANCE.getFocusOwner() == null) {\r
+                        this.requestFocusInWindow();\r
+                    }\r
+                    break;\r
+                    \r
+                case MouseEvent.MOUSE_RELEASED:\r
+                    handler.mouseReleased((MouseEvent)event);\r
+                    break;\r
+                    \r
+                case MouseEvent.MOUSE_CLICKED:\r
+                    handler.mouseClicked((MouseEvent)event);\r
+                    break;\r
+                    \r
+                case MouseEvent.MOUSE_MOVED:\r
+                    handler.mouseMoved((MouseEvent)event);\r
+                    break;\r
+\r
+                case MouseEvent.MOUSE_DRAGGED:\r
+                    handler.mouseDragged((MouseEvent)event);\r
+                    break;\r
+                    \r
+                case MouseEvent.MOUSE_WHEEL:\r
+                    handler.mouseWheelMoved((MouseWheelEvent)event);\r
+                    break;\r
+                    \r
+                case MouseEvent.MOUSE_ENTERED:\r
+                    handler.mouseEntered((MouseEvent)event);\r
+                    break;\r
+                    \r
+                case MouseEvent.MOUSE_EXITED:\r
+                    handler.mouseExited((MouseEvent)event);\r
+                    break;\r
+                    \r
+                case KeyEvent.KEY_PRESSED:\r
+                    handler.keyPressed((KeyEvent)event);\r
+                    break;\r
+                    \r
+                case KeyEvent.KEY_RELEASED:\r
+                    handler.keyReleased((KeyEvent)event);\r
+                    break;\r
+                    \r
+                case KeyEvent.KEY_TYPED:\r
+                    handler.keyTyped((KeyEvent)event);\r
+                    break;\r
+                    \r
+                case FocusEvent.FOCUS_GAINED:\r
+                    handler.focusGained((FocusEvent)event);\r
+                    break;\r
+                    \r
+                case FocusEvent.FOCUS_LOST:\r
+                    handler.focusLost((FocusEvent)event);\r
+                    break;\r
+                    \r
+                default:\r
+                    break;\r
+            }\r
+        }\r
+    }\r
+\r
+}\r