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.CssContainer;
21 import org.vectomatic.svg.edit.client.gxt.form.DashArrayField;
22 import org.vectomatic.svg.edit.client.gxt.form.FloatSliderField;
23 import org.vectomatic.svg.edit.client.gxt.form.ImageHrefField;
24 import org.vectomatic.svg.edit.client.gxt.form.PaintField;
25 import org.vectomatic.svg.edit.client.gxt.form.ResetButtonField;
26 import org.vectomatic.svg.edit.client.gxt.form.SVGLengthField;
27 import org.vectomatic.svg.edit.client.gxt.form.ToggleGroupField;
28 import org.vectomatic.svg.edit.client.gxt.widget.SpinnerFieldExt;
29 import org.vectomatic.svg.edit.client.model.CssMetadata;
30 import org.vectomatic.svg.edit.client.model.IFieldFactory;
31 import org.vectomatic.svg.edit.client.model.IMetadata;
32 import org.vectomatic.svg.edit.client.model.svg.ComboStore;
33
34 import com.extjs.gxt.ui.client.binding.FieldBinding;
35 import com.extjs.gxt.ui.client.binding.FormBinding;
36 import com.extjs.gxt.ui.client.binding.SimpleComboBoxFieldBinding;
37 import com.extjs.gxt.ui.client.binding.TimeFieldBinding;
38 import com.extjs.gxt.ui.client.data.ModelData;
39 import com.extjs.gxt.ui.client.util.Format;
40 import com.extjs.gxt.ui.client.widget.Component;
41 import com.extjs.gxt.ui.client.widget.form.CheckBox;
42 import com.extjs.gxt.ui.client.widget.form.ComboBox;
43 import com.extjs.gxt.ui.client.widget.form.ComboBox.TriggerAction;
44 import com.extjs.gxt.ui.client.widget.form.Field;
45 import com.extjs.gxt.ui.client.widget.form.FormPanel;
46 import com.extjs.gxt.ui.client.widget.form.NumberField;
47 import com.extjs.gxt.ui.client.widget.form.SimpleComboBox;
48 import com.extjs.gxt.ui.client.widget.form.TextArea;
49 import com.extjs.gxt.ui.client.widget.form.TextField;
50 import com.extjs.gxt.ui.client.widget.form.TimeField;
51 import com.google.gwt.core.client.GWT;
52 import com.google.gwt.i18n.client.NumberFormat;
53 import com.google.gwt.user.client.ui.AbstractImagePrototype;
54
55
56
57
58
59 public class FormPanelUtils {
60
61 public static void createFieldBindings(FormPanel formPanel, FormBinding formBinding) {
62 GWT.log("Field count: " + formPanel.getFields().size());
63 for (Field<?> f : formPanel.getFields()) {
64 if (formBinding.getBinding(f) == null) {
65 String name = f.getName();
66 if (name != null && name.length() > 0) {
67 FieldBinding b = null;
68 if (f instanceof SimpleComboBox) {
69 b = new SimpleComboBoxFieldBinding((SimpleComboBox)f, f.getName());
70 } else if (f instanceof SVGLengthField) {
71 b = new SVGLengthFieldBinding((SVGLengthField)f, f.getName());
72 } else if (f instanceof FloatSliderField) {
73 b = new FloatSliderFieldBinding((FloatSliderField)f, f.getName());
74 } else if (f instanceof PaintField) {
75 b = new PaintFieldBinding((PaintField)f, f.getName());
76 } else if (f instanceof ResetButtonField) {
77 b = new ResetButtonBinding((ResetButtonField)f, f.getName());
78 } else if (f instanceof TimeField) {
79 b = new TimeFieldBinding((TimeField)f, f.getName());
80 } else if (f instanceof SpinnerFieldExt) {
81 b = new SpinnerFieldExtBinding((SpinnerFieldExt)f, f.getName());
82 } else if (f instanceof DashArrayField) {
83 b = new DashArrayFieldBinding((DashArrayField)f, f.getName());
84 } else if (f instanceof ImageHrefField) {
85 b = new ImageHrefFieldBinding((ImageHrefField)f, f.getName());
86 } else {
87 b = new FieldBinding(f, f.getName());
88 }
89 GWT.log("field: " + f.getName() + " -> " + b.getClass().getName());
90 formBinding.addFieldBinding(b);
91 }
92 }
93 }
94 }
95
96 public static final IFieldFactory TEXTFIELD_FACTORY = new IFieldFactory() {
97 @Override
98 public Component createField(IMetadata<?, ?> metadata) {
99 TextField<String> textField = new TextField<String>();
100 textField.setName(metadata.getName());
101 textField.setFieldLabel(Format.capitalize(metadata.getDescription()));
102 return textField;
103 }
104 };
105
106 public static final IFieldFactory TEXTAREA_FACTORY = new IFieldFactory() {
107 @Override
108 public Component createField(IMetadata<?, ?> metadata) {
109 TextArea textArea = new TextArea();
110 textArea.setName(metadata.getName());
111 textArea.setFieldLabel(Format.capitalize(metadata.getDescription()));
112 return textArea;
113 }
114 };
115
116 public static final IFieldFactory CHECKBOX_FACTORY = new IFieldFactory() {
117 @Override
118 public Component createField(IMetadata<?, ?> metadata) {
119 CheckBox checkBox = new CheckBox();
120 checkBox.setName(metadata.getName());
121 checkBox.setBoxLabel(Format.capitalize(metadata.getDescription()));
122 return checkBox;
123 }
124 };
125
126 public static final IFieldFactory NUMBER_FIELD_FACTORY = new IFieldFactory() {
127 @Override
128 public Component createField(IMetadata<?, ?> metadata) {
129 NumberField valueField = new NumberField();
130 valueField.setName(metadata.getName());
131 valueField.setFieldLabel(Format.capitalize(metadata.getDescription()));
132 valueField.setPropertyEditorType(Float.class);
133 return valueField;
134 }
135 };
136
137 public static final IFieldFactory SVGLENGTH_FIELD_FACTORY = new IFieldFactory() {
138 @Override
139 public Component createField(IMetadata<?, ?> metadata) {
140 SVGLengthField field = new SVGLengthField(-Float.MAX_VALUE, Float.MAX_VALUE, 1f);
141 field.setFieldLabel(Format.capitalize(metadata.getDescription()));
142 field.setName(metadata.getName());
143 return field;
144 }
145 };
146
147 public static final class SvgLengthFieldFactory implements IFieldFactory {
148 private float min;
149 private float max;
150 private float increment;
151 public SvgLengthFieldFactory() {
152 this(0f, 50f, 1f);
153 }
154 public SvgLengthFieldFactory(float min, float max, float increment) {
155 this.min = min;
156 this.max = max;
157 this.increment = increment;
158 }
159 @Override
160 public Component createField(IMetadata<?, ?> metadata) {
161 return new CssContainer((CssMetadata<?>)metadata, new SVGLengthField(min, max, increment));
162 }
163 };
164
165 public static final IFieldFactory SVGPAINT_FIELD_FACTORY = new IFieldFactory() {
166 @Override
167 public Component createField(IMetadata<?, ?> metadata) {
168 return new CssContainer((CssMetadata<?>)metadata, new PaintField());
169 }
170 };
171
172 public static final IFieldFactory SPINNER_FIELD_FACTORY = new IFieldFactory() {
173 @Override
174 public Component createField(IMetadata<?, ?> metadata) {
175 SpinnerFieldExt spinnerField = new SpinnerFieldExt();
176 spinnerField.setFireChangeEventOnSetValue(true);
177 spinnerField.setAllowDecimals(true);
178 spinnerField.setAllowNegative(false);
179 spinnerField.setFormat(NumberFormat.getFormat("#0.0"));
180 spinnerField.setMinValue(0);
181 spinnerField.setMaxValue(100);
182 return new CssContainer((CssMetadata<?>)metadata, spinnerField);
183 }
184 };
185
186 public static final IFieldFactory DASHARRAY_FIELD_FACTORY = new IFieldFactory() {
187
188 @Override
189 public Component createField(IMetadata<?, ?> metadata) {
190 return new CssContainer((CssMetadata<?>)metadata, new DashArrayField());
191 }
192
193 };
194
195 public static final IFieldFactory IMAGE_HREF_FIELD_FACTORY = new IFieldFactory() {
196
197 @Override
198 public Component createField(IMetadata<?, ?> metadata) {
199 ImageHrefField field = new ImageHrefField();
200 field.setName(metadata.getName());
201 field.setFieldLabel(Format.capitalize(metadata.getDescription()));
202 return field;
203 }
204 };
205
206
207
208 public static class ToggleGroupFieldFactory implements IFieldFactory {
209 private String[] values;
210 private String[] tooltips;
211 private AbstractImagePrototype icons[];
212
213 public ToggleGroupFieldFactory(String[] values,
214 String[] tooltips,
215 AbstractImagePrototype icons[]) {
216 this.values = values;
217 this.tooltips = tooltips;
218 this.icons = icons;
219 }
220
221 @Override
222 public Component createField(IMetadata<?, ?> metadata) {
223 return new CssContainer((CssMetadata<?>)metadata, new ToggleGroupField(values, tooltips, icons));
224 }
225 }
226
227 public static class ComboBoxFieldFactory implements IFieldFactory {
228 private ComboStore store;
229 public ComboBoxFieldFactory(ComboStore store) {
230 this.store = store;
231 }
232
233 @Override
234 public Component createField(IMetadata<?, ?> metadata) {
235 ComboBox<ModelData> comboBox = new ComboBox<ModelData>();
236 comboBox.setStore(store);
237 comboBox.setAllowBlank(false);
238 comboBox.setForceSelection(true);
239 comboBox.setTemplate(store.hasIcons() ? getIconTemplate() : getTemplate());
240 comboBox.setFireChangeEventOnSetValue(true);
241 comboBox.setDisplayField(ComboStore.LABEL);
242 comboBox.setTriggerAction(TriggerAction.ALL);
243 comboBox.setTypeAhead(true);
244 return comboBox;
245 }
246
247 private native String getTemplate()
248
249
250
251
252
253 ;
254
255 private native String getIconTemplate()
256
257
258
259
260
261 ;
262 }
263
264 public static class HSliderFieldFactory implements IFieldFactory {
265 private float min;
266 private float max;
267 public HSliderFieldFactory(float min, float max) {
268 this.min = min;
269 this.max = max;
270 }
271 @Override
272 public Component createField(IMetadata<?, ?> metadata) {
273 return new CssContainer((CssMetadata<?>)metadata, new FloatSliderField(min, max));
274 }
275 };
276
277
278
279
280
281
282
283 public static class CssFieldFactory implements IFieldFactory {
284 private IFieldFactory factory;
285 public CssFieldFactory(IFieldFactory factory) {
286 this.factory = factory;
287 }
288 @Override
289 public Component createField(IMetadata<?, ?> metadata) {
290 return new CssContainer((CssMetadata<?>)metadata, factory.createField(metadata));
291 }
292 };
293 }