root / src / gr / ebs / gss / client / PopupTree.java @ 4cef6f04
History | View | Annotate | Download (9.6 kB)
1 |
/*
|
---|---|
2 |
* Copyright 2008, 2009, 2010 Electronic Business Systems Ltd.
|
3 |
*
|
4 |
* This file is part of GSS.
|
5 |
*
|
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.
|
10 |
*
|
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.
|
15 |
*
|
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/>.
|
18 |
*/
|
19 |
package gr.ebs.gss.client; |
20 |
|
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; |
25 |
import gr.ebs.gss.client.rest.resource.OthersResource; |
26 |
import gr.ebs.gss.client.rest.resource.RestResource; |
27 |
import gr.ebs.gss.client.rest.resource.SharedResource; |
28 |
import gr.ebs.gss.client.rest.resource.TrashResource; |
29 |
|
30 |
import java.util.Iterator; |
31 |
|
32 |
import com.google.gwt.dom.client.NativeEvent; |
33 |
import com.google.gwt.event.dom.client.ContextMenuEvent; |
34 |
import com.google.gwt.event.dom.client.ContextMenuHandler; |
35 |
import com.google.gwt.event.dom.client.KeyCodes; |
36 |
import com.google.gwt.event.logical.shared.OpenEvent; |
37 |
import com.google.gwt.event.logical.shared.OpenHandler; |
38 |
import com.google.gwt.event.logical.shared.SelectionEvent; |
39 |
import com.google.gwt.event.logical.shared.SelectionHandler; |
40 |
import com.google.gwt.user.client.DOM; |
41 |
import com.google.gwt.user.client.Event; |
42 |
import com.google.gwt.user.client.ui.Tree; |
43 |
import com.google.gwt.user.client.ui.TreeItem; |
44 |
|
45 |
/**
|
46 |
* @author kman
|
47 |
*/
|
48 |
public class PopupTree extends Tree { |
49 |
|
50 |
private FolderContextMenu menu;
|
51 |
|
52 |
private Images images;
|
53 |
|
54 |
private boolean ctrlKeyPressed = false; |
55 |
|
56 |
private boolean leftClicked = false; |
57 |
|
58 |
private boolean rightClicked = false; |
59 |
|
60 |
private TreeItem treeSelectedItem = null; |
61 |
|
62 |
public PopupTree(Images theImages) {
|
63 |
super(theImages);
|
64 |
images = theImages; |
65 |
sinkEvents(Event.ONCONTEXTMENU);
|
66 |
sinkEvents(Event.ONMOUSEUP);
|
67 |
// sinkEvents(Event.ONMOUSEDOWN);
|
68 |
|
69 |
addSelectionHandler(new SelectionHandler<TreeItem>() {
|
70 |
|
71 |
@Override
|
72 |
public void onSelection(SelectionEvent<TreeItem> event) { |
73 |
TreeItem treeItem = event.getSelectedItem(); |
74 |
processItemSelected(treeItem); |
75 |
String path = GSS.get().getApiPath() + GSS.get().getCurrentUserResource().getUsername()+ "/"; |
76 |
String constructedUri = ((RestResource) GSS.get().getFolders().getCurrent().getUserObject()).constructUri(treeItem, path);
|
77 |
GSS.get().updateHistory(constructedUri); |
78 |
} |
79 |
}); |
80 |
|
81 |
addOpenHandler(new OpenHandler<TreeItem>() {
|
82 |
|
83 |
@Override
|
84 |
public void onOpen(OpenEvent<TreeItem> event) { |
85 |
TreeItem item = event.getTarget(); |
86 |
if (item != null && item.getState()) |
87 |
GSS.get().getFolders().update(item); |
88 |
|
89 |
} |
90 |
}); |
91 |
addHandler(new ContextMenuHandler() {
|
92 |
|
93 |
@Override
|
94 |
public void onContextMenu(ContextMenuEvent event) { |
95 |
TreeItem item = getSelectedItem(); |
96 |
if (item != null) { |
97 |
int left = item.getAbsoluteLeft() + 40; |
98 |
int top = item.getAbsoluteTop() + 20; |
99 |
showPopup(left, top); |
100 |
} |
101 |
|
102 |
} |
103 |
}, ContextMenuEvent.getType()); |
104 |
// DOM.setStyleAttribute(getElement(), "position", "static");
|
105 |
|
106 |
} |
107 |
|
108 |
@Override
|
109 |
public void onBrowserEvent(Event event) { |
110 |
if (DOM.eventGetType(event) == Event.ONCLICK) |
111 |
return;
|
112 |
|
113 |
switch (DOM.eventGetType(event)) {
|
114 |
case Event.ONKEYDOWN: |
115 |
int key = DOM.eventGetKeyCode(event);
|
116 |
if (key == KeyCodes.KEY_CTRL)
|
117 |
ctrlKeyPressed = true;
|
118 |
break;
|
119 |
|
120 |
case Event.ONKEYUP: |
121 |
key = DOM.eventGetKeyCode(event); |
122 |
if (key == KeyCodes.KEY_CTRL)
|
123 |
ctrlKeyPressed = false;
|
124 |
break;
|
125 |
|
126 |
case Event.ONMOUSEDOWN: |
127 |
if (DOM.eventGetButton(event) == NativeEvent.BUTTON_RIGHT)
|
128 |
rightClicked = true;
|
129 |
else if (DOM.eventGetButton(event) == NativeEvent.BUTTON_LEFT) |
130 |
leftClicked = true;
|
131 |
break;
|
132 |
|
133 |
case Event.ONMOUSEUP: |
134 |
if (DOM.eventGetButton(event) == NativeEvent.BUTTON_RIGHT)
|
135 |
rightClicked = false;
|
136 |
else if (DOM.eventGetButton(event) == NativeEvent.BUTTON_LEFT) |
137 |
leftClicked = false;
|
138 |
break;
|
139 |
} |
140 |
|
141 |
super.onBrowserEvent(event);
|
142 |
} |
143 |
|
144 |
protected void showPopup(final int x, final int y) { |
145 |
if (treeSelectedItem == null) |
146 |
return;
|
147 |
if (menu != null) |
148 |
menu.hide(); |
149 |
menu = new FolderContextMenu(images);
|
150 |
menu.setPopupPosition(x, y); |
151 |
menu.show(); |
152 |
} |
153 |
|
154 |
public void processItemSelected(TreeItem item) { |
155 |
if (GSS.get().getCurrentSelection() == null || !GSS.get().getCurrentSelection().equals(item.getUserObject())) |
156 |
GSS.get().setCurrentSelection(item.getUserObject()); |
157 |
if (!GSS.get().isFileListShowing())
|
158 |
GSS.get().showFileList(); |
159 |
|
160 |
// refresh Others Shared Node
|
161 |
if (GSS.get().getFolders().isOthersShared(item)){
|
162 |
GSS.get().getFolders().update(item); |
163 |
GSS.get().showFileList(); |
164 |
} |
165 |
|
166 |
if (!item.equals(treeSelectedItem))
|
167 |
processSelection(item); |
168 |
if (rightClicked) {
|
169 |
rightClicked = false;
|
170 |
int left = item.getAbsoluteLeft() + 40; |
171 |
int top = item.getAbsoluteTop() + 20; |
172 |
showPopup(left, top); |
173 |
} else if (leftClicked && ctrlKeyPressed) { |
174 |
leftClicked = false;
|
175 |
ctrlKeyPressed = false;
|
176 |
int left = item.getAbsoluteLeft() + 40; |
177 |
int top = item.getAbsoluteTop() + 20; |
178 |
showPopup(left, top); |
179 |
} |
180 |
} |
181 |
|
182 |
public void clearSelection() { |
183 |
if (treeSelectedItem != null) |
184 |
((DnDTreeItem) treeSelectedItem).getContent().removeStyleName("gss-SelectedRow");
|
185 |
// treeSelectedItem.getWidget().removeStyleName("gss-SelectedRow");
|
186 |
|
187 |
treeSelectedItem = null;
|
188 |
setSelectedItem(null, true); |
189 |
GSS.get().setCurrentSelection(null);
|
190 |
} |
191 |
|
192 |
private void processSelection(TreeItem item) { |
193 |
if (treeSelectedItem != null) { |
194 |
GSS.get().setCurrentSelection(null);
|
195 |
// treeSelectedItem.getWidget().removeStyleName("gss-SelectedRow");
|
196 |
((DnDTreeItem) treeSelectedItem).getContent().removeStyleName("gss-SelectedRow");
|
197 |
treeSelectedItem = null;
|
198 |
setSelectedItem(null, true); |
199 |
} |
200 |
treeSelectedItem = item; |
201 |
setSelectedItem(item, true);
|
202 |
// ensureSelectedItemVisible();
|
203 |
if (((DnDTreeItem) item).getFolderResource() != null) |
204 |
GSS.get().setCurrentSelection(((DnDTreeItem) item).getFolderResource()); |
205 |
if (item.getUserObject() instanceof FolderResource) |
206 |
GSS.get().setCurrentSelection(item.getUserObject()); |
207 |
else if (item.getUserObject() instanceof OtherUserResource) |
208 |
GSS.get().setCurrentSelection(item.getUserObject()); |
209 |
else if (GSS.get().getFolders().isTrash(item)) |
210 |
GSS.get().setCurrentSelection(null);
|
211 |
// item.getWidget().addStyleName("gss-SelectedRow");
|
212 |
((DnDTreeItem) item).getContent().addStyleName("gss-SelectedRow");
|
213 |
// if(GSS.get().getFolders().isFileItem(item)||GSS.get().getFolders().isTrashItem(item)||GSS.get().getFolders().isMySharedItem(item))
|
214 |
GSS.get().showFileList(true);
|
215 |
} |
216 |
|
217 |
/**
|
218 |
* Retrieve the selectedItem.
|
219 |
*
|
220 |
* @return the selectedItem
|
221 |
*/
|
222 |
public TreeItem getTreeSelectedItem() {
|
223 |
return treeSelectedItem;
|
224 |
} |
225 |
|
226 |
/**
|
227 |
* Modify the selectedItem.
|
228 |
*
|
229 |
* @param newSelectedItem the selectedItem to set
|
230 |
*/
|
231 |
public void setTreeSelectedItem(TreeItem newSelectedItem) { |
232 |
treeSelectedItem = newSelectedItem; |
233 |
} |
234 |
/**
|
235 |
* Method that takes a folderName and finds the corresponding treeItem object and returns it
|
236 |
* @param historyToken
|
237 |
* @return treeItem
|
238 |
*/
|
239 |
|
240 |
public TreeItem getTreeItem (String historyToken){ |
241 |
// String historyTokenOriginal = historyToken.replace("+", " ");
|
242 |
String path = GSS.get().getApiPath() + GSS.get().getCurrentUserResource().getUsername()+ "/"; |
243 |
String rootText = DisplayHelper.trim(GSS.get().getFolders().getRootItem().getText());
|
244 |
String uriToGet = "Files/files/" + rootText; |
245 |
Iterator<TreeItem> it = GSS.get().getFolders().getPopupTree().treeItemIterator() ;
|
246 |
while(it.hasNext()){
|
247 |
String constructedUri = ""; |
248 |
TreeItem treeItem = it.next(); |
249 |
if(treeItem.getUserObject() instanceof TrashResource){ |
250 |
TrashResource currentObject = (TrashResource) treeItem.getUserObject(); |
251 |
constructedUri = constructedUri + currentObject.constructUri(treeItem,path); |
252 |
} |
253 |
if(treeItem.getUserObject() instanceof SharedResource){ |
254 |
SharedResource currentObject = (SharedResource) treeItem.getUserObject(); |
255 |
constructedUri = constructedUri + currentObject.constructUri(treeItem, path); |
256 |
} |
257 |
if(treeItem.getUserObject() instanceof OthersResource){ |
258 |
OthersResource currentObject = (OthersResource) treeItem.getUserObject(); |
259 |
constructedUri = constructedUri + currentObject.constructUri(treeItem, path); |
260 |
} |
261 |
if(treeItem.getUserObject() instanceof OtherUserResource){ |
262 |
OtherUserResource currentObject = (OtherUserResource) treeItem.getUserObject(); |
263 |
constructedUri = constructedUri + currentObject.constructUri(treeItem, path); |
264 |
} |
265 |
if(treeItem.getUserObject() instanceof FolderResource){ |
266 |
FolderResource currentObject = (FolderResource) treeItem.getUserObject(); |
267 |
constructedUri = constructedUri + currentObject.constructUri(treeItem, path); |
268 |
} |
269 |
if(constructedUri.equals(historyToken))
|
270 |
return treeItem;
|
271 |
} |
272 |
return expandHiddenItems(uriToGet);
|
273 |
|
274 |
} |
275 |
|
276 |
|
277 |
public TreeItem expandHiddenItems(String tokenInput){ |
278 |
//TODO
|
279 |
// this method handles objects that are not constructed during loading the application
|
280 |
// and when there's a need to seek them inside some non-expanded folder
|
281 |
// This method is not implemented yet and in case of a non-constructed object
|
282 |
// returns the home/root folder
|
283 |
// treeItem.getState() method returns always false so the OpenEvent.fire() method
|
284 |
// fails to expand the parent folder in the UI
|
285 |
|
286 |
GSS.get().getFolders().getRootItem().getText(); |
287 |
TreeItem treeItem = getTreeItem(tokenInput); |
288 |
OpenEvent.fire(GSS.get().getFolders().getPopupTree(), treeItem); |
289 |
return treeItem;
|
290 |
} |
291 |
|
292 |
|
293 |
} |