1 package swingjs.plaf;
\r
3 import java.util.HashMap;
\r
4 import java.util.Map;
\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
13 public class JSRadioButtonUI extends JSButtonUI {
\r
15 private DOMNode label;
\r
16 private static Map<ButtonGroup, String> groupNames;
\r
20 public DOMNode getDOMObject() {
\r
21 return getButtonObject("radio");
\r
25 protected String getPropertyPrefix() {
\r
26 return "RadioButton.";
\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
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
45 if (groupNames == null)
\r
46 groupNames = new HashMap<ButtonGroup, String>();
\r
47 ButtonGroup bg = null;
\r
50 if (b.getModel() instanceof DefaultButtonModel) {
\r
51 bg = ((DefaultButtonModel) b.getModel()).getGroup();
\r
52 name = groupNames.get(bg);
\r
54 groupNames.put(bg, name = id);
\r
58 domBtn = enableNode = createDOMObject("input", id, "type", myType, "name",
\r
60 label = textNode = createDOMObject("label", id + "l", "htmlFor", id);
\r
62 if (b.isSelected() || isNew)
\r
63 DOMNode.setAttr(domBtn, "checked", "true");
\r
65 DOMNode.setAttr(label, "innerHTML", ((AbstractButton) c).getText()),
\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
71 Dimension drad = setHTMLSize1(domBtn, false, false);
\r
72 /*Dimension dlab = */ setHTMLSize1(label, false, false);
\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
81 // now wrap these in a div
\r
82 obj = wrap("div", id + "_0", domBtn, label);
\r
83 DOMNode.setStyles(obj, "position", "absolute");
\r
85 // must re-introduce these to the original object
\r
87 obj.appendChild(domBtn);
\r
88 obj.appendChild(label);
\r
90 return DOMNode.setSize(obj, dobj.width, dobj.height);
\r