package org.geogebra.common.gui.dialog.options.model;
import org.geogebra.common.kernel.geos.AngleProperties;
import org.geogebra.common.kernel.geos.GeoElement;
import org.geogebra.common.main.App;
public class AngleArcSizeModel extends OptionsModel {
public static final Integer MIN_VALUE = 20;
private ISliderListener listener;
public AngleArcSizeModel(App app) {
super(app);
}
public void setListener(ISliderListener listener) {
this.listener = listener;
}
private AngleProperties getAngleAt(int index) {
return (AngleProperties) getObjectAt(index);
}
public void applyChanges(int size) {
for (int i = 0; i < getGeosLength(); i++) {
AngleProperties angle = getAngleAt(i);
// addded by Loic BEGIN
// check if decoration could be drawn
if (size < 20 && (angle
.getDecorationType() == GeoElement.DECORATION_ANGLE_THREE_ARCS
|| angle.getDecorationType() == GeoElement.DECORATION_ANGLE_TWO_ARCS)) {
angle.setArcSize(20);
int selected = getAngleAt(0).getDecorationType();
if (selected == GeoElement.DECORATION_ANGLE_THREE_ARCS
|| selected == GeoElement.DECORATION_ANGLE_TWO_ARCS) {
listener.setValue(20);
}
}
// END
else {
angle.setArcSize(size);
}
angle.updateRepaint();
}
storeUndoInfo();
}
@Override
public void updateProperties() {
listener.setValue(getAngleAt(0).getArcSize());
}
@Override
public boolean isValidAt(int index) {
return match(getGeoAt(index));
}
/**
* @param geo
* The geo to math returns true if geo meets the requirements of
* this model
*/
public static boolean match(GeoElement geo) {
if (geo instanceof AngleProperties) {
AngleProperties angle = (AngleProperties) geo;
if (angle.isIndependent() || !angle.isDrawable()) {
return false;
}
} else {
return false;
}
return true;
}
@Override
public PropertyListener getListener() {
return listener;
}
}