JAL-1807 includes ?j2sdebug flag and DebugJS._(msg)
[jalviewjs.git] / site / j2s / swingjs / plaf / JSSliderUI.java
1 package swingjs.plaf;\r
2 \r
3 \r
4 import javax.swing.SwingConstants;\r
5 \r
6 import jsjava.awt.Dimension;\r
7 import jsjava.beans.PropertyChangeEvent;\r
8 import jsjava.beans.PropertyChangeListener;\r
9 import jsjavax.swing.JSlider;\r
10 import jsjavax.swing.event.ChangeEvent;\r
11 import jsjavax.swing.event.ChangeListener;\r
12 import swingjs.J2SRequireImport;\r
13 import swingjs.JSToolkit;\r
14 import swingjs.api.DOMNode;\r
15 \r
16 @J2SRequireImport(swingjs.jquery.JQueryUI.class)\r
17 public class JSSliderUI extends JSComponentUI implements PropertyChangeListener, ChangeListener {\r
18 \r
19         private JSlider jSlider;\r
20         private int min, max, val;\r
21         private String orientation;\r
22         \r
23         protected DOMNode jqSlider;\r
24         private int z0 = Integer.MIN_VALUE;\r
25 \r
26         public JSSliderUI() {\r
27                 needPreferred = true;\r
28                 setDoc();\r
29         }\r
30 \r
31         static {                \r
32                 JSToolkit.getJavaResource("swingjs/jquery/jquery-ui-slider.css");\r
33                 JSToolkit.getJavaResource("swingjs/jquery/jquery-ui-slider.js");\r
34         }\r
35         @Override\r
36         public DOMNode getDOMObject() {\r
37                 JSlider js  = jSlider = (JSlider) c;\r
38                 boolean isNew = (domNode == null);\r
39                 if (isNew) {\r
40                         domNode = wrap("div", id + "_wrap", jqSlider = DOMNode.createElement("div", id));\r
41                         DOMNode.setAttr(domNode, "className", "swingjs");\r
42                         orientation = (js.getOrientation() == SwingConstants.VERTICAL ? "vertical" : "horizontal");\r
43                         min = js.getMinimum();\r
44                         max = js.getMaximum();\r
45                         val = js.getValue();\r
46                                         \r
47 \r
48                         /**     \r
49                          * @j2sNative\r
50                          *\r
51     var me = this;\r
52     me.$(me.jqSlider).slider({\r
53       orientation: me.orientation,\r
54       range: false,\r
55       min: me.min,\r
56       max: me.max,\r
57       value: me.val,\r
58       change: function( event, handle ) {\r
59         me.jqueryCallback(event, handle);\r
60       },\r
61       slide: function( event, handle ) {\r
62         me.jqueryCallback(event, handle);\r
63       }\r
64     });\r
65     \r
66                          */\r
67                         {}\r
68                         \r
69                 }\r
70                 setZ(isNew);\r
71     return domNode;\r
72         }\r
73 \r
74         /**\r
75          * \r
76          * @param isNew\r
77          */\r
78         private void setZ(boolean isNew) {\r
79                 int z = JSToolkit.getZIndex(this, null);\r
80                 if (z == z0)\r
81                         return;\r
82                 z0 = z;\r
83                 System.out.println("JSSliderUI setting z to " + z);\r
84                 DOMNode sliderTrack = null;\r
85                 DOMNode sliderHandle = null;\r
86                 /**\r
87                  * @j2sNative\r
88                  * \r
89                  * sliderTrack = this.domNode.firstChild;\r
90                  * sliderHandle = sliderTrack.firstChild;\r
91                  * sliderTrack.style["z-index"] = z++;\r
92                  * sliderHandle.style["z-index"] = z++;\r
93                  */\r
94                 {}\r
95                 // mark the handle and track with the "swingjs-ui" class\r
96                 // so as to ignore all mouse/touch events from Jmol._jsSetMouse();\r
97                 if (isNew) {\r
98                         $(sliderHandle).addClass("swingjs-ui");\r
99                         $(sliderTrack).addClass("swingjs-ui");\r
100                 }\r
101         }\r
102 \r
103         /**\r
104          * called from JavaScript via the hook added in getDOMObject  \r
105          * \r
106          * @param event\r
107          * @param ui\r
108          */\r
109         public void jqueryCallback(Object event, DOMNode ui) {\r
110                 // from JavaScript\r
111                 int value = 0;\r
112                 \r
113                 /**\r
114                  * @j2sNative\r
115                  * \r
116                  * value = ui.value;\r
117                  * \r
118                  */\r
119                 {}\r
120                 \r
121                 jSlider.setValue(val = value);\r
122         }\r
123         \r
124         protected Dimension setHTMLSize(DOMNode obj, boolean addCSS) {\r
125                 return (orientation == "horizontal" ? new Dimension(100, 20) : new Dimension(20, 100));\r
126         }\r
127 \r
128         @Override\r
129         protected void installJSUI() {\r
130           jSlider.addChangeListener(this);\r
131           jSlider.addPropertyChangeListener(this);\r
132         }\r
133 \r
134         @Override\r
135         protected void uninstallJSUI() {\r
136           jSlider.removeChangeListener(this);\r
137           jSlider.removePropertyChangeListener(this);\r
138         }\r
139 \r
140         @Override\r
141         public void propertyChange(PropertyChangeEvent e) {\r
142                 String prop = e.getPropertyName();\r
143                 System.out.println(id + " propertyChange " + prop);\r
144                 if (prop == "ancestor")\r
145                         setZ(false);\r
146         }\r
147 \r
148         @Override\r
149         public void stateChanged(ChangeEvent e) {\r
150                 // from Java\r
151                 int v;\r
152                 if ((v = jSlider.getMinimum()) != min)\r
153                         setSliderAttr("min", min = v);\r
154                 if ((v = jSlider.getMaximum()) != max)\r
155                         setSliderAttr("max", max = v);          \r
156                 if ((v = jSlider.getValue()) != val)\r
157                         setSliderAttr("value", val = v);                \r
158                 setZ(false);\r
159         }\r
160 \r
161         private void setSliderAttr(String key, int val) {\r
162                 System.out.println(id + " setting " + key + " = " + val);\r
163                 /**\r
164                  * @j2sNative\r
165                  * \r
166                  *  var a = {};\r
167                  *  a[key]= val;\r
168                  *  this.$(this.jqSlider).slider(a);\r
169                  */\r
170                 {}\r
171         }\r
172 \r
173 }\r