A custom form control implemented as a picker (Smart GWT)
/*
* SmartGWT (GWT for SmartClient)
* Copyright 2008 and beyond, Isomorphic Software, Inc.
*
* SmartGWT 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. SmartGWT 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.
*/
package com.smartgwt.sample.showcase.client;
import java.util.HashMap;
import java.util.Map;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.user.client.ui.RootPanel;
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;
public class Showcase implements EntryPoint {
public void onModuleLoad() {
RootPanel.get().add(getViewPanel());
}
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 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());
}
});
}
}
}
SmartGWT.zip( 9,880 k)Related examples in the same category