1 /*******************************************************************************
2 * Copyright (c) 2007, 2011 Association for Decentralized Information Management in
4 * All rights reserved. This program and the accompanying materials
5 * are made available under the terms of the Eclipse Public License v1.0
6 * which accompanies this distribution, and is available at
7 * http://www.eclipse.org/legal/epl-v10.html
10 * VTT Technical Research Centre of Finland - initial API and implementation
11 *******************************************************************************/
12 package org.simantics.diagram.connection.actions;
14 import gnu.trove.map.hash.THashMap;
16 import java.awt.Graphics2D;
18 import org.simantics.diagram.connection.RouteGraph;
19 import org.simantics.diagram.connection.RouteLine;
20 import org.simantics.diagram.connection.RouteLineHalf;
21 import org.simantics.diagram.connection.RouteTerminal;
22 import org.simantics.diagram.connection.rendering.IRouteGraphRenderer;
24 public class ReconnectLineAction implements IReconnectAction {
30 public ReconnectLineAction(RouteGraph rg, RouteGraph rgc, RouteLine line) {
37 public void render(Graphics2D g, IRouteGraphRenderer renderer, double mouseX, double mouseY) {
38 THashMap<Object, Object> map = new THashMap<Object, Object>();
39 RouteGraph rgc = this.rgc.copy(map);
40 RouteLine sLine = (RouteLine)map.get(line);
41 if(!rgc.connectLine(sLine, mouseX, mouseY, TOLERANCE) || !rgc.isTree()) {
43 rgc = this.rgc.copy(map);
44 sLine = (RouteLine)map.get(line);
45 RouteTerminal t2 = rgc.addTerminal(mouseX, mouseY,
50 renderer.render(g, rgc);
54 public void finish(double x, double y) {
55 if(rgc.connectLine(line, x, y, TOLERANCE) && rgc.isTree()) {
56 rgc.removeExtraConnections();
61 public static IAction create(RouteGraph rg, double x, double y) {
62 RouteGraph rgc = rg.copy();
63 RouteLineHalf lh = rgc.pickLineHalf(x, y, TOLERANCE);
66 RouteLine line = lh.getLine();
67 if(line.isTransient()) {
68 RouteTerminal terminal = line.getTerminal();
69 rgc.disconnect(terminal);
70 return new ReconnectTerminalAction(rg, rgc, terminal);
73 rgc.makePersistent(line);
74 rgc.remove(lh.getLink());
75 return new ReconnectLineAction(rg, rgc, line);