package com.drawbridge.vl.blocks;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JTextField;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import com.drawbridge.jsengine.ast.Evaluator;
import com.drawbridge.utils.Utils;
import com.drawbridge.vl.VLCanvas;
import com.google.caja.lexer.FilePosition;
public class BlockIdentifier extends Block
{
private static final long serialVersionUID = -7483516649166023561L;
public BlockIdentifier(FilePosition filePosition, Evaluator eval, String text) {
super(filePosition, eval, VLCanvas.LINE_HEIGHT, Color.white, new BasicStroke(), text);
setImmutableProperties();
}
public BlockIdentifier(BlockIdentifier block) {
super(block);
setImmutableProperties();
}
private void setImmutableProperties()
{
mRoundedText.getDocument().addDocumentListener(primitiveDocumentListener);
// mRoundedText.setBorder(BorderFactory.createLineBorder(Color.black));
mRoundedText.setHorizontalAlignment(JTextField.CENTER);
int textHeight = mRoundedText.getFontMetrics(mRoundedText.getFont()).getMaxAdvance() +
mRoundedText.getFontMetrics(mRoundedText.getFont()).getMaxDescent();
mRoundedText.setMaximumSize(new Dimension(1000, textHeight));
// Set Font Size of Text
mRoundedText.setForeground(Color.black);
mRoundedText.setFont(new Font(this.getFont().getFontName(), Font.BOLD, 22));
// Restrict Formatting
Utils.adaptTextFieldInputForVariableNames(mRoundedText, '_');
validateForText();
}
@Override
public Color getColor()
{
return mColor;
}
@Override
public void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
}
DocumentListener primitiveDocumentListener = new DocumentListener()
{
@Override
public void changedUpdate(DocumentEvent de)
{
}
@Override
public void insertUpdate(DocumentEvent de)
{
validateForText();
}
@Override
public void removeUpdate(DocumentEvent de)
{
validateForText();
}
};
@Override
protected void validateForText()
{
super.validateForText();
if (mRoundedText.getPreferredSize() != null && getPadding() != null) {
int width = Math.max(10, mRoundedText.getPreferredSize().width) + getPadding().left + getPadding().right - 10;
Dimension newBlockSize = new Dimension(width, getPreferredSize().height);
setPreferredSize(newBlockSize);
setSize(newBlockSize);
mPath = Block.getSimplePath(0, 0, newBlockSize.width, newBlockSize.height);
validate();
repaint();
}
}
@Override
public String generateCode()
{
return mRoundedText.getText();
}
}