/******************************************************************************* * Copyright (c) 2004, 2005 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.jsf.facesconfig.ui.pageflow.figure; import org.eclipse.draw2d.Label; import org.eclipse.draw2d.MarginBorder; import org.eclipse.draw2d.MidpointLocator; import org.eclipse.draw2d.PolygonDecoration; import org.eclipse.draw2d.PolylineConnection; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.preference.PreferenceConverter; import org.eclipse.jface.resource.FontRegistry; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.resource.JFaceResources; import org.eclipse.jst.jsf.facesconfig.ui.EditorPlugin; import org.eclipse.jst.jsf.facesconfig.ui.pageflow.editpart.PageflowElementEditPart; import org.eclipse.jst.jsf.facesconfig.ui.preference.GEMPreferences; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.FontData; import org.eclipse.swt.graphics.Image; /** * * The figure for pflink, used by pflink edit part, which is a polyline with a * label control on it, and with tooltip support. * * @author Xiao-guang Zhang */ public class PFLinkFigure extends PolylineConnection { /** the label attached to the connection */ private ConnectionLabel textLabel = null; //private ConnectionLabel iconLabel = null; /** The label's background color */ private Color labelBgColor; /** The label's foreground color */ private Color labelFgColor; /** The label's visiblity */ private boolean bLabelVisible = false; /** The connection's line width */ private int lineWidth = 0; /** the polygon decoration for connection line */ private PolygonDecoration arrow; /** * */ public PFLinkFigure() { arrow = new PolygonDecoration(); arrow.setTemplate(PolygonDecoration.TRIANGLE_TIP); arrow.setScale(10, getLineWidth() * 2); setTargetDecoration(arrow); setForegroundColor(getForegroundColor()); } /** * set the connection's label string * * @param strLabel */ public void setLabel(String strLabel) { if (null != strLabel) { if (textLabel == null) { textLabel = new ConnectionLabel(); textLabel.setFont(getLabelFont()); textLabel.setBackgroundColor(getLabelBackgroundColor()); textLabel.setForegroundColor(getLabelForegroundColor()); setLineWidth(getLineWidth()); setLabelVisible(getLabelVisible()); setForegroundColor(getForegroundColor()); add(textLabel, new MidpointLocator(this, 1)); } // textLabel.setVisible(true); textLabel.setText(strLabel); } } /** * Set the icon image to null */ public void clearIcon() { setImage(null); } /** * Set the label to empty string */ public void clearOutcome() { setLabel(""); //$NON-NLS-1$ } /** * set the connection's label string * * @param image */ public void setImage(Image image) { if (textLabel == null) { textLabel = new ConnectionLabel(); textLabel.setFont(getLabelFont()); textLabel.setBackgroundColor(getLabelBackgroundColor()); textLabel.setForegroundColor(getLabelForegroundColor()); setLineWidth(getLineWidth()); setLabelVisible(getLabelVisible()); setForegroundColor(getForegroundColor()); add(textLabel, new MidpointLocator(this, 0)); } textLabel.setIcon(image); } /** * Set the action image */ public void setActionImage() { ImageDescriptor imageDescriptor = PageflowElementEditPart.IMG_ACTION; Image image = EditorPlugin.getDefault().getImageRegistry().get( imageDescriptor.toString()); if (null == image) { EditorPlugin.getDefault().getImageRegistry().put( imageDescriptor.toString(), imageDescriptor); image = EditorPlugin.getDefault().getImageRegistry().get( imageDescriptor.toString()); } setImage(image); } /** * @return the icon image */ public Image getImage() { if (textLabel != null) { return textLabel.getIcon(); } return null; } /** * @param text */ public void setToolTipText(String text) { Label toolTipLabel = null; if (text != null && text.length() > 0) { toolTipLabel = new Label(text); toolTipLabel.setBorder(new MarginBorder(3)); } super.setToolTip(toolTipLabel); } /** * @return the tool tip text or null if none */ public String getToolTipText() { if (getToolTip() != null) { return ((Label) getToolTip()).getText(); } return null; } /** * set the font including label's * */ public void setFont(Font f) { if (textLabel != null) textLabel.setFont(f); super.setFont(f); } /** * get the label's font from preference * */ private Font getLabelFont() { FontRegistry registry = JFaceResources.getFontRegistry(); IPreferenceStore store = EditorPlugin.getDefault().getPreferenceStore(); FontData fontData = PreferenceConverter.getFontData(store, GEMPreferences.LINE_LABEL_FONT); if (!registry.get(fontData.toString()).equals(registry.defaultFont())) return registry.get(fontData.toString()); registry.put(fontData.toString(), new FontData[] {fontData}); return registry.get(fontData.toString()); } /* * (non-Javadoc) * * @see org.eclipse.draw2d.Shape#setLineWidth(int) */ public void setLineWidth(int w) { if (textLabel != null) textLabel.setBorderWidth(w); arrow.setScale(10, getLineWidth() * 2); super.setLineWidth(w); } /** * get the connection line width from preference. */ public int getLineWidth() { IPreferenceStore store = EditorPlugin.getDefault().getPreferenceStore(); lineWidth = store.getInt(GEMPreferences.LINE_WIDTH); return lineWidth; } /** * set label's visibility * * @param flag - * visible or not. */ public void setLabelVisible(boolean flag) { if (textLabel != null) textLabel.setVisible(flag); } /** * get the label's visiblity from preference * */ private boolean getLabelVisible() { IPreferenceStore store = EditorPlugin.getDefault().getPreferenceStore(); bLabelVisible = store.getBoolean(GEMPreferences.SHOW_LINE_LABELS); return bLabelVisible; } /** * set the label's foreground color * * @param c */ public void setLabelForegroundColor(Color c) { labelFgColor = c; if (textLabel != null) textLabel.setForegroundColor(c); } /** * get the label's foreground color from preference * */ private Color getLabelForegroundColor() { if (labelFgColor == null) { IPreferenceStore store = EditorPlugin.getDefault() .getPreferenceStore(); labelFgColor = GEMPreferences.getColor(store, GEMPreferences.LINE_LABEL_FONT_COLOR); } return labelFgColor; } /** * set the label's background color * * @param c */ public void setLabelBackgroundColor(Color c) { labelBgColor = c; if (textLabel != null) textLabel.setBackgroundColor(c); } /** * get the label's background color from preference * */ private Color getLabelBackgroundColor() { if (labelBgColor == null) { IPreferenceStore store = EditorPlugin.getDefault() .getPreferenceStore(); labelBgColor = GEMPreferences.getColor(store, GEMPreferences.LINE_LABEL_COLOR); } return labelBgColor; } /** * get the foreground color from preference * */ public Color getForegroundColor() { IPreferenceStore store = EditorPlugin.getDefault().getPreferenceStore(); final Color newFgColor = GEMPreferences.getColor(store, GEMPreferences.LINE_COLOR); setForegroundColor(newFgColor); return newFgColor; } /** * set the figure's foreground, which will also update the label's border's * color. */ public void setForegroundColor(Color c) { if (textLabel != null) textLabel.setBorderColor(c); super.setForegroundColor(c); } }