Mercurial > dive4elements > river
comparison gwt-client/src/main/java/org/dive4elements/river/client/client/ui/SelectProvider.java @ 5838:5aa05a7a34b7
Rename modules to more fitting names.
author | Sascha L. Teichmann <teichmann@intevation.de> |
---|---|
date | Thu, 25 Apr 2013 15:23:37 +0200 |
parents | flys-client/src/main/java/org/dive4elements/river/client/client/ui/SelectProvider.java@821a02bbfb4e |
children | 172338b1407f |
comparison
equal
deleted
inserted
replaced
5837:d9901a08d0a6 | 5838:5aa05a7a34b7 |
---|---|
1 package org.dive4elements.river.client.client.ui; | |
2 | |
3 import com.google.gwt.core.client.GWT; | |
4 import com.smartgwt.client.types.VerticalAlignment; | |
5 import com.smartgwt.client.widgets.Canvas; | |
6 import com.smartgwt.client.widgets.Label; | |
7 import com.smartgwt.client.widgets.form.DynamicForm; | |
8 import com.smartgwt.client.widgets.form.fields.FormItem; | |
9 import com.smartgwt.client.widgets.form.fields.LinkItem; | |
10 import com.smartgwt.client.widgets.form.fields.SelectItem; | |
11 import com.smartgwt.client.widgets.form.fields.SpacerItem; | |
12 import com.smartgwt.client.widgets.form.fields.events.ClickEvent; | |
13 import com.smartgwt.client.widgets.form.fields.events.ClickHandler; | |
14 import com.smartgwt.client.widgets.layout.HLayout; | |
15 import com.smartgwt.client.widgets.layout.VLayout; | |
16 | |
17 import org.dive4elements.river.client.client.FLYSConstants; | |
18 import org.dive4elements.river.client.client.event.StepForwardEvent; | |
19 import org.dive4elements.river.client.shared.model.Data; | |
20 import org.dive4elements.river.client.shared.model.DataItem; | |
21 import org.dive4elements.river.client.shared.model.DataList; | |
22 import org.dive4elements.river.client.shared.model.DefaultData; | |
23 import org.dive4elements.river.client.shared.model.DefaultDataItem; | |
24 | |
25 import java.util.ArrayList; | |
26 import java.util.Iterator; | |
27 import java.util.LinkedHashMap; | |
28 import java.util.Map; | |
29 | |
30 | |
31 /** | |
32 * This UIProvider displays the DataItems of the Data object in a combo box. | |
33 * | |
34 * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a> | |
35 */ | |
36 public class SelectProvider | |
37 extends AbstractUIProvider | |
38 { | |
39 private static final long serialVersionUID = 4696637534424070726L; | |
40 | |
41 /** The message class that provides i18n strings.*/ | |
42 protected FLYSConstants messages = GWT.create(FLYSConstants.class); | |
43 | |
44 /** The combobox.*/ | |
45 protected DynamicForm form = new DynamicForm(); | |
46 | |
47 public static final int COMBOBOX_THRESHOLD = 20; | |
48 | |
49 | |
50 /** | |
51 * This method currently returns a | |
52 * {@link com.smartgwt.client.widgets.form.DynamicForm} that contains all | |
53 * data items in a combobox stored in <i>data</i>. | |
54 * | |
55 * @param data The {@link Data} object. | |
56 * | |
57 * @return a combobox. | |
58 */ | |
59 @Override | |
60 public Canvas create(DataList data) { | |
61 VLayout v = new VLayout(); | |
62 v.setMembersMargin(10); | |
63 v.addMember(createWidget(data)); | |
64 if(data.size() > COMBOBOX_THRESHOLD) { | |
65 v.addMember(getNextButton()); | |
66 } | |
67 return v; | |
68 } | |
69 | |
70 | |
71 protected Canvas createWidget(DataList data) { | |
72 if (data.size() > COMBOBOX_THRESHOLD) { | |
73 return createComboboxWidget(data); | |
74 } | |
75 else { | |
76 return createListWidget(data); | |
77 } | |
78 } | |
79 | |
80 | |
81 @Override | |
82 public Canvas createOld(DataList dataList) { | |
83 HLayout layout = new HLayout(); | |
84 VLayout vLayout = new VLayout(); | |
85 layout.setWidth("400px"); | |
86 | |
87 Label label = new Label(dataList.getLabel()); | |
88 label.setWidth("200px"); | |
89 | |
90 int size = dataList.size(); | |
91 for (int i = 0; i < size; i++) { | |
92 Data data = dataList.get(i); | |
93 DataItem[] items = data.getItems(); | |
94 | |
95 for (DataItem item: items) { | |
96 HLayout hLayout = new HLayout(); | |
97 | |
98 hLayout.addMember(label); | |
99 hLayout.addMember(new Label(item.getLabel())); | |
100 | |
101 vLayout.addMember(hLayout); | |
102 vLayout.setWidth("130px"); | |
103 } | |
104 } | |
105 | |
106 Canvas back = getBackButton(dataList.getState()); | |
107 | |
108 layout.addMember(label); | |
109 layout.addMember(vLayout); | |
110 layout.addMember(back); | |
111 | |
112 return layout; | |
113 } | |
114 | |
115 | |
116 protected Canvas createListWidget(DataList data) { | |
117 VLayout layout = new VLayout(); | |
118 layout.setAlign(VerticalAlignment.TOP); | |
119 layout.setHeight(25); | |
120 layout.setWidth("100%"); | |
121 | |
122 VLayout formLayout = new VLayout(); | |
123 formLayout.setLayoutTopMargin(20); | |
124 formLayout.setLayoutLeftMargin(50); | |
125 | |
126 ClickHandler handler = new ClickHandler() { | |
127 @Override | |
128 public void onClick(ClickEvent event) { | |
129 LinkItem li = (LinkItem)event.getItem(); | |
130 String attr = li.getAttribute(li.getName()); | |
131 GWT.log("li.getTarget: " + attr + " " + li.getName()); | |
132 DataItem item = new DefaultDataItem( | |
133 attr, | |
134 null, | |
135 attr); | |
136 | |
137 Data d = new DefaultData( | |
138 li.getName(), | |
139 null, | |
140 null, | |
141 new DataItem [] { item }); | |
142 | |
143 Data [] odata = getData(); | |
144 Data [] ndata = new Data[odata.length+1]; | |
145 System.arraycopy(odata, 0, ndata, 0, odata.length); | |
146 ndata[odata.length] = d; | |
147 | |
148 fireStepForwardEvent(new StepForwardEvent(ndata)); | |
149 } | |
150 }; | |
151 | |
152 for (int i = 0, size = data.size(); i < size; i++) { | |
153 Data d = data.get(i); | |
154 | |
155 Label label = new Label(d.getDescription()); | |
156 label.setValign(VerticalAlignment.TOP); | |
157 label.setHeight(20); | |
158 label.setWidth(400); | |
159 | |
160 LinkedHashMap<String, String> initial = new LinkedHashMap<String, String>(); | |
161 ArrayList<FormItem> formItems = new ArrayList<FormItem>(); | |
162 | |
163 for (DataItem item: d.getItems()) { | |
164 initial.put(item.getLabel().replace(' ', '_'), item.getStringValue()); | |
165 GWT.log("put: " + item.getLabel().replace(' ', '_') + "=" + item.getStringValue()); | |
166 | |
167 LinkItem link = new LinkItem(d.getLabel()); | |
168 link.setLinkTitle(item.getLabel()); // i18n text of the link | |
169 link.setAttribute(d.getLabel(), item.getStringValue()); // e.g. "calculation_mode":"foo" | |
170 link.setShowTitle(false); | |
171 link.setEndRow(true); | |
172 link.setWidth("350px"); | |
173 | |
174 SpacerItem space = new SpacerItem(); | |
175 space.setWidth(15); | |
176 formItems.add(space); | |
177 formItems.add(link); | |
178 | |
179 link.addClickHandler(handler); | |
180 } | |
181 | |
182 form.setFields(formItems.toArray(new FormItem[0])); | |
183 form.setValues(initial); | |
184 | |
185 layout.addMember(label); | |
186 layout.addMember(form); | |
187 } | |
188 return layout; | |
189 } | |
190 | |
191 protected Canvas createComboboxWidget(DataList data) { | |
192 GWT.log("SelectProvider.createComboboxWidget()"); | |
193 | |
194 VLayout layout = new VLayout(); | |
195 layout.setAlign(VerticalAlignment.TOP); | |
196 layout.setHeight(25); | |
197 | |
198 LinkedHashMap<String, String> initial = new LinkedHashMap<String, String>(); | |
199 | |
200 int size = data.size(); | |
201 | |
202 for (int i = 0; i < size; i++) { | |
203 Data d = data.get(i); | |
204 | |
205 Label label = new Label(d.getDescription()); | |
206 label.setValign(VerticalAlignment.TOP); | |
207 label.setHeight(20); | |
208 label.setWidth(400); | |
209 | |
210 SelectItem combobox = new SelectItem(d.getLabel()); | |
211 combobox.setWidth(250); | |
212 | |
213 LinkedHashMap<String, String> it = new LinkedHashMap<String, String>(); | |
214 | |
215 boolean defaultSet = false; | |
216 boolean first = true; | |
217 | |
218 DataItem def = d.getDefault(); | |
219 String defValue = def != null ? def.getStringValue() : null; | |
220 | |
221 if (defValue != null && defValue.length() > 0) { | |
222 initial.put(d.getLabel(), def.getStringValue()); | |
223 defaultSet = true; | |
224 } | |
225 | |
226 for (DataItem item: d.getItems()) { | |
227 if (!defaultSet && first) { | |
228 initial.put(d.getLabel(), item.getStringValue()); | |
229 first = false; | |
230 } | |
231 | |
232 it.put(item.getStringValue(), item.getLabel()); | |
233 } | |
234 | |
235 label.setWidth(50); | |
236 combobox.setValueMap(it); | |
237 combobox.setShowTitle(false); | |
238 form.setItems(combobox); | |
239 | |
240 layout.addMember(label); | |
241 layout.addMember(form); | |
242 } | |
243 | |
244 form.setValues(initial); | |
245 | |
246 layout.setAlign(VerticalAlignment.TOP); | |
247 | |
248 return layout; | |
249 } | |
250 | |
251 | |
252 @Override | |
253 protected Data[] getData() { | |
254 Map<?,?> values = form.getValues(); | |
255 Iterator<?> keys = values.keySet().iterator(); | |
256 | |
257 Data[] list = new Data[values.size()]; | |
258 int i = 0; | |
259 | |
260 while (keys.hasNext()) { | |
261 String fieldname = ((String) keys.next()).replace('_', ' '); | |
262 String selection = (String) values.get(fieldname); | |
263 | |
264 DataItem item = new DefaultDataItem(fieldname, null, selection); | |
265 | |
266 list[i++] = new DefaultData( | |
267 fieldname, null, null, new DataItem[] { item }); | |
268 } | |
269 | |
270 return list; | |
271 } | |
272 } | |
273 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : |