package org.geogebra.common.kernel.scripting; import org.geogebra.common.awt.GPoint; import org.geogebra.common.gui.view.spreadsheet.CopyPasteCut; import org.geogebra.common.gui.view.spreadsheet.MyTableInterface; import org.geogebra.common.kernel.Kernel; import org.geogebra.common.kernel.algos.AlgoDependentGeoCopy; import org.geogebra.common.kernel.algos.AlgoElement; import org.geogebra.common.kernel.arithmetic.Command; import org.geogebra.common.kernel.commands.CmdScripting; import org.geogebra.common.kernel.geos.GeoElement; import org.geogebra.common.kernel.geos.GeoElementSpreadsheet; import org.geogebra.common.kernel.statistics.AlgoCellRange; import org.geogebra.common.main.MyError; /** * Delete[ <GeoElement> ] */ public class CmdDelete extends CmdScripting { /** * Create new command processor * * @param kernel * kernel */ public CmdDelete(Kernel kernel) { super(kernel); } @Override protected final GeoElement[] perform(Command c) throws MyError { int n = c.getArgumentNumber(); switch (n) { case 1: GeoElement[] arg; try { arg = resArgs(c); } catch (Error e) { return new GeoElement[0]; } GeoElement geo = arg[0]; AlgoElement algoParent = geo.getParentAlgorithm(); if (algoParent instanceof AlgoDependentGeoCopy) { algoParent.getInput(0) .removeOrSetUndefinedIfHasFixedDescendent(); } else if (algoParent instanceof AlgoCellRange) { // delete cells AlgoCellRange algo = (AlgoCellRange) algoParent; GPoint startCoords = GeoElementSpreadsheet .getSpreadsheetCoordsForLabel(algo.getStart()); GPoint endCoords = GeoElementSpreadsheet .getSpreadsheetCoordsForLabel(algo.getEnd()); CopyPasteCut.delete(app, startCoords.x, startCoords.y, endCoords.x, endCoords.y, MyTableInterface.CELL_SELECT); } else if (geo.isLabelSet()) { // delete object geo.removeOrSetUndefinedIfHasFixedDescendent(); } return arg; default: throw argNumErr(app, c, n); } } }