blob: 56d6768bce76a76f3f3f5b62d1939083bc593e23 [file] [log] [blame]
/*******************************************************************************
* 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("");
}
/**
* 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);
}
}