2 * Copyright 2008, 2009, 2010 Electronic Business Systems Ltd.
4 * This file is part of GSS.
6 * GSS is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation, either version 3 of the License, or
9 * (at your option) any later version.
11 * GSS is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with GSS. If not, see <http://www.gnu.org/licenses/>.
19 package gr.ebs.gss.client;
21 import gr.ebs.gss.client.Folders.Images;
22 import gr.ebs.gss.client.dnd.DnDTreeItem;
23 import gr.ebs.gss.client.rest.resource.FolderResource;
24 import gr.ebs.gss.client.rest.resource.GroupUserResource;
25 import gr.ebs.gss.client.rest.resource.OtherUserResource;
26 import gr.ebs.gss.client.rest.resource.OthersResource;
27 import gr.ebs.gss.client.rest.resource.TrashResource;
29 import com.google.gwt.dom.client.NativeEvent;
30 import com.google.gwt.event.dom.client.ContextMenuEvent;
31 import com.google.gwt.event.dom.client.ContextMenuHandler;
32 import com.google.gwt.event.dom.client.KeyCodes;
33 import com.google.gwt.event.logical.shared.OpenEvent;
34 import com.google.gwt.event.logical.shared.OpenHandler;
35 import com.google.gwt.event.logical.shared.SelectionEvent;
36 import com.google.gwt.event.logical.shared.SelectionHandler;
37 import com.google.gwt.user.client.DOM;
38 import com.google.gwt.user.client.Event;
39 import com.google.gwt.user.client.History;
40 import com.google.gwt.user.client.ui.Tree;
41 import com.google.gwt.user.client.ui.TreeItem;
46 public class PopupTree extends Tree {
48 private FolderContextMenu menu;
50 private Images images;
52 private boolean ctrlKeyPressed = false;
54 private boolean leftClicked = false;
56 private boolean rightClicked = false;
58 private TreeItem treeSelectedItem = null;
60 public PopupTree(Images theImages) {
63 sinkEvents(Event.ONCONTEXTMENU);
64 sinkEvents(Event.ONMOUSEUP);
65 // sinkEvents(Event.ONMOUSEDOWN);
67 addSelectionHandler(new SelectionHandler<TreeItem>() {
70 public void onSelection(SelectionEvent<TreeItem> event) {
71 TreeItem item = event.getSelectedItem();
72 processItemSelected(item, true);
74 String path = GSS.get().getApiPath() + GSS.get().getCurrentUserResource().getUsername()+ "/";
76 if(GSS.get().getFolders().isTrash(item)){
77 TrashResource currentObject = (TrashResource) GSS.get().getFolders().getCurrent().getUserObject();
78 History.newItem(currentObject.getUri().substring(path.lastIndexOf("/")) + GSS.get().getFolders().getCurrent().getText());
79 }else if (GSS.get().getFolders().isMyShares(item)){
80 GroupUserResource currentObject = (GroupUserResource)GSS.get().getFolders().getCurrent().getUserObject();
81 History.newItem(currentObject.getUri().substring(path.lastIndexOf("/")) + GSS.get().getFolders().getCurrent().getText());
82 }else if (GSS.get().getFolders().isOthersShared(item)){
83 OthersResource currentObject = (OthersResource) GSS.get().getFolders().getCurrent().getUserObject();
84 History.newItem(currentObject.getUri().substring(path.lastIndexOf("/")) + GSS.get().getFolders().getCurrent().getText());
86 FolderResource currentObject = (FolderResource) GSS.get().getFolders().getCurrent().getUserObject();
87 History.newItem("Files" + currentObject.getParentURI().substring(path.lastIndexOf("/")) + GSS.get().getFolders().getCurrent().getText());
93 addOpenHandler(new OpenHandler<TreeItem>() {
96 public void onOpen(OpenEvent<TreeItem> event) {
97 TreeItem item = event.getTarget();
98 if (item != null && item.getState())
99 GSS.get().getFolders().update(item);
103 addHandler(new ContextMenuHandler() {
106 public void onContextMenu(ContextMenuEvent event) {
107 TreeItem item = getSelectedItem();
109 int left = item.getAbsoluteLeft() + 40;
110 int top = item.getAbsoluteTop() + 20;
111 showPopup(left, top);
115 }, ContextMenuEvent.getType());
116 // DOM.setStyleAttribute(getElement(), "position", "static");
121 public void onBrowserEvent(Event event) {
122 if (DOM.eventGetType(event) == Event.ONCLICK)
125 switch (DOM.eventGetType(event)) {
126 case Event.ONKEYDOWN:
127 int key = DOM.eventGetKeyCode(event);
128 if (key == KeyCodes.KEY_CTRL)
129 ctrlKeyPressed = true;
133 key = DOM.eventGetKeyCode(event);
134 if (key == KeyCodes.KEY_CTRL)
135 ctrlKeyPressed = false;
138 case Event.ONMOUSEDOWN:
139 if (DOM.eventGetButton(event) == NativeEvent.BUTTON_RIGHT)
141 else if (DOM.eventGetButton(event) == NativeEvent.BUTTON_LEFT)
145 case Event.ONMOUSEUP:
146 if (DOM.eventGetButton(event) == NativeEvent.BUTTON_RIGHT)
147 rightClicked = false;
148 else if (DOM.eventGetButton(event) == NativeEvent.BUTTON_LEFT)
153 super.onBrowserEvent(event);
156 protected void showPopup(final int x, final int y) {
157 if (treeSelectedItem == null)
161 menu = new FolderContextMenu(images);
162 menu.setPopupPosition(x, y);
166 public void processItemSelected(TreeItem item, boolean fireEvents) {
168 if (GSS.get().getCurrentSelection() == null || !GSS.get().getCurrentSelection().equals(item.getUserObject()))
169 GSS.get().setCurrentSelection(item.getUserObject());
170 if (!GSS.get().isFileListShowing())
171 GSS.get().showFileList();
173 // refresh Others Shared Node
174 if (GSS.get().getFolders().isOthersShared(item)) {
175 GSS.get().getFolders().update(item);
176 GSS.get().showFileList();
178 // refresh Others Shared User Node
179 // else if(GSS.get().getFolders().isOthersSharedItem(item) &&
180 // item.getUserObject() instanceof UserDTO)
181 // GSS.get().getFolders().update(item);
183 if (!item.equals(treeSelectedItem))
184 processSelection(item);
186 rightClicked = false;
187 int left = item.getAbsoluteLeft() + 40;
188 int top = item.getAbsoluteTop() + 20;
189 showPopup(left, top);
190 } else if (leftClicked && ctrlKeyPressed) {
192 ctrlKeyPressed = false;
193 int left = item.getAbsoluteLeft() + 40;
194 int top = item.getAbsoluteTop() + 20;
195 showPopup(left, top);
199 public void clearSelection() {
200 if (treeSelectedItem != null)
201 ((DnDTreeItem) treeSelectedItem).getContent().removeStyleName("gss-SelectedRow");
202 // treeSelectedItem.getWidget().removeStyleName("gss-SelectedRow");
204 treeSelectedItem = null;
205 setSelectedItem(null, true);
206 GSS.get().setCurrentSelection(null);
209 private void processSelection(TreeItem item) {
210 if (treeSelectedItem != null) {
211 GSS.get().setCurrentSelection(null);
212 // treeSelectedItem.getWidget().removeStyleName("gss-SelectedRow");
213 ((DnDTreeItem) treeSelectedItem).getContent().removeStyleName("gss-SelectedRow");
214 treeSelectedItem = null;
215 setSelectedItem(null, true);
217 treeSelectedItem = item;
218 setSelectedItem(item, true);
219 // ensureSelectedItemVisible();
220 if (((DnDTreeItem) item).getFolderResource() != null)
221 GSS.get().setCurrentSelection(((DnDTreeItem) item).getFolderResource());
222 if (item.getUserObject() instanceof FolderResource)
223 GSS.get().setCurrentSelection(item.getUserObject());
224 else if (item.getUserObject() instanceof OtherUserResource)
225 GSS.get().setCurrentSelection(item.getUserObject());
226 else if (GSS.get().getFolders().isTrash(item))
227 GSS.get().setCurrentSelection(null);
228 // item.getWidget().addStyleName("gss-SelectedRow");
229 ((DnDTreeItem) item).getContent().addStyleName("gss-SelectedRow");
230 // if(GSS.get().getFolders().isFileItem(item)||GSS.get().getFolders().isTrashItem(item)||GSS.get().getFolders().isMySharedItem(item))
231 GSS.get().showFileList(true);
235 * Retrieve the selectedItem.
237 * @return the selectedItem
239 public TreeItem getTreeSelectedItem() {
240 return treeSelectedItem;
244 * Modify the selectedItem.
246 * @param newSelectedItem the selectedItem to set
248 public void setTreeSelectedItem(TreeItem newSelectedItem) {
249 treeSelectedItem = newSelectedItem;