package com.dragome.examples;
import java.util.Arrays;
import com.dragome.commons.ExecutionHandler;
import com.dragome.forms.bindings.builders.ComponentBuilder;
import com.dragome.guia.GuiaServiceLocator;
import com.dragome.guia.GuiaVisualActivity;
import com.dragome.guia.components.VisualComboBoxImpl;
import com.dragome.guia.components.VisualPanelImpl;
import com.dragome.guia.components.interfaces.VisualButton;
import com.dragome.guia.components.interfaces.VisualLabel;
import com.dragome.guia.components.interfaces.VisualTextField;
import com.dragome.render.interfaces.TemplateHandler;
import com.dragome.services.ServiceLocator;
import com.dragome.templates.interfaces.Template;
import com.dragome.web.annotations.PageAlias;
@PageAlias(alias= "continuation1")
public class ContinuationExample extends GuiaVisualActivity
{
protected float result= 0f;
public float getResult()
{
return result;
}
public void setResult(float result)
{
this.result= result;
}
public void build()
{
final ExecutionHandler executionHandler= ServiceLocator.getInstance().getConfigurator().getExecutionHandler();
TemplateHandler templateHandler= GuiaServiceLocator.getInstance().getTemplateHandler();
Template operationPanelTemplate= mainTemplate.getChild("operation-panel");
templateHandler.makeInvisible(operationPanelTemplate);
final ComponentBuilder mainBuilder= new ComponentBuilder(mainPanel);
mainBuilder.bindTemplate("result").as(VisualLabel.class).to(() -> getResult()).build();
mainBuilder.bindTemplate("start-button").as(VisualButton.class).onClick(() -> {
executionHandler.getExecutor().execute(() -> {
while (true)
{
Template clone= templateHandler.clone(operationPanelTemplate);
mainTemplate.insertAfter(clone, operationPanelTemplate);
templateHandler.makeVisible(clone);
ComponentBuilder componentBuilder= new ComponentBuilder(new VisualPanelImpl(clone));
VisualTextField<String> valueTextField= componentBuilder.bindTemplate("value").as(VisualTextField.class).to(() -> "").build();
VisualComboBoxImpl<Operation> operationCombo= componentBuilder.bindTemplate("operation").to(new VisualComboBoxImpl<Operation>("operation", Arrays.asList(Operation.values()))).to(() -> Operation.add).build();
componentBuilder.bindTemplate("calc-button").as(VisualButton.class).onClick(() -> {
setResult(operationCombo.getValue().apply(result, Integer.parseInt(valueTextField.getValue())));
executionHandler.continueExecution();
}).build();
executionHandler.suspendExecution();
}
});
}).build();
}
}