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(); } }