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