I can't figure out why the "change" event doesn't fire in my custom selection cell, below is the code. The focus and blur events fire. Also, if I change to super("click") the click event will fire but no matter what I try I can not get the "change" event to fire. I add the option items dynamically using the addOption(String newOp) method. For the selection model in my data grid I have :
final SelectionModel<IssueBean> selectionModel = new MultiSelectionModel<IssueBean>(keyProvider); dataGrid.setSelectionModel(selectionModel, DefaultSelectionEventManager.<IssueBean> createCheckboxManager()); import java.util.ArrayList; import java.util.HashMap; import java.util.List; import com.google.gwt.cell.client.AbstractInputCell; import com.google.gwt.cell.client.ValueUpdater; import com.google.gwt.core.client.GWT; import com.google.gwt.dom.client.BrowserEvents; import com.google.gwt.dom.client.Element; import com.google.gwt.dom.client.NativeEvent; import com.google.gwt.dom.client.SelectElement; import com.google.gwt.safehtml.client.SafeHtmlTemplates; import com.google.gwt.safehtml.shared.SafeHtml; import com.google.gwt.safehtml.shared.SafeHtmlBuilder; import com.google.gwt.user.client.Window; public class IssueCatagorySelectionCell extends AbstractInputCell<String, String> { interface Template extends SafeHtmlTemplates { @Template("<option value=\"{0}\">{0}</option>") SafeHtml deselected(String option); @Template("<option value=\"{0}\" selected=\"selected\">{0}</option>") SafeHtml selected(String option); } private static Template template; private HashMap<String, Integer> indexForOption = new HashMap<String, Integer>(); private final List<String> options; public IssueCatagorySelectionCell() { super(BrowserEvents.CHANGE); if (template == null) { template = GWT.create(Template.class); } this.options = new ArrayList<String>(); } public void addOption(String newOp){ String option = new String(newOp); options.add(option); refreshIndexes(); } public void removeOption(String op){ String option = new String(op); options.remove(indexForOption.get(option)); refreshIndexes(); } public void removeAll() { options.clear(); refreshIndexes(); } private void refreshIndexes(){ int index = 0; for (String option : options) { indexForOption.put(option, index++); } } @Override public void onBrowserEvent(Context context, Element parent, String value, NativeEvent event, ValueUpdater<String> valueUpdater) { super.onBrowserEvent(context, parent, value, event, valueUpdater); String type = event.getType(); Window.alert("event type = " + type); if ("change".equals(type)) { Object key = context.getKey(); SelectElement select = parent.getFirstChild().cast(); String newValue = options.get(select.getSelectedIndex()); Window.alert("newValue = " + newValue); setViewData(key, newValue); finishEditing(parent, newValue, key, valueUpdater); if (valueUpdater != null) { valueUpdater.update(newValue); } } } @Override public void render(com.google.gwt.cell.client.Cell.Context context, String value, SafeHtmlBuilder sb) { // Get the view data. Object key = context.getKey(); String viewData = getViewData(key); if (viewData != null && viewData.equals(value)) { clearViewData(key); viewData = null; } int selectedIndex = getSelectedIndex(viewData == null ? value : viewData); sb.appendHtmlConstant("<select tabindex=\"-1\">"); int index = 0; for (String option : options) { if (index++ == selectedIndex) { sb.append(template.selected(option)); } else { sb.append(template.deselected(option)); } } sb.appendHtmlConstant("</select>"); } private int getSelectedIndex(String value) { Window.alert("getSelectedIndex"); Integer index = indexForOption.get(value); if (index == null) { return -1; } return index.intValue(); } } -- You received this message because you are subscribed to the Google Groups "Google Web Toolkit" group. To unsubscribe from this group and stop receiving emails from it, send an email to google-web-toolkit+unsubscr...@googlegroups.com. To post to this group, send email to google-web-toolkit@googlegroups.com. Visit this group at http://groups.google.com/group/google-web-toolkit. For more options, visit https://groups.google.com/d/optout.