package org.eclipse.iee.pad.formula.ui.editors; 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.VariableAssignment; import com.google.common.base.Optional; public class VariableAssignmentExpressionEditor extends AbstractVisualTextEditor<VariableAssignment, IFigure> implements IExpressionEditor<VariableAssignment, IFigure> { private WrappedExpressionEditor<VariableAssignment> fLeftEditor; private TextPartEditor fSignEditor; private ExpressionEditor fRightEditor; private Optional<ObservableProperty<Expression>> fRight; private TextRenderCtx fRenderCtx; public VariableAssignmentExpressionEditor(TextRenderCtx renderCtx) { this.fRenderCtx = renderCtx; addEditor(fLeftEditor = new WrappedExpressionEditor<VariableAssignment>("name", fRenderCtx)); addEditor(fSignEditor = new TextPartEditor(renderCtx)); fSignEditor.setValue(Optional.of(DefaultObservableValue.fromValue("="))); addEditor(fRightEditor = new ExpressionEditor(fRenderCtx)); } @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(fLeftEditor.getFigure()); figure.add(fSignEditor.getFigure()); figure.add(fRightEditor.getFigure()); return figure; } @Override protected void doBindValue(VariableAssignment value) { fLeftEditor.setValue(Optional.of(DefaultObservableValue.fromValue(value))); fRightEditor.setValue(fRight = Optional.of(new ObservableProperty<Expression>(value, "value", Expression.class))); } @Override protected void doUnbindValue(VariableAssignment oldValue) { fLeftEditor.setValue(Optional.<ObservableProperty<VariableAssignment>> absent()); fRightEditor.setValue(Optional.<ObservableProperty<Expression>> absent()); if (fRight.isPresent()) { fRight.get().dispose(); } } }