]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.diagram.connection/tests/org/simantics/diagram/connection/tests/TestApplet.java
59e3d357704f182eaf103f90353e2f89c186b8ab
[simantics/platform.git] / bundles / org.simantics.diagram.connection / tests / org / simantics / diagram / connection / tests / TestApplet.java
1 /*******************************************************************************\r
2  * Copyright (c) 2007, 2011 Association for Decentralized Information Management in\r
3  * Industry THTH ry.\r
4  * All rights reserved. This program and the accompanying materials\r
5  * are made available under the terms of the Eclipse Public License v1.0\r
6  * which accompanies this distribution, and is available at\r
7  * http://www.eclipse.org/legal/epl-v10.html\r
8  *\r
9  * Contributors:\r
10  *     VTT Technical Research Centre of Finland - initial API and implementation\r
11  *******************************************************************************/\r
12 package org.simantics.diagram.connection.tests;\r
13 \r
14 import java.awt.Color;\r
15 import java.awt.Graphics;\r
16 import java.awt.Graphics2D;\r
17 import java.awt.HeadlessException;\r
18 import java.awt.RenderingHints;\r
19 import java.awt.event.KeyAdapter;\r
20 import java.awt.event.KeyEvent;\r
21 import java.awt.event.MouseAdapter;\r
22 import java.awt.event.MouseEvent;\r
23 import java.awt.event.MouseMotionListener;\r
24 \r
25 import javax.swing.JApplet;\r
26 \r
27 import org.simantics.diagram.connection.RouteGraph;\r
28 import org.simantics.diagram.connection.RouteLine;\r
29 import org.simantics.diagram.connection.RouteLink;\r
30 import org.simantics.diagram.connection.RouteTerminal;\r
31 import org.simantics.diagram.connection.actions.IAction;\r
32 import org.simantics.diagram.connection.actions.IReconnectAction;\r
33 import org.simantics.diagram.connection.actions.MoveAction;\r
34 import org.simantics.diagram.connection.actions.ReconnectLineAction;\r
35 import org.simantics.diagram.connection.rendering.ExampleConnectionStyle;\r
36 import org.simantics.diagram.connection.rendering.IRouteGraphRenderer;\r
37 import org.simantics.diagram.connection.rendering.StyledRouteGraphRenderer;\r
38 import org.simantics.diagram.connection.rendering.arrows.ArrowExampleLineEndStyle;\r
39 import org.simantics.diagram.connection.rendering.arrows.ILineEndStyle;\r
40 import org.simantics.diagram.connection.rendering.arrows.PlainExampleLineEndStyle;\r
41 import org.simantics.diagram.connection.tests.actions.HighlightReconnectPointsAction;\r
42 import org.simantics.diagram.connection.tests.actions.NewTerminalAction;\r
43 \r
44 public class TestApplet extends JApplet {\r
45 \r
46         private static final long serialVersionUID = 6135978753249808640L;\r
47         \r
48         public static final double TOLERANCE = IAction.TOLERANCE;\r
49     \r
50     RouteGraph rg;\r
51     IRouteGraphRenderer renderer = \r
52             new StyledRouteGraphRenderer(new ExampleConnectionStyle());\r
53     \r
54     double posX = 0.0;\r
55     double posY = 0.0;\r
56     \r
57     double mouseX;\r
58     double mouseY;\r
59     \r
60     IAction currentAction;\r
61     \r
62     public TestApplet() {\r
63         this(new RouteGraph());\r
64         \r
65         RouteLine v = rg.addLine(false, 0);\r
66                 \r
67         rg.link(addTerminal(rg, -100, -100, 1, PlainExampleLineEndStyle.INSTANCE), v);\r
68         rg.link(addTerminal(rg, -100, 100, 1, PlainExampleLineEndStyle.INSTANCE), v);\r
69         rg.link(addTerminal(rg, 100, -80, 1, ArrowExampleLineEndStyle.INSTANCE), v);\r
70         rg.link(addTerminal(rg, 100, 100, 4, ArrowExampleLineEndStyle.INSTANCE), v);\r
71     }\r
72     \r
73     public TestApplet(RouteGraph rg_) throws HeadlessException {\r
74         this.rg = rg_;        \r
75         \r
76         addMouseListener(new MouseAdapter() {\r
77             \r
78             @Override\r
79             public void mousePressed(MouseEvent e) {\r
80                 if(e.getButton() == MouseEvent.BUTTON1) {\r
81                     mouseX = e.getX() - posX;\r
82                     mouseY = e.getY() - posY;\r
83                     \r
84                     if(e.isAltDown()) {\r
85                         currentAction = new NewTerminalAction(rg, mouseX, mouseY);\r
86                         repaint();\r
87                     }\r
88                     else if(currentAction instanceof NewTerminalAction) {\r
89                         ((NewTerminalAction)currentAction).finish(mouseX, mouseY);\r
90                         currentAction = null;\r
91                         repaint();\r
92                     }\r
93                     else if(currentAction instanceof HighlightReconnectPointsAction) {\r
94                         currentAction = ReconnectLineAction.create(rg, mouseX, mouseY);\r
95                         repaint();\r
96                     }\r
97                     else if(currentAction instanceof IReconnectAction) {\r
98                         ((IReconnectAction)currentAction).finish(mouseX, mouseY);\r
99                         currentAction = null;\r
100                         repaint();\r
101                     }\r
102                     else {\r
103                         currentAction = MoveAction.create(rg, mouseX, mouseY);\r
104                     }\r
105                 }\r
106             }\r
107             \r
108             @Override\r
109             public void mouseReleased(MouseEvent e) {\r
110                 if(currentAction instanceof MoveAction) {\r
111                     ((MoveAction)currentAction).finish(mouseX, mouseY);\r
112                     currentAction = null;\r
113                     repaint();\r
114                 }\r
115             }\r
116         });\r
117         \r
118         addMouseMotionListener(new MouseMotionListener() {          \r
119             @Override\r
120             public void mouseMoved(MouseEvent e) {\r
121                 mouseX = e.getX() - posX;\r
122                 mouseY = e.getY() - posY;\r
123                 \r
124                 if(currentAction != null)\r
125                     repaint();\r
126             }\r
127             \r
128             @Override\r
129             public void mouseDragged(MouseEvent e) {\r
130                 mouseX = e.getX() - posX;\r
131                 mouseY = e.getY() - posY;\r
132                 \r
133                 if(currentAction != null)\r
134                     repaint();\r
135             }\r
136         });\r
137         \r
138         addKeyListener(new KeyAdapter() {\r
139             @Override\r
140             public void keyPressed(KeyEvent e) {\r
141                 Object target = rg.pick(mouseX, mouseY, TOLERANCE);\r
142                 \r
143                 if(e.getKeyCode() == KeyEvent.VK_COMMA) {\r
144                     if(target instanceof RouteTerminal) {\r
145                         RouteTerminal terminal = (RouteTerminal)target;\r
146                         rg.rotate(terminal, -1);\r
147                         repaint();\r
148                     }                   \r
149                 }\r
150                 else if(e.getKeyCode() == KeyEvent.VK_PERIOD) {\r
151                     if(target instanceof RouteTerminal) {\r
152                         RouteTerminal terminal = (RouteTerminal)target;\r
153                         rg.rotate(terminal, 1);\r
154                         repaint();\r
155                     }                   \r
156                 }   \r
157                 else if(e.getKeyCode() == KeyEvent.VK_D) {\r
158                     if(target instanceof RouteTerminal) {\r
159                         RouteTerminal terminal = (RouteTerminal)target;\r
160                         rg.toggleDirectLines(terminal);\r
161                         repaint();\r
162                     }                   \r
163                 }  \r
164                 else if(e.getKeyCode() == KeyEvent.VK_S) {\r
165                     if(target instanceof RouteLine) {\r
166                         RouteLine rLine = (RouteLine)target;\r
167                         rg.split(rLine, rLine.isHorizontal() ? mouseX : mouseY);\r
168                         repaint();\r
169                     }\r
170                 }\r
171                 else if(e.getKeyCode() == KeyEvent.VK_DELETE) {\r
172                     if(target instanceof RouteLine) {\r
173                         RouteLine line = (RouteLine)target;\r
174                         rg.merge(line);                     \r
175                     }\r
176                     else if(target instanceof RouteLink) {\r
177                         rg.deleteCorner((RouteLink)target);\r
178                     }\r
179                     else if(target instanceof RouteTerminal) {\r
180                         rg.remove((RouteTerminal)target);\r
181                     }\r
182                     repaint();\r
183                 }\r
184                 else if(e.getKeyCode() == KeyEvent.VK_ESCAPE) {\r
185                     if(currentAction != null)\r
186                         currentAction = null;\r
187                     repaint();\r
188                 }\r
189                 else if(e.getKeyCode() == KeyEvent.VK_P) {\r
190                     rg.print();\r
191                 }\r
192                 else if(e.getKeyCode() == KeyEvent.VK_CONTROL) {\r
193                     if(currentAction == null)\r
194                         currentAction = new HighlightReconnectPointsAction(rg);\r
195                     repaint();\r
196                 }\r
197             }            \r
198             \r
199             @Override\r
200             public void keyReleased(KeyEvent e) {\r
201                 if(e.getKeyCode() == KeyEvent.VK_CONTROL) {\r
202                     if(currentAction instanceof HighlightReconnectPointsAction)\r
203                         currentAction = null;\r
204                     repaint();\r
205                 }\r
206             }\r
207             \r
208         });\r
209         \r
210     }\r
211     \r
212     private static RouteTerminal addTerminal(RouteGraph rg, double x, double y, int allowedDirections, ILineEndStyle style) {\r
213         return rg.addTerminal(x, y, x-20, y-20, x+20, y+20, allowedDirections, style);\r
214     }\r
215     \r
216     @Override\r
217     public void paint(Graphics g_) {\r
218         Graphics2D g = (Graphics2D)g_ ;\r
219         g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);\r
220         g.setColor(Color.BLACK);\r
221         g.setBackground(Color.WHITE);\r
222         g.clearRect(0, 0, getWidth(), getHeight());\r
223         posX = getWidth()*0.5;\r
224         posY = getHeight()*0.5;\r
225         g.translate(posX, posY);\r
226         \r
227         if(currentAction != null)\r
228             currentAction.render(g, renderer, mouseX, mouseY);\r
229         else\r
230             renderer.render(g, rg);\r
231     }\r
232 }\r