package org.geogebra.common.gui.dialog.options.model; import org.geogebra.common.kernel.CircularDefinitionException; import org.geogebra.common.kernel.Kernel; import org.geogebra.common.kernel.Locateable; import org.geogebra.common.kernel.algos.AlgoVector; import org.geogebra.common.kernel.geos.GeoElement; import org.geogebra.common.kernel.kernelND.GeoPointND; import org.geogebra.common.main.App; import org.geogebra.common.main.error.ErrorHandler; import org.geogebra.common.main.error.ErrorHelper; import org.geogebra.common.util.StringUtil; public class StartPointModel extends MultipleGeosModel { private Kernel kernel; public StartPointModel(App app) { super(app); this.kernel = app.getKernel(); } public Locateable getLocateableAt(int index) { return (Locateable) getObjectAt(index); } @Override public void updateProperties() { // repopulate model with names of points from the geoList's model // take all points from construction // TreeSet points = // kernel.getConstruction().getGeoSetLabelOrder(GeoElement.GEO_CLASS_POINT); // check if properties have same values Locateable geo0 = getLocateableAt(0); boolean equalLocation = true; for (int i = 0; i < getGeosLength(); i++) { if (geo0.getStartPoint() != getLocateableAt(i).getStartPoint()) { equalLocation = false; break; } } GeoElement p = (GeoElement) geo0.getStartPoint(); if (equalLocation && p != null) { getListener().setSelectedIndex(0); } else { getListener().setSelectedIndex(-1); } } public void applyChanges(final String strLoc, ErrorHandler handler) { GeoPointND newLoc = null; handler.resetError(); if (!StringUtil.emptyTrim(strLoc)) { newLoc = kernel.getAlgebraProcessor().evaluateToPoint(strLoc, handler, true); } if (newLoc == null) { return; } for (int i = 0; i < getGeosLength(); i++) { Locateable l = getLocateableAt(i); try { l.setStartPoint(newLoc); l.toGeoElement().updateRepaint(); } catch (CircularDefinitionException e) { ErrorHelper.handleException(e, app, handler); } } } @Override protected void apply(int index, int value) { // TODO Auto-generated method stub } @Override protected int getValueAt(int index) { // not used return 0; } @Override protected boolean isValidAt(int index) { boolean valid = true; GeoElement geo = getGeoAt(index); if (!(geo instanceof Locateable && !((Locateable) geo).isAlwaysFixed()) || geo.isGeoImage() || geo.getParentAlgorithm() instanceof AlgoVector) { valid = false; } return valid; } }