JAL-1807 includes ?j2sdebug flag and DebugJS._(msg)
[jalviewjs.git] / site / j2s / swingjs / plaf / JSRadioButtonUI.java
1 package swingjs.plaf;\r
2 \r
3 import java.util.HashMap;\r
4 import java.util.Map;\r
5 \r
6 import swingjs.api.DOMNode;\r
7 import jsjava.awt.Dimension;\r
8 import jsjavax.swing.AbstractButton;\r
9 import jsjavax.swing.ButtonGroup;\r
10 import jsjavax.swing.DefaultButtonModel;\r
11 import jsjavax.swing.JRadioButton;\r
12 \r
13 public class JSRadioButtonUI extends JSButtonUI {\r
14 \r
15         private DOMNode label;\r
16         private static Map<ButtonGroup, String> groupNames;\r
17         \r
18 \r
19         @Override\r
20         public DOMNode getDOMObject() {\r
21                 return getButtonObject("radio");\r
22         }\r
23 \r
24         @Override\r
25         protected String getPropertyPrefix() {\r
26                 return "RadioButton.";\r
27         }\r
28 \r
29         protected Dimension setHTMLSize(DOMNode obj, boolean addCSS) {\r
30                 // "absolute" is required for positioning of button, but must not be there for setting the size. \r
31                 DOMNode.setStyles(domBtn, "position", null);\r
32                 DOMNode.setStyles(label, "position", null);\r
33                 Dimension d = setHTMLSize1(obj, addCSS, false);\r
34                 DOMNode.setStyles(domBtn, "position", "absolute");\r
35                 DOMNode.setStyles(label, "position", "absolute");\r
36                 return d;\r
37         }\r
38 \r
39         protected DOMNode getButtonObject(String myType) {\r
40                 JRadioButton b = (JRadioButton) c;\r
41                 boolean isNew = false;\r
42                 boolean doAll = false;\r
43                 if (domNode == null) {\r
44                         doAll = true;\r
45                         if (groupNames == null)\r
46                                 groupNames = new HashMap<ButtonGroup, String>();\r
47                         ButtonGroup bg = null;\r
48                         String name = id;\r
49                         isNew = true;\r
50                         if (b.getModel() instanceof DefaultButtonModel) {\r
51                                 bg = ((DefaultButtonModel) b.getModel()).getGroup();\r
52                                 name = groupNames.get(bg);\r
53                                 if (name == null)\r
54                                         groupNames.put(bg, name = id);\r
55                                 else\r
56                                         isNew = false;\r
57                         }\r
58                         domBtn = enableNode = createDOMObject("input", id, "type", myType, "name",\r
59                                         name);\r
60                         label = textNode = createDOMObject("label", id + "l", "htmlFor", id);\r
61                 }\r
62                 if (b.isSelected() || isNew)\r
63                         DOMNode.setAttr(domBtn, "checked", "true");\r
64                 setCssFont(\r
65                                 DOMNode.setAttr(label, "innerHTML", ((AbstractButton) c).getText()),\r
66                                 c.getFont());\r
67                 // now wrap the two with a span and get its dimensions\r
68                 // along with the dimensions of the radio button by itself.\r
69                 // This is a hack, for sure.\r
70 \r
71                 Dimension drad = setHTMLSize1(domBtn, false, false);\r
72                 /*Dimension dlab = */ setHTMLSize1(label, false, false);\r
73                 \r
74                 DOMNode obj = wrap("div", "", domBtn, label);\r
75                 Dimension dobj = setHTMLSize1(obj, true, true);\r
76                 vCenter(domBtn, -75);\r
77                 vCenter(label, -50);\r
78                 DOMNode.setStyles(label, "position", "absolute", "left", drad.width + "px");\r
79                 DOMNode.setStyles(domBtn, "position", "absolute");\r
80                 if (doAll) {\r
81                         // now wrap these in a div\r
82                         obj = wrap("div", id + "_0", domBtn, label);\r
83                         DOMNode.setStyles(obj, "position", "absolute");\r
84                 } else {\r
85                         // must re-introduce these to the original object\r
86                         obj = domNode;\r
87                         obj.appendChild(domBtn);\r
88                         obj.appendChild(label);\r
89                 }\r
90                 return DOMNode.setSize(obj, dobj.width, dobj.height);\r
91         }\r
92 \r
93         \r
94 }\r