/*
* 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.types.VisibilityMode;
import com.smartgwt.client.widgets.form.fields.ComboBoxItem;
import com.smartgwt.client.widgets.form.fields.FilterCriteriaFunction;
import com.smartgwt.client.widgets.grid.ListGridRecord;
import com.smartgwt.client.widgets.grid.events.*;
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.menu.Menu;
import com.smartgwt.client.widgets.menu.MenuItem;
import com.smartgwt.client.widgets.menu.events.MenuItemClickEvent;
import com.smartgwt.client.widgets.tree.events.NodeClickEvent;
import com.smartgwt.client.widgets.tree.events.NodeClickHandler;
import com.smartgwt.sample.showcase.client.data.ItemSupplyXmlDS;
import com.smartgwt.sample.showcase.client.data.SupplyCategoryXmlDS;
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());
}
}