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.user.client.DOM;
27 import com.google.gwt.user.client.Event;
28 import com.google.gwt.user.client.ui.KeyboardListener;
29 import com.google.gwt.user.client.ui.Tree;
30 import com.google.gwt.user.client.ui.TreeItem;
31 import com.google.gwt.user.client.ui.TreeListener;
36 public class PopupTree extends Tree {
38 private FolderContextMenu menu;
40 private Images images;
42 private boolean ctrlKeyPressed = false;
44 private boolean leftClicked = false;
46 private boolean rightClicked = false;
48 private TreeItem treeSelectedItem = null;
50 public PopupTree(Images theImages) {
53 sinkEvents(Event.ONCONTEXTMENU);
54 sinkEvents(Event.ONMOUSEUP);
55 addTreeListener(new TreeListener() {
57 public void onTreeItemSelected(TreeItem item) {
58 processItemSelected(item, true);
62 public void onTreeItemStateChanged(TreeItem item) {
65 GSS.get().getFolders().update(item);
68 //DOM.setStyleAttribute(getElement(), "position", "static");
73 public void onBrowserEvent(Event event) {
74 if (DOM.eventGetType(event) == Event.ONCLICK) return;
76 switch (DOM.eventGetType(event)) {
78 int key = DOM.eventGetKeyCode(event);
79 if (key == KeyboardListener.KEY_CTRL)
80 ctrlKeyPressed = true;
84 key = DOM.eventGetKeyCode(event);
85 if (key == KeyboardListener.KEY_CTRL)
86 ctrlKeyPressed = false;
89 case Event.ONMOUSEDOWN:
90 if (DOM.eventGetButton(event) == Event.BUTTON_RIGHT)
92 else if (DOM.eventGetButton(event) == Event.BUTTON_LEFT)
97 if (DOM.eventGetButton(event) == Event.BUTTON_RIGHT)
99 else if (DOM.eventGetButton(event) == Event.BUTTON_LEFT)
104 super.onBrowserEvent(event);
107 protected void showPopup(final int x, final int y) {
108 if (treeSelectedItem == null)
112 menu = new FolderContextMenu(images);
113 menu.setPopupPosition(x, y);
117 void processItemSelected(TreeItem item, boolean fireEvents) {
119 if(GSS.get().getCurrentSelection() == null || !GSS.get().getCurrentSelection().equals(item.getUserObject()))
120 GSS.get().setCurrentSelection(item.getUserObject());
121 if(!GSS.get().isFileListShowing())
122 GSS.get().showFileList();
124 //refresh Others Shared Node
125 if(GSS.get().getFolders().isOthersShared(item)){
126 GSS.get().getFolders().update(item);
127 GSS.get().showFileList();
129 //refresh Others Shared User Node
130 //else if(GSS.get().getFolders().isOthersSharedItem(item) && item.getUserObject() instanceof UserDTO)
131 //GSS.get().getFolders().update(item);
133 if (!item.equals(treeSelectedItem))
134 processSelection(item);
136 int left = item.getAbsoluteLeft() + 40;
137 int top = item.getAbsoluteTop() + 20;
138 showPopup(left, top);
139 } else if (leftClicked && ctrlKeyPressed) {
140 int left = item.getAbsoluteLeft() + 40;
141 int top = item.getAbsoluteTop() + 20;
142 showPopup(left, top);
146 public void clearSelection(){
147 if (treeSelectedItem != null)
148 treeSelectedItem.getWidget().removeStyleName("gss-SelectedRow");
149 treeSelectedItem = null;
150 setSelectedItem(null, true);
151 GSS.get().setCurrentSelection(null);
154 private void processSelection(TreeItem item) {
155 if (treeSelectedItem != null) {
156 GSS.get().setCurrentSelection(null);
157 treeSelectedItem.getWidget().removeStyleName("gss-SelectedRow");
159 treeSelectedItem = null;
160 setSelectedItem(null, true);
162 treeSelectedItem = item;
163 setSelectedItem(item, true);
164 //ensureSelectedItemVisible();
165 if(((DnDTreeItem)item).getFolderResource() != null)
166 GSS.get().setCurrentSelection(((DnDTreeItem)item).getFolderResource());
167 if (item.getUserObject() instanceof FolderResource)
168 GSS.get().setCurrentSelection(item.getUserObject());
169 else if(item.getUserObject() instanceof OtherUserResource)
170 GSS.get().setCurrentSelection(item.getUserObject());
171 else if(GSS.get().getFolders().isTrash(item))
172 GSS.get().setCurrentSelection(null);
173 item.getWidget().addStyleName("gss-SelectedRow");
174 //if(GSS.get().getFolders().isFileItem(item)||GSS.get().getFolders().isTrashItem(item)||GSS.get().getFolders().isMySharedItem(item))
175 GSS.get().showFileList(true);
179 * Retrieve the selectedItem.
181 * @return the selectedItem
183 public TreeItem getTreeSelectedItem() {
184 return treeSelectedItem;
188 * Modify the selectedItem.
190 * @param newSelectedItem the selectedItem to set
192 public void setTreeSelectedItem(TreeItem newSelectedItem) {
193 treeSelectedItem = newSelectedItem;