comparison gwt-client/src/main/java/org/dive4elements/river/client/client/ui/chart/ChartPropertiesEditor.java @ 8454:7003cf5c19ed

(issue1764) Handle date ranges in chart properties editor
author Andre Heinecke <andre.heinecke@intevation.de>
date Wed, 29 Oct 2014 19:49:18 +0100
parents b1ff606f01ee
children d2b85c0c35b7
comparison
equal deleted inserted replaced
8453:1326fc65638c 8454:7003cf5c19ed
19 import com.smartgwt.client.widgets.Window; 19 import com.smartgwt.client.widgets.Window;
20 import com.smartgwt.client.widgets.events.ClickEvent; 20 import com.smartgwt.client.widgets.events.ClickEvent;
21 import com.smartgwt.client.widgets.events.ClickHandler; 21 import com.smartgwt.client.widgets.events.ClickHandler;
22 import com.smartgwt.client.widgets.form.DynamicForm; 22 import com.smartgwt.client.widgets.form.DynamicForm;
23 import com.smartgwt.client.widgets.form.fields.CheckboxItem; 23 import com.smartgwt.client.widgets.form.fields.CheckboxItem;
24 import com.smartgwt.client.widgets.form.fields.DateItem;
24 import com.smartgwt.client.widgets.form.fields.FormItem; 25 import com.smartgwt.client.widgets.form.fields.FormItem;
25 import com.smartgwt.client.widgets.form.fields.SelectItem; 26 import com.smartgwt.client.widgets.form.fields.SelectItem;
26 import com.smartgwt.client.widgets.form.fields.TextItem; 27 import com.smartgwt.client.widgets.form.fields.TextItem;
27 import com.smartgwt.client.widgets.form.fields.events.BlurEvent; 28 import com.smartgwt.client.widgets.form.fields.events.BlurEvent;
28 import com.smartgwt.client.widgets.form.fields.events.BlurHandler; 29 import com.smartgwt.client.widgets.form.fields.events.BlurHandler;
29 import com.smartgwt.client.widgets.form.fields.events.ChangedEvent; 30 import com.smartgwt.client.widgets.form.fields.events.ChangedEvent;
30 import com.smartgwt.client.widgets.form.fields.events.ChangedHandler; 31 import com.smartgwt.client.widgets.form.fields.events.ChangedHandler;
31 import com.smartgwt.client.widgets.layout.HLayout; 32 import com.smartgwt.client.widgets.layout.HLayout;
32 import com.smartgwt.client.widgets.layout.VLayout; 33 import com.smartgwt.client.widgets.layout.VLayout;
34 import com.smartgwt.client.widgets.layout.Layout;
33 import com.smartgwt.client.widgets.tab.Tab; 35 import com.smartgwt.client.widgets.tab.Tab;
34 import com.smartgwt.client.widgets.tab.TabSet; 36 import com.smartgwt.client.widgets.tab.TabSet;
35 37
36 import org.dive4elements.river.client.client.Config; 38 import org.dive4elements.river.client.client.Config;
37 import org.dive4elements.river.client.client.FLYSConstants; 39 import org.dive4elements.river.client.client.FLYSConstants;
51 import org.dive4elements.river.client.shared.model.StringProperty; 53 import org.dive4elements.river.client.shared.model.StringProperty;
52 54
53 import java.util.LinkedHashMap; 55 import java.util.LinkedHashMap;
54 import java.util.List; 56 import java.util.List;
55 import java.util.Map; 57 import java.util.Map;
58 import java.util.Date;
56 59
57 /** 60 /**
58 * Dialog for the Chart-Properties, constructed from respective xml document. 61 * Dialog for the Chart-Properties, constructed from respective xml document.
59 * 62 *
60 * @author <a href="mailto:raimund.renkert@intevation.de">Raimund Renkert</a> 63 * @author <a href="mailto:raimund.renkert@intevation.de">Raimund Renkert</a>
202 Label scale = new Label(MSG.scale() + " :"); 205 Label scale = new Label(MSG.scale() + " :");
203 scale.setHeight(25); 206 scale.setHeight(25);
204 scale.setMargin(2); 207 scale.setMargin(2);
205 208
206 DynamicForm form1 = new DynamicForm(); 209 DynamicForm form1 = new DynamicForm();
207 DynamicForm form2 = new DynamicForm();
208 form2.setNumCols(6);
209 210
210 StringProperty label = 211 StringProperty label =
211 (StringProperty)pg.getPropertyByName("label"); 212 (StringProperty)pg.getPropertyByName("label");
212 FormItem title = createStringProperty(label); 213 FormItem title = createStringProperty(label);
213 title.setValue( 214 title.setValue(
230 FormItem fs = createIntegerProperty(fontsize); 231 FormItem fs = createIntegerProperty(fontsize);
231 fs.setValue( 232 fs.setValue(
232 ((IntegerProperty) 233 ((IntegerProperty)
233 origPg.getPropertyByName("font-size")).getValue()); 234 origPg.getPropertyByName("font-size")).getValue());
234 235
236 form1.setFields(title, fs);
237
238 VLayout root = new VLayout();
239 root.addMember(form1);
240 root.setHeight(90);
241
242
235 DoubleProperty upper = 243 DoubleProperty upper =
236 (DoubleProperty)pg.getPropertyByName("upper"); 244 (DoubleProperty)pg.getPropertyByName("upper");
237 final FormItem range1 = createDoubleProperty(upper);
238 range1.setName("rangeupper");
239 range1.setWidth(70);
240 range1.setValue(
241 ((DoubleProperty)
242 origPg.getPropertyByName("upper")).toUIString());
243
244 DoubleProperty lower = 245 DoubleProperty lower =
245 (DoubleProperty)pg.getPropertyByName("lower"); 246 (DoubleProperty)pg.getPropertyByName("lower");
246 final FormItem range2 = createDoubleProperty(lower); 247
247 range2.setName("rangelower"); 248 FormItem range1candidate = null;
248 range2.setWidth(70); 249 FormItem range2candidate = null;
249 range2.setValue( 250 Layout scaleLayout;
250 ((DoubleProperty) 251 DynamicForm form2 = new DynamicForm();
251 origPg.getPropertyByName("lower")).toUIString()); 252
252 253 if (upper != null && lower != null) {
253 BooleanProperty fixation = 254 // Normal axis with double values
254 (BooleanProperty)pg.getPropertyByName("fixation"); 255 scaleLayout = new HLayout();
255 FormItem fix = createBooleanProperty(fixation); 256 form2.setNumCols(6);
256 fix.setValue(((BooleanProperty) 257 range1candidate = createDoubleProperty(upper);
257 origPg.getPropertyByName("fixation")).getValue().booleanValue()); 258 range1candidate.setName("rangeupper");
258 fix.setWidth(30); 259 range1candidate.setWidth(70);
259 260 range1candidate.setValue(
260 fix.addChangedHandler(new ChangedHandler() { 261 ((DoubleProperty)
261 @Override 262 origPg.getPropertyByName("upper")).toUIString());
262 public void onChanged(ChangedEvent e) { 263
263 if ((Boolean)e.getValue()) { 264 range2candidate = createDoubleProperty(lower);
264 range1.enable(); 265 range2candidate.setName("rangelower");
265 range2.enable(); 266 range2candidate.setWidth(70);
266 } 267 range2candidate.setValue(
267 else { 268 ((DoubleProperty)
268 range1.disable(); 269 origPg.getPropertyByName("lower")).toUIString());
269 range2.disable(); 270 } else {
270 } 271 // Time range axis
271 } 272 scaleLayout = new VLayout();
272 }); 273 StringProperty dateUpper = (StringProperty)pg.getPropertyByName("upper-time");
273 if (fix.getValue().toString().equals("true")) { 274 StringProperty dateLower = (StringProperty)pg.getPropertyByName("lower-time");
274 range1.enable(); 275 if (dateUpper != null && dateLower != null) {
275 range2.enable(); 276 DateItem lowerDI = createDateProperty(dateLower);
276 } 277 DateItem upperDI = createDateProperty(dateUpper);
277 else { 278 StringProperty origUp = (StringProperty)origPg.getPropertyByName("upper-time");
278 range1.disable(); 279 StringProperty origLow = (StringProperty)origPg.getPropertyByName("lower-time");
279 range2.disable(); 280 try {
280 } 281 lowerDI.setStartDate(new Date(-2208988800000L));
281 282 lowerDI.setValue(new Date(Long.valueOf(origLow.getValue())));
282 form1.setFields(title, fs); 283 upperDI.setValue(new Date(Long.valueOf(origUp.getValue())));
283 form2.setFields(fix, range2, range1); 284 } catch (NumberFormatException e) {
284 285 // Just leave it at default then.
285 HLayout scaleLayout = new HLayout(); 286 }
286 scaleLayout.setHeight(30); 287 range1candidate = upperDI;
287 scaleLayout.addMember(scale); 288 range2candidate = lowerDI;
288 scaleLayout.addMember(form2); 289 }
289 scaleLayout.setStyleName("property-dialog-axis"); 290 }
290 291
291 VLayout root = new VLayout(); 292 if (range1candidate != null && range2candidate != null) {
292 root.addMember(form1); 293 final FormItem range1 = range1candidate;
293 root.addMember(scaleLayout); 294 final FormItem range2 = range2candidate;
294 root.setHeight(90); 295
296 BooleanProperty fixation =
297 (BooleanProperty)pg.getPropertyByName("fixation");
298 FormItem fix = createBooleanProperty(fixation);
299 fix.setValue(((BooleanProperty)
300 origPg.getPropertyByName("fixation")).getValue().booleanValue());
301 fix.setWidth(30);
302
303 fix.addChangedHandler(new ChangedHandler() {
304 @Override
305 public void onChanged(ChangedEvent e) {
306 if ((Boolean)e.getValue()) {
307 range1.enable();
308 range2.enable();
309 }
310 else {
311 range1.disable();
312 range2.disable();
313 }
314 }
315 });
316 if (fix.getValue().toString().equals("true")) {
317 range1.enable();
318 range2.enable();
319 }
320 else {
321 range1.disable();
322 range2.disable();
323 }
324 form2.setFields(fix, range2, range1);
325 scaleLayout.setHeight(30);
326 scaleLayout.addMember(scale);
327 scaleLayout.addMember(form2);
328 scaleLayout.setStyleName("property-dialog-axis");
329 root.addMember(scaleLayout);
330 } else {
331 GWT.log("Invalid settings document. Without upper/lower.");
332 }
295 333
296 return root; 334 return root;
297 } 335 }
298 return null; 336 return null;
299 } 337 }
456 } 494 }
457 }); 495 });
458 return item; 496 return item;
459 } 497 }
460 498
499 protected DateItem createDateProperty(final StringProperty sp) {
500 String name = sp.getName();
501 if (name.contains("-")) {
502 name = name.replace("-", "_");
503 }
504
505 DateItem item = new DateItem(name, MSG.getString(name));
506 item.setTitleAlign(Alignment.LEFT);
507 item.setTitleStyle("color:#000;");
508
509 item.addBlurHandler(new BlurHandler() {
510 @Override
511 public void onBlur(BlurEvent e) {
512 DateItem di = (DateItem)e.getItem();
513 sp.setValue(Long.toString(di.getValueAsDate().getTime()));
514 }
515 });
516 return item;
517 }
461 518
462 /** 519 /**
463 * 520 *
464 */ 521 */
465 protected FormItem createBooleanProperty(final BooleanProperty bp) { 522 protected FormItem createBooleanProperty(final BooleanProperty bp) {

http://dive4elements.wald.intevation.org