package qls.semantics;
import ql.gui.control.CheckBox;
import ql.gui.control.Control;
import ql.gui.control.Radio;
import ql.gui.control.TextField;
import ql.gui.segment.RowStyle;
import qls.ast.rule.*;
import qls.ast.rule.widget.*;
/**
* Created by bore on 10/03/15.
*/
public class RowStyleBuilder implements RuleVisitor<Void>, WidgetVisitor<Control>
{
private RowStyle rowStyle;
public static RowStyle build(Rules rs)
{
RowStyleBuilder visitor = new RowStyleBuilder();
for (Rule r : rs)
{
r.accept(visitor);
}
return visitor.rowStyle;
}
private RowStyleBuilder()
{
this.rowStyle = new RowStyle();
}
@Override
public Void visit(Width r)
{
this.rowStyle.setWidth(r.getValue());
return null;
}
@Override
public Void visit(Font r)
{
this.rowStyle.setFontName(r.getValue());
return null;
}
@Override
public Void visit(FontSize r)
{
this.rowStyle.setFontSize(r.getValue());
return null;
}
@Override
public Void visit(BackColor r)
{
this.rowStyle.setBackColor(r.getValue().getColor());
return null;
}
@Override
public Void visit(ForeColor r)
{
this.rowStyle.setForeColor(r.getValue().getColor());
return null;
}
@Override
public Void visit(Widget r)
{
Control c = r.getValue().accept(this);
this.rowStyle.setWidget(c);
return null;
}
@Override
public Control visit(Checkbox w)
{
return new CheckBox();
}
@Override
public Control visit(Dropdown w)
{
return new ql.gui.control.Dropdown(w.getYesLabel(), w.getNoLabel());
}
@Override
public Control visit(qls.ast.rule.widget.Radio w)
{
return new Radio(w.getYesLabel(), w.getNoLabel());
}
@Override
public Control visit(DecSlider w)
{
return new ql.gui.control.Slider(w.getMin(), w.getMax(), w.getStep());
}
@Override
public Control visit(IntSlider w)
{
return new ql.gui.control.Slider(w.getMin(), w.getMax(), w.getStep());
}
@Override
public Control visit(Textbox w)
{
return new TextField();
}
}