001 /**
002 *
003 */
004 package edu.wwu.tobikley.acgc.ui;
005
006 import java.awt.BorderLayout;
007 import java.awt.Color;
008 import java.awt.Dimension;
009
010 import javax.swing.JPanel;
011 import javax.swing.JFrame;
012
013 import edu.uci.ics.jung.graph.ArchetypeVertex;
014 import edu.uci.ics.jung.graph.Graph;
015 import edu.uci.ics.jung.graph.decorators.DefaultToolTipFunction;
016 import edu.uci.ics.jung.graph.decorators.EdgeShape;
017 import edu.uci.ics.jung.graph.decorators.VertexStringer;
018 import edu.uci.ics.jung.visualization.AbstractLayout;
019 //import edu.uci.ics.jung.visualization.DefaultSettableVertexLocationFunction;
020 import edu.uci.ics.jung.visualization.FRLayout;
021 import edu.uci.ics.jung.visualization.GraphZoomScrollPane;
022 import edu.uci.ics.jung.visualization.PluggableRenderer;
023 import edu.uci.ics.jung.visualization.ShapePickSupport;
024 import edu.uci.ics.jung.visualization.VisualizationViewer;
025
026 /**
027 * GraphViewer for GUI.
028 *
029 * @version 1.0
030 * @author Tobias Kley
031 */
032 public class GraphViewer extends JFrame {
033
034 private static final long serialVersionUID = 1L;
035
036 private JPanel jContentPane = null;
037
038 private Graph graph;
039 private AbstractLayout layout;
040 private VisualizationViewer vv;
041 //private DefaultSettableVertexLocationFunction vertexLocations; // @jve:decl-index=0:
042
043 /**
044 * This is the default constructor
045 */
046 public GraphViewer(Graph graph) {
047 super();
048 this.graph = graph;
049 initialize();
050 }
051
052 /**
053 * This method initializes this
054 *
055 * @return void
056 */
057 private void initialize() {
058 this.setSize(300, 200);
059 this.setContentPane(getJContentPane());
060 this.setTitle("Graph Viewer");
061 this.setExtendedState(MAXIMIZED_BOTH);
062 }
063
064 /**
065 * This method initializes jContentPane
066 *
067 * @return javax.swing.JPanel
068 */
069 private JPanel getJContentPane() {
070 if (jContentPane == null) {
071 jContentPane = new JPanel();
072 jContentPane.setLayout(new BorderLayout());
073
074 jContentPane.add(getGraphPane());
075 }
076 return jContentPane;
077 }
078
079 public GraphZoomScrollPane getGraphPane() {
080
081 // allows the precise setting of initial vertex locations
082 //vertexLocations = new DefaultSettableVertexLocationFunction();
083
084 PluggableRenderer pr = new PluggableRenderer();
085 this.layout = new FRLayout(graph);
086 layout.initialize(new Dimension(600,600));
087
088 vv = new VisualizationViewer(layout, pr);
089 vv.setBackground(Color.white);
090 vv.setPickSupport(new ShapePickSupport());
091 pr.setEdgeShapeFunction(new EdgeShape.QuadCurve());
092 pr.setVertexStringer(new VertexStringer() {
093
094 public String getLabel(ArchetypeVertex v) {
095 return v.toString();
096 }});
097
098 vv.setToolTipFunction(new DefaultToolTipFunction());
099
100 //Container content = getContentPane();
101 final GraphZoomScrollPane panel = new GraphZoomScrollPane(vv);
102
103 /* final EditingModalGraphMouse graphMouse = new EditingModalGraphMouse();
104
105 // the EditingGraphMouse will pass mouse event coordinates to the
106 // vertexLocations function to set the locations of the vertices as
107 // they are created
108 graphMouse.setVertexLocations(vertexLocations);
109 vv.setGraphMouse(graphMouse);
110 graphMouse.add(new EditingPopupGraphMousePlugin(vertexLocations));
111 graphMouse.setMode(ModalGraphMouse.Mode.EDITING);
112
113 final ScalingControl scaler = new CrossoverScalingControl();
114 JButton plus = new JButton("+");
115 plus.addActionListener(new ActionListener() {
116 public void actionPerformed(ActionEvent e) {
117 scaler.scale(vv, 1.1f, vv.getCenter());
118 }
119 });
120 JButton minus = new JButton("-");
121 minus.addActionListener(new ActionListener() {
122 public void actionPerformed(ActionEvent e) {
123 scaler.scale(vv, 1/1.1f, vv.getCenter());
124 }
125 });
126
127 JPanel controls = new JPanel();
128 controls.add(plus);
129 controls.add(minus);
130 JComboBox modeBox = graphMouse.getModeComboBox();
131 controls.add(modeBox);
132 content.add(controls, BorderLayout.SOUTH); */
133
134 return panel;
135 }
136
137 }