comparison flys-client/src/main/java/de/intevation/flys/client/client/ui/DistancePanel.java @ 780:a39c2f531755

Implemented a new panel to enter kilometer ranges (with no option to insert locations). flys-client/trunk@2269 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Thu, 30 Jun 2011 10:29:43 +0000
parents
children 6653cf54b45d
comparison
equal deleted inserted replaced
779:f1a559d13eef 780:a39c2f531755
1 package de.intevation.flys.client.client.ui;
2
3 import java.util.ArrayList;
4 import java.util.List;
5
6 import com.google.gwt.core.client.GWT;
7 import com.google.gwt.i18n.client.NumberFormat;
8
9 import com.smartgwt.client.widgets.Canvas;
10 import com.smartgwt.client.widgets.Label;
11 import com.smartgwt.client.widgets.form.fields.events.BlurHandler;
12 import com.smartgwt.client.widgets.form.fields.events.BlurEvent;
13 import com.smartgwt.client.widgets.layout.HLayout;
14 import com.smartgwt.client.widgets.layout.VLayout;
15
16 import de.intevation.flys.client.shared.model.Data;
17 import de.intevation.flys.client.shared.model.DataItem;
18 import de.intevation.flys.client.shared.model.DataList;
19 import de.intevation.flys.client.shared.model.DefaultData;
20 import de.intevation.flys.client.shared.model.DefaultDataItem;
21
22 import de.intevation.flys.client.client.FLYSConstants;
23
24
25 public class DistancePanel extends AbstractUIProvider implements BlurHandler {
26
27 public static final int DEFAULT_STEP_WIDTH = 100;
28
29
30 protected FLYSConstants MSG = GWT.create(FLYSConstants.class);
31
32 protected DoubleRangePanel distancePanel;
33
34 protected double min;
35 protected double max;
36
37
38 public DistancePanel() {
39 distancePanel = new DoubleRangePanel(
40 MSG.unitFrom(), MSG.unitTo(), MSG.unitWidth(),
41 0d, 0d, 0d, 250, this);
42 }
43
44
45 @Override
46 public Canvas create(DataList data) {
47 VLayout layout = new VLayout();
48 layout.setMembersMargin(10);
49
50 Label label = new Label(MSG.distance_state());
51
52 Canvas submit = getNextButton();
53
54 label.setHeight(25);
55 distancePanel.setHeight(50);
56
57 layout.addMember(label);
58 layout.addMember(distancePanel);
59 layout.addMember(submit);
60
61 initMinMaxValues(data);
62 initDefaultValues(data);
63
64 return layout;
65 }
66
67
68 @Override
69 public Canvas createOld(DataList dataList) {
70 String s = getOldSelectionString(dataList);
71 String l = dataList.getLabel();
72
73 Label label = new Label(l);
74 Label selected = new Label(s);
75
76 HLayout layout = new HLayout();
77
78 layout.setWidth(400);
79 label.setWidth(200);
80 selected.setWidth(130);
81
82 layout.addMember(label);
83 layout.addMember(selected);
84
85 return layout;
86 }
87
88
89 protected String getOldSelectionString(DataList dataList) {
90 List<Data> items = dataList.getAll();
91
92 Data dFrom = getData(items, "ld_from");
93 Data dTo = getData(items, "ld_to");
94 Data dStep = getData(items, "ld_step");
95
96 DataItem[] from = dFrom.getItems();
97 DataItem[] to = dTo.getItems();
98 DataItem[] step = dStep.getItems();
99
100 StringBuilder sb = new StringBuilder();
101 sb.append(from[0].getLabel());
102 sb.append(" " + MSG.unitFrom() + " ");
103 sb.append(to[0].getLabel());
104 sb.append(" " + MSG.unitTo() + " ");
105 sb.append(step[0].getLabel());
106 sb.append(" " + MSG.unitWidth());
107
108 return sb.toString();
109 }
110
111
112 @Override
113 public List<String> validate() {
114 List<String> errors = new ArrayList<String>();
115
116 if (!distancePanel.validateForm()) {
117 errors.add(MSG.wrongFormat());
118
119 return errors;
120 }
121
122 validateFrom(errors);
123 validateTo(errors);
124
125 return errors;
126 }
127
128
129 protected void validateFrom(List<String> errors) {
130 double from = distancePanel.getFrom();
131
132 if (from < min || from > max) {
133 NumberFormat nf = NumberFormat.getDecimalFormat();
134
135 String tmp = MSG.error_validate_lower_range();
136 tmp = tmp.replace("$1", nf.format(from));
137 tmp = tmp.replace("$2", nf.format(min));
138
139 distancePanel.setFrom(min);
140 errors.add(tmp);
141 }
142 }
143
144
145 protected void validateTo(List<String> errors) {
146 double to = distancePanel.getTo();
147
148 if (to < min || to > max) {
149 NumberFormat nf = NumberFormat.getDecimalFormat();
150
151 String tmp = MSG.error_validate_upper_range();
152 tmp = tmp.replace("$1", nf.format(to));
153 tmp = tmp.replace("$2", nf.format(max));
154
155 distancePanel.setTo(max);
156 errors.add(tmp);
157 }
158 }
159
160
161 @Override
162 public Data[] getData() {
163 Data[] data = new Data[3];
164
165 data[0] = getDataFrom();
166 data[1] = getDataTo();
167 data[2] = getDataStep();
168
169 return data;
170 }
171
172
173 protected Data getDataFrom() {
174 String value = String.valueOf(distancePanel.getFrom());
175 DataItem item = new DefaultDataItem("ld_from", "ld_from", value);
176 return new DefaultData(
177 "ld_from", null, null, new DataItem[] { item });
178 }
179
180
181 protected Data getDataTo() {
182 String value = String.valueOf(distancePanel.getTo());
183 DataItem item = new DefaultDataItem("ld_to", "ld_to", value);
184 return new DefaultData(
185 "ld_to", null, null, new DataItem[] { item });
186 }
187
188
189 protected Data getDataStep() {
190 String value = String.valueOf(distancePanel.getStep());
191 DataItem item = new DefaultDataItem("ld_step","ld_step", value);
192 return new DefaultData(
193 "ld_step", null, null, new DataItem[] { item });
194 }
195
196
197 @Override
198 public void onBlur(BlurEvent event) {
199 distancePanel.validateForm();
200 }
201
202
203 protected void initMinMaxValues(DataList data) {
204 Data f = getData(data.getAll(), "ld_from");
205 Data t = getData(data.getAll(), "ld_to");
206
207 DataItem[] fItems = f.getItems();
208 DataItem[] tItems = t.getItems();
209
210 try {
211 min = Double.valueOf(fItems[0].getStringValue());
212 max = Double.valueOf(tItems[0].getStringValue());
213 }
214 catch (NumberFormatException nfe) {
215 min = -Double.MAX_VALUE;
216 max = Double.MAX_VALUE;
217 }
218 }
219
220
221 protected void initDefaultValues(DataList data) {
222 initDefaultFrom(data);
223 initDefaultTo(data);
224 initDefaultStep(data);
225 }
226
227
228 protected void initDefaultFrom(DataList data) {
229 Data f = getData(data.getAll(), "ld_from");
230
231 double from = min;
232
233 try {
234 from = getDefaultValue(f);
235 }
236 catch (NumberFormatException nfe) {
237 // do nothing
238 }
239
240 distancePanel.setFrom(from);
241 }
242
243
244 protected void initDefaultTo(DataList data) {
245 Data t = getData(data.getAll(), "ld_to");
246
247 double to = max;
248
249 try {
250 to = getDefaultValue(t);
251 }
252 catch (NumberFormatException nfe) {
253 // do nothing
254 }
255
256 distancePanel.setTo(to);
257 }
258
259
260 protected void initDefaultStep(DataList data) {
261 Data s = getData(data.getAll(), "ld_step");
262
263 double step = (double) DEFAULT_STEP_WIDTH;
264
265 try {
266 step = getDefaultValue(s);
267 }
268 catch (NumberFormatException nfe) {
269 // do nothing
270 }
271
272 distancePanel.setStep(step);
273 }
274
275
276 protected double getDefaultValue(Data data)
277 throws NumberFormatException
278 {
279 DataItem def = data.getDefault();
280 String defValue = def != null ? def.getStringValue() : null;
281
282 return Double.valueOf(defValue);
283 }
284 }
285 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org