/*
* JBoss, Home of Professional Open Source.
*
* See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing.
*
* See the AUTHORS.txt file distributed with this work for a full listing of individual contributors.
*/
package org.teiid.designer.diagram.ui.figure;
import org.eclipse.draw2d.ColorConstants;
import org.eclipse.draw2d.FigureUtilities;
import org.eclipse.draw2d.Label;
import org.eclipse.draw2d.PositionConstants;
import org.eclipse.draw2d.RectangleFigure;
import org.eclipse.draw2d.geometry.Point;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.Image;
import org.teiid.designer.diagram.ui.actions.ScaledFontManager;
import org.teiid.designer.diagram.ui.util.colors.ColorPalette;
/**
* @author blafond To change the template for this generated type comment go to Window>Preferences>Java>Code Generation>Code and
* Comments
*
* @since 8.0
*/
public class LabeledRectangleFigure extends AbstractDiagramFigure {
private Label label = null;
private RectangleFigure rectangle = null;
private boolean hilite = false;
private Color defaultBkgdColor;
public LabeledRectangleFigure( String labelString,
Font newFont,
boolean hiliteSelection,
ColorPalette colorPalette ) {
super(colorPalette);
this.hilite = hiliteSelection;
init(newFont);
createComponent(labelString, null);
}
public LabeledRectangleFigure( String labelString,
boolean hiliteSelection,
ColorPalette colorPalette ) {
super(colorPalette);
this.hilite = hiliteSelection;
init(null);
createComponent(labelString, null);
}
public LabeledRectangleFigure( String labelString,
Image icon,
boolean hiliteSelection,
ColorPalette colorPalette ) {
super(colorPalette);
this.hilite = hiliteSelection;
init(null);
createComponent(labelString, icon);
}
private void init( Font newFont ) {
if (newFont != null) this.setFont(newFont);
else this.setFont(ScaledFontManager.getFont());
}
private void createComponent( String labelString,
Image icon ) {
int hanging = 0;
label = new Label(labelString);
if (hilite) rectangle = new RectangleFigure();
if (icon != null) {
label.setIcon(icon);
label.setTextPlacement(PositionConstants.EAST);
// label.setIconAlignment(Label.LEFT);
}
label.setFont(this.getFont());
if (rectangle != null) this.add(rectangle);
this.add(label);
hanging = FigureUtilities.getFontMetrics(this.getFont()).getDescent();
label.setForegroundColor(ColorConstants.black);
label.setTextAlignment(PositionConstants.EAST);
label.setRequestFocusEnabled(true);
int labelWidth = FigureUtilities.getStringExtents(label.getText(), this.getFont()).width + 4;
if (label.getIcon() != null) labelWidth += label.getIcon().getBounds().width + 6;
int labelHeight = FigureUtilities.getStringExtents(label.getText(), this.getFont()).height + hanging;
label.setSize(labelWidth, labelHeight);
label.setPreferredSize(labelWidth, labelHeight);
if (rectangle != null) rectangle.setSize(label.getSize());
this.setSize(labelWidth, labelHeight);
this.setPreferredSize(labelWidth, labelHeight);
label.setLocation(new Point(1, 1));
if (rectangle != null) rectangle.setLocation(new Point(0, 0));
}
public void setIcon( Image icon ) {
if (label != null) {
label.setIcon(icon);
}
}
public void resize() {
Font theFont = label.getFont();
int hanging = FigureUtilities.getFontMetrics(theFont).getDescent();
int labelWidth = FigureUtilities.getStringExtents(label.getText(), theFont).width;
if (label.getIcon() != null) labelWidth += label.getIcon().getBounds().width + 6;
int labelHeight = FigureUtilities.getStringExtents(label.getText(), theFont).height + hanging;
label.setSize(labelWidth, labelHeight);
label.setPreferredSize(labelWidth, labelHeight);
if (rectangle != null) rectangle.setSize(label.getSize());
this.setSize(labelWidth, labelHeight);
this.setPreferredSize(labelWidth, labelHeight);
}
public void setTextColor( Color newColor ) {
label.setForegroundColor(newColor);
}
public Label getLabel() {
return label;
}
@Override
public void updateForName( String newName ) {
label.setText(newName);
resize();
}
@Override
public void updateForFont( Font newFont ) {
if (newFont != null) {
this.setFont(newFont);
} else {
this.setFont(ScaledFontManager.getFont());
}
label.setFont(this.getFont());
resize();
}
@Override
public void setBackgroundColor( Color newColor ) {
if (hilite && rectangle != null) {
defaultBkgdColor = newColor;
rectangle.setBackgroundColor(defaultBkgdColor);
rectangle.setForegroundColor(defaultBkgdColor);
}
}
/* (non-Javadoc)
* @See org.teiid.designer.diagram.ui.figure.DiagramFigure#hiliteBackground(org.eclipse.swt.graphics.Color)
*/
@Override
public void hiliteBackground( Color hiliteColor ) {
if (hiliteColor == null) {
rectangle.setBackgroundColor(defaultBkgdColor);
rectangle.setForegroundColor(defaultBkgdColor);
} else {
rectangle.setBackgroundColor(hiliteColor);
rectangle.setForegroundColor(hiliteColor);
}
}
/*
* (non-Javadoc)
* @See org.teiid.designer.diagram.ui.figure.DiagramFigure#refreshFont()
*/
@Override
public void refreshFont() {
updateForFont(null);
}
}