package org.geogebra.common.cas.view;
import org.geogebra.common.euclidian.EuclidianConstants;
import org.geogebra.common.kernel.ModeSetter;
import org.geogebra.common.main.App;
/**
* Controller for CAS mouse and keyboard events
*/
public class CASTableCellController {
/**
* Handles pressing of Enter key after user input. The behaviour depends on
* the currently selected mode in the toolbar (Evaluate, Keep Input,
* Numeric) and Ctrl, Alt keys.
*
* @param e
* event
* @param app
* application
*/
public synchronized void handleEnterKey(boolean control, boolean alt,
App app, boolean focus) {
// AppD app = view.getApp();
int mode = app.getMode();
ModeSetter ms = focus ? ModeSetter.TOOLBAR : ModeSetter.CAS_BLUR;
// Ctrl + Enter toggles between the modes Evaluate and Numeric
if (control) {
if (mode == EuclidianConstants.MODE_CAS_NUMERIC) {
app.setMode(EuclidianConstants.MODE_CAS_EVALUATE, ms);
} else {
app.setMode(EuclidianConstants.MODE_CAS_NUMERIC, ms);
}
app.setMode(mode, ms);
return;
}
// Alt + Enter toggles between the modes Evaluate and Keep Input
if (alt) {
if (mode == EuclidianConstants.MODE_CAS_KEEP_INPUT) {
app.setMode(EuclidianConstants.MODE_CAS_EVALUATE, ms);
} else {
app.setMode(EuclidianConstants.MODE_CAS_KEEP_INPUT, ms);
}
app.setMode(mode, ms);
return;
}
// Enter depends on current mode
switch (mode) {
default:
// switch back to Evaluate
app.setMode(EuclidianConstants.MODE_CAS_EVALUATE, ms);
break;
case EuclidianConstants.MODE_CAS_EVALUATE:
case EuclidianConstants.MODE_CAS_NUMERIC:
case EuclidianConstants.MODE_CAS_KEEP_INPUT:
// apply current tool again
app.setMode(mode, ms);
break;
}
}
}