/* * Copyright (c) 2003, the JUNG Project and the Regents of the University of * California All rights reserved. * * This software is open-source under the BSD license; see either "license.txt" * or http://jung.sourceforge.net/license.txt for a description. */ package edu.uci.ics.jung.visualization.renderers; import java.util.ConcurrentModificationException; import edu.uci.ics.jung.algorithms.layout.Layout; import edu.uci.ics.jung.visualization.RenderContext; /** * The default implementation of the Renderer used by the * VisualizationViewer. Default Vertex and Edge Renderers * are supplied, or the user may set custom values. The * Vertex and Edge renderers are used in the renderVertex * and renderEdge methods, which are called in the render * loop of the VisualizationViewer. * * @author Tom Nelson */ public class BasicRenderer<V,E> implements Renderer<V, E> { Renderer.Vertex<V,E> vertexRenderer = new BasicVertexRenderer<V,E>(); Renderer.VertexLabel<V,E> vertexLabelRenderer = new BasicVertexLabelRenderer<V,E>(); Renderer.Edge<V,E> edgeRenderer = new BasicEdgeRenderer<V,E>(); Renderer.EdgeLabel<V,E> edgeLabelRenderer = new BasicEdgeLabelRenderer<V,E>(); public void render(RenderContext<V, E> renderContext, Layout<V, E> layout) { // paint all the edges try { for(E e : layout.getGraph().getEdges()) { renderEdge( renderContext, layout, e); renderEdgeLabel( renderContext, layout, e); } } catch(ConcurrentModificationException cme) { renderContext.getScreenDevice().repaint(); } // paint all the vertices try { for(V v : layout.getGraph().getVertices()) { renderVertex( renderContext, layout, v); renderVertexLabel( renderContext, layout, v); } } catch(ConcurrentModificationException cme) { renderContext.getScreenDevice().repaint(); } } public void renderVertex(RenderContext<V,E> rc, Layout<V,E> layout, V v) { vertexRenderer.paintVertex(rc, layout, v); } public void renderVertexLabel(RenderContext<V,E> rc, Layout<V,E> layout, V v) { vertexLabelRenderer.labelVertex(rc, layout, v, rc.getVertexLabelTransformer().transform(v)); } public void renderEdge(RenderContext<V,E> rc, Layout<V,E> layout, E e) { edgeRenderer.paintEdge(rc, layout, e); } public void renderEdgeLabel(RenderContext<V,E> rc, Layout<V,E> layout, E e) { edgeLabelRenderer.labelEdge(rc, layout, e, rc.getEdgeLabelTransformer().transform(e)); } public void setVertexRenderer(Renderer.Vertex<V,E> r) { this.vertexRenderer = r; } public void setEdgeRenderer(Renderer.Edge<V,E> r) { this.edgeRenderer = r; } /** * @return the edgeLabelRenderer */ public Renderer.EdgeLabel<V, E> getEdgeLabelRenderer() { return edgeLabelRenderer; } /** * @param edgeLabelRenderer the edgeLabelRenderer to set */ public void setEdgeLabelRenderer(Renderer.EdgeLabel<V, E> edgeLabelRenderer) { this.edgeLabelRenderer = edgeLabelRenderer; } /** * @return the vertexLabelRenderer */ public Renderer.VertexLabel<V, E> getVertexLabelRenderer() { return vertexLabelRenderer; } /** * @param vertexLabelRenderer the vertexLabelRenderer to set */ public void setVertexLabelRenderer( Renderer.VertexLabel<V, E> vertexLabelRenderer) { this.vertexLabelRenderer = vertexLabelRenderer; } /** * @return the edgeRenderer */ public Renderer.Edge<V, E> getEdgeRenderer() { return edgeRenderer; } /** * @return the vertexRenderer */ public Renderer.Vertex<V, E> getVertexRenderer() { return vertexRenderer; } }