package org.geogebra.common.kernel.scripting;
import org.geogebra.common.kernel.Kernel;
import org.geogebra.common.kernel.StringTemplate;
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.GeoNumeric;
import org.geogebra.common.kernel.kernelND.ViewCreator;
import org.geogebra.common.main.App;
import org.geogebra.common.main.MyError;
/**
* SetActiveView
*/
public class CmdSetActiveView extends CmdScripting {
/**
* Creates new command processor
*
* @param kernel
* kernel
*/
public CmdSetActiveView(Kernel kernel) {
super(kernel);
}
@Override
protected final GeoElement[] perform(Command c) throws MyError {
int n = c.getArgumentNumber();
if (!app.isUsingFullGui()) {
return new GeoElement[0];
}
switch (n) {
case 1:
GeoElement[] arg = resArgs(c);
if (arg[0].isGeoNumeric()) {
GeoNumeric numGeo = (GeoNumeric) arg[0];
int view = (int) numGeo.getDouble();
// ignore all errors (eg when a view is not available etc)
switch (view) {
default:
// do nothing for now
// might be needed when support for more than 2
// Euclidian Views added
break;
case 1:
app.setActiveView(App.VIEW_EUCLIDIAN);
break;
case 2:
app.setActiveView(App.VIEW_EUCLIDIAN2);
break;
case -1:
app.setActiveView(App.VIEW_EUCLIDIAN3D);
break;
}
return arg;
} else if (arg[0].isGeoText()) {
String code = arg[0]
.toValueString(StringTemplate.defaultTemplate);
if (code.length() == 1) {
char letter = code.charAt(0);
switch (letter) {
default:
// do nothing
break;
case 'G':
app.setActiveView(App.VIEW_EUCLIDIAN);
break;
case 'D':
app.setActiveView(App.VIEW_EUCLIDIAN2);
break;
case 'T':
app.setActiveView(App.VIEW_EUCLIDIAN3D);
break;
case 'S':
app.setActiveView(App.VIEW_SPREADSHEET);
break;
case 'A':
app.setActiveView(App.VIEW_ALGEBRA);
break;
case 'C':
app.setActiveView(App.VIEW_CAS);
break;
}
}
return arg;
} else {
GeoElement geo = arg[0];
if (geo instanceof ViewCreator) {
ViewCreator plane = (ViewCreator) geo;
if (plane.hasView2DVisible()) {
app.setActiveView(plane.getViewID());
}
return arg;
}
}
throw argErr(app, c, arg[0]);
default:
throw argNumErr(app, c, n);
}
}
}