package nl.uva.bromance.QL.expressions.primitives;
import javafx.scene.control.CheckBox;
import javafx.scene.layout.VBox;
import nl.uva.bromance.QL.expressions.unary.Primitive;
import nl.uva.bromance.QL.gui.QLGUI;
import nl.uva.bromance.QL.typechecking.SymbolTable;
public class BooleanPrimitive extends Primitive
{
private boolean value;
public Boolean getValue()
{
return value;
}
public BooleanPrimitive(boolean value, int lineNumber)
{
super(lineNumber);
this.value = value;
}
public BooleanPrimitive or(BooleanPrimitive rhs, int lineNumber)
{
return new BooleanPrimitive(this.value || rhs.getValue(), lineNumber);
}
public BooleanPrimitive and(BooleanPrimitive rhs, int lineNumber)
{
return new BooleanPrimitive(this.value && rhs.getValue(), lineNumber);
}
@Override
public BooleanPrimitive isEqual(Primitive rhs, int lineNumber)
{
return new BooleanPrimitive(value == ((BooleanPrimitive)rhs).getValue(), lineNumber);
}
@Override
public void drawQuestion(VBox questionArea, QLGUI qlGui)
{
CheckBox cb = new CheckBox();
cb.getStyleClass().add("question");
cb.setSelected(value);
if (qlGui.getFocusUuid() == uuid)
qlGui.setFocusedNode(cb);
// Disable any input other than numbers
cb.selectedProperty().addListener((observable, oldValue, newValue) -> {
value = newValue;
qlGui.renderWithFocus(uuid);
});
questionArea.getChildren().add(cb);
}
public void invert()
{
this.value = !this.value;
}
@Override
public Primitive evaluate(SymbolTable s)
{
return this;
}
public static BooleanPrimitive defaultValue(int lineNumber)
{
return new BooleanPrimitive(false,lineNumber);
}
}