/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package robotinterface.algorithm.procedure;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Polygon;
import java.awt.geom.Area;
import java.awt.geom.Ellipse2D;
import robotinterface.algorithm.Command;
import static robotinterface.algorithm.procedure.DummyBlock.createSimpleBlock;
import robotinterface.drawable.GraphicObject;
import robotinterface.gui.panels.sidepanel.Item;
import robotinterface.interpreter.ExecutionException;
import robotinterface.interpreter.ResourceManager;
/**
*
* @author antunes2
*/
public class BreakLoop extends Procedure {
private static Color myColor = Color.decode("#01939A");
public BreakLoop() {
}
private GraphicObject resource = null;
@Override
public GraphicObject getDrawableResource() {
if (resource == null) {
resource = createSimpleBlock(this, " break; ", Color.black, myColor);
}
return resource;
}
@Override
public Command step(ResourceManager rm) throws ExecutionException {
Command loop = getParent();
while (!(loop instanceof While || loop instanceof Function)) {
loop = loop.getParent();
}
// if (loop instanceof While){
// ((Block)loop).breakLoop(true);
// return ((Block)loop).getNext();
// } else
if (loop instanceof Block) {
((Block) loop).breakLoop(true);
return ((Block) loop).getEnd();
}
return loop.getNext();
}
@Override
public Item getItem() {
Area myShape = new Area();
Polygon tmpPoly = new Polygon();
tmpPoly.addPoint(10, 0);
tmpPoly.addPoint(20, 10);
tmpPoly.addPoint(10, 20);
tmpPoly.addPoint(0, 10);
myShape.add(new Area(tmpPoly));
myShape.subtract(new Area(new Ellipse2D.Double(5, 5, 10, 10)));
tmpPoly.reset();
tmpPoly.addPoint(18, 0);
tmpPoly.addPoint(20, 2);
tmpPoly.addPoint(2, 20);
tmpPoly.addPoint(0, 18);
myShape.add(new Area(tmpPoly));
myShape.add(new Area(new Ellipse2D.Double(7, 7, 6, 6)));
return new Item("Parar Repetição", myShape, myColor, "Interrompe o laço de repetição quando é executado");
}
@Override
public void drawLines(Graphics2D g) {
}
@Override
public Object createInstance() {
return new BreakLoop();
}
@Override
public void toString(String ident, StringBuilder sb) {
sb.append(ident).append("break;\n");
}
}