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.form.SVGLengthField;
21 import org.vectomatic.svg.edit.client.gxt.widget.SpinnerFieldExt;
22 import org.vectomatic.svg.edit.client.model.svg.SVGLength;
23
24 import com.extjs.gxt.ui.client.data.ModelData;
25 import com.extjs.gxt.ui.client.event.ClickRepeaterEvent;
26 import com.extjs.gxt.ui.client.event.Events;
27 import com.extjs.gxt.ui.client.event.FieldEvent;
28 import com.extjs.gxt.ui.client.event.Listener;
29 import com.extjs.gxt.ui.client.util.ClickRepeater;
30 import com.extjs.gxt.ui.client.widget.form.SimpleComboBox;
31 import com.google.gwt.dom.client.Style;
32 import com.google.gwt.dom.client.Style.Unit;
33
34
35
36
37
38
39 public class SVGLengthFieldBinding extends DelayedBindingBase {
40 private SpinnerFieldExt valueField;
41 private boolean disabled;
42 private Listener<FieldEvent> changeListener = new Listener<FieldEvent>() {
43 public void handleEvent(FieldEvent fe) {
44 handleChange();
45 }
46 };
47
48 private Listener<ClickRepeaterEvent> repeaterDownListener = new Listener<ClickRepeaterEvent>() {
49 public void handleEvent(ClickRepeaterEvent re) {
50 disabled = true;
51 }
52 };
53 private Listener<ClickRepeaterEvent> repeaterUpListener = new Listener<ClickRepeaterEvent>() {
54 public void handleEvent(ClickRepeaterEvent re) {
55 disabled = false;
56 handleChange();
57 }
58 };
59
60 public SVGLengthFieldBinding(SVGLengthField field, String property) {
61 super(field, property);
62 }
63
64 @Override
65 public void bind(ModelData model) {
66 super.bind(model);
67 SVGLengthField lengthField = (SVGLengthField)field;
68 valueField = lengthField.getValueField();
69 valueField.addListener(Events.Change, changeListener);
70 ClickRepeater repeater = valueField.getRepeater();
71 repeater.addListener(Events.OnMouseDown, repeaterDownListener);
72 repeater.addListener(Events.OnMouseUp, repeaterUpListener);
73 ClickRepeater twinRepeater = valueField.getTwinRepeater();
74 twinRepeater.addListener(Events.OnMouseDown, repeaterDownListener);
75 twinRepeater.addListener(Events.OnMouseUp, repeaterUpListener);
76 lengthField.getUnitField().addListener(Events.Change, changeListener);
77 disabled = false;
78 }
79
80 @Override
81 public void unbind() {
82 SVGLengthField lengthField = (SVGLengthField)field;
83 SpinnerFieldExt valueField = lengthField.getValueField();
84 valueField.removeListener(Events.Change, changeListener);
85 ClickRepeater repeater = valueField.getRepeater();
86 repeater.removeListener(Events.OnMouseDown, repeaterDownListener);
87 repeater.removeListener(Events.OnMouseUp, repeaterUpListener);
88 ClickRepeater twinRepeater = valueField.getTwinRepeater();
89 twinRepeater.removeListener(Events.OnMouseDown, repeaterDownListener);
90 twinRepeater.removeListener(Events.OnMouseUp, repeaterUpListener);
91 lengthField.getUnitField().removeListener(Events.Change, changeListener);
92 super.unbind();
93 }
94
95 public void handleChange() {
96 SVGLengthField lengthField = (SVGLengthField)field;
97 SpinnerFieldExt valueField = lengthField.getValueField();
98 SimpleComboBox<Unit> unitField = lengthField.getUnitField();
99 Number value = valueField.getValue();
100 if (value != null) {
101 SVGLength length = model.get(property);
102 length.setValue(value.floatValue());
103 Style.Unit unit = null;
104 String rawUnit = unitField.getRawValue();
105 if (rawUnit != null && rawUnit.length() > 0) {
106 unit = unitField.getSimpleValue();
107 }
108 length.setUnit(unit);
109 model.set(property, length);
110 if (!disabled) {
111 commitChanges();
112 }
113 }
114 }
115 }