/* * Below is the copyright agreement for the Ptolemy II system. * * Copyright (c) 2009 The Regents of the University of California. All rights * reserved. * * Permission is hereby granted, without written agreement and without license * or royalty fees, to use, copy, modify, and distribute this software and its * documentation for any purpose, provided that the above copyright notice and * the following two paragraphs appear in all copies of this software. * * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN * "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO PROVIDE * MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. */ package ptolemy.vergil.properties; import java.awt.Color; import ptolemy.actor.gui.Effigy; import ptolemy.actor.gui.PtolemyEffigy; import ptolemy.actor.gui.Tableau; import ptolemy.actor.gui.TableauFactory; import ptolemy.domains.properties.kernel.PropertyLatticeComposite; import ptolemy.kernel.CompositeEntity; import ptolemy.kernel.util.IllegalActionException; import ptolemy.kernel.util.InternalErrorException; import ptolemy.kernel.util.NameDuplicationException; import ptolemy.kernel.util.NamedObj; import ptolemy.moml.LibraryAttribute; /** * A tableau for lattice graphs. * * @author Man-Kit Leung * @version $Id$ * @since Ptolemy II 7.1 * @Pt.ProposedRating Red (mankit) * @Pt.AcceptedRating Red (mankit) */ public class LatticeGraphTableau extends Tableau { /** * Create a new PropertyLattice editor tableau with the specified container * and name, with no default library. * @param container The container. * @param name The name. * @exception IllegalActionException If the model associated with the * container effigy is not an PropertyLatticeComposite. * @exception NameDuplicationException If the container already contains an * object with the specified name. */ public LatticeGraphTableau(PtolemyEffigy container, String name) throws IllegalActionException, NameDuplicationException { this(container, name, null); } /** * Create a new PropertyLattice editor tableau with the specified container, * name, and default library. * @param container The container. * @param name The name. * @param defaultLibrary The default library, or null to not specify one. * @exception IllegalActionException If the model associated with the * container effigy is not an PropertyLatticeComposite. * @exception NameDuplicationException If the container already contains an * object with the specified name. */ public LatticeGraphTableau(PtolemyEffigy container, String name, LibraryAttribute defaultLibrary) throws IllegalActionException, NameDuplicationException { super(container, name); NamedObj model = container.getModel(); if (!(model instanceof PropertyLatticeComposite)) { throw new IllegalActionException(this, "Cannot edit a model that is not an PropertyLatticeComposite."); } createGraphFrame((CompositeEntity) model, defaultLibrary); } /////////////////////////////////////////////////////////////////// //// public methods //// /** * Create the graph frame that displays the model associated with this * tableau. This method creates a LatticeGraphFrame. If subclass uses * another frame, this method should be overridden to create that frame. * @param model The Ptolemy II model to display in the graph frame. */ public void createGraphFrame(CompositeEntity model) { createGraphFrame(model, null); } /** * Create the graph frame that displays the model associated with this * tableau together with the specified library. This method creates a * LatticeGraphFrame. If a subclass uses another frame, this method should * be overridden to create that frame. * @param model The Ptolemy II model to display in the graph frame. * @param defaultLibrary The default library, or null to not specify one. */ public void createGraphFrame(CompositeEntity model, LibraryAttribute defaultLibrary) { LatticeGraphFrame frame = new LatticeGraphFrame(model, this, defaultLibrary); try { setFrame(frame); } catch (IllegalActionException ex) { throw new InternalErrorException(ex); } frame.setBackground(BACKGROUND_COLOR); frame.pack(); frame.centerOnScreen(); frame.setVisible(true); } /////////////////////////////////////////////////////////////////// //// public fields //// /** * The default background color. To change the background color, use a * {@link ptolemy.actor.gui.PtolemyPreferences}. */ public static final Color BACKGROUND_COLOR = new Color(0xe5e5e5); /////////////////////////////////////////////////////////////////// //// public inner classes //// /** * A factory that creates graph editing tableaux for Ptolemy models. */ public static class Factory extends TableauFactory { /** * Create an factory with the given name and container. * @param container The container. * @param name The name of the entity. * @exception IllegalActionException If the container is incompatible * with this attribute. * @exception NameDuplicationException If the name coincides with an * attribute already in the container. */ public Factory(NamedObj container, String name) throws IllegalActionException, NameDuplicationException { super(container, name); } /** * Create an instance of LatticeGraphTableau for the specified effigy, * if it is an effigy for an instance of PropertyLatticeComposite. * @param effigy The effigy for an PropertyLatticeComposite. * @return A new LatticeGraphTableau, if the effigy is a PtolemyEffigy * that references an PropertyLatticeComposite, or null otherwise. * @exception Exception If an exception occurs when creating the * tableau. */ public Tableau createTableau(Effigy effigy) throws Exception { if (!(effigy instanceof PtolemyEffigy)) { return null; } Tableau tableau = (Tableau) effigy.getEntity("latticeTableau"); if (tableau != null) { return tableau; } NamedObj model = ((PtolemyEffigy) effigy).getModel(); if (model instanceof PropertyLatticeComposite) { // Check to see whether this factory contains a // default library. LibraryAttribute library = (LibraryAttribute) getAttribute( "_library", LibraryAttribute.class); tableau = new LatticeGraphTableau((PtolemyEffigy) effigy, "latticeTableau", library); return tableau; } else { return null; } } } }