]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scenegraph.swing/src/org/simantics/scenegraph/swing/RadioButtonListNode.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.scenegraph.swing / src / org / simantics / scenegraph / swing / RadioButtonListNode.java
1 /*******************************************************************************\r
2  * Copyright (c) 2007, 2010 Association for Decentralized Information Management\r
3  * in Industry THTH ry.\r
4  * All rights reserved. This program and the accompanying materials\r
5  * are made available under the terms of the Eclipse Public License v1.0\r
6  * which accompanies this distribution, and is available at\r
7  * http://www.eclipse.org/legal/epl-v10.html\r
8  *\r
9  * Contributors:\r
10  *     VTT Technical Research Centre of Finland - initial API and implementation\r
11  *******************************************************************************/\r
12 package org.simantics.scenegraph.swing;\r
13 \r
14 import java.awt.Color;\r
15 import java.awt.Font;\r
16 import java.awt.event.ActionEvent;\r
17 import java.awt.event.ActionListener;\r
18 import java.util.HashMap;\r
19 import java.util.List;\r
20 import java.util.Map;\r
21 \r
22 import javax.swing.Box;\r
23 import javax.swing.BoxLayout;\r
24 import javax.swing.JRadioButton;\r
25 \r
26 public class RadioButtonListNode extends ComponentNode<Box> implements ActionListener {\r
27     /**\r
28      * \r
29      */\r
30     private static final long serialVersionUID = 7073028693751719102L;\r
31 \r
32     protected boolean editable = true;\r
33     protected Object value = "";\r
34     protected String tooltip = "";\r
35     protected double borderWidth = 0;\r
36 \r
37     protected transient ActionListener actionListener = null;\r
38 \r
39     protected Font font = null;\r
40     protected Color color = null;\r
41     protected Map<String, JRadioButton> items = new HashMap<String, JRadioButton>();\r
42     \r
43     @Override\r
44     public String toString() {\r
45         return super.toString() + "[editable=" + editable + ", value=" + value + "]";\r
46     }\r
47     \r
48     @Override\r
49     public void init() {\r
50         component = new Box(BoxLayout.Y_AXIS);\r
51         component.setEnabled(editable);\r
52         component.setLocation(0, 0);\r
53         \r
54         super.init();\r
55     }\r
56 \r
57     @SyncField("items")\r
58     public void setItems(List<String> items) {\r
59         this.items.clear();\r
60         component.removeAll();\r
61         for(String item : items) {\r
62                 JRadioButton btn = new JRadioButton();\r
63                 btn.setText(item);\r
64                 btn.addActionListener(this);\r
65                 component.add(btn);\r
66                 this.items.put(item, btn);\r
67         }\r
68         if(items.size() > 0)\r
69                 ((JRadioButton)component.getComponent(0)).setSelected(true); // First item selected\r
70 \r
71         component.doLayout();\r
72     }\r
73 \r
74     @SyncField("editable")\r
75     public void setEditable(boolean value) {\r
76         this.editable = value;\r
77 \r
78         if(component != null) {\r
79             component.setEnabled(value);\r
80         }\r
81     }\r
82 \r
83     @PropertySetter("Stroke Width")\r
84     @SyncField("borderWidth")\r
85     public void setBorderWidth(Float borderWidth) {\r
86         this.borderWidth = borderWidth;\r
87 //        if(component != null) {\r
88 //            ((TextField)component).setBorder(borderWidth);\r
89 //        }\r
90     }\r
91 \r
92     @SyncField("value")\r
93     public void setValue(Object value) {\r
94         this.value = value;\r
95         // RemoteViewer does not have component initialized\r
96         if (component != null && value != null) {\r
97                 JRadioButton b = items.get(value);\r
98                 if(b != null) {\r
99                         for(JRadioButton i : items.values()) {\r
100                                 if(i == b) {\r
101                                         i.setSelected(true);\r
102                                 } else {\r
103                                         i.setSelected(false);\r
104                                 }\r
105                         }\r
106                 }\r
107         }\r
108     }\r
109 \r
110     @SyncField("tooltip")\r
111     public void setToolTipText(String tooltip) {\r
112         this.tooltip = tooltip;\r
113         if (component != null) {\r
114             component.setToolTipText(tooltip);\r
115         }\r
116     }\r
117 \r
118     @PropertySetter("Font")\r
119     @SyncField("font")\r
120     public void setFont(Font font) {\r
121         this.font = font;\r
122         if (component != null) {\r
123             setComponentFont(font);\r
124         }\r
125     }\r
126 \r
127     @PropertySetter("Color")\r
128     @SyncField("color")\r
129     public void setColor(Color color) {\r
130         this.color = color;\r
131         if (component != null) {\r
132             component.setForeground(color);\r
133         }\r
134     }\r
135 \r
136     public Object getValue() {\r
137         return value;\r
138     }\r
139 \r
140     public Font getFont() {\r
141         return font;\r
142     }\r
143     \r
144     public void setActionListener(ActionListener actionListener) {\r
145         this.actionListener = actionListener;\r
146     }\r
147 \r
148     /**\r
149      * Wrapper method to send event to server side\r
150      * \r
151      * @param e\r
152      */\r
153     @ServerSide\r
154     public void performAction(ActionEvent e) {\r
155         if (actionListener != null) {\r
156             //System.out.println("MonitorNode.performAction(" + e + ")");\r
157             actionListener.actionPerformed(e);\r
158         }\r
159     }\r
160         @Override\r
161         public void actionPerformed(ActionEvent e) {\r
162                 JRadioButton b = items.get(e.getActionCommand());\r
163                 if(b != null) {\r
164                         for(JRadioButton i : items.values()) {\r
165                                 if(i == b) {\r
166                                         i.setSelected(true);\r
167                                 } else {\r
168                                         i.setSelected(false);\r
169                                 }\r
170                         }\r
171                 }\r
172                 performAction(e);\r
173         }\r
174 \r
175 }\r