package nl.utwente.viskell.ui.components; import java.util.List; import java.util.Optional; import com.google.common.collect.ImmutableList; import javafx.geometry.Pos; import javafx.scene.control.Label; import javafx.scene.layout.HBox; import javafx.scene.layout.VBox; import nl.utwente.viskell.haskell.expr.Expression; import nl.utwente.viskell.haskell.expr.Value; import nl.utwente.viskell.haskell.type.Type; public class NestedValue extends NestedBlock { private final ValueBlock original; private Type valueType; public NestedValue(ValueBlock original) { super(); this.original = original; this.valueType = original.output.getType(Optional.empty()).getFresh(); HBox outputSpace = new HBox(new Bond(false)); outputSpace.setAlignment(Pos.CENTER); Label valueLabel = new Label(original.getValue()); valueLabel.setMaxWidth(150); valueLabel.setAlignment(Pos.CENTER); valueLabel.getStyleClass().add("content"); VBox body = new VBox(valueLabel, outputSpace); body.getStyleClass().addAll("nested", "value"); this.getChildren().add(body); } @Override public void refreshTypes() { this.valueType = this.original.output.getType(Optional.empty()).getFresh(); } @Override public List<Type> getInputTypes() { return ImmutableList.of(); } @Override public List<Type> getOutputTypes() { return ImmutableList.of(this.valueType); } @Override public Expression getExpr() { return new Value(this.valueType, this.original.getValue()); } @Override public Block getOriginal() { return this.original; } }