Menu Tree Binding Sample (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 com.google.gwt.core.client.EntryPoint; import com.google.gwt.user.client.ui.RootPanel; import com.smartgwt.client.data.DataSource; import com.smartgwt.client.data.fields.DataSourceTextField; import com.smartgwt.client.util.SC; import com.smartgwt.client.widgets.Canvas; import com.smartgwt.client.widgets.menu.Menu; import com.smartgwt.client.widgets.menu.MenuButton; import com.smartgwt.client.widgets.menu.MenuItem; import com.smartgwt.client.widgets.menu.events.ItemClickEvent; import com.smartgwt.client.widgets.menu.events.ItemClickHandler; public class Showcase implements EntryPoint { public void onModuleLoad() { RootPanel.get().add(getViewPanel()); } public Canvas getViewPanel() { Canvas main = new Canvas(); Menu mDepartment = new Menu(); mDepartment.setCanSelectParentItems(true); mDepartment.setData(getLocalItemsAsArray()); mDepartment.setWidth(130); mDepartment.addItemClickHandler(new ItemClickHandler() { public void onItemClick(ItemClickEvent event) { SC.say("You picked the \"" + event.getItem().getTitle() + "\" department."); } }); MenuButton bDepartment = new MenuButton("Go to department", mDepartment); bDepartment.setWidth(130); main.addChild(bDepartment); Menu mCategory = new Menu(); mCategory.setCanSelectParentItems(true); mCategory.setDataSource(SupplyCategoryXmlDS.getInstance()); mCategory.setWidth(130); mCategory.addItemClickHandler(new ItemClickHandler() { public void onItemClick(ItemClickEvent event) { MenuItem item = event.getItem(); SC.say("You picked the \"" + item.getAttributeAsString("categoryName") + "\" category."); } }); MenuButton bCategory = new MenuButton("Go to category", mCategory); bCategory.setTop(30); bCategory.setWidth(140); main.addChild(bCategory); return main; } private MenuItem[] getLocalItemsAsArray() { MenuItem[] m = new MenuItem[4]; m[0] = new MenuItem("Marketing"); Menu menuMarketing = new Menu(); menuMarketing.setData(new MenuItem("Advertising"), new MenuItem("Community Relations")); m[0].setSubmenu(menuMarketing); m[1] = new MenuItem("Sales"); Menu menuSales = new Menu(); menuSales.setData(new MenuItem("Direct Sales"),new MenuItem("Channel Sales")); m[1].setSubmenu(menuSales); m[2] = new MenuItem("Manufacturing"); Menu menuManufacturing = new Menu(); menuManufacturing.setData(new MenuItem("Design"), new MenuItem("Development"), new MenuItem("QA")); m[2].setSubmenu(menuManufacturing); m[3] = new MenuItem("Services"); Menu menuServices = new Menu(); menuServices.setData(new MenuItem("Support"), new MenuItem("Consulting")); m[3].setSubmenu(menuServices); return m; } } 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); } }