1
14
15 package demo.yext.svg;
16
17 import java.awt.Graphics2D;
18 import java.awt.Point;
19
20 import y.base.Edge;
21 import y.base.EdgeMap;
22 import y.base.Node;
23 import y.util.Maps;
24 import y.view.EdgeRealizer;
25 import y.view.Graph2D;
26 import y.view.Graph2DView;
27 import yext.svg.io.SVGDOMEnhancer;
28 import yext.svg.io.SVGIOHandler;
29
30
36 public class RolloverDemo extends SVGExportDemo
37 {
38
39
44 protected SVGIOHandler createSVGIOHandler(boolean svgz)
45 {
46 SVGIOHandler ioh = super.createSVGIOHandler(svgz);
47 SVGDOMEnhancer enhancer = new RolloverEnhancer();
48 enhancer.setDrawEdgesFirst(true);
50 ioh.setSVGGraph2DRenderer(enhancer);
51 return ioh;
52 }
53
54
60 class RolloverEnhancer extends SVGDOMEnhancer
61 {
62 private double mouseOverScaleFactor = 1.25;
63 private EdgeMap highlightType;
64 double viewZoom;
65 Point viewPoint;
66
67
72 protected void initializeDOM()
73 {
74 Graph2DView activeView = getSVGIOHandler().getActiveGraph2DView();
75 Graph2D graph = activeView.getGraph2D();
76 viewZoom = activeView.getZoom();
77 viewPoint = activeView.getViewPoint();
78
79 highlightType = Maps.createIndexEdgeMap(new boolean[graph.E()]);
80 addToSVGDefinition(createScript());
81 }
82
83 protected void paint(Graphics2D gfx, EdgeRealizer r, boolean sloppyMode)
84 {
85 Edge e = r.getEdge();
86 boolean isSelected = r.isSelected();
87
88 highlightType.setBool(e, true);
89 r.setSelected(true);
90 super.paint(gfx, r, sloppyMode);
91
92 highlightType.setBool(e, false);
93 r.setSelected(false);
94 super.paint(gfx, r, sloppyMode);
95
96 r.setSelected(isSelected);
97 }
98
99 protected String createGroupID(Edge e)
100 {
101 if(highlightType.getBool(e))
102 {
103 return "y.edge." + e.index() + ".highlight";
104 }
105 else
106 {
107 return "y.edge." + e.index();
108 }
109 }
110
111
117 protected void nodeAddedToDOM(Node yNode, org.w3c.dom.Element element)
118 {
119 Graph2D graph = (Graph2D)yNode.getGraph();
120 int x = (int)((graph.getCenterX(yNode) - viewPoint.x)*viewZoom);
121 int y = (int)((graph.getCenterY(yNode) - viewPoint.y)*viewZoom);
122 String id = element.getAttribute("id");
123 element.setAttribute(
124 "onmouseover",
125 "scaleNode(evt,'" + id + "'," + x + "," + y + "," + mouseOverScaleFactor + ")");
126 element.setAttribute(
127 "onmouseout",
128 "scaleNode(evt,'" + id + "'," + x + "," + y + ",1)");
129 }
130
131
134 protected void edgeAddedToDOM(Edge yEdge, org.w3c.dom.Element element)
135 {
136 Graph2D graph = (Graph2D)yEdge.getGraph();
137 String id = "y.edge." + yEdge.index();
138 if(highlightType.getBool(yEdge))
139 {
140 element.setAttribute("style", "visibility:hidden");
141 element.setAttribute("onmouseover", "selectEdge(evt,'" + id + "')");
142 element.setAttribute("onmouseout", "deselectEdge(evt,'" + id + "')");
143 }
144 else
145 {
146 element.setAttribute("style", "visibility:visible");
147 element.setAttribute("onmouseover", "selectEdge(evt,'" + id + "')");
148 element.setAttribute("onmouseout", "deselectEdge(evt,'" + id + "')");
149
150 }
151 }
152
153
157
161 private org.w3c.dom.Element createScript()
162 {
163 org.w3c.dom.Element script = createElement("script");
164 script.setAttribute("type","text/ecmascript");
165
166 String selectEdge =
169 "function selectEdge(evt, elementId) { \n" +
170 "var document = evt.target.ownerDocument; \n" +
171 "var element = document.getElementById(elementId); \n" +
172 "element.setAttributeNS(null, 'style', 'visibility:hidden'); \n" +
173 "element = document.getElementById(elementId + '.highlight'); \n" +
174 "element.setAttributeNS(null, 'style', 'visibility:visible'); \n" +
175 "}";
176
177 String deselectEdge =
178 "function deselectEdge(evt, elementId) { \n" +
179 "var document = evt.target.ownerDocument; \n" +
180 "var element = document.getElementById(elementId); \n" +
181 "element.setAttributeNS(null, 'style', 'visibility:visible'); \n" +
182 "element = document.getElementById(elementId + '.highlight'); \n" +
183 "element.setAttributeNS(null, 'style', 'visibility:hidden'); \n" +
184 "}";
185
186 String scaleNode =
187 "function scaleNode(evt, elementId, x, y, factor) { \n" +
188 "var document = evt.target.ownerDocument; \n" +
189 "var element = document.getElementById(elementId); \n" +
190 "var newtransform = \"translate(\" + x + \",\" + y + \") scale(\" + factor + \") translate(-\" + x + \",-\" + y + \")\"; \n" +
191 "element.setAttributeNS(null, 'transform', newtransform); \n" +
192 "}";
193
194 script.appendChild(createCDATASection(
195 selectEdge + '\n' +
196 deselectEdge + '\n' +
197 scaleNode
198 ));
199
200 return script;
201 }
202
203 }
204
205
208 public static void main(String args[])
209 {
210 initLnF();
211 RolloverDemo demo = new RolloverDemo();
212 demo.start();
213 }
214
215 }