package org.geogebra.common.gui.dialog.options.model;
import java.util.Arrays;
import java.util.List;
import org.geogebra.common.kernel.Kernel;
import org.geogebra.common.kernel.geos.GeoElement;
import org.geogebra.common.kernel.kernelND.CoordStyle;
import org.geogebra.common.main.App;
import org.geogebra.common.main.Localization;
import org.geogebra.common.plugin.EventType;
public class CoordsModel extends MultipleOptionsModel {
private List<Integer> coordValues;
public CoordsModel(App app) {
super(app);
coordValues = Arrays.asList(Kernel.COORD_CARTESIAN, Kernel.COORD_POLAR,
Kernel.COORD_COMPLEX, Kernel.COORD_CARTESIAN_3D,
Kernel.COORD_SPHERICAL);
}
@Override
public boolean isValidAt(int index) {
boolean valid = true;
GeoElement geo = getGeoAt(index);
if (!(geo.isGeoPoint() || geo.isGeoVector())) {
valid = false;
}
// check if fixed
if (geo.isProtected(EventType.UPDATE)) {
valid = false;
}
return valid;
}
private CoordStyle getCoordStyleAt(int index) {
return (CoordStyle) getObjectAt(index);
}
@Override
public void updateProperties() {
CoordStyle geo0 = getCoordStyleAt(0);
getListener().setSelectedIndex(coordValues.indexOf(geo0.getMode()));
}
@Override
public List<String> getChoiches(Localization loc) {
return Arrays.asList(loc.getPlain("CartesianCoords"), // index 0
loc.getPlain("PolarCoords"), // index 1
loc.getPlain("ComplexNumber"), // index 2
loc.getPlain("CartesianCoords3D"), // index 3
loc.getPlain("Spherical")); // index 4
}
@Override
protected void apply(int index, int value) {
getCoordStyleAt(index).setMode(coordValues.get(value));
}
@Override
public boolean applyChanges(int value) {
if (super.applyChanges(value)) {
// e.g. u*v can create number (dot product) or complex number
// (complex product)
return true;
}
return false;
}
@Override
public int getValueAt(int index) {
// not used
return 0;
}
}