package org.geogebra.common.kernel.scripting;
import org.geogebra.common.euclidian.EuclidianViewInterfaceSlim;
import org.geogebra.common.kernel.Kernel;
import org.geogebra.common.kernel.arithmetic.Command;
import org.geogebra.common.kernel.arithmetic.NumberValue;
import org.geogebra.common.kernel.commands.CmdScripting;
import org.geogebra.common.kernel.geos.GeoBoolean;
import org.geogebra.common.kernel.geos.GeoElement;
import org.geogebra.common.kernel.kernelND.GeoAxisND;
import org.geogebra.common.main.App;
import org.geogebra.common.main.MyError;
import org.geogebra.common.main.settings.EuclidianSettings;
/**
* SetVisibleInView
*/
public class CmdSetVisibleInView extends CmdScripting {
/**
* Create new command processor
*
* @param kernel
* kernel
*/
public CmdSetVisibleInView(Kernel kernel) {
super(kernel);
}
@Override
protected final GeoElement[] perform(Command c) throws MyError {
int n = c.getArgumentNumber();
switch (n) {
case 3:
GeoElement[] arg = resArgs(c);
if (!(arg[1] instanceof NumberValue)) {
throw argErr(app, c, arg[1]);
}
if (arg[2].isGeoBoolean()) {
GeoElement geo = arg[0];
int viewNo = (int) ((NumberValue) arg[1]).getDouble();
EuclidianViewInterfaceSlim ev = null;
boolean show = ((GeoBoolean) arg[2]).getBoolean();
int viewID;
switch (viewNo) {
case 1:
viewID = App.VIEW_EUCLIDIAN;
ev = app.getEuclidianView1();
break;
case 2:
viewID = App.VIEW_EUCLIDIAN2;
if (app.hasEuclidianView2(1)) {
ev = app.getEuclidianView2(1);
}
break;
case -1:
viewID = App.VIEW_EUCLIDIAN3D;
if (app.isEuclidianView3Dinited()) {
ev = app.getEuclidianView3D();
}
break;
default:
return arg;
}
if (geo instanceof GeoAxisND) {
EuclidianSettings evs = app.getSettings()
.getEuclidian(viewNo < 0 ? 3 : viewNo);
evs.setShowAxis(((GeoAxisND) geo).getType(), show);
geo.updateRepaint();
return arg;
}
if (show) {
geo.setEuclidianVisible(true);
geo.addView(viewID);
if (ev != null) {
ev.add(geo);
geo.updateRepaint();
}
} else {
geo.removeView(viewID);
if (ev != null) {
ev.remove(geo);
geo.updateRepaint();
}
}
return arg;
}
throw argErr(app, c, arg[2]);
default:
throw argNumErr(app, c, n);
}
}
}