package org.geogebra.common.gui.dialog.options.model; import java.util.ArrayList; import java.util.List; import org.geogebra.common.kernel.geos.GeoElement; import org.geogebra.common.kernel.kernelND.GeoElementND; import org.geogebra.common.kernel.kernelND.SurfaceEvaluable; import org.geogebra.common.kernel.kernelND.SurfaceEvaluable.LevelOfDetail; import org.geogebra.common.main.App; import org.geogebra.common.main.Localization; public class LodModel extends MultipleOptionsModel { private boolean isDefaults; public LodModel(App app, boolean isDefaults) { super(app); this.isDefaults = isDefaults; } private SurfaceEvaluable getSurfaceAt(int index) { return (SurfaceEvaluable) getObjectAt(index); } @Override public void updateProperties() { SurfaceEvaluable temp, geo0 = getSurfaceAt(0); boolean equalLevelOfDetail = true; for (int i = 0; i < getGeosLength(); i++) { temp = getSurfaceAt(i); if (geo0.getLevelOfDetail() != temp.getLevelOfDetail()) { equalLevelOfDetail = false; } } if (equalLevelOfDetail) { getListener().setSelectedIndex( geo0.getLevelOfDetail() == LevelOfDetail.SPEED ? 0 : 1); } } @Override public List<String> getChoiches(Localization loc) { List<String> result = new ArrayList<String>(); result.add(loc.getPlain("Speed")); result.add(loc.getPlain("Quality")); return result; } @Override protected boolean isValidAt(int index) { GeoElement geo = getGeoAt(index); return (!isDefaults && (geo.hasLevelOfDetail())); } @Override protected void apply(int index, int value) { SurfaceEvaluable geo = getSurfaceAt(index); geo.setLevelOfDetail( value == 0 ? LevelOfDetail.SPEED : LevelOfDetail.QUALITY); ((GeoElementND) geo).updateRepaint(); } @Override public int getValueAt(int index) { // TODO Auto-generated method stub return 0; } }