package ql.gui.widget;
import java.util.LinkedHashSet;
import ql.ast.expression_value.BooleanValue;
import ql.gui.input_listener.InputListenerLinker;
/**
* @author orosu
*/
public class IfElse implements IWidget, IWidgetListener
{
private final InputListenerLinker _inputListenerLinker;
private final LinkedHashSet<IWidget> _ifWidgets;
private final LinkedHashSet<IWidget> _elseWidgets;
public IfElse(InputListenerLinker inputListenerLinker)
{
this._inputListenerLinker = inputListenerLinker;
this._ifWidgets = new LinkedHashSet<IWidget>();
this._elseWidgets = new LinkedHashSet<IWidget>();
}
public void addIfWidget(IWidget widget)
{
this._ifWidgets.add(widget);
}
public void addElseWidget(IWidget widget)
{
this._elseWidgets.add(widget);
}
public boolean getValue()
{
if (!this._inputListenerLinker.hasExpressionInterpreter()) {
assert false: "Before calling getValue, you should always call hasInputListener";
}
return ((BooleanValue) this._inputListenerLinker.getExpressionInterpreter()
.evaluate()).getValue();
}
@Override
public void attachInputListener()
{
this._inputListenerLinker.attachInputListener(this);
}
@Override
public InputListenerLinker getInputListenerLinker()
{
return this._inputListenerLinker;
}
@Override
public void setBooleanValue(boolean value)
{
if (this._inputListenerLinker.evaluateNull()) {
for(IWidget widget: this._ifWidgets) {
widget.setNullValue();
}
for(IWidget widget: this._elseWidgets) {
widget.setNullValue();
}
return;
}
if (this._inputListenerLinker.hasExpressionInterpreter()) {
value = this.getValue();
}
if (value) {
this._showIf(value);
} else {
this._showElse(!value);
}
}
@Override
public void setStringValue(String value)
{
assert false: "Execution should never reach this!";
}
@Override
public void setNullValue()
{
for(IWidget widget: this._ifWidgets) {
widget.setNullValue();
}
for(IWidget widget: this._elseWidgets) {
widget.setNullValue();
}
}
@Override
public void hide()
{
for(IWidget widget: this._ifWidgets) {
widget.hide();
}
for(IWidget widget: this._elseWidgets) {
widget.hide();
}
}
private void _showIf(boolean value)
{
for(IWidget widget: this._ifWidgets) {
widget.setBooleanValue(value);
}
for(IWidget widget: this._elseWidgets) {
widget.hide();
}
}
private void _showElse(boolean value)
{
for(IWidget widget: this._ifWidgets) {
widget.hide();
}
for(IWidget widget: this._elseWidgets) {
widget.setBooleanValue(value);
}
}
}