]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scenegraph.swing/src/org/simantics/scenegraph/swing/JBooleanToggleValueNode.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.scenegraph.swing / src / org / simantics / scenegraph / swing / JBooleanToggleValueNode.java
diff --git a/bundles/org.simantics.scenegraph.swing/src/org/simantics/scenegraph/swing/JBooleanToggleValueNode.java b/bundles/org.simantics.scenegraph.swing/src/org/simantics/scenegraph/swing/JBooleanToggleValueNode.java
new file mode 100644 (file)
index 0000000..dd6f6d8
--- /dev/null
@@ -0,0 +1,129 @@
+/*******************************************************************************\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.swing;\r
+\r
+import java.awt.BasicStroke;\r
+import java.awt.Color;\r
+import java.awt.Cursor;\r
+import java.awt.Graphics2D;\r
+import java.awt.Shape;\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.util.HashSet;\r
+import java.util.Set;\r
+\r
+import javax.swing.JToggleButton;\r
+\r
+import org.simantics.scenegraph.utils.DummyComponent;\r
+\r
+public class JBooleanToggleValueNode extends ComponentNode<JToggleButton> implements ActionListener {\r
+    /**\r
+        * \r
+        */\r
+       private static final long serialVersionUID = 3255791584573492072L;\r
+\r
+       protected static final BasicStroke STROKE = new BasicStroke(1.0f);\r
+    protected static final Rectangle2D BOUNDS = new Rectangle2D.Double(-10, -10, 20, 20);\r
+\r
+    protected Boolean value = null;\r
+    protected transient Set<ActionListener> actionListeners = new HashSet<ActionListener>();\r
+\r
+    @SyncField("value")\r
+    public void setValue(Boolean value) {\r
+       this.value = value;\r
+       if(component instanceof JToggleButton) {\r
+               ((JToggleButton)component).setSelected(value == null ? false : value);\r
+       }\r
+    }\r
+    \r
+    @SyncField("transform")\r
+    public void setTransform(AffineTransform transform) {\r
+        assert(transform != null);\r
+        this.transform = transform;\r
+        this.transform.translate(-10, -10);\r
+    }\r
+\r
+    @Override\r
+    public void render(Graphics2D g2d) {\r
+        if (component != null) {\r
+               int width = (int)BOUNDS.getWidth();\r
+               int height = (int)BOUNDS.getHeight();\r
+               \r
+               AffineTransform ot = g2d.getTransform();\r
+               double sx = 1;\r
+               double sy = 1;\r
+            if(transform != null) {\r
+                g2d.transform(transform);\r
+                sx = g2d.getTransform().getScaleX();\r
+                sy = g2d.getTransform().getScaleY();\r
+                g2d.scale(1/sx, 1/sy);\r
+            }\r
+            component.setSize((int)(width*sx), (int)(height*sy));\r
+               component.paint(g2d);\r
+               \r
+               g2d.setTransform(ot);\r
+        }\r
+    }\r
+    \r
+    /**\r
+     * Helper method to be used inside MonitorClass\r
+     * @return\r
+     */\r
+    public static Shape getOutline() {\r
+        return BOUNDS;\r
+    }\r
+    \r
+       @Override\r
+       public Rectangle2D getBoundsInLocal() {\r
+               return BOUNDS;\r
+       }\r
+\r
+       /**\r
+        * ClientSide method for handling event and transforming it\r
+        * NOTE: This is just a wrapper method\r
+        */\r
+       @Override\r
+       public void actionPerformed(ActionEvent e) {\r
+               Boolean s = component.isSelected();\r
+               performAction(new ActionEvent(new DummyComponent(), ActionEvent.ACTION_PERFORMED, ""+s));\r
+       }\r
+       \r
+       /**\r
+        * ServerSide method for calling the actionlisteners\r
+        * @param e\r
+        */\r
+    @ServerSide\r
+    protected void performAction(ActionEvent e) {\r
+               for(ActionListener listener : actionListeners)\r
+                       listener.actionPerformed(e);\r
+    }\r
+       \r
+    public void addActionListener(ActionListener l) {\r
+       actionListeners.add(l);\r
+    }\r
+    \r
+    public void removeActionListener(ActionListener l) {\r
+       actionListeners.remove(l);\r
+    }\r
+    \r
+    @Override\r
+    public void init() {\r
+       Boolean s = value == null ? false : value;\r
+        component = new JToggleButton(null, null, s);\r
+        component.setCursor(new Cursor(Cursor.HAND_CURSOR));\r
+        component.addActionListener(this);\r
+        component.setBackground(Color.RED);\r
+        super.init();\r
+    }\r
+}\r