/*******************************************************************************
* Copyright (c) 2000, 2005 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.draw2d;
import org.eclipse.swt.graphics.Color;
import org.eclipse.draw2d.geometry.Insets;
import org.eclipse.draw2d.geometry.Rectangle;
/**
* Border provides a title bar on the Figure for which this is the border of. Generally
* used in conjunction with other borders to create window-like effects. Also provides for
* alignment of the text in the bar.
*
* @see FrameBorder
*/
public class TitleBarBorder
extends AbstractLabeledBorder
{
private static Color defaultColor = ColorConstants.menuBackgroundSelected;
private int textAlignment = PositionConstants.LEFT;
private Insets padding = new Insets(1, 3, 2, 2);
private Color fillColor = defaultColor;
/**
* Constructs a TitleBarBorder with its label set to the name of this class.
*
* @since 2.0
*/
public TitleBarBorder() { }
/**
* Constructs a TitleBarBorder with its label set to the passed String.
*
* @param s text of the label
* @since 2.0
*/
public TitleBarBorder(String s) {
setLabel(s);
}
/**
* Calculates and returns the Insets for this border.
*
* @param figure the figure on which Insets calculations are based
* @return the calculated Insets
* @since 2.0
*/
protected Insets calculateInsets(IFigure figure) {
return new Insets(getTextExtents(figure).height + padding.getHeight(), 0, 0, 0);
}
/**
* Returns the background Color of this TitleBarBorder.
* @return the background color
* @since 2.0
*/
protected Color getBackgroundColor() {
return fillColor;
}
/**
* Returns this TitleBarBorder's padding. Padding provides spacing along the sides of the
* TitleBarBorder. The default value is no padding along all sides.
*
* @return the Insets representing the space along the sides of the TitleBarBorder
* @since 2.0
*/
protected Insets getPadding() {
return padding;
}
/**
* Returns the alignment of the text in the title bar. Possible values are
* {@link PositionConstants#LEFT}, {@link PositionConstants#CENTER} and
* {@link PositionConstants#RIGHT}.
*
* @return the text alignment
* @since 2.0
*/
public int getTextAlignment() {
return textAlignment;
}
/**
* Returns <code>true</code> thereby filling up all the contents within its boundaries,
* eleminating the need by the figure to clip the boundaries and do the same.
*
* @see Border#isOpaque()
*/
public boolean isOpaque() {
return true;
}
/**
* @see Border#paint(IFigure, Graphics, Insets)
*/
public void paint(IFigure figure, Graphics g, Insets insets) {
tempRect.setBounds(getPaintRectangle(figure, insets));
Rectangle rec = tempRect;
rec.height = Math.min(rec.height, getTextExtents(figure).height + padding.getHeight());
g.clipRect(rec);
g.setBackgroundColor(fillColor);
g.fillRectangle(rec);
int x = rec.x + padding.left;
int y = rec.y + padding.top;
int textWidth = getTextExtents(figure).width;
int freeSpace = rec.width - padding.getWidth() - textWidth;
if (getTextAlignment() == PositionConstants.CENTER)
freeSpace /= 2;
if (getTextAlignment() != PositionConstants.LEFT)
x += freeSpace;
g.setFont(getFont(figure));
g.setForegroundColor(getTextColor());
g.drawString(getLabel(), x, y);
}
/**
* Sets the background color of the area within the boundaries of this border. This is
* required as this border takes responsibility for filling up the region, as
* TitleBarBorders are always opaque.
*
* @param color the background color
* @since 2.0
*/
public void setBackgroundColor(Color color) {
fillColor = color;
}
/**
* Sets the padding space to be applied on all sides of the border. The default value is
* no padding on all sides.
*
* @param all the value of the padding on all sides
* @since 2.0
*/
public void setPadding(int all) {
padding = new Insets(all);
invalidate();
}
/**
* Sets the padding space of this TitleBarBorder to the passed value. The default value is
* no padding on all sides.
*
* @param pad the padding
* @since 2.0
*/
public void setPadding(Insets pad) {
padding = pad; invalidate();
}
/**
* Sets the alignment of the text in the title bar. Possible values are
* {@link PositionConstants#LEFT}, {@link PositionConstants#CENTER} and
* {@link PositionConstants#RIGHT}.
*
* @param align the new text alignment
* @since 2.0
*/
public void setTextAlignment(int align) {
textAlignment = align;
}
}