package ql.gui;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
import ql.gui.canvas.Canvas;
import ql.gui.canvas.CanvasVisitor;
import ql.gui.input.*;
import ql.gui.segment.*;
import ql.semantics.ValueTable;
/**
* Created by Nik on 23-2-15.
*/
public class Renderer implements CanvasVisitor<Void>, SegmentVisitor<Void>, InputVisitor<Void>
{
private final ValueTable valueTable;
private final Refresher refresher;
public static void display(ValueTable valueTable, Canvas canvas, Stage stage)
{
Renderer renderer = new Renderer(valueTable);
canvas.accept(renderer);
renderer.start(canvas, stage);
}
private Renderer(ValueTable valueTable)
{
this.valueTable = valueTable;
this.refresher = new Refresher(this.valueTable);
}
private void start(Canvas canvas, Stage stage)
{
this.refresher.refresh();
Parent parent = canvas.getGuiElement();
stage.setTitle(canvas.getName());
stage.setScene(new Scene(parent, 600, 700));
stage.show();
}
@Override
public Void visit(Canvas c)
{
for (Page s : c.getPages())
{
s.accept(this);
}
return null;
}
@Override
public Void visit(Page page)
{
for (Segment subSegment : page.getSubSegments())
{
subSegment.accept(this);
}
return null;
}
@Override
public Void visit(Row segment)
{
this.refresher.addItem(segment);
segment.getInput().accept(this);
return null;
}
@Override
public Void visit(Section section)
{
for (Segment segment : section.getSubSegments())
{
segment.accept(this);
}
return null;
}
@Override
public Void visit(BoolInput input)
{
return handleInputVisit(input);
}
@Override
public Void visit(DecInput input)
{
return handleInputVisit(input);
}
@Override
public Void visit(IntInput input)
{
return handleInputVisit(input);
}
@Override
public Void visit(StrInput input)
{
return handleInputVisit(input);
}
@Override
public Void visit(ExprInput input)
{
return handleInputVisit(input);
}
private Void handleInputVisit(RegularInput input)
{
input.addObserver(this.refresher);
return null;
}
private Void handleInputVisit(ExprInput input)
{
this.refresher.addItem(input);
return null;
}
}