package com.baselet.gui.command; import java.awt.Point; import java.util.Vector; import com.baselet.control.constants.Constants; import com.baselet.diagram.DiagramHandler; import com.baselet.element.interfaces.GridElement; public class Cut extends Command { private Vector<GridElement> entities; private Point origin; public Cut() { } @Override public void execute(DiagramHandler handler) { super.execute(handler); if (entities == null) { entities = new Vector<GridElement>(); entities.addAll(handler.getDrawPanel().getSelector().getSelectedElements()); } if (entities.isEmpty()) { return; } // AB: clipboard copy scales the entities to 100%, so we don't have to do it manually ClipBoard.getInstance().copyAndZoomToDefaultLevel(entities, handler); new RemoveElement(entities, false).execute(handler); // AB: copy origin and zoom it to 100% origin = handler.getDrawPanel().getOriginAtDefaultZoom(); handler.getDrawPanel().updatePanelAndScrollbars(); } @Override public void undo(DiagramHandler handler) { super.undo(handler); // We must zoom to the defaultGridsize before execution int oldZoom = handler.getGridSize(); handler.setGridAndZoom(Constants.DEFAULTGRIDSIZE, false); int offsetX = origin.x - handler.getDrawPanel().getOriginAtDefaultZoom().x; int offsetY = origin.y - handler.getDrawPanel().getOriginAtDefaultZoom().y; for (GridElement e : entities) { new AddElement(e, handler.realignToGrid(true, e.getRectangle().x + offsetX), handler.realignToGrid(true, e.getRectangle().y + offsetY), false).execute(handler); } handler.getDrawPanel().repaint(); // And zoom back to the oldGridsize after execution handler.setGridAndZoom(oldZoom, false); handler.getDrawPanel().getSelector().select(entities); // undo selects the cutted entities handler.getDrawPanel().updatePanelAndScrollbars(); } }