GWT Java

/*
 * 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)