package org.geogebra.common.gui.dialog.options.model; import org.geogebra.common.kernel.geos.GProperty; import org.geogebra.common.kernel.geos.GeoElement; import org.geogebra.common.kernel.geos.GeoList; import org.geogebra.common.kernel.geos.PointProperties; import org.geogebra.common.main.App; import org.geogebra.common.plugin.EuclidianStyleConstants; public class PointStyleModel extends NumberOptionsModel { private IComboListener listener; public PointStyleModel(App app) { super(app); } private PointProperties getPointPropertiesAt(int index) { return (PointProperties) getObjectAt(index); } @Override public void updateProperties() { if (!hasGeos()) { return; } PointProperties geo0 = getPointPropertiesAt(0); if (listener == null) { return; } if ((geo0 == null) || (geo0.getPointStyle() == -1)) { // select default button listener.setSelectedIndex(EuclidianStyleConstants.POINT_STYLE_DOT); } else { // select custom button and set combo box selection listener.setSelectedIndex(geo0.getPointStyle()); } } @Override public boolean checkGeos() { if (!hasGeos()) { return false; } return super.checkGeos(); } @Override public boolean isValidAt(int index) { return match(getGeoAt(index)); } /** * Decides if geo is accepted for this model. * * @param geo * The geo to match. * @return if geo has point properties */ public static boolean match(GeoElement geo) { return !((geo.isGeoElement3D() && !(geo.isGeoPoint())) || // TODO add // point // style to 3D // points (!geo.getGeoElementForPropertiesDialog().isGeoPoint() && (!(geo.isGeoList() && ((GeoList) geo).showPointProperties())))); } public boolean is3D() { for (int i = 0; i < getGeosLength(); i++) { GeoElement geo = getGeoAt(i); if (!(geo.isGeoPoint() && geo.isGeoElement3D())) { return false; } } return true; } @Override protected void apply(int index, int value) { PointProperties point = getPointPropertiesAt(index); point.setPointStyle(value); ((GeoElement) point).updateVisualStyle(GProperty.POINT_STYLE); point.updateRepaint(); } @Override protected int getValueAt(int index) { // not used return 0;// getPointPropertiesAt(index).getPointStyle(); } @Override public PropertyListener getListener() { return listener; } public void setListener(IComboListener listener) { this.listener = listener; } }