package org.geogebra.desktop.gui.inputbar;
import java.util.ArrayList;
import org.geogebra.common.gui.inputfield.InputHelper;
import org.geogebra.common.kernel.geos.GeoElement;
import org.geogebra.common.kernel.kernelND.GeoElementND;
import org.geogebra.common.main.App;
import org.geogebra.common.plugin.GeoClass;
import org.geogebra.common.util.AsyncOperation;
import org.geogebra.desktop.gui.inputfield.AutoCompleteTextFieldD;
public class InputBarCallback extends AsyncOperation<GeoElementND[]> {
private App app;
private AutoCompleteTextFieldD inputField;
private String input;
private int oldStep;
public InputBarCallback(App app, AutoCompleteTextFieldD inputField,
String input, int oldStep) {
this.app = app;
this.inputField = inputField;
this.input = input;
this.oldStep = oldStep;
}
@Override
public void callback(GeoElementND[] geos) {
// need label if we type just eg
// lnx
if (geos != null && geos.length == 1 && !geos[0].isLabelSet()) {
geos[0].setLabel(geos[0].getDefaultLabel());
}
// set first outputs (same geo class) as selected geos (for
// properties view)
if (geos != null && geos.length > 0) {
ArrayList<GeoElement> list = new ArrayList<GeoElement>();
// add first output
GeoElementND geo = geos[0];
list.add(geo.toGeoElement());
GeoClass c = geo.getGeoClassType();
int i = 1;
// add following outputs until geo class changes
while (i < geos.length) {
geo = geos[i];
if (geo.getGeoClassType() == c) {
list.add(geo.toGeoElement());
i++;
} else {
i = geos.length;
}
}
app.getSelectionManager().setSelectedGeos(list);
}
InputHelper.updateProperties(geos, app.getActiveEuclidianView(),
oldStep);
if (geos != null) {
app.setScrollToShow(false);
inputField.addToHistory(input);
if (!inputField.getText().equals(input)) {
inputField.addToHistory(inputField.getText());
}
inputField.setText(null);
}
}
}