private void deleteConnections(NodeModel part) { if (part instanceof CompoundModel) { List children = ((CompoundModel) part).getChildren(); for (int i = 0; i < children.size(); i++) deleteConnections((NodeModel) children.get(i)); } sourceConnections.addAll(part.getSourceConnections()); for (int i = 0; i < sourceConnections.size(); i++) { EdgeModel wire = (EdgeModel) sourceConnections.get(i); wire.setHighlight(false); wire.getTarget().removeTargetConnection(wire); wire.getSource().removeSourceConnection(wire); } targetConnections.addAll(part.getTargetConnections()); for (int i = 0; i < targetConnections.size(); i++) { EdgeModel wire = (EdgeModel) targetConnections.get(i); wire.setHighlight(false); wire.getTarget().removeTargetConnection(wire); wire.getSource().removeSourceConnection(wire); } }
/** This method finds the boundaries of this compound node. */ public Rectangle calculateBounds() { int top = Integer.MAX_VALUE; int left = Integer.MAX_VALUE; int right = 0; int bottom = 0; int nodeTop; int nodeLeft; int nodeRight; int nodeBottom; /* Checks the nodes' locations which are children of * this compound node. */ Iterator itr = this.getChildren().iterator(); while (itr.hasNext()) { NodeModel node = (NodeModel) itr.next(); Point locAbs = node.getLocationAbs(); Dimension size = node.getSize(); nodeTop = locAbs.y; nodeLeft = locAbs.x; nodeRight = locAbs.x + size.width; nodeBottom = locAbs.y + size.height; if (top > nodeTop) { top = nodeTop; } if (left > nodeLeft) { left = nodeLeft; } if (right < nodeRight) { right = nodeRight; } if (bottom < nodeBottom) { bottom = nodeBottom; } } // Checks the bendpoints' locations. if (this.isRoot) { itr = this.getEdges().iterator(); } else { itr = this.getEdgeIterator(ALL_EDGES, true, true); } while (itr.hasNext()) { EdgeModel edge = (EdgeModel) itr.next(); edge.updateBendpoints(); for (int i = 0; i < edge.bendpoints.size(); i++) { EdgeBendpoint eb = (EdgeBendpoint) edge.bendpoints.get(i); Point loc = eb.getLocationFromModel(edge); int x = loc.x; int y = loc.y; if (top > y) { top = y; } if (left > x) { left = x; } if (right < x) { right = x; } if (bottom < y) { bottom = y; } } } // Do we have any nodes in this graph? if (top == Double.MAX_VALUE) { return null; } return new Rectangle(left, top, right - left, bottom - top); }