package com.smartgwt.sample.showcase.client.forms; import com.smartgwt.client.core.Rectangle; import com.smartgwt.client.widgets.Canvas; import com.smartgwt.client.widgets.Dialog; import com.smartgwt.client.widgets.IButton; import com.smartgwt.client.widgets.form.DynamicForm; import com.smartgwt.client.widgets.form.fields.FormItemIcon; import com.smartgwt.client.widgets.form.fields.TextItem; import com.smartgwt.client.widgets.form.fields.events.IconClickEvent; import com.smartgwt.client.widgets.form.fields.events.IconClickHandler; import com.smartgwt.sample.showcase.client.PanelFactory; import com.smartgwt.sample.showcase.client.ShowcasePanel; import java.util.HashMap; import java.util.Map; public class CustomPickerSample extends ShowcasePanel { private static final String DESCRIPTION = "<p>The CustomPicker example demonstrates various custom picker icons that (YesNoMaybeItem) implemented as a \"picker\" that the user can pop up from a picker icon next to a form or grid value.</p>"; public static class Factory implements PanelFactory { private String id; public Canvas create() { CustomPickerSample panel = new CustomPickerSample(); id = panel.getID(); return panel; } public String getID() { return id; } public String getDescription() { return DESCRIPTION; } } public Canvas getViewPanel() { final DynamicForm form = new DynamicForm(); form.setAutoFocus(true); form.setWidth(200); YesNoMaybeItem decision = new YesNoMaybeItem(); decision.setTitle("Decision"); form.setFields(decision); return form; } public String getIntro() { return DESCRIPTION; } public static class YesNoMaybeItem extends TextItem { private static Dialog dialog; private static YesNoMaybeItem currentEditor; private static void makeDialog() { dialog = new Dialog(); dialog.setAutoCenter(true); dialog.setIsModal(true); dialog.setShowHeader(false); dialog.setShowEdges(false); dialog.setEdgeSize(10); dialog.setWidth(500); dialog.setHeight(400); dialog.setShowToolbar(false); dialog.setWidth(130); dialog.setHeight(110); Map bodyDefaults = new HashMap(); bodyDefaults.put("layoutLeftMargin", 5); bodyDefaults.put("membersMargin", 10); dialog.setBodyDefaults(bodyDefaults); final IButton yes = new IButton("YES"); yes.addClickHandler(new com.smartgwt.client.widgets.events.ClickHandler() { public void onClick(com.smartgwt.client.widgets.events.ClickEvent event) { YesNoMaybeItem.seCurrentValue(yes.getTitle()); } }); final IButton no = new IButton("NO"); no.addClickHandler(new com.smartgwt.client.widgets.events.ClickHandler() { public void onClick(com.smartgwt.client.widgets.events.ClickEvent event) { YesNoMaybeItem.seCurrentValue(no.getTitle()); } }); final IButton maybe = new IButton("MAYBE"); maybe.addClickHandler(new com.smartgwt.client.widgets.events.ClickHandler() { public void onClick(com.smartgwt.client.widgets.events.ClickEvent event) { YesNoMaybeItem.seCurrentValue(maybe.getTitle()); } }); dialog.addItem(yes); dialog.addItem(no); dialog.addItem(maybe); } // set the specified value and dismiss the picker dialog private static void seCurrentValue(String value) { currentEditor.setValue(value); dialog.hide(); } // show the picker dialog at the specified position private static void showDialog(int left, int top) { dialog.show(); dialog.moveTo(left, top); } public YesNoMaybeItem() { //use default trigger icon here. User can customize. //[SKIN]/DynamicForm/default_formItem_icon.gif FormItemIcon formItemIcon = new FormItemIcon(); setIcons(formItemIcon); addIconClickHandler(new IconClickHandler() { public void onIconClick(IconClickEvent event) { // get global coordinates of the clicked picker icon Rectangle iconRect = getIconPageRect(event.getIcon()); // lazily create the YesNoMaybe picker dialog the first time a yesNoMaybe editor is clicked if (YesNoMaybeItem.dialog == null) { YesNoMaybeItem.makeDialog(); } // remember what editor is active, so we can set its value from the picker dialog YesNoMaybeItem.currentEditor = YesNoMaybeItem.this; // show the picker dialog YesNoMaybeItem.showDialog(iconRect.getLeft(), iconRect.getTop()); } }); } } }