1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 package au.com.hpo.c555.panel;
25
26 import org.apache.batik.bridge.ExternalResourceSecurity;
27 import org.apache.batik.bridge.ScriptSecurity;
28 import org.apache.batik.dom.svg.SAXSVGDocumentFactory;
29 import org.apache.batik.swing.JSVGCanvas;
30 import org.apache.batik.swing.svg.LinkActivationEvent;
31 import org.apache.batik.swing.svg.LinkActivationListener;
32 import org.apache.batik.swing.svg.SVGUserAgent;
33 import org.apache.batik.util.ParsedURL;
34 import org.apache.batik.util.XMLResourceDescriptor;
35 import org.w3c.dom.Element;
36 import org.w3c.dom.svg.SVGDocument;
37
38 import javax.swing.*;
39 import java.awt.*;
40 import java.awt.event.WindowAdapter;
41 import java.awt.event.WindowEvent;
42 import java.io.IOException;
43 import java.io.StringReader;
44 import java.net.URL;
45
46
47
48
49 public class About extends JSVGCanvas
50 {
51 private static final boolean EVENTS_ENABLED = true;
52 private static final boolean SELECTABLE_TEXT = true;
53
54 private static final String LOGO = "555 Timer";
55 private static final String DESIGN_TOOL = "Design Tool";
56 private static final String VERSION = "Version " + Version.getVersion();
57 private static final String AUTHOR = "Copyright © 1999-2005 Andrew J. Armstrong";
58 private static final String AUTHOR_EMAIL = "andrew_armstrong(ad)unwired(dod)com(dod)au";
59
60 private static final String ABOUT_BOX_INFO =
61 "<?xml version='1.0' standalone='no'?>"
62 + "<!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.0//EN' 'http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd'>"
63 + "<svg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='450' height='500' viewBox='0 0 450 500'>"
64 + "<rect x='0' y='0' width='100%' height='100%' style='fill:white' />"
65 + "<defs>"
66
67 + "<filter id='dropShadow' filterUnits='objectBoundingBox' width='1.4' height='1.4'>"
68 + "<feGaussianBlur in='SourceAlpha' stdDeviation='4' />"
69 + "<feOffset dx='4' dy='4' />"
70 + "<feComponentTransfer result='shadow'>"
71 + "<feFuncA type='linear' slope='.5' intercept='0' />"
72 + "</feComponentTransfer>"
73 + "</filter>"
74
75 + "<filter id='emboss' >"
76 + "<feGaussianBlur in='SourceAlpha' stdDeviation='2' result='blur'/>"
77 + "<feSpecularLighting in='blur' surfaceScale='-3' style='lighting-color:white'"
78 + " specularConstant='1' specularExponent='16'"
79 + " result='spec' kernelUnitLength='1' >"
80 + "<feDistantLight azimuth='45' elevation='45' />"
81 + "</feSpecularLighting>"
82 + "<feComposite in='spec' in2='SourceGraphic' operator='in' result='specOut'/>"
83 + "</filter>"
84 + "</defs>"
85 + getEmbossedString(72, 50, 35, "172,20,20", LOGO)
86 + getEmbossedString(48, 50, 48, "172,20,20", DESIGN_TOOL)
87 + getEmbossedString(32, 50, 60, "0,40,220", VERSION)
88 + getString(14, 50, 75, "0,40,220", AUTHOR)
89 + getString(14, 50, 80, "0,40,220", AUTHOR_EMAIL)
90 + "</svg>"
91 ;
92
93 private static String getEmbossedString(int size, int x, int y, String color, String text)
94 {
95 return
96 "<g style='font-size:" + size + "; font-family:Dialog; text-anchor:middle;'>"
97 + "<text x='" + x + "%' y='" + y + "%' style='filter:url(#dropShadow)'>" + text + "</text>"
98 + "<text x='" + x + "%' y='" + y + "%' style='fill:rgb(" + color + ")'>" + text + "</text>"
99 + "<text x='" + x + "%' y='" + y + "%' style='filter:url(#emboss)'>" + text + "</text>"
100 + "</g>";
101 }
102
103 private static String getString(int size, int x, int y, String color, String text)
104 {
105 return
106 "<g style='font-size:" + size + "; font-family:Dialog; text-anchor:middle;'>"
107 + "<a xlink:href='mailto:" + AUTHOR_EMAIL + "'>"
108 + "<text x='" + x + "%' y='" + y + "%' style='fill:rgb(" + color + ")'>"
109 + text
110 + "</text>"
111 + "</a>"
112 + " </g>";
113 }
114
115 public About()
116 {
117
118 super(new SVGUserAgent()
119 {
120
121 public void displayError(Exception e)
122 {
123 }
124
125 public void displayError(String s)
126 {
127 }
128
129 public void displayMessage(String s)
130 {
131 }
132
133 public String getLanguages()
134 {
135 return "en";
136 }
137
138 public float getPixelToMM()
139 {
140 return 25.4f / 96;
141 }
142
143
144
145
146
147
148 public String getUserStyleSheetURI()
149 {
150 return null;
151 }
152
153 public String getXMLParserClassName()
154 {
155 String parserName = "org.apache.xerces.parsers.SAXParser";
156 System.out.println("About.getXMLParserClassName " + parserName);
157 return parserName;
158 }
159
160 public void handleElement(Element element, Object o)
161 {
162 }
163
164 public void openLink(String uri, boolean activateInNewComponent)
165 {
166 }
167
168 public boolean supportExtension(String s)
169 {
170 return false;
171 }
172
173 public boolean isXMLParserValidating()
174 {
175 return false;
176 }
177
178
179
180
181 public String getMedia()
182 {
183 return "screen";
184 }
185
186
187
188
189 public void showAlert(String message)
190 {
191 }
192
193
194
195
196 public String getAlternateStyleSheet()
197 {
198 return null;
199 }
200
201
202
203
204 public boolean showConfirm(String message)
205 {
206 return false;
207 }
208
209
210
211
212 public String showPrompt(String message)
213 {
214 return null;
215 }
216
217
218
219
220 public String showPrompt(String message, String defaultValue)
221 {
222 return null;
223 }
224
225 public ScriptSecurity getScriptSecurity(String scriptType,
226 URL scriptURL,
227 URL docURL)
228 {
229 return null;
230 }
231
232 public void checkLoadExternalResource(ParsedURL resourceURL,
233 ParsedURL docURL) throws SecurityException
234 {
235 }
236
237 public void checkLoadScript(String scriptType,
238 ParsedURL scriptURL,
239 ParsedURL docURL) throws SecurityException
240 {
241 }
242
243 public float getMediumFontSize()
244 {
245 return 0;
246 }
247
248 public float getBolderFontWeight(float f)
249 {
250 return 0;
251 }
252
253 public float getLighterFontWeight(float f)
254 {
255 return 0;
256 }
257
258 public ExternalResourceSecurity
259 getExternalResourceSecurity(ParsedURL resourceURL,
260 ParsedURL docURL)
261 {
262 return null;
263 }
264
265 public float getPixelUnitToMillimeter()
266 {
267 return 0;
268 }
269
270 public ScriptSecurity getScriptSecurity(String scriptType,
271 ParsedURL scriptURL,
272 ParsedURL docURL)
273 {
274 return null;
275 }
276
277 public String getDefaultFontFamily()
278 {
279 return null;
280 }
281
282 }, EVENTS_ENABLED, SELECTABLE_TEXT);
283
284 this.isDynamic();
285 setEnableImageZoomInteractor(false);
286 setEnableResetTransformInteractor(false);
287 setEnableZoomInteractor(false);
288 this.addLinkActivationListener(new LinkActivationListener()
289 {
290 public void linkActivated(LinkActivationEvent e)
291 {
292 try
293 {
294 if (isWindowsPlatform())
295 {
296 String[] commandLine = {"rundll32", "url.dll,FileProtocolHandler", e.getReferencedURI()};
297 Runtime.getRuntime().exec(commandLine);
298 }
299 }
300 catch (IOException ioe)
301 {
302 System.out.println(ioe);
303 }
304
305 }
306 });
307
308 try
309 {
310 String parser = XMLResourceDescriptor.getXMLParserClassName();
311 SAXSVGDocumentFactory f = new SAXSVGDocumentFactory(parser);
312 String uri = "http:internal";
313 SVGDocument doc = (SVGDocument) f.createDocument(uri, new StringReader(ABOUT_BOX_INFO));
314 setSVGDocument(doc);
315 }
316 catch (IOException e)
317 {
318 System.out.println("e = " + e);
319 }
320 }
321
322 private boolean isWindowsPlatform()
323 {
324 String os = System.getProperty("os.name");
325 return os != null && os.startsWith("Windows");
326
327 }
328
329 public static void main(String[] args)
330 {
331 JFrame frame = new JFrame("About");
332 frame.addWindowListener
333 (new WindowAdapter()
334 {
335 public void windowClosing(WindowEvent e)
336 {
337 System.exit(0);
338 }
339 });
340
341 About aboutBox = new About();
342 frame.getContentPane().add(aboutBox);
343 frame.pack();
344 Dimension dimScreen = Toolkit.getDefaultToolkit().getScreenSize();
345 Dimension dimFrame = frame.getSize();
346 frame.setLocation((dimScreen.width - dimFrame.width) / 2,
347 (dimScreen.height - dimFrame.height) / 2);
348 frame.show();
349 }
350
351 public Dimension getPreferredSize()
352 {
353 return new Dimension(450, 500);
354 }
355
356 }
357
358 class Version
359 {
360 private static final String VERSION = "1.1.20020612";
361
362 private Version()
363 {
364 }
365
366 public static String getVersion()
367 {
368 return VERSION;
369 }
370 }