package ql.gui.control;
import javafx.beans.value.ChangeListener;
import javafx.scene.Node;
import ql.semantics.values.*;
import java.math.BigDecimal;
/**
* Created by Nik on 10-3-15.
*/
public class TextField extends ControlElement implements IntControl, DecControl, StrControl
{
private final static UndefValue undefValue = new UndefValue();
private final javafx.scene.control.TextInputControl textField;
public TextField()
{
this.textField = new javafx.scene.control.TextField();
}
@Override
public void setValue(Value value)
{
value.accept(this);
}
@Override
public void setDisabled(Boolean disabled)
{
this.textField.setDisable(disabled);
}
@Override
public Node getControlNode()
{
return this.textField;
}
@Override
public void addListener(ChangeListener listener)
{
this.textField.textProperty().addListener(listener);
}
private void setText(String text)
{
this.textField.setText(text);
}
@Override
public Void visit(DecValue val)
{
this.setText(val.getValue().toString());
return null;
}
@Override
public Void visit(IntValue val)
{
this.setText(val.getValue().toString());
return null;
}
@Override
public Void visit(StrValue val)
{
this.setText(val.getValue());
return null;
}
@Override
public Void visit(UndefValue val)
{
this.setText("");
return null;
}
@Override
public Value getIntValue()
{
String userInput = this.textField.getText();
userInput = userInput.trim();
Value value;
try
{
Integer intValue = Integer.parseInt(userInput);
value = new IntValue(intValue);
}
catch (NumberFormatException e)
{
value = undefValue;
}
return value;
}
@Override
public Value getDecValue()
{
Value value;
try
{
BigDecimal decValue = new BigDecimal(this.textField.getText());
value = new DecValue(decValue);
}
catch (NumberFormatException e)
{
value = undefValue;
}
return value;
}
@Override
public Value getStrValue()
{
return new StrValue(this.textField.getText());
}
}