Mega Code Archive

 
Categories / Java / GWT
 

SwartGWT based application demo (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.i18n.client.NumberFormat; import com.google.gwt.user.client.ui.RootPanel; import com.smartgwt.client.core.Rectangle; import com.smartgwt.client.data.Criteria; import com.smartgwt.client.data.DataSource; import com.smartgwt.client.data.Record; import com.smartgwt.client.data.fields.DataSourceBooleanField; import com.smartgwt.client.data.fields.DataSourceDateField; import com.smartgwt.client.data.fields.DataSourceEnumField; import com.smartgwt.client.data.fields.DataSourceFloatField; import com.smartgwt.client.data.fields.DataSourceIntegerField; import com.smartgwt.client.data.fields.DataSourceTextField; import com.smartgwt.client.types.Alignment; import com.smartgwt.client.types.Overflow; import com.smartgwt.client.types.SelectionStyle; import com.smartgwt.client.types.VisibilityMode; import com.smartgwt.client.util.Page; import com.smartgwt.client.widgets.AnimationCallback; import com.smartgwt.client.widgets.Canvas; import com.smartgwt.client.widgets.HTMLPane; import com.smartgwt.client.widgets.IButton; import com.smartgwt.client.widgets.Label; import com.smartgwt.client.widgets.Window; import com.smartgwt.client.widgets.events.CloseClickHandler; import com.smartgwt.client.widgets.events.CloseClientEvent; import com.smartgwt.client.widgets.form.DynamicForm; import com.smartgwt.client.widgets.form.fields.ButtonItem; import com.smartgwt.client.widgets.form.fields.CheckboxItem; import com.smartgwt.client.widgets.form.fields.ComboBoxItem; import com.smartgwt.client.widgets.form.fields.DateItem; import com.smartgwt.client.widgets.form.fields.FilterCriteriaFunction; import com.smartgwt.client.widgets.form.fields.PickTreeItem; import com.smartgwt.client.widgets.form.fields.SpinnerItem; import com.smartgwt.client.widgets.form.fields.TextItem; import com.smartgwt.client.widgets.form.fields.events.ClickEvent; import com.smartgwt.client.widgets.form.fields.events.ClickHandler; import com.smartgwt.client.widgets.form.validator.FloatPrecisionValidator; import com.smartgwt.client.widgets.form.validator.FloatRangeValidator; import com.smartgwt.client.widgets.grid.CellFormatter; import com.smartgwt.client.widgets.grid.ListGrid; import com.smartgwt.client.widgets.grid.ListGridField; import com.smartgwt.client.widgets.grid.ListGridFieldIfFunction; import com.smartgwt.client.widgets.grid.ListGridRecord; import com.smartgwt.client.widgets.grid.events.CellContextClickEvent; import com.smartgwt.client.widgets.grid.events.CellContextClickHandler; import com.smartgwt.client.widgets.grid.events.CellSavedEvent; import com.smartgwt.client.widgets.grid.events.CellSavedHandler; import com.smartgwt.client.widgets.grid.events.RecordClickEvent; import com.smartgwt.client.widgets.grid.events.RecordClickHandler; import com.smartgwt.client.widgets.layout.HLayout; import com.smartgwt.client.widgets.layout.SectionStack; import com.smartgwt.client.widgets.layout.SectionStackSection; import com.smartgwt.client.widgets.layout.VLayout; import com.smartgwt.client.widgets.menu.Menu; import com.smartgwt.client.widgets.menu.MenuItem; import com.smartgwt.client.widgets.menu.events.MenuItemClickEvent; import com.smartgwt.client.widgets.tab.Tab; import com.smartgwt.client.widgets.tab.TabSet; import com.smartgwt.client.widgets.tab.events.TabSelectedEvent; import com.smartgwt.client.widgets.tab.events.TabSelectedHandler; import com.smartgwt.client.widgets.tree.TreeGrid; import com.smartgwt.client.widgets.tree.events.NodeClickEvent; import com.smartgwt.client.widgets.tree.events.NodeClickHandler; import com.smartgwt.client.widgets.viewer.DetailViewer; public class Showcase implements EntryPoint {   public void onModuleLoad() {     RootPanel.get().add(getViewPanel());   }   public Canvas getViewPanel() {     VLayout layout = new VLayout(15);     layout.addMember(new Label(         "This is a full-screen example - click the \"Show Example\" button to show fullscreen."));     final IButton button = new IButton("Show Example");     button.setWidth(140);     button.setIcon("silk/layout_content.png");     button.addClickHandler(new com.smartgwt.client.widgets.events.ClickHandler() {       public void onClick(com.smartgwt.client.widgets.events.ClickEvent event) {         Rectangle rect = button.getPageRect();         final Canvas animateOutline = new Canvas();         animateOutline.setBorder("2px solid black");         animateOutline.setTop(rect.getTop());         animateOutline.setLeft(rect.getLeft());         animateOutline.setWidth(rect.getLeft());         animateOutline.setHeight(rect.getHeight());         animateOutline.show();         animateOutline.animateRect(0, 0, Page.getWidth(), Page.getHeight(),             new AnimationCallback() {               public void execute(boolean earlyFinish) {                 animateOutline.hide();                 final FullyScreenApplication appWindow = new FullyScreenApplication();                 appWindow.addCloseClickHandler(new CloseClickHandler() {                   public void onCloseClick(CloseClientEvent event) {                     animateOutline.setRect(0, 0, Page.getWidth(), Page.getHeight());                     animateOutline.show();                     appWindow.destroy();                     Rectangle targetRect = button.getPageRect();                     animateOutline.animateRect(targetRect.getLeft(), targetRect.getTop(),                         targetRect.getWidth(), targetRect.getHeight(), new AnimationCallback() {                           public void execute(boolean earlyFinish) {                             animateOutline.hide();                           }                         }, 500);                   }                 });                 appWindow.show();               }             }, 500);       }     });     layout.addMember(button);     return layout;   }   class FullyScreenApplication extends Window {     FullyScreenApplication() {       setTitle("Demo Application");       setHeaderIcon("silk/layout_content.png");       setWidth100();       setHeight100();       setShowMinimizeButton(false);       setShowCloseButton(true);       setCanDragReposition(false);       setCanDragResize(false);       setShowShadow(false);       addItem(new ApplicationPanel());     }   }   public String getSourceUrl() {     return null;   }   public String getSourceGenUrl() {     return null;   } } class ApplicationPanel extends HLayout {   private SearchForm searchForm;   private CategoryTreeGrid categoryTree;   private ItemListGrid itemList;   private ItemDetailTabPane itemDetailTabPane;   private Menu itemListMenu;   public ApplicationPanel() {     setWidth100();     setHeight100();     setLayoutMargin(20);     DataSource supplyCategoryDS = SupplyCategoryXmlDS.getInstance();     DataSource supplyItemDS = ItemSupplyXmlDS.getInstance();     categoryTree = new CategoryTreeGrid(supplyCategoryDS);     categoryTree.setAutoFetchData(true);     categoryTree.addNodeClickHandler(new NodeClickHandler() {       public void onNodeClick(NodeClickEvent event) {         String category = event.getNode().getAttribute("categoryName");         findItems(category);       }     });     searchForm = new SearchForm(supplyItemDS);     // when showing options in the combo-box, only show the options from the     // selected category if appropriate     final ComboBoxItem itemNameCB = searchForm.getItemNameField();     itemNameCB.setPickListFilterCriteriaFunction(new FilterCriteriaFunction() {       public Criteria getCriteria() {         ListGridRecord record = categoryTree.getSelectedRecord();         if ((itemNameCB.getValue() != null) && record != null) {           Criteria criteria = new Criteria();           criteria.addCriteria("category", record.getAttribute("categoryName"));           return criteria;         }         return null;       }     });     setupContextMenu();     itemList = new ItemListGrid(supplyItemDS);     itemList.addRecordClickHandler(new RecordClickHandler() {       public void onRecordClick(RecordClickEvent event) {         itemDetailTabPane.updateDetails();       }     });     itemList.addCellSavedHandler(new CellSavedHandler() {       public void onCellSaved(CellSavedEvent event) {         itemDetailTabPane.updateDetails();       }     });     itemList.addCellContextClickHandler(new CellContextClickHandler() {       public void onCellContextClick(CellContextClickEvent event) {         itemListMenu.showContextMenu();         event.cancel();       }     });     SectionStack leftSideLayout = new SectionStack();     leftSideLayout.setWidth(280);     leftSideLayout.setShowResizeBar(true);     leftSideLayout.setVisibilityMode(VisibilityMode.MULTIPLE);     leftSideLayout.setAnimateSections(true);     SectionStackSection suppliesCategorySection = new SectionStackSection(         "Office Supply Categories");     suppliesCategorySection.setExpanded(true);     suppliesCategorySection.setItems(categoryTree);     SectionStackSection instructionsSection = new SectionStackSection("Instructions");     instructionsSection.setItems(new HelpPane());     instructionsSection.setExpanded(true);     leftSideLayout.setSections(suppliesCategorySection, instructionsSection);     SectionStack rightSideLayout = new SectionStack();     rightSideLayout.setVisibilityMode(VisibilityMode.MULTIPLE);     rightSideLayout.setAnimateSections(true);     searchForm.setHeight(60);     searchForm.addFindListener(new com.smartgwt.client.widgets.form.fields.events.ClickHandler() {       public void onClick(com.smartgwt.client.widgets.form.fields.events.ClickEvent event) {         findItems(null);       }     });     SectionStackSection findSection = new SectionStackSection("Find Items");     findSection.setItems(searchForm);     findSection.setExpanded(true);     SectionStackSection supplyItemsSection = new SectionStackSection("Office Supply Items");     supplyItemsSection.setItems(itemList);     supplyItemsSection.setExpanded(true);     itemDetailTabPane = new ItemDetailTabPane(supplyItemDS, supplyCategoryDS, itemList);     SectionStackSection itemDetailsSection = new SectionStackSection("Item Details");     itemDetailsSection.setItems(itemDetailTabPane);     itemDetailsSection.setExpanded(true);     rightSideLayout.setSections(findSection, supplyItemsSection, itemDetailsSection);     addMember(leftSideLayout);     addMember(rightSideLayout);   }   private void setupContextMenu() {     itemListMenu = new Menu();     itemListMenu.setCellHeight(22);     MenuItem detailsMenuItem = new MenuItem("Show Details", "silk/application_form.png");     detailsMenuItem.addClickHandler(new com.smartgwt.client.widgets.menu.events.ClickHandler() {       public void onClick(MenuItemClickEvent event) {         itemDetailTabPane.selectTab(0);         itemDetailTabPane.updateDetails();       }     });     final MenuItem editMenuItem = new MenuItem("Edit Item", "demoApp/icon_edit.png");     editMenuItem.addClickHandler(new com.smartgwt.client.widgets.menu.events.ClickHandler() {       public void onClick(MenuItemClickEvent event) {         itemDetailTabPane.selectTab(1);         itemDetailTabPane.updateDetails();       }     });     final MenuItem deleteMenuItem = new MenuItem("Delete Item", "silk/delete.png");     deleteMenuItem.addClickHandler(new com.smartgwt.client.widgets.menu.events.ClickHandler() {       public void onClick(MenuItemClickEvent event) {         itemList.removeSelectedData();         itemDetailTabPane.clearDetails(null);       }     });     itemListMenu.setData(detailsMenuItem, editMenuItem, deleteMenuItem);   }   public void findItems(String categoryName) {     Criteria findValues;     String formValue = searchForm.getValueAsString("findInCategory");     ListGridRecord selectedCategory = categoryTree.getSelectedRecord();     if (formValue != null && selectedCategory != null) {       categoryName = selectedCategory.getAttribute("categoryName");       findValues = searchForm.getValuesAsCriteria();       findValues.addCriteria("category", categoryName);     } else if (categoryName == null) {       findValues = searchForm.getValuesAsCriteria();     } else {       findValues = new Criteria();       findValues.addCriteria("category", categoryName);     }     itemList.filterData(findValues);     itemDetailTabPane.clearDetails(categoryTree.getSelectedRecord());   } } class SearchForm extends DynamicForm {   private ComboBoxItem itemName;   private ButtonItem findItem;   public SearchForm(DataSource supplyItemDS) {     setDataSource(supplyItemDS);     setTop(20);     setCellPadding(6);     setNumCols(7);     setStyleName("defaultBorder");     findItem = new ButtonItem("Find");     findItem.setIcon("silk/find.png");     findItem.setWidth(70);     findItem.setEndRow(false);     TextItem skuItem = new TextItem("SKU");     itemName = new ComboBoxItem("itemName");     itemName.setOptionDataSource(supplyItemDS);     itemName.setPickListWidth(250);     CheckboxItem findInCategory = new CheckboxItem("findInCategory");     findInCategory.setTitle("Use Category");     findInCategory.setDefaultValue(true);     findInCategory.setShouldSaveValue(false);     setItems(findItem, skuItem, itemName, findInCategory);   }   public ComboBoxItem getItemNameField() {     return itemName;   }   public void addFindListener(ClickHandler handler) {     findItem.addClickHandler(handler);   } } class ItemListGrid extends ListGrid {   public ItemListGrid(DataSource supplyItemDS) {     setDataSource(supplyItemDS);     setUseAllDataSourceFields(true);     ListGridField itemName = new ListGridField("itemName", "Name");     itemName.setShowHover(true);     ListGridField unitCost = new ListGridField("unitCost");     unitCost.setCellFormatter(new CellFormatter() {       public String format(Object value, ListGridRecord record, int rowNum, int colNum) {         if (value == null)           return null;         try {           NumberFormat nf = NumberFormat.getFormat("##0.00");           return "$" + nf.format(((Number) value).floatValue());         } catch (Exception e) {           return value.toString();         }       }     });     SpinnerItem spinnerItem = new SpinnerItem();     spinnerItem.setStep(0.01);     unitCost.setEditorType(spinnerItem);     ListGridField sku = new ListGridField("SKU");     sku.setCanEdit(false);     ListGridField description = new ListGridField("description");     description.setShowHover(true);     ListGridField category = new ListGridField("category");     category.setCanEdit(false);     ListGridField inStock = new ListGridField("inStock");     inStock.setWidth(55);     inStock.setAlign(Alignment.CENTER);     ListGridField nextShipment = new ListGridField("nextShipent");     nextShipment.setShowIfCondition(new ListGridFieldIfFunction() {       public boolean execute(ListGrid grid, ListGridField field, int fieldNum) {         return false;       }     });     setFields(itemName, unitCost, sku, description, category, inStock);     setCanEdit(true);     setAlternateRecordStyles(true);     setCanDragRecordsOut(true);     setHoverWidth(200);     setHoverHeight(20);     setSelectionType(SelectionStyle.SINGLE);   } } class CategoryTreeGrid extends TreeGrid {   public CategoryTreeGrid(DataSource supplyCategoryDS) {     setShowHeader(false);     setLeaveScrollbarGap(false);     setAnimateFolders(true);     setCanAcceptDroppedRecords(true);     setCanReparentNodes(false);     setSelectionType(SelectionStyle.SINGLE);     setDataSource(supplyCategoryDS);   } } class HelpPane extends HTMLPane {   public HelpPane() {     setContentsURL("data/miniapp/demoApp_helpText.html");     setOverflow(Overflow.AUTO);     setStyleName("defaultBorder");     setPadding(10);   } } class ItemDetailTabPane extends TabSet {   private DetailViewer itemViewer;   private DynamicForm editorForm;   private Label editorLabel;   private ItemListGrid itemListGrid;   public ItemDetailTabPane(DataSource supplyItemDS, DataSource supplyCategoryDS,       ItemListGrid itemListGrid) {     this.itemListGrid = itemListGrid;     setStyleName("defaultBorder");     itemViewer = new DetailViewer();     itemViewer.setDataSource(supplyItemDS);     itemViewer.setWidth100();     itemViewer.setMargin(25);     itemViewer.setEmptyMessage("Select an item to view its details");     editorLabel = new Label();     editorLabel.setWidth100();     editorLabel.setHeight100();     editorLabel.setAlign(Alignment.CENTER);     editorLabel.setContents("Select a record to edit, or a category to insert a new record into");     editorForm = new DynamicForm();     editorForm.setWidth(650);     editorForm.setMargin(25);     editorForm.setNumCols(4);     editorForm.setCellPadding(5);     editorForm.setAutoFocus(false);     editorForm.setDataSource(supplyItemDS);     editorForm.setUseAllDataSourceFields(true);     TextItem sku = new TextItem("SKU", "SKU");     TextItem description = new TextItem("description");     description.setWidth(300);     description.setRowSpan(3);     PickTreeItem category = new PickTreeItem("category");     category.setDataSource(supplyCategoryDS);     category.setEmptyMenuMessage("No Sub Categories");     category.setCanSelectParentItems(true);     SpinnerItem unitCost = new SpinnerItem("unitCost");     unitCost.setStep(0.01);     CheckboxItem inStock = new CheckboxItem("inStock");     DateItem nextShipment = new DateItem("nextShipment");     nextShipment.setUseTextField(true);     ButtonItem saveButton = new ButtonItem("Save Item");     saveButton.setAlign(Alignment.CENTER);     saveButton.setWidth(100);     saveButton.setColSpan(4);     saveButton.addClickHandler(new ClickHandler() {       public void onClick(ClickEvent event) {         editorForm.saveData();       }     });     editorForm.setFields(sku, description, category, unitCost, inStock, nextShipment, saveButton);     editorForm.setColWidths(100, 200, 100, 200);     Tab viewTab = new Tab("View");     viewTab.setIcon("silk/application_form.png");     viewTab.setWidth(70);     viewTab.setPane(itemViewer);     Tab editTab = new Tab("Edit");     editTab.setIcon("demoApp/icon_edit.png");     editTab.setWidth(70);     editTab.setPane(editorForm);     setTabs(viewTab, editTab);     addTabSelectedHandler(new TabSelectedHandler() {       public void onTabSelected(TabSelectedEvent event) {         updateDetails();       }     });   }   public void clearDetails(Record selectedCategoryRecord) {     int selectedTab = getSelectedTabNumber();     if (selectedTab == 0) {       // view tab : show empty message       itemViewer.setData((Record[]) null);     } else {       // edit tab : show new record editor, or empty message       if (selectedCategoryRecord != null) {         updateTab(1, editorForm);         Map initialValues = new HashMap();         initialValues.put("category", selectedCategoryRecord.getAttribute("categoryName"));         editorForm.editNewRecord(initialValues);       } else {         updateTab(1, editorLabel);       }     }   }   public void updateDetails() {     Record selectedRecord = itemListGrid.getSelectedRecord();     int selectedTab = getSelectedTabNumber();     if (selectedTab == 0) {       // view tab : show empty message       itemViewer.setData(new Record[] { selectedRecord });     } else {       // edit tab : show record editor       editorForm.editRecord(selectedRecord);     }   } } class SupplyCategoryXmlDS extends DataSource {   private static SupplyCategoryXmlDS instance = null;   public static SupplyCategoryXmlDS getInstance() {       if (instance == null) {           instance = new SupplyCategoryXmlDS("supplyCategoryDS");       }       return instance;   }   public SupplyCategoryXmlDS(String id) {       setID(id);       setRecordXPath("/List/supplyCategory");       DataSourceTextField itemNameField = new DataSourceTextField("categoryName", "Item", 128, true);       itemNameField.setPrimaryKey(true);       DataSourceTextField parentField = new DataSourceTextField("parentID", null);       parentField.setHidden(true);       parentField.setRequired(true);       parentField.setRootValue("root");       parentField.setForeignKey("supplyCategoryDS.categoryName");       setFields(itemNameField, parentField);       setDataURL("ds/test_data/supplyCategory.data.xml");              setClientOnly(true);   } } class ItemSupplyXmlDS extends DataSource {   private static ItemSupplyXmlDS instance = null;   public static ItemSupplyXmlDS getInstance() {       if (instance == null) {           instance = new ItemSupplyXmlDS("supplyItemDS");       }       return instance;   }   public ItemSupplyXmlDS(String id) {       setID(id);       setRecordXPath("/List/supplyItem");       DataSourceIntegerField pkField = new DataSourceIntegerField("itemID");       pkField.setHidden(true);       pkField.setPrimaryKey(true);       DataSourceTextField itemNameField = new DataSourceTextField("itemName", "Item Name", 128, true);       DataSourceTextField skuField = new DataSourceTextField("SKU", "SKU", 10, true);       DataSourceTextField descriptionField = new DataSourceTextField("description", "Description", 2000);       DataSourceTextField categoryField = new DataSourceTextField("category", "Category", 128, true);       categoryField.setForeignKey("supplyCategoryDS.categoryName");       DataSourceEnumField unitsField = new DataSourceEnumField("units", "Units", 5);       unitsField.setValueMap("Roll", "Ea", "Pkt", "Set", "Tube", "Pad", "Ream", "Tin", "Bag", "Ctn", "Box");       DataSourceFloatField unitCostField = new DataSourceFloatField("unitCost", "Unit Cost", 5);       FloatRangeValidator rangeValidator = new FloatRangeValidator();       rangeValidator.setMin(0);       rangeValidator.setErrorMessage("Please enter a valid (positive) cost");       FloatPrecisionValidator precisionValidator = new FloatPrecisionValidator();       precisionValidator.setPrecision(2);       precisionValidator.setErrorMessage("The maximum allowed precision is 2");       unitCostField.setValidators(rangeValidator, precisionValidator);       DataSourceBooleanField inStockField = new DataSourceBooleanField("inStock", "In Stock");       DataSourceDateField nextShipmentField = new DataSourceDateField("nextShipment", "Next Shipment");       setFields(pkField, itemNameField, skuField, descriptionField, categoryField, unitsField,                 unitCostField, inStockField, nextShipmentField);       setDataURL("ds/test_data/supplyItem.data.xml");       setClientOnly(true);           } }             SmartGWT.zip( 9,880 k)