1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.vectomatic.svg.edit.client.gxt.binding;
19
20 import org.vectomatic.svg.edit.client.gxt.widget.SpinnerFieldExt;
21
22 import com.extjs.gxt.ui.client.data.ModelData;
23 import com.extjs.gxt.ui.client.event.ClickRepeaterEvent;
24 import com.extjs.gxt.ui.client.event.Events;
25 import com.extjs.gxt.ui.client.event.FieldEvent;
26 import com.extjs.gxt.ui.client.event.Listener;
27 import com.extjs.gxt.ui.client.util.ClickRepeater;
28
29
30
31
32
33
34
35
36 public class SpinnerFieldExtBinding extends DelayedBindingBase {
37 private SpinnerFieldExt spinnerField;
38 private boolean disabled;
39 private Listener<FieldEvent> changeListener = new Listener<FieldEvent>() {
40 public void handleEvent(FieldEvent fe) {
41 handleChange();
42 }
43 };
44
45 private Listener<ClickRepeaterEvent> repeaterDownListener = new Listener<ClickRepeaterEvent>() {
46 public void handleEvent(ClickRepeaterEvent re) {
47 disabled = true;
48 }
49 };
50 private Listener<ClickRepeaterEvent> repeaterUpListener = new Listener<ClickRepeaterEvent>() {
51 public void handleEvent(ClickRepeaterEvent re) {
52 disabled = false;
53 handleChange();
54 }
55 };
56
57 public SpinnerFieldExtBinding(SpinnerFieldExt field, String property) {
58 super(field, property);
59 this.spinnerField = field;
60 }
61
62
63 @Override
64 public void bind(ModelData model) {
65 super.bind(model);
66 spinnerField.addListener(Events.Change, changeListener);
67 ClickRepeater repeater = spinnerField.getRepeater();
68 repeater.addListener(Events.OnMouseDown, repeaterDownListener);
69 repeater.addListener(Events.OnMouseUp, repeaterUpListener);
70 ClickRepeater twinRepeater = spinnerField.getTwinRepeater();
71 twinRepeater.addListener(Events.OnMouseDown, repeaterDownListener);
72 twinRepeater.addListener(Events.OnMouseUp, repeaterUpListener);
73 }
74
75 @Override
76 public void unbind() {
77 spinnerField.removeListener(Events.Change, changeListener);
78 ClickRepeater repeater = spinnerField.getRepeater();
79 repeater.removeListener(Events.OnMouseDown, repeaterDownListener);
80 repeater.removeListener(Events.OnMouseUp, repeaterUpListener);
81 ClickRepeater twinRepeater = spinnerField.getTwinRepeater();
82 twinRepeater.removeListener(Events.OnMouseDown, repeaterDownListener);
83 twinRepeater.removeListener(Events.OnMouseUp, repeaterUpListener);
84 super.unbind();
85 }
86
87 public void handleChange() {
88 if (!disabled) {
89 commitChanges();
90 }
91 }
92 }