View Javadoc
1   /*
2    * Copyright (c) 2003, The JUNG Authors
3    * All rights reserved.
4    * 
5    * This software is open-source under the BSD license; see either "license.txt"
6    * or https://github.com/jrtom/jung/blob/master/LICENSE for a description.
7    */
8   package edu.uci.ics.jung.visualization.renderers;
9   
10  import java.util.ConcurrentModificationException;
11  
12  import edu.uci.ics.jung.algorithms.layout.Layout;
13  import edu.uci.ics.jung.visualization.RenderContext;
14  
15  /**
16   * The default implementation of the Renderer used by the
17   * VisualizationViewer. Default Vertex and Edge Renderers
18   * are supplied, or the user may set custom values. The
19   * Vertex and Edge renderers are used in the renderVertex
20   * and renderEdge methods, which are called in the render
21   * loop of the VisualizationViewer.
22   * 
23   * @author Tom Nelson
24   */
25  public class BasicRenderer<V,E> implements Renderer<V, E> {
26  	
27      Renderer.Vertex<V,E> vertexRenderer = new BasicVertexRenderer<V,E>();
28      Renderer.VertexLabel<V,E> vertexLabelRenderer = new BasicVertexLabelRenderer<V,E>();
29      Renderer.Edge<V,E> edgeRenderer = new BasicEdgeRenderer<V,E>();
30      Renderer.EdgeLabel<V,E> edgeLabelRenderer = new BasicEdgeLabelRenderer<V,E>();
31      
32  	public void render(RenderContext<V, E> renderContext, Layout<V, E> layout) {
33  		
34  		// paint all the edges
35          try {
36          	for(E e : layout.getGraph().getEdges()) {
37  
38  		        renderEdge(
39  		                renderContext,
40  		                layout,
41  		                e);
42  		        renderEdgeLabel(
43  		                renderContext,
44  		                layout,
45  		                e);
46          	}
47          } catch(ConcurrentModificationException cme) {
48          	renderContext.getScreenDevice().repaint();
49          }
50  		
51  		// paint all the vertices
52          try {
53          	for(V v : layout.getGraph().getVertices()) {
54  
55  		    	renderVertex(
56  		                renderContext,
57                          layout,
58  		                v);
59  		    	renderVertexLabel(
60  		                renderContext,
61                          layout,
62  		                v);
63          	}
64          } catch(ConcurrentModificationException cme) {
65              renderContext.getScreenDevice().repaint();
66          }
67  	}
68  
69      public void renderVertex(RenderContext<V,E> rc, Layout<V,E> layout, V v) {
70          vertexRenderer.paintVertex(rc, layout, v);
71      }
72      
73      public void renderVertexLabel(RenderContext<V,E> rc, Layout<V,E> layout, V v) {
74          vertexLabelRenderer.labelVertex(rc, layout, v, rc.getVertexLabelTransformer().apply(v));
75      }
76      
77      public void renderEdge(RenderContext<V,E> rc, Layout<V,E> layout, E e) {
78      	edgeRenderer.paintEdge(rc, layout, e);
79      }
80      
81      public void renderEdgeLabel(RenderContext<V,E> rc, Layout<V,E> layout, E e) {
82      	edgeLabelRenderer.labelEdge(rc, layout, e, rc.getEdgeLabelTransformer().apply(e));
83      }
84      
85      public void setVertexRenderer(Renderer.Vertex<V,E> r) {
86      	this.vertexRenderer = r;
87      }
88  
89      public void setEdgeRenderer(Renderer.Edge<V,E> r) {
90      	this.edgeRenderer = r;
91      }
92  
93  	/**
94  	 * @return the edgeLabelRenderer
95  	 */
96  	public Renderer.EdgeLabel<V, E> getEdgeLabelRenderer() {
97  		return edgeLabelRenderer;
98  	}
99  
100 	/**
101 	 * @param edgeLabelRenderer the edgeLabelRenderer to set
102 	 */
103 	public void setEdgeLabelRenderer(Renderer.EdgeLabel<V, E> edgeLabelRenderer) {
104 		this.edgeLabelRenderer = edgeLabelRenderer;
105 	}
106 
107 	/**
108 	 * @return the vertexLabelRenderer
109 	 */
110 	public Renderer.VertexLabel<V, E> getVertexLabelRenderer() {
111 		return vertexLabelRenderer;
112 	}
113 
114 	/**
115 	 * @param vertexLabelRenderer the vertexLabelRenderer to set
116 	 */
117 	public void setVertexLabelRenderer(
118 			Renderer.VertexLabel<V, E> vertexLabelRenderer) {
119 		this.vertexLabelRenderer = vertexLabelRenderer;
120 	}
121 
122 	/**
123 	 * @return the edgeRenderer
124 	 */
125 	public Renderer.Edge<V, E> getEdgeRenderer() {
126 		return edgeRenderer;
127 	}
128 
129 	/**
130 	 * @return the vertexRenderer
131 	 */
132 	public Renderer.Vertex<V, E> getVertexRenderer() {
133 		return vertexRenderer;
134 	}
135 
136 
137 }