SmartGWT 3.1p 03-14-2013 nightly
GWT 2.5
---
When .setInputFormat("DMY") is set on my RelativeDateItem with a date format of dd.MMM.yyyy HH:mm, the Changed Handler only fires once upon selecting a date from the calendar picker. The calculated date field goes blank and typing into the text entry field does not fire the Changed Handler. When I remove setInputFormat("DMY"), the Changed Handler fires for each subsequent selection of a date from the calendar picker. It does not fire for minor changes to the time, such as changing the 00:00 to 00:01. How can I get the Changed Handler to fire on a keypress? Should I attach a KeyPressHandler too? This used to work great.
Another thing I noticed is before I started using setInputFormat("DMY"), I used to be able to call (Date) theStartDateItem.getValue() because getValue would return a LogicalDate; however, with setInputFormat("DMY"), getValue() returns a String instead.
Other than using instanceof or isAssignableFrom, can I guarantee the type that is returned from getValue()?
GWT 2.5
---
When .setInputFormat("DMY") is set on my RelativeDateItem with a date format of dd.MMM.yyyy HH:mm, the Changed Handler only fires once upon selecting a date from the calendar picker. The calculated date field goes blank and typing into the text entry field does not fire the Changed Handler. When I remove setInputFormat("DMY"), the Changed Handler fires for each subsequent selection of a date from the calendar picker. It does not fire for minor changes to the time, such as changing the 00:00 to 00:01. How can I get the Changed Handler to fire on a keypress? Should I attach a KeyPressHandler too? This used to work great.
Another thing I noticed is before I started using setInputFormat("DMY"), I used to be able to call (Date) theStartDateItem.getValue() because getValue would return a LogicalDate; however, with setInputFormat("DMY"), getValue() returns a String instead.
Other than using instanceof or isAssignableFrom, can I guarantee the type that is returned from getValue()?
Code:
package com.corp.smartgwt.client; import com.google.gwt.core.client.EntryPoint; import com.google.gwt.i18n.client.DateTimeFormat; import com.smartgwt.client.widgets.Canvas; import com.smartgwt.client.widgets.form.DynamicForm; import com.smartgwt.client.widgets.layout.HLayout; import com.smartgwt.client.util.DateUtil; import com.smartgwt.client.widgets.form.fields.RadioGroupItem; import com.smartgwt.client.widgets.form.fields.RelativeDateItem; import com.smartgwt.client.util.DateDisplayFormatter; import com.smartgwt.client.util.DateParser; import com.smartgwt.client.util.SC; import com.smartgwt.client.data.RelativeDate; import com.smartgwt.client.types.Overflow; import com.smartgwt.client.types.TimeUnit; import com.smartgwt.client.widgets.form.fields.events.ChangedEvent; import com.smartgwt.client.widgets.form.fields.events.ChangedHandler; import com.smartgwt.client.widgets.form.fields.events.ShowValueEvent; import com.smartgwt.client.widgets.form.fields.events.ShowValueHandler; import com.smartgwt.client.widgets.form.validator.DateRangeValidator; import java.util.Date; import java.util.LinkedHashMap; public class SmartGwt implements EntryPoint { private RelativeDateItem theStartDateItem; private RelativeDateItem theEndDateItem; private static String DATE_FORMAT = "dd.MMM.yyyy HH:mm"; private static String RADIOGROUP_NAME = "radiogroup1"; private RadioGroupItem theFilterRadioGroup; private static final String RB1_LABEL_TEXT = "Disable"; private static final String RB2_LABEL_TEXT = "Set Value Now and Enable"; private static final String RB3_LABEL_TEXT = "Just Enable"; private final static LinkedHashMap<String, String> theDatePresets = new LinkedHashMap<String, String>(); static { theDatePresets.put("$now", "Now"); theDatePresets.put("$today", "Today"); theDatePresets.put("$yesterday", "Yesterday"); theDatePresets.put("$tomorrow", "Tomorrow"); theDatePresets.put("-1w", "Current day of last week"); theDatePresets.put("+1w", "Current day of next week"); theDatePresets.put("+1m", "Current day of next month"); theDatePresets.put("-1m", "Current day of last month"); } @Override public void onModuleLoad() { HLayout layout = new HLayout(); DynamicForm form = new DynamicForm(); form.setFields(getFilterRadioGroup(), getStartDateItem(), getEndDateItem()); layout.addMember(form); layout.draw(); } /** * This method returns a RadioGroupItem consisting of None, * Image Date, and Load Date. It uses lazy initialization. * @return RadioGroupItem */ private RadioGroupItem getFilterRadioGroup() { if (theFilterRadioGroup == null) { theFilterRadioGroup = new RadioGroupItem(RADIOGROUP_NAME); theFilterRadioGroup.setValueMap(RB1_LABEL_TEXT, RB2_LABEL_TEXT, RB3_LABEL_TEXT); theFilterRadioGroup.setShowTitle(false); theFilterRadioGroup.setDefaultValue(RB1_LABEL_TEXT); theFilterRadioGroup.setGlobalTabIndex(21); getStartDateItem().setDisabled(true); getEndDateItem().setDisabled(true); theFilterRadioGroup.addChangedHandler(new ChangedHandler() { /* * This method should fire anytime a user changes the radio button selection. */ @Override public void onChanged(ChangedEvent event) { if (theFilterRadioGroup.getValueAsString().equals(RB1_LABEL_TEXT)) { getStartDateItem().setDisabled(true); getEndDateItem().setDisabled(true); } else if (theFilterRadioGroup.getValueAsString().equals(RB2_LABEL_TEXT)) { getStartDateItem().enable(); getEndDateItem().enable(); getStartDateItem().setValue("$now"); } else { getStartDateItem().enable(); getEndDateItem().enable(); } } }); } return theFilterRadioGroup; } private void changeDateFormat() { DateUtil.setDefaultDisplayTimezone("-04:00"); DateUtil.setShortDatetimeDisplayFormatter(new DateDisplayFormatter() { public String format(Date date) { if(date == null) { return null; } else { final DateTimeFormat dateFormatter = DateTimeFormat.getFormat(DATE_FORMAT); return dateFormatter.format(date); } } }); // It is a requirement that we implement a custom date parser or the onChanged event // will not fire. DateUtil.setDateParser(new DateParser() { public Date parse(String dateString) { final DateTimeFormat format = DateTimeFormat.getFormat(DATE_FORMAT); return format.parse(dateString); } }); } private RelativeDateItem getStartDateItem() { if (theStartDateItem == null) { changeDateFormat(); theStartDateItem = new RelativeDateItem("start_date"); theStartDateItem.setTitle("Start"); theStartDateItem.setShowFutureOptions(false); theStartDateItem.setShowPastOptions(true); theStartDateItem.setTimeUnitOptions(getTimeOptions()); theStartDateItem.setDefaultQuantity(1); theStartDateItem.setValue(new RelativeDate("-1d")); theStartDateItem.setPresetOptions(theDatePresets); theStartDateItem.setInputFormat("DMY"); theStartDateItem.setOverflow(Overflow.VISIBLE); theStartDateItem.addChangedHandler(new ChangedHandler() { @Override public void onChanged(ChangedEvent event) { SC.logWarn("Start ChangedHandler"); // This will cause an exception Cannot convert String to Date //Date startDate = (Date)theStartDateItem.getValue(); String startDate = (String) theStartDateItem.getValue(); SC.logWarn("startDate = " + startDate); } }); } return theStartDateItem; } /** * This will return an array of SmartGWT TimeUnit options that we want to add to our drop-down * for the Start and End date RelativeDateItem's * * @return array of TimeUnit's */ private TimeUnit[] getTimeOptions() { TimeUnit[] units = new TimeUnit[5]; units[0] = TimeUnit.HOUR; units[1] = TimeUnit.DAY; units[2] = TimeUnit.WEEK; units[3] = TimeUnit.MONTH; units[4] = TimeUnit.YEAR; return units; } /** * This will initialize and construct the end RelativeDateItem * @return Ending RelativeDateItem */ private RelativeDateItem getEndDateItem() { if (theEndDateItem == null) { changeDateFormat(); theEndDateItem = new RelativeDateItem("end_date"); theEndDateItem.setTitle("End:"); theEndDateItem.setOverflow(Overflow.VISIBLE); theEndDateItem.setShowFutureOptions(false); theEndDateItem.setShowPastOptions(true); theEndDateItem.setTimeUnitOptions(getTimeOptions()); theEndDateItem.setDefaultQuantity(1); theEndDateItem.setPresetOptions(theDatePresets); theEndDateItem.addChangedHandler(new ChangedHandler() { @Override public void onChanged(ChangedEvent event) { SC.logWarn("End changed handler"); } }); } return theEndDateItem; } }
Comment