blob: 35c5f2ef3a535aac8bf9142c7454e2004638d42b [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2005 IBM Corporation 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.draw2d.examples.graph;
import java.lang.reflect.Method;
import org.eclipse.draw2d.ColorConstants;
import org.eclipse.draw2d.ConnectionAnchor;
import org.eclipse.draw2d.ConnectionLocator;
import org.eclipse.draw2d.Figure;
import org.eclipse.draw2d.Graphics;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.Label;
import org.eclipse.draw2d.Panel;
import org.eclipse.draw2d.PolygonDecoration;
import org.eclipse.draw2d.PolylineConnection;
import org.eclipse.draw2d.XYAnchor;
import org.eclipse.draw2d.XYLayout;
import org.eclipse.draw2d.geometry.Point;
import org.eclipse.draw2d.graph.DirectedGraph;
import org.eclipse.draw2d.graph.Edge;
import org.eclipse.draw2d.graph.Node;
/**
* @author hudsonr
* @since 2.1
*/
public class DirectedGraphDemo
extends AbstractGraphDemo
{
/**
* Builds the graph, creates Draw2d figures for all graph components.
* @param graph the graph to build
* @return the Figure representing the graph
*/
public static Figure buildGraph(DirectedGraph graph) {
Figure contents = new Panel();
// contents.setFont(new Font(null, "Tahoma", 10, 0));
contents.setBackgroundColor(ColorConstants.white);
contents.setLayoutManager(new XYLayout());
for (int i = 0; i < graph.nodes.size(); i++) {
Node node = graph.nodes.getNode(i);
buildNodeFigure(contents, node);
}
for (int i = 0; i < graph.edges.size(); i++) {
Edge edge = graph.edges.getEdge(i);
buildEdgeFigure(contents, edge);
}
// if (buildPrime)
// buildPrimeGraph(graph.gPrime, contents);
return contents;
}
///**
// * Builds the prime graph, creates Draw2d figures for all prime graph components.
// * @param graph the graph to build the prime graph on top of
// * @param panel the Figure containing the Draw2d graph representation
// */
//public static void buildPrimeGraph(DirectedGraph graph, Figure panel) {
// for (int i = 0; i < graph.edges.size(); i++) {
// Edge e = graph.edges.getEdge(i);
// PolylineConnection line = new PolylineConnection();
//
// if (e.tree) {
// PolygonDecoration dec = new PolygonDecoration();
// dec.setLineWidth(2);
//// if (e.head() == e.target)
//// line.setSourceDecoration(dec);
//// else
//// line.setTargetDecoration(dec);
//
// line.setLineWidth(3);
// Label l = new Label (e.cut + "," + e.getSlack());
// l.setOpaque(true);
// line.add(l, new ConnectionLocator(line));
// } else {
// line.setLineStyle(Graphics.LINE_DOT);
//// Label l = new Label ("("+e.getSlack()+")");
//// l.setOpaque(true);
//// line.add(l, new ConnectionLocator(line));
// }
// panel.add(line);
// Node n1;
// Node n2 = (Node)e.target.data;
// if (e.source.data instanceof NodePair) {
// NodePair pair = (NodePair)e.source.data;
// n1 = pair.n1;
// if (n1 == n2)
// n1 = pair.n2;
// } else {
// n1 = (Node)e.source.data;
// }
// ConnectionAnchor sa, ta;
// sa = new XYAnchor(new Point(n1.x, n1.y + 20));
// ta = new XYAnchor(new Point(n2.x, n2.y + 20));
// if (n1.rank == n2.rank) {
// if (n1.data instanceof Figure)
// sa = new TopOrBottomAnchor((Figure)n1.data);
// if (n2.data instanceof Figure)
// ta = new TopOrBottomAnchor((Figure)n2.data);
// } else {
// sa =
// new XYAnchor(
// new Point((n1.x + n2.x) / 2 - 15, (n1.y + n2.y) / 2 + 20));
// if (n2.data instanceof Figure)
// ta = new TopOrBottomAnchor((Figure)n2.data);
// }
// line.setSourceAnchor(sa);
// line.setTargetAnchor(ta);
// }
//}
/**
* Runs this demo
* @param args command line args
*/
public static void main(String[] args) {
new DirectedGraphDemo().run();
}
/**
* @see org.eclipse.graph.demo.GraphDemo#getGraphMethods()
*/
protected String[] getGraphMethods() {
Method[] methods = GraphTests.class.getMethods();
String[] methodNames = new String[methods.length];
int nameIndex = 0;
for (int i = 0; i < methods.length; i++) {
if (methods[i].getReturnType().equals(DirectedGraph.class)) {
methodNames[nameIndex] = methods[i].getName();
nameIndex++;
}
}
return methodNames;
}
/**
* @see org.eclipse.draw2d.examples.AbstractExample#getContents()
*/
protected IFigure getContents() {
DirectedGraph graph = null;
try {
graph =
(DirectedGraph) (GraphTests
.class
.getMethod(graphMethod, null)
.invoke(null, null));
} catch (Exception e) {
System.out.println("Could not build graph");
e.printStackTrace();
}
Figure contents = buildGraph(graph);
return contents;
}
}