/******************************************************************************* * 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; } }