]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scenegraph.swing/src/org/simantics/scenegraph/example/SampleThread.java
Fixed all line endings of the repository
[simantics/platform.git] / bundles / org.simantics.scenegraph.swing / src / org / simantics / scenegraph / example / SampleThread.java
index 16b02efc29758deb43ee2d869e5c67cbe9c0e2db..67b785f2579443edf334ca8029b00e052055df67 100644 (file)
-/*******************************************************************************\r
- * Copyright (c) 2007, 2010 Association for Decentralized Information Management\r
- * in Industry THTH ry.\r
- * All rights reserved. This program and the accompanying materials\r
- * are made available under the terms of the Eclipse Public License v1.0\r
- * which accompanies this distribution, and is available at\r
- * http://www.eclipse.org/legal/epl-v10.html\r
- *\r
- * Contributors:\r
- *     VTT Technical Research Centre of Finland - initial API and implementation\r
- *******************************************************************************/\r
-package org.simantics.scenegraph.example;\r
-\r
-import java.awt.event.ActionEvent;\r
-import java.awt.event.ActionListener;\r
-import java.awt.geom.AffineTransform;\r
-import java.awt.geom.Rectangle2D;\r
-import java.io.BufferedReader;\r
-import java.io.IOException;\r
-import java.io.InputStreamReader;\r
-import java.util.ArrayList;\r
-import java.util.List;\r
-\r
-import javax.swing.BorderFactory;\r
-import javax.swing.JSlider;\r
-import org.simantics.scenegraph.g2d.G2DSceneGraph;\r
-import org.simantics.scenegraph.g2d.nodes.AnimatedSVGNode;\r
-import org.simantics.scenegraph.g2d.nodes.GridNode;\r
-import org.simantics.scenegraph.g2d.nodes.NavigationNode;\r
-import org.simantics.scenegraph.g2d.nodes.RulerNode;\r
-import org.simantics.scenegraph.g2d.nodes.ShapeNode;\r
-import org.simantics.scenegraph.g2d.nodes.TransformNode;\r
-import org.simantics.scenegraph.g2d.nodes.Trend2DNode;\r
-import org.simantics.scenegraph.swing.ButtonNode;\r
-import org.simantics.scenegraph.swing.LabelNode;\r
-import org.simantics.scenegraph.swing.MonitorNode;\r
-import org.simantics.scenegraph.swing.SliderNode;\r
-\r
-public class SampleThread implements Runnable {\r
-\r
-       public G2DSceneGraph sg = new G2DSceneGraph();\r
-       protected TransformNode transform = null;\r
-       protected TransformNode transform2 = null;\r
-       \r
-       protected boolean interrupted = false;\r
-       \r
-       public void start() {\r
-               interrupted = false;\r
-               Thread t = new Thread(this);\r
-               t.start();\r
-       }\r
-       \r
-       public void stop() {\r
-               interrupted = true;\r
-       }\r
-       \r
-       protected void close() {\r
-       }\r
-\r
-       protected boolean init() {\r
-               return true;\r
-       }\r
-       \r
-       protected boolean rotate = true;\r
-       protected float t1 = 0;\r
-       protected float t2 = 0;\r
-       \r
-       private String loadSVG(String filename) throws IOException {\r
-               String data = "";\r
-               BufferedReader reader = new BufferedReader(new InputStreamReader(this.getClass().getResourceAsStream(filename)));\r
-\r
-               while(reader.ready()) {\r
-                       data += reader.readLine();\r
-               }\r
-\r
-               reader.close();\r
-               return data;\r
-       }\r
-       \r
-       public void run() {\r
-               if(!init()) return;\r
-\r
-               final NavigationNode nav = sg.addNode(NavigationNode.class);\r
-               GridNode grid = nav.addNode(GridNode.class);\r
-               grid.setZIndex(1);\r
-               \r
-//             AnimatedSVGNode bmw = null;\r
-               AnimatedSVGNode svg1 = null;\r
-               AnimatedSVGNode svg2 = null;\r
-               AnimatedSVGNode svg3 = null;\r
-               AnimatedSVGNode svg4 = null;\r
-               try {\r
-                       String data = loadSVG("tynnyri.svg");\r
-                       svg1 = nav.addNode(AnimatedSVGNode.class);\r
-                       svg1.setZIndex(20);\r
-                       svg1.setData(data);\r
-                       svg1.setTransform(AffineTransform.getTranslateInstance(0, 150));\r
-                       svg1.useMipMap(false);\r
-                       \r
-                       svg2 = nav.addNode(AnimatedSVGNode.class);\r
-                       svg2.setZIndex(20);\r
-                       svg2.setData(data);\r
-                       svg2.setTransform(AffineTransform.getTranslateInstance(250, 150));\r
-                       svg2.useMipMap(false);\r
-                       \r
-                       svg3 = nav.addNode(AnimatedSVGNode.class);\r
-                       svg3.setZIndex(20);\r
-                       svg3.setData(data);\r
-                       svg3.setTransform(AffineTransform.getTranslateInstance(500, 150));\r
-                       svg3.useMipMap(false);\r
-                       \r
-                       svg4 = nav.addNode(AnimatedSVGNode.class);\r
-                       svg4.setZIndex(20);\r
-                       svg4.setData(data);\r
-                       svg4.setTransform(AffineTransform.getTranslateInstance(750, 150));\r
-                       svg4.useMipMap(false);\r
-               } catch(IOException e) {\r
-                       e.printStackTrace();\r
-               }\r
-\r
-//             try {\r
-//                     bmw = nav.addNode(AnimatedSVGNode.class);\r
-//                     bmw.setZIndex(50);\r
-//                     bmw.setData(loadSVG("D:\\bemari.svg"));\r
-//                     bmw.setPosition(100, 100);\r
-////                   bmw.setTargetSize(50, 50);\r
-//                     bmw.useMipMap(false);\r
-//                     \r
-//                     String init = "if(rotate === undefined || y === undefined || x === undefined) { var rotate = 0; var y = 0; var x = 0; }";\r
-//                     String left = "rotate = (rotate - 10)%360;";\r
-//                     String right = "rotate = (rotate + 10)%360;";\r
-//                     String up = "x -= (Math.cos(rotate*3.14/180))*20; y -= (Math.sin(rotate*3.14/180))*20; ";\r
-//                     String down = "x += (Math.cos(rotate*3.14/180))*20; y += (Math.sin(rotate*3.14/180))*20; ";\r
-//                     \r
-//                     String base = \r
-//                             "t.setValue(\"rotate\", rotate); "+\r
-//                             "t.setValue(\"x\", x); "+\r
-//                             "t.setValue(\"y\", y); "+\r
-//                             "var m = new Array(6); "+\r
-//                             "m[0] = Math.cos(rotate*3.14/180); "+\r
-//                             "m[2] = -Math.sin(rotate*3.14/180); "+\r
-//                             "m[4] = x; "+\r
-//                             \r
-//                             "m[1] = Math.sin(rotate*3.14/180); "+\r
-//                             "m[3] = Math.cos(rotate*3.14/180); "+\r
-//                             "m[5] = y; "+\r
-//                             "if(svg.getRoot().hasAttribute(\"transform\", 1)) {"+\r
-//                             "    svg.getRoot().setAttribute(\"transform\", 1, \"matrix(\"+m.join(\",\")+\")\");"+\r
-//                             "} else {"+\r
-//                             "       svg.getRoot().addAttribute(\"transform\", 1, \"matrix(\"+m.join(\",\")+\")\");"+\r
-//                             "}";\r
-//                     bmw.registerEventAnimation("LEFT", init+left+base);\r
-//                     bmw.registerEventAnimation("RIGHT", init+right+base);\r
-//                     bmw.registerEventAnimation("UP", init+up+base);\r
-//                     bmw.registerEventAnimation("DOWN", init+down+base);\r
-//             } catch(IOException e) {\r
-//                     e.printStackTrace();\r
-//             }\r
-//             \r
-               transform = nav.addNode(TransformNode.class);\r
-               transform.setZIndex(3);\r
-               AffineTransform at = new AffineTransform();\r
-               at.translate(200, 200);\r
-               transform.setTransform(at);\r
-               ShapeNode box = transform.addNode(ShapeNode.class);\r
-               box.setZIndex(1);\r
-               box.setShape(new Rectangle2D.Double(-50, -50, 100, 100));\r
-\r
-               MonitorNode cn = nav.addNode(MonitorNode.class);\r
-               cn.setZIndex(2);\r
-               cn.setTransform(AffineTransform.getTranslateInstance(100, 50));\r
-               cn.setBounds(new Rectangle2D.Double(0, 0, 100, 25));\r
-\r
-               final ButtonNode button = nav.addNode(ButtonNode.class);\r
-               button.setZIndex(3);\r
-               button.addActionListener(new ActionListener() {\r
-                       @Override\r
-                       public void actionPerformed(ActionEvent e) {\r
-                               if(rotate) {\r
-                                       button.setText("Start rotation");\r
-                                       rotate = false;\r
-                               } else {\r
-                                       button.setText("Stop rotation");\r
-                                       rotate = true;\r
-                               }\r
-                       }});\r
-               button.setText("Stop rotation");\r
-               button.setBounds(new Rectangle2D.Double(0, 0, 100, 20));\r
-               button.setTransform(AffineTransform.getTranslateInstance(100, 75));\r
-\r
-           SliderNode sn1 = nav.addNode(SliderNode.class);\r
-           sn1.setZIndex(4);\r
-               sn1.setTransform(AffineTransform.getTranslateInstance(100, 100));\r
-               sn1.setBounds(new Rectangle2D.Double(0, 0, 150, 50));\r
-               \r
-               sn1.setTitle("Rotation speed 1");\r
-               sn1.setMaximum(100);\r
-               sn1.setValue(20);\r
-               sn1.setMajorTickSpacing(20);\r
-               sn1.setMinorTickSpacing(5);\r
-               sn1.setPaintTicks(true);\r
-\r
-               \r
-           JSlider slider2 = new JSlider();\r
-           slider2.setBorder(BorderFactory.createTitledBorder("Rotation speed 2"));\r
-           slider2.setMaximum(100);\r
-           slider2.setValue(50);\r
-           slider2.setMajorTickSpacing(20);\r
-           slider2.setMinorTickSpacing(5);\r
-           slider2.setPaintTicks(true);\r
-           SliderNode sn2 = nav.addNode(SliderNode.class);\r
-           sn2.setZIndex(5);\r
-//         sn2.setComponent(slider2);\r
-               sn2.setTransform(AffineTransform.getTranslateInstance(250, 100));\r
-               sn2.setBounds(new Rectangle2D.Double(0, 0, 150, 50));\r
-               \r
-               LabelNode cn2 = nav.addNode(LabelNode.class);\r
-               cn2.setZIndex(6);\r
-               cn2.setText("Name");\r
-               cn2.setBounds(new Rectangle2D.Double(0, 0, 100, 25));\r
-               cn2.setTransform(AffineTransform.getTranslateInstance(100, 30));\r
-\r
-               MonitorNode cn3 = nav.addNode(MonitorNode.class);\r
-               cn3.setZIndex(7);\r
-               cn3.setTransform(AffineTransform.getTranslateInstance(250, 50));\r
-               cn3.setBounds(new Rectangle2D.Double(0, 0, 100, 25));\r
-               \r
-               LabelNode cn4 = nav.addNode(LabelNode.class);\r
-               cn4.setZIndex(8);\r
-               cn4.setText("Phone number");\r
-               cn4.setTransform(AffineTransform.getTranslateInstance(250, 30));\r
-               cn4.setBounds(new Rectangle2D.Double(0, 0, 100, 25));\r
-               \r
-               transform2 = transform.addNode(TransformNode.class);\r
-               transform2.setZIndex(9);\r
-               \r
-               ShapeNode box2 = transform2.addNode(ShapeNode.class);\r
-               box2.setShape(new Rectangle2D.Double(-30, -30, 60, 60));\r
-\r
-               Trend2DNode trend = nav.addNode(Trend2DNode.class);\r
-               trend.setZIndex(10);\r
-               trend.setBounds(new Rectangle2D.Double(0, 0, 200, 200));\r
-               trend.setPosition(400, 200);\r
-               List<Trend2DNode.TrendPoint> points = new ArrayList<Trend2DNode.TrendPoint>();\r
-               int p = 0;\r
-               for(p = 0; p < 20;) {\r
-                       points.add(new Trend2DNode.TrendPoint(p++, Math.random()));\r
-               }\r
-               trend.updatePoints(points);\r
-               \r
-               RulerNode ruler = nav.addNode(RulerNode.class);\r
-               ruler.setZIndex(11);\r
-\r
-//     String script =\r
-//             "if(level === undefined) {\n"+\r
-//             "       var level = (time/10)%200;\n"+\r
-//                     "   if(level > 100) level = 200 - level;\n"+\r
-//             "}\n"+\r
-//             "var y = 620;\n"+\r
-//             "var height = 285*level/100;\n"+\r
-//             "svg.getElement(\"fill\").setAttribute(\"y\", 1, y-height);\n"+\r
-//             "svg.getElement(\"fill\").setAttribute(\"height\", 1, height);\n"+\r
-//             "svg.getElement(\"upperlevel\").setAttribute(\"transform\", 1, \"translate(1.4285587, \"+(280-height)+\")\");\n";\r
-\r
-       String script1 =\r
-               "var y = 620;\n"+\r
-               "var height = 285*level/100;\n"+\r
-               "var r = (2*level).toString(16); var b = (2*(100-level)).toString(16);\n"+\r
-               "var color = \"#\"+(r.length == 1 ? \"0\"+r : r)+\"00\"+(b.length == 1 ? \"0\"+b : b);\n"+\r
-               "svg.getElement(\"fill\").setAttribute(\"fill\", 0, color)\n"+\r
-               "svg.getElement(\"upperlevel\").setAttribute(\"fill\", 0, color)\n"+\r
-               "svg.getElement(\"bottom\").setAttribute(\"fill\", 0, color)\n"+\r
-               "svg.getElement(\"fill\").setAttribute(\"y\", 1, y-height);\n"+\r
-               "svg.getElement(\"fill\").setAttribute(\"height\", 1, height);\n"+\r
-               "svg.getElement(\"upperlevel\").setAttribute(\"transform\", 1, \"translate(1.4285587, \"+(280-height)+\")\");\n";\r
-\r
-       String script2 =\r
-               "var level = (time/10)%200;\n"+\r
-                       "if(level > 100) level = 200 - level;\n"+\r
-               "var y = 620;\n"+\r
-               "var height = 285*level/100;\n"+\r
-               "svg.getElement(\"fill\").setAttribute(\"y\", 1, y-height);\n"+\r
-               "svg.getElement(\"fill\").setAttribute(\"height\", 1, height);\n"+\r
-               "svg.getElement(\"upperlevel\").setAttribute(\"transform\", 1, \"translate(1.4285587, \"+(280-height)+\")\");\n";\r
-       \r
-       sn1.setActionListener(new ActionListener() {\r
-                       @Override\r
-                       public void actionPerformed(ActionEvent e) {\r
-                               Integer v = Integer.parseInt(e.getActionCommand());\r
-                               t1 = (float)v/1000;\r
-                       }});\r
-       sn2.setActionListener(new ActionListener() {\r
-                       @Override\r
-                       public void actionPerformed(ActionEvent e) {\r
-                               Integer v = Integer.parseInt(e.getActionCommand());\r
-                               t2 = (float)v/1000;\r
-                       }});\r
-       \r
-               svg1.setScript(script1);\r
-               svg2.setScript(script1);\r
-\r
-               while(!interrupted) {\r
-                       if(rotate) {\r
-                               transform.rotate(t1);\r
-                               transform2.rotate(t2);\r
-                               \r
-                               points.add(new Trend2DNode.TrendPoint(p++, Math.random()));\r
-                               trend.updatePoints(points);\r
-                       }\r
-                       svg1.setValue("level", new Double(t1*1000));\r
-                       svg2.setValue("level", new Double(t2*1000));\r
-                       \r
-                       svg3.animate(script2);\r
-                       svg4.animate(script2);\r
-\r
-                       repaint();\r
-                       try {\r
-                               Thread.sleep(1000);\r
-                       } catch (InterruptedException e) {\r
-                               // TODO Auto-generated catch block\r
-                               e.printStackTrace();\r
-                       }\r
-               }\r
-               \r
-               close();\r
-       }\r
-       \r
-       public void repaint() {\r
-               \r
-       }\r
-\r
-}\r
+/*******************************************************************************
+ * Copyright (c) 2007, 2010 Association for Decentralized Information Management
+ * in Industry THTH ry.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     VTT Technical Research Centre of Finland - initial API and implementation
+ *******************************************************************************/
+package org.simantics.scenegraph.example;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Rectangle2D;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.swing.BorderFactory;
+import javax.swing.JSlider;
+import org.simantics.scenegraph.g2d.G2DSceneGraph;
+import org.simantics.scenegraph.g2d.nodes.AnimatedSVGNode;
+import org.simantics.scenegraph.g2d.nodes.GridNode;
+import org.simantics.scenegraph.g2d.nodes.NavigationNode;
+import org.simantics.scenegraph.g2d.nodes.RulerNode;
+import org.simantics.scenegraph.g2d.nodes.ShapeNode;
+import org.simantics.scenegraph.g2d.nodes.TransformNode;
+import org.simantics.scenegraph.g2d.nodes.Trend2DNode;
+import org.simantics.scenegraph.swing.ButtonNode;
+import org.simantics.scenegraph.swing.LabelNode;
+import org.simantics.scenegraph.swing.MonitorNode;
+import org.simantics.scenegraph.swing.SliderNode;
+
+public class SampleThread implements Runnable {
+
+       public G2DSceneGraph sg = new G2DSceneGraph();
+       protected TransformNode transform = null;
+       protected TransformNode transform2 = null;
+       
+       protected boolean interrupted = false;
+       
+       public void start() {
+               interrupted = false;
+               Thread t = new Thread(this);
+               t.start();
+       }
+       
+       public void stop() {
+               interrupted = true;
+       }
+       
+       protected void close() {
+       }
+
+       protected boolean init() {
+               return true;
+       }
+       
+       protected boolean rotate = true;
+       protected float t1 = 0;
+       protected float t2 = 0;
+       
+       private String loadSVG(String filename) throws IOException {
+               String data = "";
+               BufferedReader reader = new BufferedReader(new InputStreamReader(this.getClass().getResourceAsStream(filename)));
+
+               while(reader.ready()) {
+                       data += reader.readLine();
+               }
+
+               reader.close();
+               return data;
+       }
+       
+       public void run() {
+               if(!init()) return;
+
+               final NavigationNode nav = sg.addNode(NavigationNode.class);
+               GridNode grid = nav.addNode(GridNode.class);
+               grid.setZIndex(1);
+               
+//             AnimatedSVGNode bmw = null;
+               AnimatedSVGNode svg1 = null;
+               AnimatedSVGNode svg2 = null;
+               AnimatedSVGNode svg3 = null;
+               AnimatedSVGNode svg4 = null;
+               try {
+                       String data = loadSVG("tynnyri.svg");
+                       svg1 = nav.addNode(AnimatedSVGNode.class);
+                       svg1.setZIndex(20);
+                       svg1.setData(data);
+                       svg1.setTransform(AffineTransform.getTranslateInstance(0, 150));
+                       svg1.useMipMap(false);
+                       
+                       svg2 = nav.addNode(AnimatedSVGNode.class);
+                       svg2.setZIndex(20);
+                       svg2.setData(data);
+                       svg2.setTransform(AffineTransform.getTranslateInstance(250, 150));
+                       svg2.useMipMap(false);
+                       
+                       svg3 = nav.addNode(AnimatedSVGNode.class);
+                       svg3.setZIndex(20);
+                       svg3.setData(data);
+                       svg3.setTransform(AffineTransform.getTranslateInstance(500, 150));
+                       svg3.useMipMap(false);
+                       
+                       svg4 = nav.addNode(AnimatedSVGNode.class);
+                       svg4.setZIndex(20);
+                       svg4.setData(data);
+                       svg4.setTransform(AffineTransform.getTranslateInstance(750, 150));
+                       svg4.useMipMap(false);
+               } catch(IOException e) {
+                       e.printStackTrace();
+               }
+
+//             try {
+//                     bmw = nav.addNode(AnimatedSVGNode.class);
+//                     bmw.setZIndex(50);
+//                     bmw.setData(loadSVG("D:\\bemari.svg"));
+//                     bmw.setPosition(100, 100);
+////                   bmw.setTargetSize(50, 50);
+//                     bmw.useMipMap(false);
+//                     
+//                     String init = "if(rotate === undefined || y === undefined || x === undefined) { var rotate = 0; var y = 0; var x = 0; }";
+//                     String left = "rotate = (rotate - 10)%360;";
+//                     String right = "rotate = (rotate + 10)%360;";
+//                     String up = "x -= (Math.cos(rotate*3.14/180))*20; y -= (Math.sin(rotate*3.14/180))*20; ";
+//                     String down = "x += (Math.cos(rotate*3.14/180))*20; y += (Math.sin(rotate*3.14/180))*20; ";
+//                     
+//                     String base = 
+//                             "t.setValue(\"rotate\", rotate); "+
+//                             "t.setValue(\"x\", x); "+
+//                             "t.setValue(\"y\", y); "+
+//                             "var m = new Array(6); "+
+//                             "m[0] = Math.cos(rotate*3.14/180); "+
+//                             "m[2] = -Math.sin(rotate*3.14/180); "+
+//                             "m[4] = x; "+
+//                             
+//                             "m[1] = Math.sin(rotate*3.14/180); "+
+//                             "m[3] = Math.cos(rotate*3.14/180); "+
+//                             "m[5] = y; "+
+//                             "if(svg.getRoot().hasAttribute(\"transform\", 1)) {"+
+//                             "    svg.getRoot().setAttribute(\"transform\", 1, \"matrix(\"+m.join(\",\")+\")\");"+
+//                             "} else {"+
+//                             "       svg.getRoot().addAttribute(\"transform\", 1, \"matrix(\"+m.join(\",\")+\")\");"+
+//                             "}";
+//                     bmw.registerEventAnimation("LEFT", init+left+base);
+//                     bmw.registerEventAnimation("RIGHT", init+right+base);
+//                     bmw.registerEventAnimation("UP", init+up+base);
+//                     bmw.registerEventAnimation("DOWN", init+down+base);
+//             } catch(IOException e) {
+//                     e.printStackTrace();
+//             }
+//             
+               transform = nav.addNode(TransformNode.class);
+               transform.setZIndex(3);
+               AffineTransform at = new AffineTransform();
+               at.translate(200, 200);
+               transform.setTransform(at);
+               ShapeNode box = transform.addNode(ShapeNode.class);
+               box.setZIndex(1);
+               box.setShape(new Rectangle2D.Double(-50, -50, 100, 100));
+
+               MonitorNode cn = nav.addNode(MonitorNode.class);
+               cn.setZIndex(2);
+               cn.setTransform(AffineTransform.getTranslateInstance(100, 50));
+               cn.setBounds(new Rectangle2D.Double(0, 0, 100, 25));
+
+               final ButtonNode button = nav.addNode(ButtonNode.class);
+               button.setZIndex(3);
+               button.addActionListener(new ActionListener() {
+                       @Override
+                       public void actionPerformed(ActionEvent e) {
+                               if(rotate) {
+                                       button.setText("Start rotation");
+                                       rotate = false;
+                               } else {
+                                       button.setText("Stop rotation");
+                                       rotate = true;
+                               }
+                       }});
+               button.setText("Stop rotation");
+               button.setBounds(new Rectangle2D.Double(0, 0, 100, 20));
+               button.setTransform(AffineTransform.getTranslateInstance(100, 75));
+
+           SliderNode sn1 = nav.addNode(SliderNode.class);
+           sn1.setZIndex(4);
+               sn1.setTransform(AffineTransform.getTranslateInstance(100, 100));
+               sn1.setBounds(new Rectangle2D.Double(0, 0, 150, 50));
+               
+               sn1.setTitle("Rotation speed 1");
+               sn1.setMaximum(100);
+               sn1.setValue(20);
+               sn1.setMajorTickSpacing(20);
+               sn1.setMinorTickSpacing(5);
+               sn1.setPaintTicks(true);
+
+               
+           JSlider slider2 = new JSlider();
+           slider2.setBorder(BorderFactory.createTitledBorder("Rotation speed 2"));
+           slider2.setMaximum(100);
+           slider2.setValue(50);
+           slider2.setMajorTickSpacing(20);
+           slider2.setMinorTickSpacing(5);
+           slider2.setPaintTicks(true);
+           SliderNode sn2 = nav.addNode(SliderNode.class);
+           sn2.setZIndex(5);
+//         sn2.setComponent(slider2);
+               sn2.setTransform(AffineTransform.getTranslateInstance(250, 100));
+               sn2.setBounds(new Rectangle2D.Double(0, 0, 150, 50));
+               
+               LabelNode cn2 = nav.addNode(LabelNode.class);
+               cn2.setZIndex(6);
+               cn2.setText("Name");
+               cn2.setBounds(new Rectangle2D.Double(0, 0, 100, 25));
+               cn2.setTransform(AffineTransform.getTranslateInstance(100, 30));
+
+               MonitorNode cn3 = nav.addNode(MonitorNode.class);
+               cn3.setZIndex(7);
+               cn3.setTransform(AffineTransform.getTranslateInstance(250, 50));
+               cn3.setBounds(new Rectangle2D.Double(0, 0, 100, 25));
+               
+               LabelNode cn4 = nav.addNode(LabelNode.class);
+               cn4.setZIndex(8);
+               cn4.setText("Phone number");
+               cn4.setTransform(AffineTransform.getTranslateInstance(250, 30));
+               cn4.setBounds(new Rectangle2D.Double(0, 0, 100, 25));
+               
+               transform2 = transform.addNode(TransformNode.class);
+               transform2.setZIndex(9);
+               
+               ShapeNode box2 = transform2.addNode(ShapeNode.class);
+               box2.setShape(new Rectangle2D.Double(-30, -30, 60, 60));
+
+               Trend2DNode trend = nav.addNode(Trend2DNode.class);
+               trend.setZIndex(10);
+               trend.setBounds(new Rectangle2D.Double(0, 0, 200, 200));
+               trend.setPosition(400, 200);
+               List<Trend2DNode.TrendPoint> points = new ArrayList<Trend2DNode.TrendPoint>();
+               int p = 0;
+               for(p = 0; p < 20;) {
+                       points.add(new Trend2DNode.TrendPoint(p++, Math.random()));
+               }
+               trend.updatePoints(points);
+               
+               RulerNode ruler = nav.addNode(RulerNode.class);
+               ruler.setZIndex(11);
+
+//     String script =
+//             "if(level === undefined) {\n"+
+//             "       var level = (time/10)%200;\n"+
+//                     "   if(level > 100) level = 200 - level;\n"+
+//             "}\n"+
+//             "var y = 620;\n"+
+//             "var height = 285*level/100;\n"+
+//             "svg.getElement(\"fill\").setAttribute(\"y\", 1, y-height);\n"+
+//             "svg.getElement(\"fill\").setAttribute(\"height\", 1, height);\n"+
+//             "svg.getElement(\"upperlevel\").setAttribute(\"transform\", 1, \"translate(1.4285587, \"+(280-height)+\")\");\n";
+
+       String script1 =
+               "var y = 620;\n"+
+               "var height = 285*level/100;\n"+
+               "var r = (2*level).toString(16); var b = (2*(100-level)).toString(16);\n"+
+               "var color = \"#\"+(r.length == 1 ? \"0\"+r : r)+\"00\"+(b.length == 1 ? \"0\"+b : b);\n"+
+               "svg.getElement(\"fill\").setAttribute(\"fill\", 0, color)\n"+
+               "svg.getElement(\"upperlevel\").setAttribute(\"fill\", 0, color)\n"+
+               "svg.getElement(\"bottom\").setAttribute(\"fill\", 0, color)\n"+
+               "svg.getElement(\"fill\").setAttribute(\"y\", 1, y-height);\n"+
+               "svg.getElement(\"fill\").setAttribute(\"height\", 1, height);\n"+
+               "svg.getElement(\"upperlevel\").setAttribute(\"transform\", 1, \"translate(1.4285587, \"+(280-height)+\")\");\n";
+
+       String script2 =
+               "var level = (time/10)%200;\n"+
+                       "if(level > 100) level = 200 - level;\n"+
+               "var y = 620;\n"+
+               "var height = 285*level/100;\n"+
+               "svg.getElement(\"fill\").setAttribute(\"y\", 1, y-height);\n"+
+               "svg.getElement(\"fill\").setAttribute(\"height\", 1, height);\n"+
+               "svg.getElement(\"upperlevel\").setAttribute(\"transform\", 1, \"translate(1.4285587, \"+(280-height)+\")\");\n";
+       
+       sn1.setActionListener(new ActionListener() {
+                       @Override
+                       public void actionPerformed(ActionEvent e) {
+                               Integer v = Integer.parseInt(e.getActionCommand());
+                               t1 = (float)v/1000;
+                       }});
+       sn2.setActionListener(new ActionListener() {
+                       @Override
+                       public void actionPerformed(ActionEvent e) {
+                               Integer v = Integer.parseInt(e.getActionCommand());
+                               t2 = (float)v/1000;
+                       }});
+       
+               svg1.setScript(script1);
+               svg2.setScript(script1);
+
+               while(!interrupted) {
+                       if(rotate) {
+                               transform.rotate(t1);
+                               transform2.rotate(t2);
+                               
+                               points.add(new Trend2DNode.TrendPoint(p++, Math.random()));
+                               trend.updatePoints(points);
+                       }
+                       svg1.setValue("level", new Double(t1*1000));
+                       svg2.setValue("level", new Double(t2*1000));
+                       
+                       svg3.animate(script2);
+                       svg4.animate(script2);
+
+                       repaint();
+                       try {
+                               Thread.sleep(1000);
+                       } catch (InterruptedException e) {
+                               // TODO Auto-generated catch block
+                               e.printStackTrace();
+                       }
+               }
+               
+               close();
+       }
+       
+       public void repaint() {
+               
+       }
+
+}