1 /*******************************************************************************
\r
2 * Copyright (c) 2007, 2011 Association for Decentralized Information Management in
\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
10 * VTT Technical Research Centre of Finland - initial API and implementation
\r
11 *******************************************************************************/
\r
12 package org.simantics.diagram.connection.actions;
\r
14 import gnu.trove.map.hash.THashMap;
\r
16 import java.awt.Graphics2D;
\r
18 import org.simantics.diagram.connection.RouteGraph;
\r
19 import org.simantics.diagram.connection.RouteLine;
\r
20 import org.simantics.diagram.connection.RouteLineHalf;
\r
21 import org.simantics.diagram.connection.RouteTerminal;
\r
22 import org.simantics.diagram.connection.rendering.IRouteGraphRenderer;
\r
24 public class ReconnectLineAction implements IReconnectAction {
\r
30 public ReconnectLineAction(RouteGraph rg, RouteGraph rgc, RouteLine line) {
\r
37 public void render(Graphics2D g, IRouteGraphRenderer renderer, double mouseX, double mouseY) {
\r
38 THashMap<Object, Object> map = new THashMap<Object, Object>();
\r
39 RouteGraph rgc = this.rgc.copy(map);
\r
40 RouteLine sLine = (RouteLine)map.get(line);
\r
41 if(!rgc.connectLine(sLine, mouseX, mouseY, TOLERANCE) || !rgc.isTree()) {
\r
43 rgc = this.rgc.copy(map);
\r
44 sLine = (RouteLine)map.get(line);
\r
45 RouteTerminal t2 = rgc.addTerminal(mouseX, mouseY,
\r
47 mouseX, mouseY, 15);
\r
48 rgc.link(sLine, t2);
\r
50 renderer.render(g, rgc);
\r
54 public void finish(double x, double y) {
\r
55 if(rgc.connectLine(line, x, y, TOLERANCE) && rgc.isTree()) {
\r
56 rgc.removeExtraConnections();
\r
61 public static IAction create(RouteGraph rg, double x, double y) {
\r
62 RouteGraph rgc = rg.copy();
\r
63 RouteLineHalf lh = rgc.pickLineHalf(x, y, TOLERANCE);
\r
66 RouteLine line = lh.getLine();
\r
67 if(line.isTransient()) {
\r
68 RouteTerminal terminal = line.getTerminal();
\r
69 rgc.disconnect(terminal);
\r
70 return new ReconnectTerminalAction(rg, rgc, terminal);
\r
73 rgc.makePersistent(line);
\r
74 rgc.remove(lh.getLink());
\r
75 return new ReconnectLineAction(rg, rgc, line);
\r