/* * Smart GWT (GWT for SmartClient) * Copyright 2008 and beyond, Isomorphic Software, Inc. * * Smart GWT is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License version 3 * as published by the Free Software Foundation. Smart GWT is also * available under typical commercial license terms - see * http://smartclient.com/license * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. */ import java.util.HashMap; import java.util.Map; import com.smartgwt.client.core.Rectangle; import com.smartgwt.client.util.SC; 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.ChangeEvent; import com.smartgwt.client.widgets.form.fields.events.ChangeHandler; import com.smartgwt.client.widgets.form.fields.events.IconClickEvent; import com.smartgwt.client.widgets.form.fields.events.IconClickHandler; import com.google.gwt.core.client.EntryPoint; public class CustomPickerSample implements EntryPoint { public void onModuleLoad() { final DynamicForm form = new DynamicForm(); form.setAutoFocus(true); form.setWidth(200); YesNoMaybeItem decision = new YesNoMaybeItem(); decision.setTitle("Decision"); form.setFields(decision); decision.addChangeHandler(new ChangeHandler() { @Override public void onChange(ChangeEvent event) { SC.say("User chooses " + event.getValue()); } }); form.draw(); } 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.setShowToolbar(false); dialog.setAutoSize(true); dialog.setWidth(100); Map bodyDefaults = new HashMap(); bodyDefaults.put("layoutMargin", 10); 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.setCurrentValue(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.setCurrentValue(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.setCurrentValue(maybe.getTitle()); } }); dialog.addItem(yes); dialog.addItem(no); dialog.addItem(maybe); } // set the specified value and dismiss the picker dialog private static void setCurrentValue(String value) { currentEditor.storeValue(value, true); 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()); } }); } } }