package bmsi.fsp;

import java.awt.Label;
import java.awt.Graphics;
import java.awt.Dimension;
import java.awt.FontMetrics;
import java.awt.peer.LabelPeer;

class FSLabel extends FSComponent implements LabelPeer {
  private int alignment;

  private String text;

  FSLabel(Label lab,FSToolkit toolkit) { super(lab,toolkit); }

  protected void initialize() {
    Label lab = (Label)target;
    String text = lab.getText();
    int a = lab.getAlignment();
    if (text != null)
      setText(text);
    if (a != 0)
      setAlignment(a);
    super.initialize();
  }

  public void paint(Graphics g) {
    //System.err.println("label.paint " + text);
    Dimension s = target.getSize();
    g.setColor(target.getBackground());
    g.fillRect(0,0,s.width,s.height);
    if (text == null) return;
    FontMetrics fm = g.getFontMetrics();
    int w = fm.stringWidth(text);
    int h = fm.getHeight();
    g.setColor(target.getForeground());
    switch (alignment) {
    case Label.RIGHT:
      g.drawString(text,s.width - w,(s.height + h)/2); break;
    case Label.LEFT:
      g.drawString(text,0,(s.height + h)/2); break;
    default:
      g.drawString(text,(s.width - w)/2,(s.height + h)/2); break;
    }
  }

  public Dimension getMinimumSize() {
    int w = (text != null) ? text.length() : 1;
    return toolkit.scale(new Dimension(w,1));
  }

  public void setAlignment(int a) {
    if (alignment != a) {
      alignment = a;
      repaint();
    }
  }

  public void setText(String s) {
    text = s;
    repaint();
  }

  public boolean isFocusTraversable() { return false; }
}
