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) + " "; } }