blob: bfd79cf552ad1e09387a397c4de164a733b36627 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006 Sybase, Inc. 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:
* Sybase, Inc. - initial API and implementation
*******************************************************************************/
package org.eclipse.jst.pagedesigner.css2.widget;
import org.eclipse.draw2d.FigureUtilities;
import org.eclipse.draw2d.Graphics;
import org.eclipse.jst.pagedesigner.css2.provider.DimensionInfo;
import org.eclipse.jst.pagedesigner.css2.style.HiddenElementStyle;
import org.eclipse.jst.pagedesigner.parts.EditProxyAdapter;
import org.eclipse.jst.pagedesigner.parts.ElementEditPart;
import org.eclipse.jst.pagedesigner.ui.preferences.PDPreferences;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.FontMetrics;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Display;
import org.w3c.dom.Element;
/**
* @author mengbo
*/
public class HiddenProvider extends ImageWidgetProvider {
private final static int GAP = 3;
private String _label = null;
private boolean _labelVisible = true;
private FontMetrics _fontMetrics;
/**
* @param image
* @param convertedElement
*/
public HiddenProvider(Image image, Element convertedElement) {
super(image, new HiddenElementStyle(convertedElement, new PDPreferences()));
}
/**
* @param image
* @param editPart
*/
public HiddenProvider(Image image, ElementEditPart editPart) {
super(image, new HiddenElementStyle(new EditProxyAdapter(editPart), new PDPreferences()));
}
// public HiddenProvider(Image image, String label)
// {
// this(image);
// this._label = label;
// }
/*
* (non-Javadoc)
*
* @see org.eclipse.jst.pagedesigner.css2.provider.ICSSWidgetProvider#getPreferredDimension(int,
* int)
*/
public DimensionInfo getPreferredDimension(int width, int height) {
int preWidth = width;
int preHeight = height;
_fontMetrics = getFontMetrics();
if (width <= 0) {
preWidth = getLabelWidth() + _imageWidth;
}
if (height <= 0) {
preHeight = Math.max(getLabelHeight(), _imageHeight);
}
return new DimensionInfo(preWidth, preHeight, -1);
}
private FontMetrics getFontMetrics() {
Font swtfont = Display.getCurrent().getSystemFont();
return FigureUtilities.getFontMetrics(swtfont);
}
private int getLabelHeight() {
if (_labelVisible && (_label != null) && (!_label.equals("")) //$NON-NLS-1$
&& (_fontMetrics != null)) {
return _fontMetrics.getHeight();
}
return 0;
}
/**
* @return the label width
*/
public int getLabelWidth() {
if (_labelVisible && _label != null && !_label.equals("") //$NON-NLS-1$
&& _fontMetrics != null) {
Font swtfont = Display.getCurrent().getSystemFont();
return FigureUtilities.getTextWidth(_label, swtfont) + GAP;
}
return 0;
}
public void paintFigure(Graphics g,
org.eclipse.draw2d.geometry.Rectangle rect) {
g.fillRectangle(rect);
g.setClip(rect);
int imageAreaWidth = Math.min(rect.width, _imageWidth);
int imageAreaHeight = Math.min(rect.height, _imageHeight);
if (_image != null && !_image.isDisposed()) {
g.drawImage(_image, 0, 0, _imageWidth, _imageHeight, rect.x, rect.y
+ (rect.height - imageAreaHeight) / 2, imageAreaWidth,
imageAreaHeight);
}
if (_label != null && _labelVisible) {
int leading = 0;
if (_fontMetrics != null) {
leading = _fontMetrics.getLeading();
}
// TODO: adapt to bg: go lighter on colors that darker() would make black
// TODO: color registry
Color fg = FigureUtilities.darker(g.getBackgroundColor());
g.setForegroundColor(fg);
g.drawString(_label, imageAreaWidth + GAP, rect.y
+ (rect.height - getLabelHeight()) / 2 + leading);
fg.dispose();
}
}
/**
* @return the label text
*/
public String getLabel() {
return _label;
}
/**
* @param label
*/
public void setLabel(String label) {
this._label = label;
}
/**
* @return whether the label is visible
*/
public boolean isLabelVisible() {
return _labelVisible;
}
/**
* @param labelVisible
*/
public void setLabelVisible(boolean labelVisible) {
this._labelVisible = labelVisible;
}
}