package org.geogebra.common.plugin;
import org.geogebra.common.main.App;
import org.geogebra.common.plugin.script.Script;
/**
* Runs GGB Scripts
*/
public class GeoScriptRunner implements EventListener {
private App app;
/**
* @param app
* application
*/
public GeoScriptRunner(App app) {
this.app = app;
}
@Override
public void sendEvent(Event evt) {
if (app.isScriptingDisabled() || evt.target == null) {
return;
}
Script script = evt.target.getScript(evt.type);
if (script == null) {
return;
}
if (evt.type == EventType.UPDATE) {
if (app.isBlockUpdateScripts() && !evt.isAlwaysDispatched()) {
return;
}
}
try {
if (evt.type != EventType.UPDATE) {
script.run(evt);
app.storeUndoInfo();
} else {
app.setBlockUpdateScripts(true);
boolean ok = script.run(evt);
app.setBlockUpdateScripts(!ok);
}
} catch (ScriptError e) {
app.showError(e.getScriptError());
}
}
@Override
public void reset() {
// Nothing to do here as the script are removed with the geos.
}
}