package com.baselet.gui.command; import java.awt.Point; import java.util.ArrayList; import java.util.List; import com.baselet.control.constants.Constants; import com.baselet.diagram.DiagramHandler; import com.baselet.diagram.DrawPanel; import com.baselet.element.interfaces.GridElement; public class RemoveElement extends Command { private List<GridElement> _entities; private Point origin; private boolean _zoom; public RemoveElement(GridElement e) { this(e, true); } public RemoveElement(GridElement e, boolean zoom) { _entities = new ArrayList<GridElement>(); _entities.add(e); _zoom = zoom; } public RemoveElement(List<GridElement> v) { this(v, true); } public RemoveElement(List<GridElement> v, boolean zoom) { _entities = new ArrayList<GridElement>(); _entities.addAll(v); _zoom = zoom; } @Override public void execute(DiagramHandler handler) { super.execute(handler); if (_entities.size() == 0) { return; } DrawPanel p = handler.getDrawPanel(); for (GridElement e : _entities) { handler.getDrawPanel().removeElement(e); } origin = handler.getDrawPanel().getOriginAtDefaultZoom(); if (_zoom) { DiagramHandler.zoomEntities(handler.getGridSize(), Constants.DEFAULTGRIDSIZE, _entities); } p.updatePanelAndScrollbars(); p.repaint(); p.getSelector().deselectAll(); } @Override public void undo(DiagramHandler handler) { super.undo(handler); if (_zoom) { DiagramHandler.zoomEntities(Constants.DEFAULTGRIDSIZE, handler.getGridSize(), _entities); } int offsetX = origin.x - handler.getDrawPanel().getOriginAtDefaultZoom().x; int offsetY = origin.y - handler.getDrawPanel().getOriginAtDefaultZoom().y; offsetX = offsetX * handler.getGridSize() / Constants.DEFAULTGRIDSIZE; offsetY = offsetY * handler.getGridSize() / Constants.DEFAULTGRIDSIZE; for (GridElement e : _entities) { new AddElement(e, handler.realignToGrid(e.getRectangle().x + offsetX), handler.realignToGrid(e.getRectangle().y + offsetY), _zoom).execute(handler); } handler.getDrawPanel().updatePanelAndScrollbars(); handler.getDrawPanel().repaint(); } }