View Javadoc
1   /*
2    * Copyright (c) 2003, the JUNG Project and the Regents of the University of
3    * California All rights reserved.
4    * 
5    * This software is open-source under the BSD license; see either "license.txt"
6    * or http://jung.sourceforge.net/license.txt for a description.
7    */
8   package edu.uci.ics.jung.visualization;
9   
10  import java.awt.BasicStroke;
11  import java.awt.Color;
12  import java.awt.Font;
13  import java.awt.Paint;
14  import java.awt.Shape;
15  import java.awt.Stroke;
16  import java.awt.geom.Ellipse2D;
17  
18  import javax.swing.CellRendererPane;
19  import javax.swing.Icon;
20  import javax.swing.JComponent;
21  
22  import org.apache.commons.collections15.Predicate;
23  import org.apache.commons.collections15.Transformer;
24  import org.apache.commons.collections15.functors.ConstantTransformer;
25  import org.apache.commons.collections15.functors.TruePredicate;
26  
27  import edu.uci.ics.jung.algorithms.layout.GraphElementAccessor;
28  import edu.uci.ics.jung.graph.Graph;
29  import edu.uci.ics.jung.graph.util.Context;
30  import edu.uci.ics.jung.graph.util.DefaultParallelEdgeIndexFunction;
31  import edu.uci.ics.jung.graph.util.EdgeIndexFunction;
32  import edu.uci.ics.jung.graph.util.IncidentEdgeIndexFunction;
33  import edu.uci.ics.jung.visualization.decorators.ConstantDirectionalEdgeValueTransformer;
34  import edu.uci.ics.jung.visualization.decorators.DirectionalEdgeArrowTransformer;
35  import edu.uci.ics.jung.visualization.decorators.EdgeShape;
36  import edu.uci.ics.jung.visualization.picking.PickedState;
37  import edu.uci.ics.jung.visualization.renderers.DefaultEdgeLabelRenderer;
38  import edu.uci.ics.jung.visualization.renderers.DefaultVertexLabelRenderer;
39  import edu.uci.ics.jung.visualization.renderers.EdgeLabelRenderer;
40  import edu.uci.ics.jung.visualization.renderers.VertexLabelRenderer;
41  import edu.uci.ics.jung.visualization.transform.shape.GraphicsDecorator;
42  
43  
44  /**
45   */
46  @SuppressWarnings("unchecked")
47  public class PluggableRenderContext<V, E> implements RenderContext<V, E> {
48      
49  	protected float arrowPlacementTolerance = 1;
50      protected Predicate<Context<Graph<V,E>,V>> vertexIncludePredicate = TruePredicate.getInstance();
51      protected Transformer<V,Stroke> vertexStrokeTransformer = 
52      	new ConstantTransformer(new BasicStroke(1.0f));
53      
54      protected Transformer<V,Shape> vertexShapeTransformer = 
55          		new ConstantTransformer(
56          		new Ellipse2D.Float(-10,-10,20,20));
57  
58      protected Transformer<V,String> vertexLabelTransformer = new ConstantTransformer(null);
59      protected Transformer<V,Icon> vertexIconTransformer;
60      protected Transformer<V,Font> vertexFontTransformer = 
61          new ConstantTransformer(new Font("Helvetica", Font.PLAIN, 12));
62      
63      protected Transformer<V,Paint> vertexDrawPaintTransformer = new ConstantTransformer(Color.BLACK);
64      protected Transformer<V,Paint> vertexFillPaintTransformer = new ConstantTransformer(Color.RED);
65      
66      protected Transformer<E,String> edgeLabelTransformer = new ConstantTransformer(null);
67      protected Transformer<E,Stroke> edgeStrokeTransformer = new ConstantTransformer(new BasicStroke(1.0f));
68      protected Transformer<E,Stroke> edgeArrowStrokeTransformer = new ConstantTransformer(new BasicStroke(1.0f));
69      
70      protected Transformer<Context<Graph<V,E>,E>,Shape> edgeArrowTransformer = 
71          new DirectionalEdgeArrowTransformer<V,E>(10, 8, 4);
72      
73      protected Predicate<Context<Graph<V,E>,E>> edgeArrowPredicate = new DirectedEdgeArrowPredicate<V,E>();
74      protected Predicate<Context<Graph<V,E>,E>> edgeIncludePredicate = TruePredicate.getInstance();
75      protected Transformer<E,Font> edgeFontTransformer =
76          new ConstantTransformer(new Font("Helvetica", Font.PLAIN, 12));
77      protected Transformer<Context<Graph<V,E>,E>,Number> edgeLabelClosenessTransformer = 
78          new ConstantDirectionalEdgeValueTransformer<V,E>(0.5, 0.65);
79      protected Transformer<Context<Graph<V,E>,E>,Shape> edgeShapeTransformer = 
80          new EdgeShape.QuadCurve<V,E>();
81      protected Transformer<E,Paint> edgeFillPaintTransformer =
82          new ConstantTransformer(null);
83      protected Transformer<E,Paint> edgeDrawPaintTransformer =
84          new ConstantTransformer(Color.black);
85      protected Transformer<E,Paint> arrowFillPaintTransformer =
86          new ConstantTransformer(Color.black);
87      protected Transformer<E,Paint> arrowDrawPaintTransformer =
88          new ConstantTransformer(Color.black);
89      
90      protected EdgeIndexFunction<V,E> parallelEdgeIndexFunction = 
91          DefaultParallelEdgeIndexFunction.<V,E>getInstance();
92      
93      protected EdgeIndexFunction<V,E> incidentEdgeIndexFunction = 
94          IncidentEdgeIndexFunction.<V,E>getInstance();
95      
96      protected MultiLayerTransformer multiLayerTransformer = new BasicTransformer();
97      
98  	/**
99  	 * pluggable support for picking graph elements by
100 	 * finding them based on their coordinates.
101 	 */
102 	protected GraphElementAccessor<V, E> pickSupport;
103 
104     
105     protected int labelOffset = LABEL_OFFSET;
106     
107     /**
108      * the JComponent that this Renderer will display the graph on
109      */
110     protected JComponent screenDevice;
111     
112     protected PickedState<V> pickedVertexState;
113     protected PickedState<E> pickedEdgeState;
114     
115     /**
116      * The CellRendererPane is used here just as it is in JTree
117      * and JTable, to allow a pluggable JLabel-based renderer for
118      * Vertex and Edge label strings and icons.
119      */
120     protected CellRendererPane rendererPane = new CellRendererPane();
121     
122     /**
123      * A default GraphLabelRenderer - picked Vertex labels are
124      * blue, picked edge labels are cyan
125      */
126     protected VertexLabelRenderer vertexLabelRenderer = 
127         new DefaultVertexLabelRenderer(Color.blue);
128     
129     protected EdgeLabelRenderer edgeLabelRenderer = new DefaultEdgeLabelRenderer(Color.cyan);
130     
131     protected GraphicsDecorator graphicsContext;
132     
133     PluggableRenderContext() {
134         this.setEdgeShapeTransformer(new EdgeShape.QuadCurve<V,E>());
135     }
136 
137 	/**
138 	 * @return the vertexShapeTransformer
139 	 */
140 	public Transformer<V, Shape> getVertexShapeTransformer() {
141 		return vertexShapeTransformer;
142 	}
143 
144 	/**
145 	 * @param vertexShapeTransformer the vertexShapeTransformer to set
146 	 */
147 	public void setVertexShapeTransformer(
148 			Transformer<V, Shape> vertexShapeTransformer) {
149 		this.vertexShapeTransformer = vertexShapeTransformer;
150 	}
151 
152 	/**
153 	 * @return the vertexStrokeTransformer
154 	 */
155 	public Transformer<V, Stroke> getVertexStrokeTransformer() {
156 		return vertexStrokeTransformer;
157 	}
158 
159 	/**
160 	 * @param vertexStrokeTransformer the vertexStrokeTransformer to set
161 	 */
162 	public void setVertexStrokeTransformer(
163 			Transformer<V, Stroke> vertexStrokeTransformer) {
164 		this.vertexStrokeTransformer = vertexStrokeTransformer;
165 	}
166 
167 	public static float[] getDashing() {
168         return dashing;
169     }
170 
171     public static float[] getDotting() {
172         return dotting;
173     }
174 
175     /**
176      * @see edu.uci.ics.jung.visualization.RenderContext#getArrow_placement_tolerance()
177      */
178     public float getArrowPlacementTolerance() {
179         return arrowPlacementTolerance;
180     }
181 
182     /**
183      * @see edu.uci.ics.jung.visualization.RenderContext#setArrow_placement_tolerance(float)
184      */
185     public void setArrowPlacementTolerance(float arrow_placement_tolerance) {
186         this.arrowPlacementTolerance = arrow_placement_tolerance;
187     }
188 
189     /**
190      * @see edu.uci.ics.jung.visualization.RenderContext#getEdgeArrowTransformer()
191      */
192     public Transformer<Context<Graph<V,E>,E>,Shape> getEdgeArrowTransformer() {
193         return edgeArrowTransformer;
194     }
195 
196     /**
197      * @see edu.uci.ics.jung.visualization.RenderContext#setEdgeArrowTransformer(edu.uci.ics.jung.visualization.decorators.EdgeArrowTransformer)
198      */
199     public void setEdgeArrowTransformer(Transformer<Context<Graph<V,E>,E>,Shape> edgeArrowTransformer) {
200         this.edgeArrowTransformer = edgeArrowTransformer;
201     }
202 
203     /**
204      * @see RenderContext#getEdgeArrowPredicate()
205      */
206     public Predicate<Context<Graph<V,E>,E>> getEdgeArrowPredicate() {
207         return edgeArrowPredicate;
208     }
209 
210     /**
211      * @see RenderContext#setEdgeArrowPredicate(Predicate)
212      */
213     public void setEdgeArrowPredicate(Predicate<Context<Graph<V,E>,E>> edgeArrowPredicate) {
214         this.edgeArrowPredicate = edgeArrowPredicate;
215     }
216 
217     /**
218      * @see edu.uci.ics.jung.visualization.RenderContext#getEdgeFontTransformer()
219      */
220     public Transformer<E,Font> getEdgeFontTransformer() {
221         return edgeFontTransformer;
222     }
223 
224     /**
225      * @see edu.uci.ics.jung.visualization.RenderContext#setEdgeFontTransformer(edu.uci.ics.jung.visualization.decorators.EdgeFontTransformer)
226      */
227     public void setEdgeFontTransformer(Transformer<E,Font> edgeFontTransformer) {
228         this.edgeFontTransformer = edgeFontTransformer;
229     }
230 
231     /**
232      * @see edu.uci.ics.jung.visualization.RenderContext#getEdgeIncludePredicate()
233      */
234     public Predicate<Context<Graph<V,E>,E>> getEdgeIncludePredicate() {
235         return edgeIncludePredicate;
236     }
237 
238     /**
239      * @see edu.uci.ics.jung.visualization.RenderContext#setEdgeIncludePredicate(org.apache.commons.collections15.Predicate)
240      */
241     public void setEdgeIncludePredicate(Predicate<Context<Graph<V,E>,E>> edgeIncludePredicate) {
242         this.edgeIncludePredicate = edgeIncludePredicate;
243     }
244 
245     /**
246      * @see edu.uci.ics.jung.visualization.RenderContext#getEdgeLabelClosenessTransformer()
247      */
248     public Transformer<Context<Graph<V,E>,E>,Number> getEdgeLabelClosenessTransformer() {
249         return edgeLabelClosenessTransformer;
250     }
251 
252     /**
253      * @see edu.uci.ics.jung.visualization.RenderContext#setEdgeLabelClosenessTransformer(edu.uci.ics.jung.visualization.decorators.NumberDirectionalEdgeValue)
254      */
255     public void setEdgeLabelClosenessTransformer(
256     		Transformer<Context<Graph<V,E>,E>,Number> edgeLabelClosenessTransformer) {
257         this.edgeLabelClosenessTransformer = edgeLabelClosenessTransformer;
258     }
259 
260     /**
261      * @see edu.uci.ics.jung.visualization.RenderContext#getEdgeLabelRenderer()
262      */
263     public EdgeLabelRenderer getEdgeLabelRenderer() {
264         return edgeLabelRenderer;
265     }
266 
267     /**
268      * @see edu.uci.ics.jung.visualization.RenderContext#setEdgeLabelRenderer(edu.uci.ics.jung.visualization.EdgeLabelRenderer)
269      */
270     public void setEdgeLabelRenderer(EdgeLabelRenderer edgeLabelRenderer) {
271         this.edgeLabelRenderer = edgeLabelRenderer;
272     }
273 
274     /**
275      * @see edu.uci.ics.jung.visualization.RenderContext#getEdgePaintTransformer()
276      */
277     public Transformer<E,Paint> getEdgeFillPaintTransformer() {
278         return edgeFillPaintTransformer;
279     }
280 
281     /**
282      * @see edu.uci.ics.jung.visualization.RenderContext#setEdgePaintTransformer(edu.uci.ics.jung.visualization.decorators.EdgePaintTransformer)
283      */
284     public void setEdgeDrawPaintTransformer(Transformer<E,Paint> edgeDrawPaintTransformer) {
285         this.edgeDrawPaintTransformer = edgeDrawPaintTransformer;
286     }
287 
288     /**
289      * @see edu.uci.ics.jung.visualization.RenderContext#getEdgePaintTransformer()
290      */
291     public Transformer<E,Paint> getEdgeDrawPaintTransformer() {
292         return edgeDrawPaintTransformer;
293     }
294 
295     /**
296      * @see edu.uci.ics.jung.visualization.RenderContext#setEdgePaintTransformer(edu.uci.ics.jung.visualization.decorators.EdgePaintTransformer)
297      */
298     public void setEdgeFillPaintTransformer(Transformer<E,Paint> edgeFillPaintTransformer) {
299         this.edgeFillPaintTransformer = edgeFillPaintTransformer;
300     }
301 
302     /**
303      * @see edu.uci.ics.jung.visualization.RenderContext#getEdgeShapeTransformer()
304      */
305     public Transformer<Context<Graph<V,E>,E>,Shape> getEdgeShapeTransformer() {
306         return edgeShapeTransformer;
307     }
308 
309     /**
310      * @see edu.uci.ics.jung.visualization.RenderContext#setEdgeShapeTransformer(edu.uci.ics.jung.visualization.decorators.EdgeShapeTransformer)
311      */
312     public void setEdgeShapeTransformer(Transformer<Context<Graph<V,E>,E>,Shape> edgeShapeTransformer) {
313         this.edgeShapeTransformer = edgeShapeTransformer;
314         if(edgeShapeTransformer instanceof EdgeShape.Orthogonal) {
315         	((EdgeShape.IndexedRendering<V, E>)edgeShapeTransformer).setEdgeIndexFunction(this.incidentEdgeIndexFunction);
316         } else 
317         if(edgeShapeTransformer instanceof EdgeShape.IndexedRendering) {
318             ((EdgeShape.IndexedRendering<V,E>)edgeShapeTransformer).setEdgeIndexFunction(this.parallelEdgeIndexFunction);
319         }
320     }
321 
322     /**
323      * @see edu.uci.ics.jung.visualization.RenderContext#getEdgeLabelTransformer()
324      */
325     public Transformer<E,String> getEdgeLabelTransformer() {
326         return edgeLabelTransformer;
327     }
328 
329     /**
330      * @see edu.uci.ics.jung.visualization.RenderContext#setEdgeLabelTransformer(edu.uci.ics.jung.visualization.decorators.EdgeLabelTransformer)
331      */
332     public void setEdgeLabelTransformer(Transformer<E,String> edgeLabelTransformer) {
333         this.edgeLabelTransformer = edgeLabelTransformer;
334     }
335 
336     /**
337      * @see edu.uci.ics.jung.visualization.RenderContext#getEdgeStrokeTransformer()
338      */
339     public Transformer<E,Stroke> getEdgeStrokeTransformer() {
340         return edgeStrokeTransformer;
341     }
342 
343     /**
344      * @see edu.uci.ics.jung.visualization.RenderContext#setEdgeStrokeTransformer(edu.uci.ics.jung.visualization.decorators.EdgeStrokeTransformer)
345      */
346     public void setEdgeStrokeTransformer(Transformer<E,Stroke> edgeStrokeTransformer) {
347         this.edgeStrokeTransformer = edgeStrokeTransformer;
348     }
349 
350     /**
351      * @see edu.uci.ics.jung.visualization.RenderContext#getEdgeStrokeTransformer()
352      */
353     public Transformer<E,Stroke> getEdgeArrowStrokeTransformer() {
354         return edgeArrowStrokeTransformer;
355     }
356 
357     /**
358      * @see edu.uci.ics.jung.visualization.RenderContext#setEdgeStrokeTransformer(edu.uci.ics.jung.visualization.decorators.EdgeStrokeTransformer)
359      */
360     public void setEdgeArrowStrokeTransformer(Transformer<E,Stroke> edgeArrowStrokeTransformer) {
361         this.edgeArrowStrokeTransformer = edgeArrowStrokeTransformer;
362     }
363 
364     /**
365      * @see RenderContext#getGraphicsContext()
366      */
367     public GraphicsDecorator getGraphicsContext() {
368         return graphicsContext;
369     }
370 
371     /**
372      * @see RenderContext#setGraphicsContext(GraphicsDecorator)
373      */
374     public void setGraphicsContext(GraphicsDecorator graphicsContext) {
375         this.graphicsContext = graphicsContext;
376     }
377 
378     /**
379      * @see RenderContext#getLabelOffset()
380      */
381     public int getLabelOffset() {
382         return labelOffset;
383     }
384 
385     /**
386      * @see RenderContext#setLabelOffset(int)
387      */
388     public void setLabelOffset(int labelOffset) {
389         this.labelOffset = labelOffset;
390     }
391 
392     /**
393      * @see edu.uci.ics.jung.visualization.RenderContext#getParallelEdgeIndexTransformer()
394      */
395     public EdgeIndexFunction<V, E> getParallelEdgeIndexFunction() {
396         return parallelEdgeIndexFunction;
397     }
398 
399     /**
400      * @see edu.uci.ics.jung.visualization.RenderContext#setParallelEdgeIndexFunction(edu.uci.ics.graph.util.ParallelEdgeIndexFunction)
401      */
402     public void setParallelEdgeIndexFunction(
403             EdgeIndexFunction<V, E> parallelEdgeIndexFunction) {
404         this.parallelEdgeIndexFunction = parallelEdgeIndexFunction;
405         // reset the edge shape transformer, as the parallel edge index function
406         // is used by it
407         this.setEdgeShapeTransformer(getEdgeShapeTransformer());
408     }
409 
410     /**
411      * @see edu.uci.ics.jung.visualization.RenderContext#getPickedEdgeState()
412      */
413     public PickedState<E> getPickedEdgeState() {
414         return pickedEdgeState;
415     }
416 
417     /**
418      * @see edu.uci.ics.jung.visualization.RenderContext#setPickedEdgeState(edu.uci.ics.jung.visualization.picking.PickedState)
419      */
420     public void setPickedEdgeState(PickedState<E> pickedEdgeState) {
421         this.pickedEdgeState = pickedEdgeState;
422     }
423 
424     /**
425      * @see edu.uci.ics.jung.visualization.RenderContext#getPickedVertexState()
426      */
427     public PickedState<V> getPickedVertexState() {
428         return pickedVertexState;
429     }
430 
431     /**
432      * @see edu.uci.ics.jung.visualization.RenderContext#setPickedVertexState(edu.uci.ics.jung.visualization.picking.PickedState)
433      */
434     public void setPickedVertexState(PickedState<V> pickedVertexState) {
435         this.pickedVertexState = pickedVertexState;
436     }
437 
438     /**
439      * @see edu.uci.ics.jung.visualization.RenderContext#getRendererPane()
440      */
441     public CellRendererPane getRendererPane() {
442         return rendererPane;
443     }
444 
445     /**
446      * @see edu.uci.ics.jung.visualization.RenderContext#setRendererPane(javax.swing.CellRendererPane)
447      */
448     public void setRendererPane(CellRendererPane rendererPane) {
449         this.rendererPane = rendererPane;
450     }
451 
452     /**
453      * @see edu.uci.ics.jung.visualization.RenderContext#getScreenDevice()
454      */
455     public JComponent getScreenDevice() {
456         return screenDevice;
457     }
458 
459     /**
460      * @see edu.uci.ics.jung.visualization.RenderContext#setScreenDevice(edu.uci.ics.jung.visualization.VisualizationViewer)
461      */
462     public void setScreenDevice(JComponent screenDevice) {
463         this.screenDevice = screenDevice;
464         screenDevice.add(rendererPane);
465     }
466 
467     /**
468      * @see edu.uci.ics.jung.visualization.RenderContext#getVertexFontTransformer()
469      */
470     public Transformer<V,Font> getVertexFontTransformer() {
471         return vertexFontTransformer;
472     }
473 
474     /**
475      * @see edu.uci.ics.jung.visualization.RenderContext#setVertexFontTransformer(edu.uci.ics.jung.visualization.decorators.VertexFontTransformer)
476      */
477     public void setVertexFontTransformer(Transformer<V,Font> vertexFontTransformer) {
478         this.vertexFontTransformer = vertexFontTransformer;
479     }
480 
481     /**
482      * @see edu.uci.ics.jung.visualization.RenderContext#getVertexIconTransformer()
483      */
484     public Transformer<V,Icon> getVertexIconTransformer() {
485         return vertexIconTransformer;
486     }
487 
488     /**
489      * @see edu.uci.ics.jung.visualization.RenderContext#setVertexIconTransformer(edu.uci.ics.jung.visualization.decorators.VertexIconTransformer)
490      */
491     public void setVertexIconTransformer(Transformer<V,Icon> vertexIconTransformer) {
492         this.vertexIconTransformer = vertexIconTransformer;
493     }
494 
495     /**
496      * @see edu.uci.ics.jung.visualization.RenderContext#getVertexIncludePredicate()
497      */
498     public Predicate<Context<Graph<V,E>,V>> getVertexIncludePredicate() {
499         return vertexIncludePredicate;
500     }
501 
502     /**
503      * @see edu.uci.ics.jung.visualization.RenderContext#setVertexIncludePredicate(org.apache.commons.collections15.Predicate)
504      */
505     public void setVertexIncludePredicate(Predicate<Context<Graph<V,E>,V>> vertexIncludePredicate) {
506         this.vertexIncludePredicate = vertexIncludePredicate;
507     }
508 
509     /**
510      * @see edu.uci.ics.jung.visualization.RenderContext#getVertexLabelRenderer()
511      */
512     public VertexLabelRenderer getVertexLabelRenderer() {
513         return vertexLabelRenderer;
514     }
515 
516     /**
517      * @see edu.uci.ics.jung.visualization.RenderContext#setVertexLabelRenderer(edu.uci.ics.jung.visualization.VertexLabelRenderer)
518      */
519     public void setVertexLabelRenderer(VertexLabelRenderer vertexLabelRenderer) {
520         this.vertexLabelRenderer = vertexLabelRenderer;
521     }
522 
523     /**
524      * @see edu.uci.ics.jung.visualization.RenderContext#getVertexPaintTransformer()
525      */
526     public Transformer<V,Paint> getVertexFillPaintTransformer() {
527         return vertexFillPaintTransformer;
528     }
529 
530     /**
531      * @see edu.uci.ics.jung.visualization.RenderContext#setVertexPaintTransformer(edu.uci.ics.jung.visualization.decorators.VertexPaintTransformer)
532      */
533     public void setVertexFillPaintTransformer(Transformer<V,Paint> vertexFillPaintTransformer) {
534         this.vertexFillPaintTransformer = vertexFillPaintTransformer;
535     }
536 
537     /**
538      * @see edu.uci.ics.jung.visualization.RenderContext#getVertexPaintTransformer()
539      */
540     public Transformer<V,Paint> getVertexDrawPaintTransformer() {
541         return vertexDrawPaintTransformer;
542     }
543 
544     /**
545      * @see edu.uci.ics.jung.visualization.RenderContext#setVertexPaintTransformer(edu.uci.ics.jung.visualization.decorators.VertexPaintTransformer)
546      */
547     public void setVertexDrawPaintTransformer(Transformer<V,Paint> vertexDrawPaintTransformer) {
548         this.vertexDrawPaintTransformer = vertexDrawPaintTransformer;
549     }
550 
551     /**
552      * @see edu.uci.ics.jung.visualization.RenderContext#getVertexLabelTransformer()
553      */
554     public Transformer<V,String> getVertexLabelTransformer() {
555         return vertexLabelTransformer;
556     }
557 
558     /**
559      * @see edu.uci.ics.jung.visualization.RenderContext#setVertexLabelTransformer(edu.uci.ics.jung.visualization.decorators.VertexLabelTransformer)
560      */
561     public void setVertexLabelTransformer(Transformer<V,String> vertexLabelTransformer) {
562         this.vertexLabelTransformer = vertexLabelTransformer;
563     }
564 
565 	/**
566 	 * @return the pickSupport
567 	 */
568 	public GraphElementAccessor<V, E> getPickSupport() {
569 		return pickSupport;
570 	}
571 
572 	/**
573 	 * @param pickSupport the pickSupport to set
574 	 */
575 	public void setPickSupport(GraphElementAccessor<V, E> pickSupport) {
576 		this.pickSupport = pickSupport;
577 	}
578 	
579 	/**
580 	 * @return the basicTransformer
581 	 */
582 	public MultiLayerTransformer getMultiLayerTransformer() {
583 		return multiLayerTransformer;
584 	}
585 
586 	/**
587 	 * @param basicTransformer the basicTransformer to set
588 	 */
589 	public void setMultiLayerTransformer(MultiLayerTransformer basicTransformer) {
590 		this.multiLayerTransformer = basicTransformer;
591 	}
592 
593 	/**
594 	 * @see RenderContext#getArrowDrawPaintTransformer()
595 	 */
596 	public Transformer<E, Paint> getArrowDrawPaintTransformer() {
597 		return arrowDrawPaintTransformer;
598 	}
599 
600 	/**
601 	 * @see RenderContext#getArrowFillPaintTransformer()
602 	 */
603 	public Transformer<E, Paint> getArrowFillPaintTransformer() {
604 		return arrowFillPaintTransformer;
605 	}
606 
607 	/**
608 	 * @see RenderContext#setArrowDrawPaintTransformer(Transformer)
609 	 */
610 	public void setArrowDrawPaintTransformer(Transformer<E, Paint> arrowDrawPaintTransformer) {
611 		this.arrowDrawPaintTransformer = arrowDrawPaintTransformer;
612 		
613 	}
614 
615 	/**
616 	 * @see RenderContext#setArrowFillPaintTransformer(Transformer)
617 	 */
618 	public void setArrowFillPaintTransformer(Transformer<E, Paint> arrowFillPaintTransformer) {
619 		this.arrowFillPaintTransformer = arrowFillPaintTransformer;
620 		
621 	}
622 }
623 
624