Sophie

Sophie

distrib > Mageia > 4 > x86_64 > by-pkgid > ab8063616cf26bd47b44d21b622ccd29 > files > 69

jgraph-5.12.2.1-3.mga4.noarch.rpm

package com.jgraph.example.panelexample;
/*
 * Copyright (c) 2005, Gaudenz Alder
 * Copyright (c) 2005, David Benson
 * 
 */

import java.awt.Color;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
import java.net.URL;
import java.util.Hashtable;
import java.util.Map;
import java.util.Random;

import javax.swing.ImageIcon;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;

import org.jgraph.JGraph;
import org.jgraph.example.GraphEd;
import org.jgraph.graph.DefaultCellViewFactory;
import org.jgraph.graph.DefaultGraphCell;
import org.jgraph.graph.DefaultPort;
import org.jgraph.graph.EdgeView;
import org.jgraph.graph.GraphConstants;
import org.jgraph.graph.PortView;
import org.jgraph.graph.VertexView;


public class PortLabelGraph extends GraphEd {


	/**
	 * Reference to the layout dialog which is used to configure the current
	 * layout.
	 */
	protected JDialog sampleDialog = null;

	/**
	 * Constructs a new example
	 */
	public PortLabelGraph() {
		graph.getGraphLayoutCache().setFactory(new DefaultCellViewFactory() {
			/**
			 * Constructs an EdgeView view for the specified object.
			 */
			protected EdgeView createEdgeView(Object cell) {
				return new EdgeView(cell);
			}

			/**
			 * Constructs a PortView view for the specified object.
			 */
			protected PortView createPortView(Object cell) {
				return new PortView(cell);
			}

			/**
			 * Constructs a VertexView view for the specified object.
			 */
			protected VertexView createVertexView(Object cell) {
				if (cell instanceof PortLabelCell) {
					return new PortLabelVertexView(cell);
				} else {
					return new VertexView(cell);
				}
			}
		});
	}

	/**
	 * Hook from GraphEd to set attributes of a new cell
	 */
	public Map createCellAttributes(Point2D point) {
		Map map = new Hashtable();
		// Add a Border Color Attribute to the Map
		GraphConstants.setBorderColor(map, Color.black);
		// Add a White Background
		GraphConstants.setBackground(map, Color.white);
		// Set autosize
		//GraphConstants.setAutoSize(map, true);
		// Move the label of the vertex to the bottom
		GraphConstants.setVerticalAlignment(map, JLabel.BOTTOM);
		return map;
	}

	/**
	 * Create vertex with random numbers of ports that have labels
	 */
	protected DefaultGraphCell createDefaultGraphCell() {
		DefaultGraphCell cell = new PortLabelCell("Cell "
				+ new Integer(cellCount++));
		// Add a random number of ports on either side of the vertex
		Random random = new Random();
		int numLeftSidePorts = random.nextInt(4);//0 to 3 ports are supported in our example
		int numRightSidePorts = random.nextInt(4);
		
		int height = Math.max(numLeftSidePorts, numRightSidePorts);
		for (int i=1; i <= height ;i++) {
			if (i <= numLeftSidePorts) {
				DefaultPort port;
				if (i % 2 == 0) {
					port = new DefaultPort("Test Label");
				} else {
					port = new DefaultPort("A Somewhat Longer Test Label");					
				}
				double pos = roundPortPos(random.nextInt(3));		
				Point2D point = new Point2D.Double(0,
						(GraphConstants.PERMILLE * pos));
				GraphConstants.setOffset(port.getAttributes(), point);
				cell.add(port);
			}
			if (i <= numRightSidePorts) {
				DefaultPort port;
				if (i % 2 == 0) {
					port = new DefaultPort("A Somewhat Longer Test Label");
				} else {
					port = new DefaultPort("Test Label");
				}
				double pos = roundPortPos(random.nextInt(3));		
				Point2D point = new Point2D.Double(GraphConstants.PERMILLE,
						(GraphConstants.PERMILLE * pos));
				GraphConstants.setOffset(port.getAttributes(), point);
				cell.add(port);
			}
		}
		
		height *= 40 + 100;
		Map map = cell.getAttributes();
		// Add a Bounds Attribute to the Map
		GraphConstants.setBounds(map, new Rectangle2D.Double(20,
				20, 200, height));
		return cell;
	}
	
	public static double roundPortPos(double pos) {
		if (pos == 0)
			pos = 0.1;
		else if (pos == 1)
			pos = 0.5;
		else
			pos = 0.9;
		return pos;
	}

	/**
	 * Main method
	 */
	public static void main(String[] args) {
		try {
			// Construct Frame
			JFrame frame = new JFrame(JGraph.VERSION);
			// Set Close Operation to Exit
			frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
			// Add an Editor Panel
			PortLabelGraph portLabelGraph = new PortLabelGraph();
			frame.getContentPane().add(portLabelGraph);
			// Fetch URL to Icon Resource
			URL jgraphUrl = PortLabelGraph.class.getClassLoader().getResource(
					"org/jgraph/example/resources/jgraph.gif");
			// If Valid URL
			if (jgraphUrl != null) {
				// Load Icon
				ImageIcon jgraphIcon = new ImageIcon(jgraphUrl);
				// Use in Window
				frame.setIconImage(jgraphIcon.getImage());
			}
			// Set Default Size
			frame.setSize(640, 480);
			// Show Frame
			frame.setVisible(true);
			portLabelGraph.init();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}