/** * On mouse release add the elements to the diagram * * @param me the mouse event */ @Override public void mouseReleased(final MouseEvent me) { if (me.isConsumed()) { if (LOG.isDebugEnabled()) { LOG.debug("MouseReleased but rejected as already consumed"); } return; } // TODO: Use per-project undo manager, not global UndoManager.getInstance().addMementoLock(this); start(); MutableGraphModel gm = (MutableGraphModel) editor.getGraphModel(); final int x = me.getX(); final int y = me.getY(); editor.damageAll(); final Point snapPt = new Point(x, y); editor.snap(snapPt); editor.damageAll(); int count = 0; Layer lay = editor.getLayerManager().getActiveLayer(); GraphNodeRenderer renderer = editor.getGraphNodeRenderer(); final List<FigNode> placedFigs = new ArrayList<FigNode>(modelElements.size()); ArgoDiagram diag = DiagramUtils.getActiveDiagram(); if (diag instanceof UMLDiagram) { for (final Object node : modelElements) { if (((UMLDiagram) diag).doesAccept(node)) { final FigNode pers = renderer.getFigNodeFor(gm, lay, node, null); pers.setLocation(snapPt.x + (count++ * 100), snapPt.y); if (LOG.isDebugEnabled()) { LOG.debug("mouseMoved: Location set (" + pers.getX() + "," + pers.getY() + ")"); } // TODO: Use per-project undo manager, not global UndoManager.getInstance().startChain(); editor.add(pers); gm.addNode(node); if (addRelatedEdges) { gm.addNodeRelatedEdges(node); } Fig encloser = null; final Rectangle bbox = pers.getBounds(); final List<Fig> otherFigs = lay.getContents(); for (final Fig otherFig : otherFigs) { if (!(otherFig.getUseTrapRect())) { continue; } if (!(otherFig instanceof FigNode)) { continue; } if (!otherFig.isVisible()) { continue; } if (otherFig.equals(pers)) { continue; } final Rectangle trap = otherFig.getTrapRect(); if (trap != null && trap.contains(bbox.x, bbox.y) && trap.contains(bbox.x + bbox.width, bbox.y + bbox.height)) { encloser = otherFig; } } pers.setEnclosingFig(encloser); placedFigs.add(pers); } } } // TODO: Use per-project undo manager, not global UndoManager.getInstance().removeMementoLock(this); if (UndoManager.getInstance().isGenerateMementos()) { AddToDiagramMemento memento = new AddToDiagramMemento(editor, placedFigs); UndoManager.getInstance().addMemento(memento); } UndoManager.getInstance().addMementoLock(this); editor.getSelectionManager().select(placedFigs); done(); me.consume(); }