/******************************************************************************* * Copyright (c) 2007 Exadel, Inc. and Red Hat, Inc. * Distributed under license by Red Hat, Inc. All rights reserved. * This program is 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: * Exadel, Inc. and Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.jboss.tools.seam.ui.pages.editor.figures; import org.eclipse.draw2d.ColorConstants; import org.eclipse.draw2d.Graphics; import org.eclipse.draw2d.IFigure; import org.eclipse.draw2d.LineBorder; import org.eclipse.draw2d.MouseEvent; import org.eclipse.draw2d.XYLayout; import org.eclipse.draw2d.geometry.Dimension; import org.eclipse.draw2d.geometry.Insets; import org.eclipse.draw2d.geometry.Rectangle; import org.eclipse.gef.handles.HandleBounds; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Image; import org.jboss.tools.common.gef.GEFGraphicalViewer; import org.jboss.tools.seam.pages.xml.model.SeamPagesPreference; import org.jboss.tools.seam.ui.pages.editor.PagesEditor; import org.jboss.tools.seam.ui.pages.editor.ecore.pages.PageException; import org.jboss.tools.seam.ui.pages.editor.edit.ExceptionEditPart; import org.jboss.tools.seam.ui.pages.editor.figures.xpl.CompressNameUtil; import org.jboss.tools.seam.ui.pages.editor.figures.xpl.FixedConnectionAnchor; public class ExceptionFigure extends NodeFigure implements HandleBounds { private static final Dimension SIZE = new Dimension(56, 100); private static final Color exceptionBackgroundColor = new Color(null, 0xea, 0xf3, 0xff); private static final Color exceptionForegroundColor = new Color(null, 0x41, 0x77, 0xa0); private static final Color borderColor = new Color(null, 0x67, 0x7f, 0x91); private static final Color greyForeground = new Color(null, 0x99, 0x95, 0x99); private static final Image exceptionImage = ImageDescriptor.createFromFile( PagesEditor.class, "icons/ico_exception.png").createImage(); public PageException exc; ExceptionEditPart editPart; public void setEditPart(ExceptionEditPart part) { editPart = part; } public void setConstraint(IFigure child, Object constraint) { super.setConstraint(child, constraint); } public void setIcon(Image i) { } public ExceptionFigure(PageException group) { this.exc = group; setOpaque(false); setLayoutManager(new XYLayout()); setBorder(new GroupBorder(ColorConstants.black)); if (group != null) { FixedConnectionAnchor c; c = new FixedConnectionAnchor(this); c.offsetV = 10; c.offsetH = -1; c.leftToRight = false; connectionAnchors.put("1_OUT", c); outputConnectionAnchors.addElement(c); } } /** * @see org.eclipse.gef.handles.HandleBounds#getHandleBounds() */ public Rectangle getHandleBounds() { return getBounds().getCropped(new Insets(0, 0, 0, 0)); } /** * @see org.eclipse.draw2d.Figure#getPreferredSize(int, int) */ public Dimension getPreferredSize(int wHint, int hHint) { return SIZE; } int width, height; /** * @see org.eclipse.draw2d.Figure#paintFigure(Graphics) */ protected void paintFigure(Graphics g) { Rectangle r = getBounds().getCopy(); g.translate(r.getLocation()); if (exc != null) { g.setBackgroundColor(exceptionBackgroundColor); g.setForegroundColor(exceptionForegroundColor); } else { g.setBackgroundColor(lightGrayColor); } Rectangle boundingRect = new Rectangle(1, 1, r.width, r.height); g.fillRectangle(boundingRect); g.drawImage(exceptionImage, 1, 1); if(exc != null){ g.setFont(nodeLabelFont); g.drawString(getExceptionReadOnlyLabel(), 27, 3); } } /** This returns the label to use when rendering the Exception in a readonly view. * Converts org.model.Exception to o.m.Exception to save visual space **/ String getExceptionReadOnlyLabel() { if(exc==null || exc.getName() == null) { return "Unknown Exception"; } else { return CompressNameUtil.getCompressedName(exc.getName()); } } class GroupBorder extends LineBorder { public GroupBorder(Color color) { super(color); } public void paint(IFigure figure, Graphics graphics, Insets insets) { Rectangle r = getPaintRectangle(figure, insets).getCopy(); graphics.translate(r.getLocation()); int width = r.width - 1; int height = r.height - 1; if (exc != null) graphics.setForegroundColor(borderColor); else graphics.setForegroundColor(greyForeground); graphics.drawLine(1, 0, width-1, 0); graphics.drawLine(0, 1, 0, height - 1); graphics.drawLine(1, height, width-1, height); graphics.drawLine(width, 1, width, height - 1); } public void mouseDoubleClicked(MouseEvent me) { } public void mousePressed(MouseEvent me) { if (me.button == 3) { ((GEFGraphicalViewer) editPart.getViewer()).setNoDeselect(); editPart.getViewer().select(editPart); } } } }