/* * 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. */ package com.smartgwt.sample.showcase.client.miniapp; import com.smartgwt.client.data.Criteria; import com.smartgwt.client.data.DataSource; import com.smartgwt.client.data.Record; import com.smartgwt.client.types.CurrentPane; import com.smartgwt.client.types.DeviceMode; import com.smartgwt.client.types.VisibilityMode; import com.smartgwt.client.util.Browser; import com.smartgwt.client.widgets.form.fields.ComboBoxItem; import com.smartgwt.client.widgets.form.fields.FormItemCriteriaFunction; import com.smartgwt.client.widgets.form.fields.FormItemFunctionContext; 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.grid.events.SelectionUpdatedEvent; import com.smartgwt.client.widgets.grid.events.SelectionUpdatedHandler; import com.smartgwt.client.widgets.layout.SectionStack; import com.smartgwt.client.widgets.layout.SectionStackSection; import com.smartgwt.client.widgets.layout.SplitPane; 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.tree.TreeNode; import com.smartgwt.client.widgets.tree.events.NodeClickEvent; import com.smartgwt.client.widgets.tree.events.NodeClickHandler; import com.smartgwt.sample.showcase.client.ShowcaseConfiguration; import com.smartgwt.sample.showcase.client.data.ItemSupplyXmlDS; import com.smartgwt.sample.showcase.client.data.SupplyCategoryXmlDS; class ApplicationPanel extends SplitPane { private SearchForm searchForm; private CategoryTreeGrid categoryTree; private ItemListGrid itemList; private ItemDetailTabPane detailPane; private Menu itemListMenu; final boolean useDesktopMode = ShowcaseConfiguration.getSingleton().isOpenForTesting() || Browser.getIsDesktop(); public ApplicationPanel() { setDeviceMode(useDesktopMode ? DeviceMode.DESKTOP : DeviceMode.HANDSET); setWidth100(); setHeight100(); setLayoutMargin(20); DataSource supplyCategoryDS = SupplyCategoryXmlDS.getInstance(); DataSource supplyItemDS = ItemSupplyXmlDS.getInstance(); categoryTree = new CategoryTreeGrid(supplyCategoryDS); categoryTree.setAutoFetchData(true); categoryTree.addSelectionUpdatedHandler(new SelectionUpdatedHandler() { @Override public void onSelectionUpdated(SelectionUpdatedEvent event) { if (categoryTree.getSelectedRecord() == null) { itemList.setData(new Record[0]); detailPane.clearDetails(null); } } }); categoryTree.addNodeClickHandler(new NodeClickHandler() { public void onNodeClick(NodeClickEvent event) { TreeNode node = event.getNode(); if (categoryTree.isSelected(node)) { String category = node.getAttribute("categoryName"); findItems(category); setCurrentPane(CurrentPane.LIST); } } }); // Navigation SectionStack navigationPane = new SectionStack(); navigationPane.setWidth(280); navigationPane.setVisibilityMode(VisibilityMode.MULTIPLE); navigationPane.setAnimateSections(true); SectionStackSection suppliesCategorySection = new SectionStackSection(""); suppliesCategorySection.setShowHeader(false); suppliesCategorySection.setExpanded(true); suppliesCategorySection.setItems(categoryTree); SectionStackSection instructionsSection = new SectionStackSection("Instructions"); instructionsSection.setItems(new HelpPane()); instructionsSection.setExpanded(true); instructionsSection.setHidden(getDeviceMode()!=DeviceMode.DESKTOP); navigationPane.setSections(suppliesCategorySection, instructionsSection); // List VLayout listPane = new VLayout(); searchForm = new SearchForm(supplyItemDS); 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); } }); //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 FormItemCriteriaFunction() { @Override public Criteria getCriteria(FormItemFunctionContext itemContext) { 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.addSelectionUpdatedHandler(new SelectionUpdatedHandler() { @Override public void onSelectionUpdated(SelectionUpdatedEvent event) { if (itemList.getSelectedRecord() == null) { detailPane.clearDetails(categoryTree.getSelectedRecord()); } } }); itemList.addRecordClickHandler(new RecordClickHandler() { public void onRecordClick(RecordClickEvent event) { detailPane.updateDetails(); setCurrentPane(CurrentPane.DETAIL); } }); itemList.addCellSavedHandler(new CellSavedHandler() { public void onCellSaved(CellSavedEvent event) { detailPane.updateDetails(); } }); itemList.addCellContextClickHandler(new CellContextClickHandler() { public void onCellContextClick(CellContextClickEvent event) { itemListMenu.showContextMenu(); event.cancel(); } }); listPane.addMembers(searchForm, itemList); // Detail detailPane = new ItemDetailTabPane(supplyItemDS, supplyCategoryDS, itemList); // Layout setDetailPane(detailPane); setDetailTitle("Item Details"); setListPane(listPane); setListTitle("Items"); setNavigationPane(navigationPane); setNavigationTitle("Categories"); } 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) { detailPane.selectTab(0); detailPane.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) { detailPane.selectTab(1); detailPane.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(); detailPane.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); detailPane.clearDetails(categoryTree.getSelectedRecord()); } }