package org.geogebra.common.gui.dialog.options.model;
import org.geogebra.common.kernel.Kernel;
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.main.App;
public class ShowLabelModel extends OptionsModel {
public interface IShowLabelListener extends PropertyListener {
void update(boolean isEqualVal, boolean isEqualMode);
}
private Kernel kernel;
private boolean showNameValue;
private IShowLabelListener listener;
public ShowLabelModel(App app, IShowLabelListener listener) {
super(app);
kernel = app.getKernel();
this.listener = listener;
}
@Override
public void updateProperties() {
// check if properties have same values
GeoElement temp, geo0 = getGeoAt(0);
boolean equalLabelVal = true;
boolean equalLabelMode = true;
showNameValue = geo0.isLabelValueShowable() && !isDropDownList(geo0)
&& !geo0.isGeoInputBox();
for (int i = 1; i < getGeosLength(); i++) {
temp = getGeoAt(i);
// same label visible value
if (geo0.isLabelVisible() != temp.isLabelVisible()) {
equalLabelVal = false;
}
// same label mode
if (geo0.getLabelMode() != temp.getLabelMode()) {
equalLabelMode = false;
}
showNameValue = showNameValue && temp.isLabelValueShowable()
&& !isDropDownList(temp) && !temp.isGeoInputBox();
}
// change "Show Label:" to "Show Label" if there's no menu
// Michael Borcherds 2008-02-18
if (listener != null) {
listener.update(equalLabelVal, equalLabelMode);
}
}
private static boolean isDropDownList(GeoElement geo) {
return (geo.isGeoList() && ((GeoList) geo).drawAsComboBox());
}
public void applyShowChanges(boolean value) {
for (int i = 0; i < getGeosLength(); i++) {
GeoElement geo = getGeoAt(i);
geo.setLabelVisible(value);
geo.updateRepaint();
}
updateProperties();
storeUndoInfo();
}
public void applyModeChanges(int mode, boolean visible) {
GeoElement geo;
for (int i = 0; i < getGeosLength(); i++) {
geo = getGeoAt(i);
geo.setLabelVisible(visible);
geo.setLabelMode(mode);
geo.updateVisualStyle(GProperty.LABEL_STYLE);
}
kernel.notifyRepaint();
storeUndoInfo();
}
public boolean isNameValueShown() {
return showNameValue;
}
@Override
public PropertyListener getListener() {
return listener;
}
@Override
protected boolean isValidAt(int index) {
GeoElement geo = getGeoAt(index);
return match(geo);
// geo.isLabelShowable() || isDropDownList(geo)
// || geo.isGeoInputBox();
}
/**
* @param geo
* The geo to math returns true if geo meets the requirements of
* this model
*/
public static boolean match(GeoElement geo) {
return geo.isLabelShowable() || isDropDownList(geo)
|| geo.isGeoInputBox();
}
}