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.core.client.GWT;
9 import com.google.gwt.resources.client.ClientBundle;
10 import com.google.gwt.resources.client.ImageResource;
11 import com.google.gwt.resources.client.ImageResource.ImageOptions;
12 import com.google.gwt.safehtml.client.SafeHtmlTemplates;
13 import com.google.gwt.safehtml.shared.SafeHtml;
14 import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
15 import com.google.gwt.user.cellview.client.CellTree;
16 import com.google.gwt.user.cellview.client.HasKeyboardSelectionPolicy.KeyboardSelectionPolicy;
17 import com.google.gwt.user.client.Event;
18 import com.google.gwt.user.client.ui.AbstractImagePrototype;
19 import com.google.gwt.user.client.ui.Composite;
20 import com.google.gwt.user.client.ui.Tree;
21 import com.google.gwt.view.client.SelectionChangeEvent;
22 import com.google.gwt.view.client.SelectionChangeEvent.Handler;
23 import com.google.gwt.view.client.SingleSelectionModel;
24 import com.google.gwt.view.client.TreeViewModel.NodeInfo;
25 import gr.grnet.pithos.web.client.FolderContextMenu;
26 import gr.grnet.pithos.web.client.GSS;
27 import gwtquery.plugins.droppable.client.gwt.DragAndDropCellTree;
28 import java.util.Iterator;
30 public class FolderTreeView extends Composite {
32 static interface BasicResources extends CellTree.Resources {
34 @ImageOptions(flipRtl = true)
35 @Source("cellTreeClosedItem.gif")
36 ImageResource cellTreeClosedItem();
38 @ImageOptions(flipRtl = true)
39 @Source("cellTreeLoadingBasic.gif")
40 ImageResource cellTreeLoading();
42 @ImageOptions(flipRtl = true)
43 @Source("cellTreeOpenItem.gif")
44 ImageResource cellTreeOpenItem();
46 @Source({"GssCellTreeBasic.css"})
47 CellTree.Style cellTreeStyle();
50 static interface Images extends ClientBundle,Tree.Resources, FolderContextMenu.Images {
52 @Source("gr/grnet/pithos/resources/folder_home.png")
55 @Source("gr/grnet/pithos/resources/folder_yellow.png")
56 ImageResource folderYellow();
59 private static Images images = GWT.create(Images.class);
61 static interface Templates extends SafeHtmlTemplates {
62 Templates INSTANCE = GWT.create(Templates.class);
64 @Template("<span>{0}</span>")
65 public SafeHtml nameSpan(String name);
68 static class FolderCell extends AbstractCell<Folder> {
71 public void render(Context context, Folder folder, SafeHtmlBuilder safeHtmlBuilder) {
72 String html = AbstractImagePrototype.create(images.folderYellow()).getHTML();
73 safeHtmlBuilder.appendHtmlConstant(html);
74 safeHtmlBuilder.append(Templates.INSTANCE.nameSpan(folder.getName()));
79 private FolderTreeViewModel model;
81 public FolderTreeView(FolderTreeViewModel viewModel) {
82 this.model = viewModel;
84 * Create the tree using the model. We use <code>null</code> as the default
85 * value of the root node. The default value will be passed to
86 * CustomTreeModel#getNodeInfo();
88 CellTree.Resources res = GWT.create(BasicResources.class);
89 DragAndDropCellTree tree = new DragAndDropCellTree(model,null, res);
91 tree.setKeyboardSelectionPolicy(KeyboardSelectionPolicy.ENABLED);
93 sinkEvents(Event.ONCONTEXTMENU);
94 sinkEvents(Event.ONMOUSEUP);