package bayesGame.ui; import java.awt.Dimension; import java.awt.LayoutManager; import java.awt.Paint; import java.awt.Shape; import java.awt.geom.Ellipse2D; import java.awt.geom.RoundRectangle2D; import javax.swing.JPanel; import org.apache.commons.collections15.Transformer; import org.apache.commons.math3.util.Pair; import bayesGame.BayesGame; import bayesGame.bayesbayes.BayesNet; import bayesGame.bayesbayes.BayesNode; import bayesGame.ui.transformers.BayesNodeProbabilityToGridTransformer; import bayesGame.ui.verbs.Verb; import edu.uci.ics.jung.algorithms.layout.DAGLayout; import edu.uci.ics.jung.algorithms.layout.Layout; import edu.uci.ics.jung.graph.DirectedSparseGraph; import edu.uci.ics.jung.visualization.Layer; import edu.uci.ics.jung.visualization.VisualizationViewer; import edu.uci.ics.jung.visualization.control.CrossoverScalingControl; import edu.uci.ics.jung.visualization.control.PluggableGraphMouse; import edu.uci.ics.jung.visualization.control.ScalingControl; import edu.uci.ics.jung.visualization.decorators.ToStringLabeller; public class GraphPanel extends JPanel { private VisualizationViewer<BayesNode, Pair<Integer,Integer>> vv; public GraphPanel() { // TODO Auto-generated constructor stub } public GraphPanel(BayesNet net){ super(); this.displayBayesGraph(net); } public GraphPanel(LayoutManager arg0) { super(arg0); // TODO Auto-generated constructor stub } public GraphPanel(boolean arg0) { super(arg0); // TODO Auto-generated constructor stub } public GraphPanel(LayoutManager arg0, boolean arg1) { super(arg0, arg1); // TODO Auto-generated constructor stub } public void displayBayesGraph(BayesNet bayesNet){ DirectedSparseGraph<BayesNode, Pair<Integer,Integer>> graph = bayesNet.getGraph(); Layout<BayesNode, Pair<Integer,Integer>> layout = new DAGLayout<BayesNode, Pair<Integer, Integer>>(graph); layout.setSize(BayesGame.getVVLayoutSize()); vv = new VisualizationViewer<BayesNode, Pair<Integer,Integer>>(layout); Transformer<BayesNode,Paint> vertexPaint = new Transformer<BayesNode,Paint>() { public Paint transform(BayesNode i) { Boolean assumed = i.assumedValue(); if (i.isObserved()){ if (i.getProbability().doubleValue() == 1.0d){ return BayesGame.trueColor; } else { return BayesGame.falseColor; } } if (assumed == null){ return BayesGame.unknownColor; } else { if (assumed){ return BayesGame.trueColor; } else { return BayesGame.falseColor; } } } }; Transformer<BayesNode,Shape> vertexShape = new Transformer<BayesNode,Shape>(){ public Shape transform(BayesNode b){ if (!b.isObserved()){ return new Ellipse2D.Double(-16, -16, 32, 32); } else { return new RoundRectangle2D.Double(-16, -16, 32, 32, 16, 16); } } }; vv.getRenderContext().setVertexFillPaintTransformer(vertexPaint); vv.getRenderContext().setVertexShapeTransformer(vertexShape); vv.getRenderContext().setVertexIconTransformer(new BayesNodeProbabilityToGridTransformer(bayesNet)); vv.getRenderContext().setVertexLabelTransformer(new ToStringLabeller()); vv.setPreferredSize(new Dimension(BayesGame.getNewHeight(750),BayesGame.getNewWidth(750))); //Sets the viewing area size vv.getRenderContext().getMultiLayerTransformer().getTransformer(Layer.LAYOUT).rotate(-Math.PI, BayesGame.getNewHeight(350),BayesGame.getNewWidth(350)); this.add(vv); this.setVisible(true); } public void updateGraph(){ vv.repaint(); } public void addVerb(Verb verb){ addGraphMouse(verb.getPGM()); } private void addGraphMouse(PluggableGraphMouse gm){ vv.addMouseListener(gm); } }