/* * $Id$ * * Copyright (c) 1998-2005 The Regents of the University of California. * All rights reserved. See the file COPYRIGHT for details. */ package ptolemy.apps.vergil.graph; import ptolemy.actor.*; import ptolemy.apps.vergil.graph.util.FigureToken; import ptolemy.kernel.*; import ptolemy.kernel.util.*; import diva.canvas.CompositeFigure; import diva.canvas.Figure; import diva.canvas.toolbox.BasicFigure; import diva.canvas.toolbox.BasicRectangle; import diva.graph.GraphController; import diva.graph.GraphModel; import diva.graph.NodeController; import diva.graph.NodeRenderer; import java.awt.Color; import java.awt.Paint; import java.awt.Shape; import java.awt.geom.GeneralPath; import java.awt.geom.Rectangle2D; import java.awt.geom.RectangularShape; /** A factory which creates and returns a NodeFigure given a node input to render. @author Steve Neuendorffer */ public class MetaNodeRenderer extends TypedCompositeActor implements NodeRenderer { /** * Create a renderer which renders nodes square and orange. */ public MetaNodeRenderer(CompositeEntity container, String name) throws IllegalActionException, NameDuplicationException { super(container, name); output = new TypedIOPort(this, "output", false, true); output.setTypeEquals(FigureToken.TYPE); } public TypedIOPort output; /** Clone the actor into the specified workspace. This calls the * base class and then sets the <code>init</code> and <code>step</code> * public members to the parameters of the new actor. * @param workspace The workspace for the new object. * @return A new actor. * @exception CloneNotSupportedException If a derived class contains * an attribute that cannot be cloned. */ public Object clone(Workspace workspace) throws CloneNotSupportedException { MetaNodeRenderer newObject = (MetaNodeRenderer) super.clone(workspace); newObject.output = (TypedIOPort) newObject.getPort("output"); return newObject; } /** * Return the graph controller. */ public GraphController getGraphController() { return ((NodeController) getContainer()).getController(); } /** * Return the rendered visual representation of this node. */ public Figure render(Object node) { try { prefire(); fire(); postfire(); Receiver[][] receivers = output.getInsideReceivers(); FigureToken token = (FigureToken) receivers[0][0].get(); System.out.println("Figure = " + token.getFigure()); return token.getFigure(); } catch (Exception ex) { ex.printStackTrace(); return new BasicRectangle(0, 0, 10, 10); } } }