-/*******************************************************************************\r
- * Copyright (c) 2007, 2011 Association for Decentralized Information Management in\r
- * Industry THTH ry.\r
- * All rights reserved. This program and the accompanying materials\r
- * are made available under the terms of the Eclipse Public License v1.0\r
- * which accompanies this distribution, and is available at\r
- * http://www.eclipse.org/legal/epl-v10.html\r
- *\r
- * Contributors:\r
- * VTT Technical Research Centre of Finland - initial API and implementation\r
- *******************************************************************************/\r
-package org.simantics.diagram.connection.tests;\r
-\r
-import java.awt.Color;\r
-import java.awt.Graphics;\r
-import java.awt.Graphics2D;\r
-import java.awt.HeadlessException;\r
-import java.awt.RenderingHints;\r
-import java.awt.event.KeyAdapter;\r
-import java.awt.event.KeyEvent;\r
-import java.awt.event.MouseAdapter;\r
-import java.awt.event.MouseEvent;\r
-import java.awt.event.MouseMotionListener;\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.RouteLink;\r
-import org.simantics.diagram.connection.RouteTerminal;\r
-import org.simantics.diagram.connection.actions.IAction;\r
-import org.simantics.diagram.connection.actions.IReconnectAction;\r
-import org.simantics.diagram.connection.actions.MoveAction;\r
-import org.simantics.diagram.connection.actions.ReconnectLineAction;\r
-import org.simantics.diagram.connection.rendering.ExampleConnectionStyle;\r
-import org.simantics.diagram.connection.rendering.IRouteGraphRenderer;\r
-import org.simantics.diagram.connection.rendering.StyledRouteGraphRenderer;\r
-import org.simantics.diagram.connection.rendering.arrows.ArrowExampleLineEndStyle;\r
-import org.simantics.diagram.connection.rendering.arrows.ILineEndStyle;\r
-import org.simantics.diagram.connection.rendering.arrows.PlainExampleLineEndStyle;\r
-import org.simantics.diagram.connection.tests.actions.HighlightReconnectPointsAction;\r
-import org.simantics.diagram.connection.tests.actions.NewTerminalAction;\r
-\r
-public class TestApplet extends JApplet {\r
-\r
- private static final long serialVersionUID = 6135978753249808640L;\r
- \r
- public static final double TOLERANCE = IAction.TOLERANCE;\r
- \r
- RouteGraph rg;\r
- IRouteGraphRenderer renderer = \r
- new StyledRouteGraphRenderer(new ExampleConnectionStyle());\r
- \r
- double posX = 0.0;\r
- double posY = 0.0;\r
- \r
- double mouseX;\r
- double mouseY;\r
- \r
- IAction currentAction;\r
- \r
- public TestApplet() {\r
- this(new RouteGraph());\r
- \r
- RouteLine v = rg.addLine(false, 0);\r
- \r
- rg.link(addTerminal(rg, -100, -100, 1, PlainExampleLineEndStyle.INSTANCE), v);\r
- rg.link(addTerminal(rg, -100, 100, 1, PlainExampleLineEndStyle.INSTANCE), v);\r
- rg.link(addTerminal(rg, 100, -80, 1, ArrowExampleLineEndStyle.INSTANCE), v);\r
- rg.link(addTerminal(rg, 100, 100, 4, ArrowExampleLineEndStyle.INSTANCE), v);\r
- }\r
- \r
- public TestApplet(RouteGraph rg_) throws HeadlessException {\r
- this.rg = rg_; \r
- \r
- addMouseListener(new MouseAdapter() {\r
- \r
- @Override\r
- public void mousePressed(MouseEvent e) {\r
- if(e.getButton() == MouseEvent.BUTTON1) {\r
- mouseX = e.getX() - posX;\r
- mouseY = e.getY() - posY;\r
- \r
- if(e.isAltDown()) {\r
- currentAction = new NewTerminalAction(rg, mouseX, mouseY);\r
- repaint();\r
- }\r
- else if(currentAction instanceof NewTerminalAction) {\r
- ((NewTerminalAction)currentAction).finish(mouseX, mouseY);\r
- currentAction = null;\r
- repaint();\r
- }\r
- else if(currentAction instanceof HighlightReconnectPointsAction) {\r
- currentAction = ReconnectLineAction.create(rg, mouseX, mouseY);\r
- repaint();\r
- }\r
- else if(currentAction instanceof IReconnectAction) {\r
- ((IReconnectAction)currentAction).finish(mouseX, mouseY);\r
- currentAction = null;\r
- repaint();\r
- }\r
- else {\r
- currentAction = MoveAction.create(rg, mouseX, mouseY);\r
- }\r
- }\r
- }\r
- \r
- @Override\r
- public void mouseReleased(MouseEvent e) {\r
- if(currentAction instanceof MoveAction) {\r
- ((MoveAction)currentAction).finish(mouseX, mouseY);\r
- currentAction = null;\r
- repaint();\r
- }\r
- }\r
- });\r
- \r
- addMouseMotionListener(new MouseMotionListener() { \r
- @Override\r
- public void mouseMoved(MouseEvent e) {\r
- mouseX = e.getX() - posX;\r
- mouseY = e.getY() - posY;\r
- \r
- if(currentAction != null)\r
- repaint();\r
- }\r
- \r
- @Override\r
- public void mouseDragged(MouseEvent e) {\r
- mouseX = e.getX() - posX;\r
- mouseY = e.getY() - posY;\r
- \r
- if(currentAction != null)\r
- repaint();\r
- }\r
- });\r
- \r
- addKeyListener(new KeyAdapter() {\r
- @Override\r
- public void keyPressed(KeyEvent e) {\r
- Object target = rg.pick(mouseX, mouseY, TOLERANCE);\r
- \r
- if(e.getKeyCode() == KeyEvent.VK_COMMA) {\r
- if(target instanceof RouteTerminal) {\r
- RouteTerminal terminal = (RouteTerminal)target;\r
- rg.rotate(terminal, -1);\r
- repaint();\r
- } \r
- }\r
- else if(e.getKeyCode() == KeyEvent.VK_PERIOD) {\r
- if(target instanceof RouteTerminal) {\r
- RouteTerminal terminal = (RouteTerminal)target;\r
- rg.rotate(terminal, 1);\r
- repaint();\r
- } \r
- } \r
- else if(e.getKeyCode() == KeyEvent.VK_D) {\r
- if(target instanceof RouteTerminal) {\r
- RouteTerminal terminal = (RouteTerminal)target;\r
- rg.toggleDirectLines(terminal);\r
- repaint();\r
- } \r
- } \r
- else if(e.getKeyCode() == KeyEvent.VK_S) {\r
- if(target instanceof RouteLine) {\r
- RouteLine rLine = (RouteLine)target;\r
- rg.split(rLine, rLine.isHorizontal() ? mouseX : mouseY);\r
- repaint();\r
- }\r
- }\r
- else if(e.getKeyCode() == KeyEvent.VK_DELETE) {\r
- if(target instanceof RouteLine) {\r
- RouteLine line = (RouteLine)target;\r
- rg.merge(line); \r
- }\r
- else if(target instanceof RouteLink) {\r
- rg.deleteCorner((RouteLink)target);\r
- }\r
- else if(target instanceof RouteTerminal) {\r
- rg.remove((RouteTerminal)target);\r
- }\r
- repaint();\r
- }\r
- else if(e.getKeyCode() == KeyEvent.VK_ESCAPE) {\r
- if(currentAction != null)\r
- currentAction = null;\r
- repaint();\r
- }\r
- else if(e.getKeyCode() == KeyEvent.VK_P) {\r
- rg.print();\r
- }\r
- else if(e.getKeyCode() == KeyEvent.VK_CONTROL) {\r
- if(currentAction == null)\r
- currentAction = new HighlightReconnectPointsAction(rg);\r
- repaint();\r
- }\r
- } \r
- \r
- @Override\r
- public void keyReleased(KeyEvent e) {\r
- if(e.getKeyCode() == KeyEvent.VK_CONTROL) {\r
- if(currentAction instanceof HighlightReconnectPointsAction)\r
- currentAction = null;\r
- repaint();\r
- }\r
- }\r
- \r
- });\r
- \r
- }\r
- \r
- private static RouteTerminal addTerminal(RouteGraph rg, double x, double y, int allowedDirections, ILineEndStyle style) {\r
- return rg.addTerminal(x, y, x-20, y-20, x+20, y+20, allowedDirections, style);\r
- }\r
- \r
- @Override\r
- public void paint(Graphics g_) {\r
- Graphics2D g = (Graphics2D)g_ ;\r
- g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);\r
- g.setColor(Color.BLACK);\r
- g.setBackground(Color.WHITE);\r
- g.clearRect(0, 0, getWidth(), getHeight());\r
- posX = getWidth()*0.5;\r
- posY = getHeight()*0.5;\r
- g.translate(posX, posY);\r
- \r
- if(currentAction != null)\r
- currentAction.render(g, renderer, mouseX, mouseY);\r
- else\r
- renderer.render(g, rg);\r
- }\r
-}\r
+/*******************************************************************************
+ * Copyright (c) 2007, 2011 Association for Decentralized Information Management in
+ * Industry THTH ry.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * VTT Technical Research Centre of Finland - initial API and implementation
+ *******************************************************************************/
+package org.simantics.diagram.connection.tests;
+
+import java.awt.Color;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.HeadlessException;
+import java.awt.RenderingHints;
+import java.awt.event.KeyAdapter;
+import java.awt.event.KeyEvent;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseMotionListener;
+
+import javax.swing.JApplet;
+
+import org.simantics.diagram.connection.RouteGraph;
+import org.simantics.diagram.connection.RouteLine;
+import org.simantics.diagram.connection.RouteLink;
+import org.simantics.diagram.connection.RouteTerminal;
+import org.simantics.diagram.connection.actions.IAction;
+import org.simantics.diagram.connection.actions.IReconnectAction;
+import org.simantics.diagram.connection.actions.MoveAction;
+import org.simantics.diagram.connection.actions.ReconnectLineAction;
+import org.simantics.diagram.connection.rendering.ExampleConnectionStyle;
+import org.simantics.diagram.connection.rendering.IRouteGraphRenderer;
+import org.simantics.diagram.connection.rendering.StyledRouteGraphRenderer;
+import org.simantics.diagram.connection.rendering.arrows.ArrowExampleLineEndStyle;
+import org.simantics.diagram.connection.rendering.arrows.ILineEndStyle;
+import org.simantics.diagram.connection.rendering.arrows.PlainExampleLineEndStyle;
+import org.simantics.diagram.connection.tests.actions.HighlightReconnectPointsAction;
+import org.simantics.diagram.connection.tests.actions.NewTerminalAction;
+
+public class TestApplet extends JApplet {
+
+ private static final long serialVersionUID = 6135978753249808640L;
+
+ public static final double TOLERANCE = IAction.TOLERANCE;
+
+ RouteGraph rg;
+ IRouteGraphRenderer renderer =
+ new StyledRouteGraphRenderer(new ExampleConnectionStyle());
+
+ double posX = 0.0;
+ double posY = 0.0;
+
+ double mouseX;
+ double mouseY;
+
+ IAction currentAction;
+
+ public TestApplet() {
+ this(new RouteGraph());
+
+ RouteLine v = rg.addLine(false, 0);
+
+ rg.link(addTerminal(rg, -100, -100, 1, PlainExampleLineEndStyle.INSTANCE), v);
+ rg.link(addTerminal(rg, -100, 100, 1, PlainExampleLineEndStyle.INSTANCE), v);
+ rg.link(addTerminal(rg, 100, -80, 1, ArrowExampleLineEndStyle.INSTANCE), v);
+ rg.link(addTerminal(rg, 100, 100, 4, ArrowExampleLineEndStyle.INSTANCE), v);
+ }
+
+ public TestApplet(RouteGraph rg_) throws HeadlessException {
+ this.rg = rg_;
+
+ addMouseListener(new MouseAdapter() {
+
+ @Override
+ public void mousePressed(MouseEvent e) {
+ if(e.getButton() == MouseEvent.BUTTON1) {
+ mouseX = e.getX() - posX;
+ mouseY = e.getY() - posY;
+
+ if(e.isAltDown()) {
+ currentAction = new NewTerminalAction(rg, mouseX, mouseY);
+ repaint();
+ }
+ else if(currentAction instanceof NewTerminalAction) {
+ ((NewTerminalAction)currentAction).finish(mouseX, mouseY);
+ currentAction = null;
+ repaint();
+ }
+ else if(currentAction instanceof HighlightReconnectPointsAction) {
+ currentAction = ReconnectLineAction.create(rg, mouseX, mouseY);
+ repaint();
+ }
+ else if(currentAction instanceof IReconnectAction) {
+ ((IReconnectAction)currentAction).finish(mouseX, mouseY);
+ currentAction = null;
+ repaint();
+ }
+ else {
+ currentAction = MoveAction.create(rg, mouseX, mouseY);
+ }
+ }
+ }
+
+ @Override
+ public void mouseReleased(MouseEvent e) {
+ if(currentAction instanceof MoveAction) {
+ ((MoveAction)currentAction).finish(mouseX, mouseY);
+ currentAction = null;
+ repaint();
+ }
+ }
+ });
+
+ addMouseMotionListener(new MouseMotionListener() {
+ @Override
+ public void mouseMoved(MouseEvent e) {
+ mouseX = e.getX() - posX;
+ mouseY = e.getY() - posY;
+
+ if(currentAction != null)
+ repaint();
+ }
+
+ @Override
+ public void mouseDragged(MouseEvent e) {
+ mouseX = e.getX() - posX;
+ mouseY = e.getY() - posY;
+
+ if(currentAction != null)
+ repaint();
+ }
+ });
+
+ addKeyListener(new KeyAdapter() {
+ @Override
+ public void keyPressed(KeyEvent e) {
+ Object target = rg.pick(mouseX, mouseY, TOLERANCE);
+
+ if(e.getKeyCode() == KeyEvent.VK_COMMA) {
+ if(target instanceof RouteTerminal) {
+ RouteTerminal terminal = (RouteTerminal)target;
+ rg.rotate(terminal, -1);
+ repaint();
+ }
+ }
+ else if(e.getKeyCode() == KeyEvent.VK_PERIOD) {
+ if(target instanceof RouteTerminal) {
+ RouteTerminal terminal = (RouteTerminal)target;
+ rg.rotate(terminal, 1);
+ repaint();
+ }
+ }
+ else if(e.getKeyCode() == KeyEvent.VK_D) {
+ if(target instanceof RouteTerminal) {
+ RouteTerminal terminal = (RouteTerminal)target;
+ rg.toggleDirectLines(terminal);
+ repaint();
+ }
+ }
+ else if(e.getKeyCode() == KeyEvent.VK_S) {
+ if(target instanceof RouteLine) {
+ RouteLine rLine = (RouteLine)target;
+ rg.split(rLine, rLine.isHorizontal() ? mouseX : mouseY);
+ repaint();
+ }
+ }
+ else if(e.getKeyCode() == KeyEvent.VK_DELETE) {
+ if(target instanceof RouteLine) {
+ RouteLine line = (RouteLine)target;
+ rg.merge(line);
+ }
+ else if(target instanceof RouteLink) {
+ rg.deleteCorner((RouteLink)target);
+ }
+ else if(target instanceof RouteTerminal) {
+ rg.remove((RouteTerminal)target);
+ }
+ repaint();
+ }
+ else if(e.getKeyCode() == KeyEvent.VK_ESCAPE) {
+ if(currentAction != null)
+ currentAction = null;
+ repaint();
+ }
+ else if(e.getKeyCode() == KeyEvent.VK_P) {
+ rg.print();
+ }
+ else if(e.getKeyCode() == KeyEvent.VK_CONTROL) {
+ if(currentAction == null)
+ currentAction = new HighlightReconnectPointsAction(rg);
+ repaint();
+ }
+ }
+
+ @Override
+ public void keyReleased(KeyEvent e) {
+ if(e.getKeyCode() == KeyEvent.VK_CONTROL) {
+ if(currentAction instanceof HighlightReconnectPointsAction)
+ currentAction = null;
+ repaint();
+ }
+ }
+
+ });
+
+ }
+
+ private static RouteTerminal addTerminal(RouteGraph rg, double x, double y, int allowedDirections, ILineEndStyle style) {
+ return rg.addTerminal(x, y, x-20, y-20, x+20, y+20, allowedDirections, style);
+ }
+
+ @Override
+ public void paint(Graphics g_) {
+ Graphics2D g = (Graphics2D)g_ ;
+ g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
+ g.setColor(Color.BLACK);
+ g.setBackground(Color.WHITE);
+ g.clearRect(0, 0, getWidth(), getHeight());
+ posX = getWidth()*0.5;
+ posY = getHeight()*0.5;
+ g.translate(posX, posY);
+
+ if(currentAction != null)
+ currentAction.render(g, renderer, mouseX, mouseY);
+ else
+ renderer.render(g, rg);
+ }
+}