1
14 package demo.view.realizer;
15
16 import demo.view.DemoBase;
17 import y.base.EdgeCursor;
18 import y.view.Arrow;
19 import y.view.BendList;
20 import y.view.BridgeCalculator;
21 import y.view.DefaultGraph2DRenderer;
22 import y.view.EdgeRealizer;
23 import y.view.GenericEdgePainter;
24 import y.view.GenericEdgeRealizer;
25 import y.view.Graph2D;
26
27 import javax.swing.AbstractAction;
28 import javax.swing.JToolBar;
29 import java.awt.Graphics2D;
30 import java.awt.event.ActionEvent;
31 import java.awt.geom.GeneralPath;
32 import java.awt.geom.PathIterator;
33 import java.util.Map;
34
35
44 public class BridgeEdgeRealizerDemo extends DemoBase {
45 BridgeCalculator bridgeCalculator;
46
47 public BridgeEdgeRealizerDemo() {
48 super();
49 GenericEdgeRealizer.Factory factory = GenericEdgeRealizer.getFactory();
51
52 Map implementationsMap = factory.createDefaultConfigurationMap();
56
57 final BridgedEdgePainter painter = new BridgedEdgePainter(
62 new GenericEdgePainter(), BridgeCalculator.CROSSING_STYLE_GAP);
63 implementationsMap.put(GenericEdgeRealizer.Painter.class, painter);
64 implementationsMap.put(GenericEdgeRealizer.BridgeCalculatorHandler.class, painter);
66
67 factory.addConfiguration("bridgetype1", implementationsMap);
69
70 final BridgedEdgePainter painter2 = new BridgedEdgePainter(
72 new GenericEdgePainter(), BridgeCalculator.CROSSING_STYLE_ARC);
73 implementationsMap.put(GenericEdgeRealizer.Painter.class, painter2);
74 implementationsMap.put(GenericEdgeRealizer.BridgeCalculatorHandler.class, painter2);
76
77 factory.addConfiguration("bridgetype2", implementationsMap);
79
80 GenericEdgeRealizer ger = new GenericEdgeRealizer();
82
83 ger.setConfiguration("bridgetype1");
85 ger.setTargetArrow(Arrow.STANDARD);
86
87 final Graph2D graph = view.getGraph2D();
89 graph.setDefaultEdgeRealizer(ger);
90
91 bridgeCalculator = new BridgeCalculator();
93 ((DefaultGraph2DRenderer) view.getGraph2DRenderer()).setBridgeCalculator(bridgeCalculator);
97
98 loadGraph( "resource/bridgeEdgeRealizer.gml" );
99 }
100
101 protected JToolBar createToolBar() {
102 JToolBar toolBar = super.createToolBar();
103 toolBar.add(new AbstractAction("Default Type 1") {
104 public void actionPerformed(ActionEvent e) {
105 Graph2D graph = view.getGraph2D();
106
107 EdgeCursor ec = graph.selectedEdges();
108 if(ec.size() == 0){
109 ec = graph.edges();
110 }
111 for (; ec.ok(); ec.next()) {
112 ((GenericEdgeRealizer)graph.getRealizer(ec.edge())).setConfiguration("bridgetype1");
113 }
114 view.getGraph2D().setDefaultEdgeRealizer(new GenericEdgeRealizer("bridgetype1"));
115 graph.updateViews();
116 }
117 });
118 toolBar.add(new AbstractAction("Default Type 2") {
119 public void actionPerformed(ActionEvent e) {
120 Graph2D graph = view.getGraph2D();
121 EdgeCursor ec = graph.selectedEdges();
122 if(ec.size() == 0){
123 ec = graph.edges();
124 }
125 for (; ec.ok(); ec.next()) {
126 ((GenericEdgeRealizer)graph.getRealizer(ec.edge())).setConfiguration("bridgetype2");
127 }
128 view.getGraph2D().setDefaultEdgeRealizer(new GenericEdgeRealizer("bridgetype2"));
129 graph.updateViews();
130 }
131 });
132 return toolBar;
133 }
134
135
140 static final class BridgedEdgePainter implements GenericEdgeRealizer.Painter, GenericEdgeRealizer.BridgeCalculatorHandler {
141 private final GenericEdgeRealizer.Painter painter;
142 private final short bridgeStyle;
143
144 public BridgedEdgePainter(GenericEdgeRealizer.Painter painter, short bridgeStyle) {
145 this.painter = painter;
146 this.bridgeStyle = bridgeStyle;
147 }
148
149 public void paint(EdgeRealizer context, BendList bends, GeneralPath path, Graphics2D gfx, boolean selected) {
150 BridgeCalculator bridgeCalculator = DefaultGraph2DRenderer.getBridgeCalculator(context, gfx);
152 if (bridgeCalculator != null) {
153 GeneralPath p = new GeneralPath();
154 final short crossingStyle = bridgeCalculator.getCrossingStyle();
156 try {
157 bridgeCalculator.setCrossingStyle(bridgeStyle);
158 PathIterator pathIterator = bridgeCalculator.insertBridges(path.getPathIterator(null, 1.0d));
159 p.append(pathIterator, true);
160 painter.paint(context, bends, p, gfx, selected);
162 } finally {
163 bridgeCalculator.setCrossingStyle(crossingStyle);
164 }
165 } else {
166 painter.paint(context, bends, path, gfx, selected);
167 }
168 }
169
170 public void paintSloppy(EdgeRealizer context, BendList bends, GeneralPath path, Graphics2D gfx, boolean selected) {
171 painter.paintSloppy(context, bends, path, gfx, selected);
172 }
173
174 public void registerObstacles(EdgeRealizer context, BendList bends, GeneralPath path, BridgeCalculator calculator) {
177 calculator.registerObstacles(path.getPathIterator(null));
178 }
179 }
180
181
182 public static void main(String[] args) {
183 initLnF();
184 new BridgeEdgeRealizerDemo().start("Bridge EdgeRealizer Demo");
185 }
186 }
187