/* * 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.awt.Dimension; import edu.uci.ics.jung.algorithms.layout.Layout; import edu.uci.ics.jung.visualization.RenderContext; /** * The interface for drawing vertices, edges, and their labels. * Implementations of this class can set specific renderers for * each element, allowing custom control of each. */ public interface Renderer<V,E> { void render(RenderContext<V,E> rc, Layout<V,E> layout); void renderVertex(RenderContext<V,E> rc, Layout<V,E> layout, V v); void renderVertexLabel(RenderContext<V,E> rc, Layout<V,E> layout, V v); void renderEdge(RenderContext<V,E> rc, Layout<V,E> layout, E e); void renderEdgeLabel(RenderContext<V,E> rc, Layout<V,E> layout, E e); void setVertexRenderer(Renderer.Vertex<V,E> r); void setEdgeRenderer(Renderer.Edge<V,E> r); void setVertexLabelRenderer(Renderer.VertexLabel<V,E> r); void setEdgeLabelRenderer(Renderer.EdgeLabel<V,E> r); Renderer.VertexLabel<V,E> getVertexLabelRenderer(); Renderer.Vertex<V,E> getVertexRenderer(); Renderer.Edge<V,E> getEdgeRenderer(); Renderer.EdgeLabel<V,E> getEdgeLabelRenderer(); interface Vertex<V,E> { void paintVertex(RenderContext<V,E> rc, Layout<V,E> layout, V v); class NOOP implements Vertex { public void paintVertex(RenderContext rc, Layout layout, Object v) {} }; } interface Edge<V,E> { void paintEdge(RenderContext<V,E> rc, Layout<V,E> layout, E e); EdgeArrowRenderingSupport getEdgeArrowRenderingSupport(); void setEdgeArrowRenderingSupport(EdgeArrowRenderingSupport edgeArrowRenderingSupport); class NOOP implements Edge { public void paintEdge(RenderContext rc, Layout layout, Object e) {} public EdgeArrowRenderingSupport getEdgeArrowRenderingSupport(){return null;} public void setEdgeArrowRenderingSupport(EdgeArrowRenderingSupport edgeArrowRenderingSupport){} } } interface VertexLabel<V,E> { void labelVertex(RenderContext<V,E> rc, Layout<V,E> layout, V v, String label); Position getPosition(); void setPosition(Position position); void setPositioner(Positioner positioner); Positioner getPositioner(); class NOOP implements VertexLabel { public void labelVertex(RenderContext rc, Layout layout, Object v, String label) {} public Position getPosition() { return Position.CNTR; } public void setPosition(Position position) {} public Positioner getPositioner() { return new Positioner() { public Position getPosition(float x, float y, Dimension d) { return Position.CNTR; }}; } public void setPositioner(Positioner positioner) { } } enum Position { N, NE, E, SE, S, SW, W, NW, CNTR, AUTO } interface Positioner { Position getPosition(float x, float y, Dimension d); } } interface EdgeLabel<V,E> { void labelEdge(RenderContext<V,E> rc, Layout<V,E> layout, E e, String label); class NOOP implements EdgeLabel { public void labelEdge(RenderContext rc, Layout layout, Object e, String label) {} } } }