2 * Copyright (c) 2011 Greek Research and Technology Network
5 package gr.grnet.pithos.web.client.foldertree;
7 import com.google.gwt.cell.client.AbstractCell;
8 import com.google.gwt.cell.client.Cell;
9 import com.google.gwt.core.client.GWT;
10 import com.google.gwt.resources.client.ClientBundle;
11 import com.google.gwt.resources.client.ImageResource;
12 import com.google.gwt.resources.client.ImageResource.ImageOptions;
13 import com.google.gwt.safehtml.client.SafeHtmlTemplates;
14 import com.google.gwt.safehtml.shared.SafeHtml;
15 import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
16 import com.google.gwt.user.cellview.client.CellTree;
17 import com.google.gwt.user.cellview.client.HasKeyboardSelectionPolicy.KeyboardSelectionPolicy;
18 import com.google.gwt.user.client.DeferredCommand;
19 import com.google.gwt.user.client.Event;
20 import com.google.gwt.user.client.IncrementalCommand;
21 import com.google.gwt.user.client.ui.AbstractImagePrototype;
22 import com.google.gwt.user.client.ui.Composite;
23 import com.google.gwt.user.client.ui.Tree;
24 import com.google.gwt.view.client.ListDataProvider;
25 import com.google.gwt.view.client.SelectionChangeEvent;
26 import com.google.gwt.view.client.SelectionChangeEvent.Handler;
27 import com.google.gwt.view.client.SingleSelectionModel;
28 import com.google.gwt.view.client.TreeViewModel;
29 import com.google.gwt.view.client.TreeViewModel.NodeInfo;
30 import gr.grnet.pithos.web.client.CellTreeViewModel;
31 import gr.grnet.pithos.web.client.CellTreeViewUtils;
32 import gr.grnet.pithos.web.client.FolderContextMenu;
33 import gr.grnet.pithos.web.client.GSS;
34 import gr.grnet.pithos.web.client.rest.resource.FolderResource;
35 import gr.grnet.pithos.web.client.rest.resource.RestResource;
36 import gr.grnet.pithos.web.client.rest.resource.RestResourceWrapper;
37 import gwtquery.plugins.droppable.client.gwt.DragAndDropCellTree;
38 import java.util.Arrays;
40 public class FolderTreeView extends Composite {
42 static interface BasicResources extends CellTree.Resources {
44 @ImageOptions(flipRtl = true)
45 @Source("cellTreeClosedItem.gif")
46 ImageResource cellTreeClosedItem();
48 @ImageOptions(flipRtl = true)
49 @Source("cellTreeLoadingBasic.gif")
50 ImageResource cellTreeLoading();
52 @ImageOptions(flipRtl = true)
53 @Source("cellTreeOpenItem.gif")
54 ImageResource cellTreeOpenItem();
56 @Source({"GssCellTreeBasic.css"})
57 CellTree.Style cellTreeStyle();
60 static interface Images extends ClientBundle,Tree.Resources, FolderContextMenu.Images {
62 @Source("gr/grnet/pithos/resources/folder_home.png")
65 @Source("gr/grnet/pithos/resources/folder_yellow.png")
66 ImageResource folderYellow();
69 private static Images images = GWT.create(Images.class);
71 static interface Templates extends SafeHtmlTemplates {
72 Templates INSTANCE = GWT.create(Templates.class);
74 @Template("<span>{0}</span>")
75 public SafeHtml nameSpan(String name);
78 static class FolderCell extends AbstractCell<Folder> {
81 public void render(Context context, Folder folder, SafeHtmlBuilder safeHtmlBuilder) {
82 String html = AbstractImagePrototype.create(images.folderYellow()).getHTML();
83 safeHtmlBuilder.appendHtmlConstant(html);
84 safeHtmlBuilder.append(Templates.INSTANCE.nameSpan(folder.getName()));
88 private SingleSelectionModel<Folder> selectionModel = new SingleSelectionModel<Folder>();
90 public FolderTreeView() {
91 final FolderTreeViewModel model = new FolderTreeViewModel(selectionModel);
93 * Create the tree using the model. We use <code>null</code> as the default
94 * value of the root node. The default value will be passed to
95 * CustomTreeModel#getNodeInfo();
97 CellTree.Resources res = GWT.create(BasicResources.class);
98 DragAndDropCellTree tree = new DragAndDropCellTree(model,null, res);
100 tree.setKeyboardSelectionPolicy(KeyboardSelectionPolicy.ENABLED);
102 Handler selectionHandler = new SelectionChangeEvent.Handler() {
104 public void onSelectionChange(com.google.gwt.view.client.SelectionChangeEvent event) {
105 NodeInfo<Folder> nodeInfo = (NodeInfo<Folder>) model.getNodeInfo(selectionModel.getSelectedObject());
106 if(nodeInfo == null || nodeInfo.getValueUpdater() == null) {
107 //GSS.get().showFileList(selectionModel.getSelectedObject());
110 nodeInfo.getValueUpdater().update(selectionModel.getSelectedObject());
111 GSS.get().setCurrentSelection(selectionModel.getSelectedObject());
116 selectionModel.addSelectionChangeHandler(selectionHandler);
117 sinkEvents(Event.ONCONTEXTMENU);
118 sinkEvents(Event.ONMOUSEUP);