Fixed bug when displaying folder tree after the second level. Now the tree works...
[pithos-web-client] / src / gr / grnet / pithos / web / client / foldertree / FolderTreeView.java
1 /*
2  * Copyright (c) 2011 Greek Research and Technology Network
3  */
4
5 package gr.grnet.pithos.web.client.foldertree;
6
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;
29
30 public class FolderTreeView extends Composite {
31
32     static interface BasicResources extends CellTree.Resources {
33
34         @ImageOptions(flipRtl = true)
35         @Source("cellTreeClosedItem.gif")
36         ImageResource cellTreeClosedItem();
37
38         @ImageOptions(flipRtl = true)
39         @Source("cellTreeLoadingBasic.gif")
40         ImageResource cellTreeLoading();
41
42         @ImageOptions(flipRtl = true)
43         @Source("cellTreeOpenItem.gif")
44         ImageResource cellTreeOpenItem();
45
46         @Source({"GssCellTreeBasic.css"})
47         CellTree.Style cellTreeStyle();
48     }
49
50     static interface Images extends ClientBundle,Tree.Resources, FolderContextMenu.Images {
51
52         @Source("gr/grnet/pithos/resources/folder_home.png")
53         ImageResource home();
54
55         @Source("gr/grnet/pithos/resources/folder_yellow.png")
56         ImageResource folderYellow();
57     }
58
59     private static Images images = GWT.create(Images.class);
60
61     static interface Templates extends SafeHtmlTemplates {
62         Templates INSTANCE = GWT.create(Templates.class);
63
64         @Template("<span>{0}</span>")
65         public SafeHtml nameSpan(String name);
66       }
67
68     static class FolderCell extends AbstractCell<Folder> {
69
70         @Override
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()));
75         }
76     }
77
78
79     private FolderTreeViewModel model;
80
81     public FolderTreeView(FolderTreeViewModel viewModel) {
82         this.model = viewModel;
83         /*
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();
87          */
88         CellTree.Resources res = GWT.create(BasicResources.class);
89         DragAndDropCellTree tree = new DragAndDropCellTree(model,null, res);
90
91         tree.setKeyboardSelectionPolicy(KeyboardSelectionPolicy.ENABLED);
92
93         sinkEvents(Event.ONCONTEXTMENU);
94         sinkEvents(Event.ONMOUSEUP);
95         initWidget(tree);
96     }
97 }