1
2
3
4
5
6
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
100
101
102 protected GraphElementAccessor<V, E> pickSupport;
103
104
105 protected int labelOffset = LABEL_OFFSET;
106
107
108
109
110 protected JComponent screenDevice;
111
112 protected PickedState<V> pickedVertexState;
113 protected PickedState<E> pickedEdgeState;
114
115
116
117
118
119
120 protected CellRendererPane rendererPane = new CellRendererPane();
121
122
123
124
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
139
140 public Transformer<V, Shape> getVertexShapeTransformer() {
141 return vertexShapeTransformer;
142 }
143
144
145
146
147 public void setVertexShapeTransformer(
148 Transformer<V, Shape> vertexShapeTransformer) {
149 this.vertexShapeTransformer = vertexShapeTransformer;
150 }
151
152
153
154
155 public Transformer<V, Stroke> getVertexStrokeTransformer() {
156 return vertexStrokeTransformer;
157 }
158
159
160
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
177
178 public float getArrowPlacementTolerance() {
179 return arrowPlacementTolerance;
180 }
181
182
183
184
185 public void setArrowPlacementTolerance(float arrow_placement_tolerance) {
186 this.arrowPlacementTolerance = arrow_placement_tolerance;
187 }
188
189
190
191
192 public Transformer<Context<Graph<V,E>,E>,Shape> getEdgeArrowTransformer() {
193 return edgeArrowTransformer;
194 }
195
196
197
198
199 public void setEdgeArrowTransformer(Transformer<Context<Graph<V,E>,E>,Shape> edgeArrowTransformer) {
200 this.edgeArrowTransformer = edgeArrowTransformer;
201 }
202
203
204
205
206 public Predicate<Context<Graph<V,E>,E>> getEdgeArrowPredicate() {
207 return edgeArrowPredicate;
208 }
209
210
211
212
213 public void setEdgeArrowPredicate(Predicate<Context<Graph<V,E>,E>> edgeArrowPredicate) {
214 this.edgeArrowPredicate = edgeArrowPredicate;
215 }
216
217
218
219
220 public Transformer<E,Font> getEdgeFontTransformer() {
221 return edgeFontTransformer;
222 }
223
224
225
226
227 public void setEdgeFontTransformer(Transformer<E,Font> edgeFontTransformer) {
228 this.edgeFontTransformer = edgeFontTransformer;
229 }
230
231
232
233
234 public Predicate<Context<Graph<V,E>,E>> getEdgeIncludePredicate() {
235 return edgeIncludePredicate;
236 }
237
238
239
240
241 public void setEdgeIncludePredicate(Predicate<Context<Graph<V,E>,E>> edgeIncludePredicate) {
242 this.edgeIncludePredicate = edgeIncludePredicate;
243 }
244
245
246
247
248 public Transformer<Context<Graph<V,E>,E>,Number> getEdgeLabelClosenessTransformer() {
249 return edgeLabelClosenessTransformer;
250 }
251
252
253
254
255 public void setEdgeLabelClosenessTransformer(
256 Transformer<Context<Graph<V,E>,E>,Number> edgeLabelClosenessTransformer) {
257 this.edgeLabelClosenessTransformer = edgeLabelClosenessTransformer;
258 }
259
260
261
262
263 public EdgeLabelRenderer getEdgeLabelRenderer() {
264 return edgeLabelRenderer;
265 }
266
267
268
269
270 public void setEdgeLabelRenderer(EdgeLabelRenderer edgeLabelRenderer) {
271 this.edgeLabelRenderer = edgeLabelRenderer;
272 }
273
274
275
276
277 public Transformer<E,Paint> getEdgeFillPaintTransformer() {
278 return edgeFillPaintTransformer;
279 }
280
281
282
283
284 public void setEdgeDrawPaintTransformer(Transformer<E,Paint> edgeDrawPaintTransformer) {
285 this.edgeDrawPaintTransformer = edgeDrawPaintTransformer;
286 }
287
288
289
290
291 public Transformer<E,Paint> getEdgeDrawPaintTransformer() {
292 return edgeDrawPaintTransformer;
293 }
294
295
296
297
298 public void setEdgeFillPaintTransformer(Transformer<E,Paint> edgeFillPaintTransformer) {
299 this.edgeFillPaintTransformer = edgeFillPaintTransformer;
300 }
301
302
303
304
305 public Transformer<Context<Graph<V,E>,E>,Shape> getEdgeShapeTransformer() {
306 return edgeShapeTransformer;
307 }
308
309
310
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
324
325 public Transformer<E,String> getEdgeLabelTransformer() {
326 return edgeLabelTransformer;
327 }
328
329
330
331
332 public void setEdgeLabelTransformer(Transformer<E,String> edgeLabelTransformer) {
333 this.edgeLabelTransformer = edgeLabelTransformer;
334 }
335
336
337
338
339 public Transformer<E,Stroke> getEdgeStrokeTransformer() {
340 return edgeStrokeTransformer;
341 }
342
343
344
345
346 public void setEdgeStrokeTransformer(Transformer<E,Stroke> edgeStrokeTransformer) {
347 this.edgeStrokeTransformer = edgeStrokeTransformer;
348 }
349
350
351
352
353 public Transformer<E,Stroke> getEdgeArrowStrokeTransformer() {
354 return edgeArrowStrokeTransformer;
355 }
356
357
358
359
360 public void setEdgeArrowStrokeTransformer(Transformer<E,Stroke> edgeArrowStrokeTransformer) {
361 this.edgeArrowStrokeTransformer = edgeArrowStrokeTransformer;
362 }
363
364
365
366
367 public GraphicsDecorator getGraphicsContext() {
368 return graphicsContext;
369 }
370
371
372
373
374 public void setGraphicsContext(GraphicsDecorator graphicsContext) {
375 this.graphicsContext = graphicsContext;
376 }
377
378
379
380
381 public int getLabelOffset() {
382 return labelOffset;
383 }
384
385
386
387
388 public void setLabelOffset(int labelOffset) {
389 this.labelOffset = labelOffset;
390 }
391
392
393
394
395 public EdgeIndexFunction<V, E> getParallelEdgeIndexFunction() {
396 return parallelEdgeIndexFunction;
397 }
398
399
400
401
402 public void setParallelEdgeIndexFunction(
403 EdgeIndexFunction<V, E> parallelEdgeIndexFunction) {
404 this.parallelEdgeIndexFunction = parallelEdgeIndexFunction;
405
406
407 this.setEdgeShapeTransformer(getEdgeShapeTransformer());
408 }
409
410
411
412
413 public PickedState<E> getPickedEdgeState() {
414 return pickedEdgeState;
415 }
416
417
418
419
420 public void setPickedEdgeState(PickedState<E> pickedEdgeState) {
421 this.pickedEdgeState = pickedEdgeState;
422 }
423
424
425
426
427 public PickedState<V> getPickedVertexState() {
428 return pickedVertexState;
429 }
430
431
432
433
434 public void setPickedVertexState(PickedState<V> pickedVertexState) {
435 this.pickedVertexState = pickedVertexState;
436 }
437
438
439
440
441 public CellRendererPane getRendererPane() {
442 return rendererPane;
443 }
444
445
446
447
448 public void setRendererPane(CellRendererPane rendererPane) {
449 this.rendererPane = rendererPane;
450 }
451
452
453
454
455 public JComponent getScreenDevice() {
456 return screenDevice;
457 }
458
459
460
461
462 public void setScreenDevice(JComponent screenDevice) {
463 this.screenDevice = screenDevice;
464 screenDevice.add(rendererPane);
465 }
466
467
468
469
470 public Transformer<V,Font> getVertexFontTransformer() {
471 return vertexFontTransformer;
472 }
473
474
475
476
477 public void setVertexFontTransformer(Transformer<V,Font> vertexFontTransformer) {
478 this.vertexFontTransformer = vertexFontTransformer;
479 }
480
481
482
483
484 public Transformer<V,Icon> getVertexIconTransformer() {
485 return vertexIconTransformer;
486 }
487
488
489
490
491 public void setVertexIconTransformer(Transformer<V,Icon> vertexIconTransformer) {
492 this.vertexIconTransformer = vertexIconTransformer;
493 }
494
495
496
497
498 public Predicate<Context<Graph<V,E>,V>> getVertexIncludePredicate() {
499 return vertexIncludePredicate;
500 }
501
502
503
504
505 public void setVertexIncludePredicate(Predicate<Context<Graph<V,E>,V>> vertexIncludePredicate) {
506 this.vertexIncludePredicate = vertexIncludePredicate;
507 }
508
509
510
511
512 public VertexLabelRenderer getVertexLabelRenderer() {
513 return vertexLabelRenderer;
514 }
515
516
517
518
519 public void setVertexLabelRenderer(VertexLabelRenderer vertexLabelRenderer) {
520 this.vertexLabelRenderer = vertexLabelRenderer;
521 }
522
523
524
525
526 public Transformer<V,Paint> getVertexFillPaintTransformer() {
527 return vertexFillPaintTransformer;
528 }
529
530
531
532
533 public void setVertexFillPaintTransformer(Transformer<V,Paint> vertexFillPaintTransformer) {
534 this.vertexFillPaintTransformer = vertexFillPaintTransformer;
535 }
536
537
538
539
540 public Transformer<V,Paint> getVertexDrawPaintTransformer() {
541 return vertexDrawPaintTransformer;
542 }
543
544
545
546
547 public void setVertexDrawPaintTransformer(Transformer<V,Paint> vertexDrawPaintTransformer) {
548 this.vertexDrawPaintTransformer = vertexDrawPaintTransformer;
549 }
550
551
552
553
554 public Transformer<V,String> getVertexLabelTransformer() {
555 return vertexLabelTransformer;
556 }
557
558
559
560
561 public void setVertexLabelTransformer(Transformer<V,String> vertexLabelTransformer) {
562 this.vertexLabelTransformer = vertexLabelTransformer;
563 }
564
565
566
567
568 public GraphElementAccessor<V, E> getPickSupport() {
569 return pickSupport;
570 }
571
572
573
574
575 public void setPickSupport(GraphElementAccessor<V, E> pickSupport) {
576 this.pickSupport = pickSupport;
577 }
578
579
580
581
582 public MultiLayerTransformer getMultiLayerTransformer() {
583 return multiLayerTransformer;
584 }
585
586
587
588
589 public void setMultiLayerTransformer(MultiLayerTransformer basicTransformer) {
590 this.multiLayerTransformer = basicTransformer;
591 }
592
593
594
595
596 public Transformer<E, Paint> getArrowDrawPaintTransformer() {
597 return arrowDrawPaintTransformer;
598 }
599
600
601
602
603 public Transformer<E, Paint> getArrowFillPaintTransformer() {
604 return arrowFillPaintTransformer;
605 }
606
607
608
609
610 public void setArrowDrawPaintTransformer(Transformer<E, Paint> arrowDrawPaintTransformer) {
611 this.arrowDrawPaintTransformer = arrowDrawPaintTransformer;
612
613 }
614
615
616
617
618 public void setArrowFillPaintTransformer(Transformer<E, Paint> arrowFillPaintTransformer) {
619 this.arrowFillPaintTransformer = arrowFillPaintTransformer;
620
621 }
622 }
623
624