package com.drawbridge.vl.blocks;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
import com.drawbridge.jsengine.ast.Evaluator;
import com.drawbridge.utils.GraphicUtils;
import com.drawbridge.utils.Utils;
import com.drawbridge.vl.VLCanvas;
import com.drawbridge.vl.VLPanel;
import com.google.caja.lexer.FilePosition;
public class BlockOperator extends Block
{
private static final long serialVersionUID = -4732877357304126964L;
public enum SupportedOperationType
{
ADDITION,
SUBTRACTION,
MULTIPLICATION,
DIVISION,
MODULUS;
public static String getString(SupportedOperationType type)
{
switch (type)
{
case ADDITION:
return "+";
case DIVISION:
return "/";
case MODULUS:
return "%";
case MULTIPLICATION:
return "*";
case SUBTRACTION:
return "-";
}
Utils.out.println(BlockOperator.class, "Unknown operator type :" + type);
return "";
}
}
private SupportedOperationType mType = null;
private BufferedImage img = null;
public BlockOperator(FilePosition filePosition, Evaluator eval, SupportedOperationType type) {
super(filePosition, eval, VLCanvas.LINE_HEIGHT - 10, Color.white, new BasicStroke(), SupportedOperationType.getString(type));
mType = type;
setImmutableProperties();
}
public BlockOperator(BlockOperator block) {
super(block);
mType = block.mType;
setImmutableProperties();
}
private void setImmutableProperties()
{
this.setPreferredSize(new Dimension(40, 40));
this.setSize(getPreferredSize());
this.remove(mRoundedText);
updateImageIcon();
this.setRoundSize(10);
addMouseMotionListener(new MouseAdapter()
{
@Override
public void mouseMoved(MouseEvent me)
{
VLPanel.getInstance().mCanvas.displaySelectorOp(BlockOperator.this, BlockOperator.this.getLocation());
}
});
}
public void setType(final SupportedOperationType newType)
{
mType = newType;
updateImageIcon();
VLCanvas canvas = VLPanel.getInstance().mCanvas;
if (canvas != null)
{
canvas.updateGrid();
canvas.validateGridLayout();
}
}
@Override
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.drawImage(img, 5, 5, getWidth() - 10, getHeight() - 10, null);
}
private void updateImageIcon()
{
switch (mType)
{
case ADDITION:
img = GraphicUtils.loadImageFromResource("/Assets/operator-plus.png");
break;
case DIVISION:
img = GraphicUtils.loadImageFromResource("/Assets/operator-div.png");
break;
case MODULUS:
img = GraphicUtils.loadImageFromResource("/Assets/operator-mod.png");
break;
case MULTIPLICATION:
img = GraphicUtils.loadImageFromResource("/Assets/operator-mult.png");
break;
case SUBTRACTION:
img = GraphicUtils.loadImageFromResource("/Assets/operator-minus.png");
break;
default:
break;
}
}
@Override
public String generateCode()
{
return " " + SupportedOperationType.getString(mType) + " ";
}
}