package org.geogebra.common.gui.dialog.handler;
import org.geogebra.common.gui.InputHandler;
import org.geogebra.common.kernel.Construction;
import org.geogebra.common.kernel.commands.AlgebraProcessor;
import org.geogebra.common.kernel.geos.GeoNumberValue;
import org.geogebra.common.kernel.kernelND.GeoElementND;
import org.geogebra.common.main.App;
import org.geogebra.common.main.error.ErrorHandler;
import org.geogebra.common.util.AsyncOperation;
public class NumberInputHandler implements InputHandler {
private AlgebraProcessor algebraProcessor;
private GeoNumberValue num = null;
private AsyncOperation<GeoNumberValue> callback;
private boolean oldVal;
private App app;
public NumberInputHandler(AlgebraProcessor algebraProcessor) {
super();
this.algebraProcessor = algebraProcessor;
this.app = algebraProcessor.getKernel().getApplication();
}
public NumberInputHandler(AlgebraProcessor algebraProcessor,
AsyncOperation<GeoNumberValue> cb, App appl, boolean oldValue) {
this(algebraProcessor);
callback = cb;
oldVal = oldValue;
app = appl;
}
@Override
public void processInput(String inputString, final ErrorHandler handler,
final AsyncOperation<Boolean> callback0) {
try {
handler.resetError();
algebraProcessor.processAlgebraCommandNoExceptionHandling(
inputString, false, handler, true,
new AsyncOperation<GeoElementND[]>() {
@Override
public void callback(GeoElementND[] result) {
boolean success = result != null
&& result[0] instanceof GeoNumberValue;
Construction cons = algebraProcessor.getKernel()
.getConstruction();
if (success) {
setNum((GeoNumberValue) result[0]);
if (callback != null) {
cons.setSuppressLabelCreation(oldVal);
callback.callback(num);
}
} else {
handler.showError(app.getLocalization()
.getError("NumberExpected"));
}
if (callback0 != null) {
callback0.callback(success);
}
}
});
} catch (Throwable e) {
if (callback0 != null) {
callback0.callback(false);
}
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void setNum(GeoNumberValue num) {
this.num = num;
}
public GeoNumberValue getNum() {
return num;
}
}