2 * Copyright 2008, 2009 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.OtherUserResource;
26 import com.google.gwt.dom.client.NativeEvent;
27 import com.google.gwt.event.dom.client.ContextMenuEvent;
28 import com.google.gwt.event.dom.client.ContextMenuHandler;
29 import com.google.gwt.event.dom.client.KeyCodes;
30 import com.google.gwt.event.logical.shared.OpenEvent;
31 import com.google.gwt.event.logical.shared.OpenHandler;
32 import com.google.gwt.event.logical.shared.SelectionEvent;
33 import com.google.gwt.event.logical.shared.SelectionHandler;
34 import com.google.gwt.user.client.DOM;
35 import com.google.gwt.user.client.Event;
36 import com.google.gwt.user.client.ui.Tree;
37 import com.google.gwt.user.client.ui.TreeItem;
42 public class PopupTree extends Tree {
44 private FolderContextMenu menu;
46 private Images images;
48 private boolean ctrlKeyPressed = false;
50 private boolean leftClicked = false;
52 private boolean rightClicked = false;
54 private TreeItem treeSelectedItem = null;
56 public PopupTree(Images theImages) {
59 sinkEvents(Event.ONCONTEXTMENU);
60 sinkEvents(Event.ONMOUSEUP);
61 //sinkEvents(Event.ONMOUSEDOWN);
63 addSelectionHandler(new SelectionHandler<TreeItem>() {
66 public void onSelection(SelectionEvent<TreeItem> event) {
67 TreeItem item = event.getSelectedItem();
68 processItemSelected(item, true);
72 addOpenHandler(new OpenHandler<TreeItem>() {
75 public void onOpen(OpenEvent<TreeItem> event) {
76 TreeItem item = event.getTarget();
78 GSS.get().getFolders().update(item);
82 addHandler(new ContextMenuHandler() {
85 public void onContextMenu(ContextMenuEvent event) {
86 TreeItem item =getSelectedItem();
88 int left = item.getAbsoluteLeft() + 40;
89 int top = item.getAbsoluteTop() + 20;
94 }, ContextMenuEvent.getType());
95 //DOM.setStyleAttribute(getElement(), "position", "static");
100 public void onBrowserEvent(Event event) {
101 if (DOM.eventGetType(event) == Event.ONCLICK) return;
103 switch (DOM.eventGetType(event)) {
104 case Event.ONKEYDOWN:
105 int key = DOM.eventGetKeyCode(event);
106 if (key == KeyCodes.KEY_CTRL)
107 ctrlKeyPressed = true;
111 key = DOM.eventGetKeyCode(event);
112 if (key == KeyCodes.KEY_CTRL)
113 ctrlKeyPressed = false;
116 case Event.ONMOUSEDOWN:
117 if (DOM.eventGetButton(event) == NativeEvent.BUTTON_RIGHT)
119 else if (DOM.eventGetButton(event) == NativeEvent.BUTTON_LEFT)
123 case Event.ONMOUSEUP:
124 if (DOM.eventGetButton(event) == NativeEvent.BUTTON_RIGHT)
125 rightClicked = false;
126 else if (DOM.eventGetButton(event) == NativeEvent.BUTTON_LEFT)
131 super.onBrowserEvent(event);
134 protected void showPopup(final int x, final int y) {
135 if (treeSelectedItem == null)
139 menu = new FolderContextMenu(images);
140 menu.setPopupPosition(x, y);
144 public void processItemSelected(TreeItem item, boolean fireEvents) {
146 if(GSS.get().getCurrentSelection() == null || !GSS.get().getCurrentSelection().equals(item.getUserObject()))
147 GSS.get().setCurrentSelection(item.getUserObject());
148 if(!GSS.get().isFileListShowing())
149 GSS.get().showFileList();
151 //refresh Others Shared Node
152 if(GSS.get().getFolders().isOthersShared(item)){
153 GSS.get().getFolders().update(item);
154 GSS.get().showFileList();
156 //refresh Others Shared User Node
157 //else if(GSS.get().getFolders().isOthersSharedItem(item) && item.getUserObject() instanceof UserDTO)
158 //GSS.get().getFolders().update(item);
160 if (!item.equals(treeSelectedItem))
161 processSelection(item);
164 int left = item.getAbsoluteLeft() + 40;
165 int top = item.getAbsoluteTop() + 20;
166 showPopup(left, top);
167 } else if (leftClicked && ctrlKeyPressed) {
169 ctrlKeyPressed=false;
170 int left = item.getAbsoluteLeft() + 40;
171 int top = item.getAbsoluteTop() + 20;
172 showPopup(left, top);
176 public void clearSelection(){
177 if (treeSelectedItem != null)
178 ((DnDTreeItem)treeSelectedItem).getContent().removeStyleName("gss-SelectedRow");
179 //treeSelectedItem.getWidget().removeStyleName("gss-SelectedRow");
181 treeSelectedItem = null;
182 setSelectedItem(null, true);
183 GSS.get().setCurrentSelection(null);
186 private void processSelection(TreeItem item) {
187 if (treeSelectedItem != null) {
188 GSS.get().setCurrentSelection(null);
189 //treeSelectedItem.getWidget().removeStyleName("gss-SelectedRow");
190 ((DnDTreeItem)treeSelectedItem).getContent().removeStyleName("gss-SelectedRow");
191 treeSelectedItem = null;
192 setSelectedItem(null, true);
194 treeSelectedItem = item;
195 setSelectedItem(item, true);
196 //ensureSelectedItemVisible();
197 if(((DnDTreeItem)item).getFolderResource() != null)
198 GSS.get().setCurrentSelection(((DnDTreeItem)item).getFolderResource());
199 if (item.getUserObject() instanceof FolderResource)
200 GSS.get().setCurrentSelection(item.getUserObject());
201 else if(item.getUserObject() instanceof OtherUserResource)
202 GSS.get().setCurrentSelection(item.getUserObject());
203 else if(GSS.get().getFolders().isTrash(item))
204 GSS.get().setCurrentSelection(null);
205 //item.getWidget().addStyleName("gss-SelectedRow");
206 ((DnDTreeItem)item).getContent().addStyleName("gss-SelectedRow");
207 //if(GSS.get().getFolders().isFileItem(item)||GSS.get().getFolders().isTrashItem(item)||GSS.get().getFolders().isMySharedItem(item))
208 GSS.get().showFileList(true);
212 * Retrieve the selectedItem.
214 * @return the selectedItem
216 public TreeItem getTreeSelectedItem() {
217 return treeSelectedItem;
221 * Modify the selectedItem.
223 * @param newSelectedItem the selectedItem to set
225 public void setTreeSelectedItem(TreeItem newSelectedItem) {
226 treeSelectedItem = newSelectedItem;