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.jface.viewers.TextCellEditor; import damp.ekeko.snippets.DirectiveOperandBinding; public class DirectiveOperandBindingEditingSupport extends EditingSupport { private Object cljTemplateGroup, cljTemplate, cljNode; private TableViewer tableViewer; private BoundDirectivesViewer boundDirectivesViewer; public DirectiveOperandBindingEditingSupport(BoundDirectivesViewer boundDirectivesViewer, TableViewer viewer, Object cljTemplateGroup, Object cljTemplate, Object cljNode) { super(viewer); this.boundDirectivesViewer = boundDirectivesViewer; this.tableViewer = viewer; this.cljTemplateGroup = cljTemplateGroup; this.cljTemplate = cljTemplate; this.cljNode = cljNode; } @Override protected CellEditor getCellEditor(Object element) { return new TextCellEditor(tableViewer.getTable()); } @Override protected boolean canEdit(Object element) { if(element instanceof DirectiveOperandBinding) { //only allow editing operands that do not correspond to the implicit match DirectiveOperandBinding dob = (DirectiveOperandBinding) element; if(cljNode == null) return false; return !(cljNode.equals(dob.getValue())); } return false; } @Override protected Object getValue(Object element) { if(element instanceof DirectiveOperandBinding) { DirectiveOperandBinding dob = (DirectiveOperandBinding) element; return "" + dob.getValue(); } return null; } @Override protected void setValue(Object element, Object value) { if(element instanceof DirectiveOperandBinding) { DirectiveOperandBinding dob = (DirectiveOperandBinding) element; dob.setValue(value); tableViewer.update(element, null); boundDirectivesViewer.updateWidgets(); } } }