/** * Sencha GXT 3.0.0b - Sencha for GWT * Copyright(c) 2007-2012, Sencha, Inc. * licensing@sencha.com * * http://www.sencha.com/products/gxt/license/ */ package com.sencha.gxt.explorer.client.treegrid; import java.util.ArrayList; import java.util.Date; import java.util.List; import com.google.gwt.cell.client.DateCell; import com.google.gwt.core.client.EntryPoint; import com.google.gwt.core.client.GWT; import com.google.gwt.editor.client.Editor.Path; import com.google.gwt.i18n.client.DateTimeFormat; import com.google.gwt.i18n.client.DateTimeFormat.PredefinedFormat; import com.google.gwt.resources.client.ClientBundle; import com.google.gwt.resources.client.ImageResource; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.IsWidget; import com.google.gwt.user.client.ui.RootPanel; import com.google.gwt.user.client.ui.Widget; import com.sencha.gxt.core.client.ValueProvider; import com.sencha.gxt.data.client.loader.RpcProxy; import com.sencha.gxt.data.shared.ModelKeyProvider; import com.sencha.gxt.data.shared.PropertyAccess; import com.sencha.gxt.data.shared.TreeStore; import com.sencha.gxt.data.shared.loader.ChildTreeStoreBinding; import com.sencha.gxt.data.shared.loader.TreeLoader; import com.sencha.gxt.examples.resources.client.FileService; import com.sencha.gxt.examples.resources.client.FileServiceAsync; import com.sencha.gxt.examples.resources.client.images.ExampleImages; import com.sencha.gxt.examples.resources.client.model.FileModel; import com.sencha.gxt.examples.resources.client.model.FolderModel; import com.sencha.gxt.explorer.client.model.Example; import com.sencha.gxt.widget.core.client.FramedPanel; import com.sencha.gxt.widget.core.client.container.BoxLayoutContainer.BoxLayoutPack; import com.sencha.gxt.widget.core.client.grid.ColumnConfig; import com.sencha.gxt.widget.core.client.grid.ColumnModel; import com.sencha.gxt.widget.core.client.treegrid.TreeGrid; @Example.Detail(name = "Async TreeGrid", category = "TreeGrid", icon = "asynctreegrid") public class AsyncTreeGridExample implements IsWidget, EntryPoint { interface TreeBundle extends ClientBundle { ImageResource plus(); ImageResource minus(); ImageResource folder(); ImageResource folderOpen(); } public interface FileModelProperties extends PropertyAccess<FileModel> { @Path("id") ModelKeyProvider<FileModel> key(); ValueProvider<FileModel, String> name(); ValueProvider<FileModel, String> path(); ValueProvider<FileModel, Date> lastModified(); ValueProvider<FileModel, Long> size(); } @Override public void onModuleLoad() { RootPanel.get().add(this); } @Override public Widget asWidget() { TreeBundle bundle = GWT.create(TreeBundle.class); final FileServiceAsync service = GWT.create(FileService.class); RpcProxy<FileModel, List<FileModel>> proxy = new RpcProxy<FileModel, List<FileModel>>() { @Override public void load(FileModel loadConfig, AsyncCallback<List<FileModel>> callback) { service.getFolderChildren(loadConfig, callback); } }; final TreeLoader<FileModel> loader = new TreeLoader<FileModel>(proxy) { @Override public boolean hasChildren(FileModel parent) { return parent instanceof FolderModel; } }; FileModelProperties props = GWT.create(FileModelProperties.class); TreeStore<FileModel> store = new TreeStore<FileModel>(props.key()); loader.addLoadHandler(new ChildTreeStoreBinding<FileModel>(store)); ColumnConfig<FileModel, String> cc1 = new ColumnConfig<FileModel, String>(props.name(), 100, "Name"); ColumnConfig<FileModel, Date> cc2 = new ColumnConfig<FileModel, Date>(props.lastModified(), 100, "Date"); cc2.setCell(new DateCell(DateTimeFormat.getFormat(PredefinedFormat.DATE_MEDIUM))); ColumnConfig<FileModel, Long> cc3 = new ColumnConfig<FileModel, Long>(props.size(), 100, "Size"); List<ColumnConfig<FileModel, ?>> l = new ArrayList<ColumnConfig<FileModel, ?>>(); l.add(cc1); l.add(cc2); l.add(cc3); ColumnModel<FileModel> cm = new ColumnModel<FileModel>(l); FramedPanel cp = new FramedPanel() { @Override protected void onAfterFirstAttach() { super.onAfterFirstAttach(); loader.load(); } }; cp.setHeadingText("Async TreeGrid"); cp.setButtonAlign(BoxLayoutPack.CENTER); cp.setPixelSize(600, 300); cp.addStyleName("margin-10"); TreeGrid<FileModel> tree = new TreeGrid<FileModel>(store, cm, cc1); tree.setBorders(true); tree.setTreeLoader(loader); tree.getView().setTrackMouseOver(false); tree.getView().setAutoExpandColumn(cc1); tree.getStyle().setJointCloseIcon(bundle.plus()); tree.getStyle().setJointOpenIcon(bundle.minus()); tree.getStyle().setNodeCloseIcon(bundle.folder()); tree.getStyle().setNodeOpenIcon(bundle.folderOpen()); tree.getStyle().setLeafIcon(ExampleImages.INSTANCE.java()); cp.setWidget(tree); return cp; } }