package damp.ekeko.snippets.gui; import org.eclipse.jface.viewers.CellEditor; import org.eclipse.jface.viewers.EditingSupport; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.swt.widgets.Table; import clojure.lang.IFn; import damp.ekeko.snippets.DirectiveOperandBinding; public class OperatorOperandBindingEditingSupport extends EditingSupport { public static IFn FN_OPERANDBINDING_EDITOR; OperatorOperandsViewer operatorOperandsViewer; public OperatorOperandBindingEditingSupport(OperatorOperandsViewer operatorOperandsViewer) { super(operatorOperandsViewer.getTableViewer()); this.operatorOperandsViewer = operatorOperandsViewer; } //NOTE: if the Eclipse GUI hangs, there is a Clojure error in the multi-method that is dispatched to //such errors seem no to propagate outside of the event loop @Override protected CellEditor getCellEditor(Object element) { Table table = operatorOperandsViewer.getTableViewer().getTable(); Object returned = FN_OPERANDBINDING_EDITOR.invoke(table, operatorOperandsViewer, element); return (CellEditor) returned; } @Override protected boolean canEdit(Object element) { return true; } @Override protected Object getValue(Object element) { return ((DirectiveOperandBinding) element).getValue(); } @Override protected void setValue(Object element, Object value) { ((DirectiveOperandBinding) element).setValue(value); operatorOperandsViewer.getTableViewer().update(element, null); } }