package org.eclipse.iee.pad.formula.ui.editors; import java.util.List; import org.eclipse.draw2d.Figure; import org.eclipse.draw2d.IFigure; import org.eclipse.iee.editor.core.bindings.DefaultObservableValue; import org.eclipse.iee.editor.core.bindings.ObservableProperty; import org.eclipse.iee.editor.core.container.TextRenderCtx; import org.eclipse.iee.editor.core.pad.common.text.AbstractVisualTextEditor; import org.eclipse.iee.editor.core.pad.common.text.TextPartEditor; import org.eclipse.iee.pad.formula.ui.EditorVisitor; import org.eclipse.iee.pad.formula.ui.IExpressionEditor; import org.eclipse.iee.translator.antlr.translator.model.Expression; import org.eclipse.iee.translator.antlr.translator.model.FunctionExpression; import com.google.common.base.Optional; import com.google.common.reflect.TypeToken; public final class FunctionExpressionEditor extends AbstractVisualTextEditor<FunctionExpression, Figure> implements IExpressionEditor<FunctionExpression, Figure> { private WrappedExpressionEditor<FunctionExpression> fNameEditor; private ExpressionsListEditor fArgumentsEditor; private TextRenderCtx fRenderCtx; private Optional<ObservableProperty<List<Expression>>> fArguments; public FunctionExpressionEditor(TextRenderCtx renderCtx) { this.fRenderCtx = renderCtx; addEditor(fNameEditor = new WrappedExpressionEditor<>("name", renderCtx)); addEditor(fArgumentsEditor = new ExpressionsListEditor(renderCtx)); } @Override public boolean isSelectable() { return false; } @Override public void setSelected(boolean b) { } @Override public void setActive(boolean b) { } @Override protected Figure createFigure() { Figure figure = EditorVisitor.createTextContainerFigure(); figure.add(fNameEditor.getFigure()); TextPartEditor t = new TextPartEditor(fRenderCtx); t.setValue(Optional.of(DefaultObservableValue.fromValue("("))); figure.add(addEditor(t).getView().getWrapped(IFigure.class)); figure.add(fArgumentsEditor.getFigure()); TextPartEditor t1 = new TextPartEditor(fRenderCtx); t1.setValue(Optional.of(DefaultObservableValue.fromValue(")"))); figure.add(addEditor(t1).getView().getWrapped(IFigure.class)); return figure; } @Override protected void doBindValue(FunctionExpression value) { fArguments = Optional.of(new ObservableProperty<List<Expression>>(value, "parameters", new TypeToken<List<Expression>>() {})); fNameEditor.setValue(Optional.of(DefaultObservableValue.fromValue(value))); fArgumentsEditor.setValue(fArguments); } @Override protected void doUnbindValue(FunctionExpression oldValue) { if (fArguments.isPresent()) { fArguments.get().dispose(); } fNameEditor.setValue(Optional.<ObservableProperty<FunctionExpression>> absent()); fArgumentsEditor.setValue(Optional.<ObservableProperty<List<Expression>>> absent()); } }