/*
 * TitleBar - a bar that contains a message
 *
 * by Adam Doppelt
 * http://www.cs.brown.edu/people/amd/
 */
import java.awt.*;

public class TitleBar extends Canvas {
    final public static int HEIGHT = 40;
    
    final public static int BUFFER = 10;

    final public static String DEFAULT_FONT = "TimesRoman";
    final public static int DEFAULT_STYLE = Font.BOLD;
    final public static int DEFAULT_SIZE = 18;
    final public static int DEFAULT_ALIGNMENT = Label.CENTER;

    final public static Color DEFAULT_COLOR = Color.white;
    final public static Color BACKGROUND = Color.black;            

    String text_;
    int alignment_, x_, y_;
    
    public TitleBar(Container container) {
	container.add(this);

	setFont(new Font(DEFAULT_FONT, DEFAULT_STYLE, DEFAULT_SIZE));
	setBackground(BACKGROUND);
	setForeground(DEFAULT_COLOR);

	// -1 = invalid
	x_ = -1;
	text_ = "";
	alignment_ = DEFAULT_ALIGNMENT;
	
	repaint();
    }
    
    public void SetColor(Color color) {
	setForeground(color);
	repaint();
    }
    
    public void SetFont(Font font) {
	x_ = -1;
	setFont(font);
	repaint();
    }
    
    public void SetAlignment(int alignment) {
	x_ = -1;
	alignment_ = alignment;
	repaint();
    }
    
    public void SetMessage(String message) {
	x_ = -1;
	text_ = message;
	repaint();
    }
    
    public void Clear() {
	SetMessage("");
    }

/** #nodoc */
    public void reshape(int x, int y, int width, int height) {
	x_ = -1;
	super.reshape(x, y, width, height);
    }

/** #nodoc */    
    public void paint(Graphics g) {
	if (!text_.equals("")) {
	    // if x location is invalid
	    if (x_ == -1) {
		FontMetrics metrics = getFontMetrics(getFont());

		y_ = (int)((size().height + metrics.getMaxDescent()) / 2.0);
		if (alignment_ == Label.LEFT)
		    x_ = BUFFER;
		else {
		    int width = metrics.stringWidth(text_);
		    if (alignment_ == Label.CENTER)
			x_ = (int)((size().width - width) / 2.0);
		    else
			x_ = size().width - BUFFER - width;
		}
	    }
	    g.drawString(text_, x_, y_);
	}
    }
    
/** #nodoc */
    public Dimension preferredSize() {
	return new Dimension(getParent().size().width, HEIGHT);
    }
}
