Mercurial > dive4elements > river
comparison flys-client/src/main/java/de/intevation/flys/client/client/ui/GaugePanel.java @ 3837:6b2ae2ec5b01
Open and close gauge tree folds that correspond to the selected WINFO
calculation
flys-client/trunk@5546 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Bjoern Ricks <bjoern.ricks@intevation.de> |
---|---|
date | Fri, 21 Sep 2012 08:57:18 +0000 |
parents | 52109c4bc5de |
children | 509ef6ec93af |
comparison
equal
deleted
inserted
replaced
3836:06c76de19b51 | 3837:6b2ae2ec5b01 |
---|---|
23 import com.smartgwt.client.widgets.layout.VLayout; | 23 import com.smartgwt.client.widgets.layout.VLayout; |
24 | 24 |
25 import de.intevation.flys.client.client.FLYSConstants; | 25 import de.intevation.flys.client.client.FLYSConstants; |
26 import de.intevation.flys.client.client.services.GaugeOverviewInfoService; | 26 import de.intevation.flys.client.client.services.GaugeOverviewInfoService; |
27 import de.intevation.flys.client.client.services.GaugeOverviewInfoServiceAsync; | 27 import de.intevation.flys.client.client.services.GaugeOverviewInfoServiceAsync; |
28 import de.intevation.flys.client.shared.model.Data; | |
29 import de.intevation.flys.client.shared.model.DataItem; | |
30 import de.intevation.flys.client.shared.model.DataList; | |
28 import de.intevation.flys.client.shared.model.GaugeInfo; | 31 import de.intevation.flys.client.shared.model.GaugeInfo; |
29 import de.intevation.flys.client.shared.model.RiverInfo; | 32 import de.intevation.flys.client.shared.model.RiverInfo; |
30 | 33 |
31 /** | 34 /** |
32 * The GaugePanel is intendet to be used within a SectionStackSection | 35 * The GaugePanel is intendet to be used within a SectionStackSection |
74 this.refresh(); | 77 this.refresh(); |
75 } | 78 } |
76 } | 79 } |
77 | 80 |
78 /** | 81 /** |
82 * Sets the data and closes not corresponding folds in the gauge tree | |
83 */ | |
84 public void setData(DataList[] data) { | |
85 gaugetree.setData(data); | |
86 } | |
87 | |
88 /** | |
79 * Loads the river info and renders it afterwards | 89 * Loads the river info and renders it afterwards |
80 */ | 90 */ |
81 public void refresh() { | 91 public void refresh() { |
82 gaugeOverviewInfoService.getRiverInfo(this.river, new AsyncCallback<RiverInfo>() { | 92 gaugeOverviewInfoService.getRiverInfo(this.river, new AsyncCallback<RiverInfo>() { |
83 public void onFailure(Throwable e) { | 93 public void onFailure(Throwable e) { |
85 } | 95 } |
86 | 96 |
87 public void onSuccess(RiverInfo riverinfo) { | 97 public void onSuccess(RiverInfo riverinfo) { |
88 GWT.log("Loaded river info"); | 98 GWT.log("Loaded river info"); |
89 renderGaugeOverviewInfo(riverinfo); | 99 renderGaugeOverviewInfo(riverinfo); |
90 gaugetree.openAll(); | |
91 } | 100 } |
92 }); | 101 }); |
93 } | 102 } |
94 | 103 |
95 public void renderGaugeOverviewInfo(RiverInfo riverinfo) { | 104 public void renderGaugeOverviewInfo(RiverInfo riverinfo) { |
137 } | 146 } |
138 | 147 |
139 class GaugeTree extends ScrollPanel { | 148 class GaugeTree extends ScrollPanel { |
140 | 149 |
141 private Tree tree; | 150 private Tree tree; |
151 private DataList[] data; | |
142 | 152 |
143 public GaugeTree() { | 153 public GaugeTree() { |
144 tree = new Tree(); | 154 tree = new Tree(); |
145 setWidget(tree); | 155 setWidget(tree); |
146 } | 156 } |
172 | 182 |
173 // put empty gauges to the end | 183 // put empty gauges to the end |
174 for (GaugeInfo gauge : emptygauges) { | 184 for (GaugeInfo gauge : emptygauges) { |
175 addGauge(gauge); | 185 addGauge(gauge); |
176 } | 186 } |
187 | |
188 open(); | |
177 } | 189 } |
178 } | 190 } |
179 | 191 |
180 private void addGauge(GaugeInfo gauge, List<GaugeInfo> empty) { | 192 private void addGauge(GaugeInfo gauge, List<GaugeInfo> empty) { |
181 if (gauge.getKmStart() != null && gauge.getKmEnd() != null) { | 193 if (gauge.getKmStart() != null && gauge.getKmEnd() != null) { |
185 empty.add(gauge); | 197 empty.add(gauge); |
186 } | 198 } |
187 } | 199 } |
188 | 200 |
189 private void addGauge(GaugeInfo gauge) { | 201 private void addGauge(GaugeInfo gauge) { |
190 TreeItem gaugeitem = new GaugeInfoItem(gauge); | 202 GaugeInfoItem gaugeitem = new GaugeInfoItem(gauge); |
191 tree.addItem(gaugeitem); | 203 tree.addItem(gaugeitem); |
192 } | 204 } |
193 | 205 |
194 public void openAll() { | 206 public void openAll() { |
207 GWT.log("GaugeTree - openAll"); | |
195 for (Iterator<TreeItem> it = tree.treeItemIterator(); it.hasNext();) { | 208 for (Iterator<TreeItem> it = tree.treeItemIterator(); it.hasNext();) { |
196 TreeItem item = it.next(); | 209 TreeItem item = it.next(); |
197 item.setState(true); | 210 item.setState(true); |
211 } | |
212 } | |
213 | |
214 public void setData(DataList[] data) { | |
215 this.data = data; | |
216 if (tree.getItemCount() > 0) { | |
217 open(); | |
218 } | |
219 } | |
220 | |
221 public void open() { | |
222 ArrayList<Double> curvelocations = new ArrayList<Double>(); | |
223 | |
224 if (data != null && data.length > 0) { | |
225 for (int i = 0; i < data.length; i++) { | |
226 DataList dl = data[i]; | |
227 String state = dl.getState(); | |
228 GWT.log("GaugeTree - setData " + state); | |
229 if (state.equals("state.winfo.distance") || | |
230 state.equals("state.winfo.distance_only") || | |
231 state.equals("state.winfo.location_distance")) { | |
232 Double ldfrom = null; | |
233 Double ldto = null; | |
234 | |
235 for (int j = dl.size()-1; j >= 0; --j) { | |
236 Data d = dl.get(j); | |
237 String label = d.getLabel(); | |
238 GWT.log("GaugeTree - setData - label " + label + " " + d.getStringValue()); | |
239 if (label.equals("ld_from")) { | |
240 String strfrom = d.getStringValue(); | |
241 if (strfrom != null) { | |
242 ldfrom = Double.valueOf(strfrom); | |
243 } | |
244 } | |
245 else if (label.equals("ld_to")) { | |
246 String strto = d.getStringValue(); | |
247 if (strto != null) { | |
248 ldto = Double.valueOf(strto); | |
249 } | |
250 } | |
251 } | |
252 | |
253 if (ldfrom != null) { | |
254 openOnDistance(ldfrom, ldto); | |
255 return; | |
256 } | |
257 } | |
258 else if (state.equals("state.winfo.location")) { | |
259 ArrayList<Double> locations = new ArrayList<Double>(); | |
260 for (int j = dl.size()-1; j >= 0; --j) { | |
261 Data d = dl.get(j); | |
262 String label = d.getLabel(); | |
263 GWT.log("GaugeTree - setData - location label " + | |
264 label + " " + d.getStringValue()); | |
265 if (label.equals("ld_locations")) { | |
266 DataItem[] items = d.getItems(); | |
267 for (int k = 0; k < items.length; k++) { | |
268 String tmp = items[k].getStringValue(); | |
269 if (tmp != null) { | |
270 Double value = Double.valueOf(tmp); | |
271 if (value != null) { | |
272 locations.add(value); | |
273 } | |
274 } | |
275 } | |
276 } | |
277 } | |
278 openOnLocations(locations); | |
279 return; | |
280 } | |
281 else if (state.equals("state.winfo.reference.curve.input.start")) { | |
282 for (int j = dl.size()-1; j >= 0; --j) { | |
283 Data d = dl.get(j); | |
284 String label = d.getLabel(); | |
285 if (label.equals("reference_startpoint")) { | |
286 DataItem[] items = d.getItems(); | |
287 for (int k = 0; k < items.length; k++) { | |
288 String tmp = items[k].getStringValue(); | |
289 if (tmp != null) { | |
290 Double value = Double.valueOf(tmp); | |
291 if (value != null) { | |
292 curvelocations.add(value); | |
293 } | |
294 } | |
295 } | |
296 } | |
297 } | |
298 } | |
299 else if (state.equals("state.winfo.reference.curve.input.end")) { | |
300 for (int j = dl.size()-1; j >= 0; --j) { | |
301 Data d = dl.get(j); | |
302 String label = d.getLabel(); | |
303 if (label.equals("reference_endpoint")) { | |
304 DataItem[] items = d.getItems(); | |
305 for (int k = 0; k < items.length; k++) { | |
306 String tmp = items[k].getStringValue(); | |
307 if (tmp != null) { | |
308 Double value = Double.valueOf(tmp); | |
309 if (value != null) { | |
310 curvelocations.add(value); | |
311 } | |
312 } | |
313 } | |
314 } | |
315 } | |
316 } | |
317 } | |
318 } | |
319 if (!curvelocations.isEmpty()) { | |
320 openOnLocations(curvelocations); | |
321 } | |
322 else { | |
323 openAll(); | |
324 } | |
325 } | |
326 | |
327 public void openOnDistance(Double start, Double end) { | |
328 GWT.log("GaugeTree - openOnDistance " + start + " " + end + " " + | |
329 tree.getItemCount()); | |
330 | |
331 for (Iterator<TreeItem> it = tree.treeItemIterator(); it.hasNext();) { | |
332 TreeItem item = it.next(); | |
333 /* Strange stuff is happening here: | |
334 * GWT Tree.treeItemIterator returns another TreeItem for each | |
335 * GaugeInfoItem */ | |
336 if (item instanceof GaugeInfoItem) { | |
337 boolean setstate = false; | |
338 GaugeInfoItem gitem = (GaugeInfoItem)item; | |
339 if (end == null) { | |
340 if (gitem.getStart() >= start) { | |
341 setstate = true; | |
342 } | |
343 } | |
344 else { | |
345 if ((gitem.getStart() >= start && gitem.getStart() <= end) || | |
346 (gitem.getEnd() >= start && gitem.getEnd() <= end)) { | |
347 setstate = true; | |
348 } | |
349 } | |
350 item.setState(setstate); | |
351 } | |
352 } | |
353 } | |
354 | |
355 public void openOnLocations(List<Double> locations) { | |
356 GWT.log("GaugeTree - openOnLocations " + locations + " " + | |
357 tree.getItemCount()); | |
358 | |
359 if (locations == null || locations.isEmpty()) { | |
360 return; | |
361 } | |
362 | |
363 for (Iterator<TreeItem> it = tree.treeItemIterator(); it.hasNext();) { | |
364 TreeItem item = it.next(); | |
365 if (item instanceof GaugeInfoItem) { | |
366 GaugeInfoItem gitem = (GaugeInfoItem)item; | |
367 boolean isset = false; | |
368 for (Double location: locations) { | |
369 if (locations == null) { | |
370 continue; | |
371 } | |
372 if (location >= gitem.getStart() && | |
373 location <= gitem.getEnd()) { | |
374 isset = true; | |
375 break; | |
376 } | |
377 } | |
378 item.setState(isset); | |
379 } | |
198 } | 380 } |
199 } | 381 } |
200 } | 382 } |
201 | 383 |
202 class RiverInfoPanel extends HorizontalPanel { | 384 class RiverInfoPanel extends HorizontalPanel { |
257 setCellHeight(label, "" + HEIGHT + "px"); | 439 setCellHeight(label, "" + HEIGHT + "px"); |
258 } | 440 } |
259 } | 441 } |
260 | 442 |
261 class GaugeInfoItem extends TreeItem { | 443 class GaugeInfoItem extends TreeItem { |
444 | |
445 private GaugeInfo gauge; | |
446 | |
262 public GaugeInfoItem(GaugeInfo gauge) { | 447 public GaugeInfoItem(GaugeInfo gauge) { |
263 GaugeInfoHead gaugeinfohead = new GaugeInfoHead(gauge); | 448 GaugeInfoHead gaugeinfohead = new GaugeInfoHead(gauge); |
264 GaugeInfoPanel gaugeinfopanel = new GaugeInfoPanel(gauge); | 449 GaugeInfoPanel gaugeinfopanel = new GaugeInfoPanel(gauge); |
265 setWidget(gaugeinfohead); | 450 setWidget(gaugeinfohead); |
266 addItem(gaugeinfopanel); | 451 addItem(gaugeinfopanel); |
452 this.gauge = gauge; | |
453 } | |
454 | |
455 public Double getStart() { | |
456 return gauge.getKmStart(); | |
457 } | |
458 | |
459 public Double getEnd() { | |
460 return gauge.getKmEnd(); | |
267 } | 461 } |
268 } | 462 } |
269 | 463 |
270 class GaugeInfoHead extends HLayout { | 464 class GaugeInfoHead extends HLayout { |
271 | 465 |