root / src / gr / ebs / gss / client / PopupTree.java @ 8c999b8c
History | View | Annotate | Download (7.3 kB)
1 |
/*
|
---|---|
2 |
* Copyright 2008, 2009 Electronic Business Systems Ltd. This file is part of
|
3 |
* GSS. GSS is free software: you can redistribute it and/or modify it under the
|
4 |
* terms of the GNU General Public License as published by the Free Software
|
5 |
* Foundation, either version 3 of the License, or (at your option) any later
|
6 |
* version. GSS is distributed in the hope that it will be useful, but WITHOUT
|
7 |
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
8 |
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
9 |
* details. You should have received a copy of the GNU General Public License
|
10 |
* along with GSS. If not, see <http://www.gnu.org/licenses/>.
|
11 |
*/
|
12 |
package gr.ebs.gss.client; |
13 |
|
14 |
import gr.ebs.gss.client.Folders.Images; |
15 |
import gr.ebs.gss.client.dnd.DnDTreeItem; |
16 |
import gr.ebs.gss.client.rest.resource.FolderResource; |
17 |
import gr.ebs.gss.client.rest.resource.OtherUserResource; |
18 |
|
19 |
import com.google.gwt.dom.client.NativeEvent; |
20 |
import com.google.gwt.event.dom.client.ContextMenuEvent; |
21 |
import com.google.gwt.event.dom.client.ContextMenuHandler; |
22 |
import com.google.gwt.event.dom.client.KeyCodes; |
23 |
import com.google.gwt.event.logical.shared.OpenEvent; |
24 |
import com.google.gwt.event.logical.shared.OpenHandler; |
25 |
import com.google.gwt.event.logical.shared.SelectionEvent; |
26 |
import com.google.gwt.event.logical.shared.SelectionHandler; |
27 |
import com.google.gwt.user.client.DOM; |
28 |
import com.google.gwt.user.client.Event; |
29 |
import com.google.gwt.user.client.History; |
30 |
import com.google.gwt.user.client.ui.Tree; |
31 |
import com.google.gwt.user.client.ui.TreeItem; |
32 |
|
33 |
/**
|
34 |
* @author kman
|
35 |
*/
|
36 |
public class PopupTree extends Tree { |
37 |
|
38 |
private FolderContextMenu menu;
|
39 |
|
40 |
private Images images;
|
41 |
|
42 |
private boolean ctrlKeyPressed = false; |
43 |
|
44 |
private boolean leftClicked = false; |
45 |
|
46 |
private boolean rightClicked = false; |
47 |
|
48 |
private TreeItem treeSelectedItem = null; |
49 |
|
50 |
public PopupTree(Images theImages) {
|
51 |
super(theImages);
|
52 |
images = theImages; |
53 |
sinkEvents(Event.ONCONTEXTMENU);
|
54 |
sinkEvents(Event.ONMOUSEUP);
|
55 |
// sinkEvents(Event.ONMOUSEDOWN);
|
56 |
|
57 |
addSelectionHandler(new SelectionHandler<TreeItem>() {
|
58 |
|
59 |
@Override
|
60 |
public void onSelection(SelectionEvent<TreeItem> event) { |
61 |
TreeItem item = event.getSelectedItem(); |
62 |
processItemSelected(item, true);
|
63 |
String path = GSS.get().getApiPath() + GSS.get().getCurrentUserResource().getUsername()+ "/"; |
64 |
FolderResource currentObject = (FolderResource) GSS.get().getFolders().getCurrent().getUserObject(); |
65 |
String currentURI = currentObject.getParentURI();
|
66 |
String result = currentURI.substring(path.indexOf("/")); |
67 |
String currentText = GSS.get().getFolders().getCurrent().getText();
|
68 |
History.newItem(result + currentText); |
69 |
// History.newItem(currentObject.getParentURI() + GSS.get().getFolders().getCurrent().getText());
|
70 |
} |
71 |
}); |
72 |
|
73 |
addOpenHandler(new OpenHandler<TreeItem>() {
|
74 |
|
75 |
@Override
|
76 |
public void onOpen(OpenEvent<TreeItem> event) { |
77 |
TreeItem item = event.getTarget(); |
78 |
if (item != null && item.getState()) |
79 |
GSS.get().getFolders().update(item); |
80 |
|
81 |
} |
82 |
}); |
83 |
addHandler(new ContextMenuHandler() {
|
84 |
|
85 |
@Override
|
86 |
public void onContextMenu(ContextMenuEvent event) { |
87 |
TreeItem item = getSelectedItem(); |
88 |
if (item != null) { |
89 |
int left = item.getAbsoluteLeft() + 40; |
90 |
int top = item.getAbsoluteTop() + 20; |
91 |
showPopup(left, top); |
92 |
} |
93 |
|
94 |
} |
95 |
}, ContextMenuEvent.getType()); |
96 |
// DOM.setStyleAttribute(getElement(), "position", "static");
|
97 |
|
98 |
} |
99 |
|
100 |
@Override
|
101 |
public void onBrowserEvent(Event event) { |
102 |
if (DOM.eventGetType(event) == Event.ONCLICK) |
103 |
return;
|
104 |
|
105 |
switch (DOM.eventGetType(event)) {
|
106 |
case Event.ONKEYDOWN: |
107 |
int key = DOM.eventGetKeyCode(event);
|
108 |
if (key == KeyCodes.KEY_CTRL)
|
109 |
ctrlKeyPressed = true;
|
110 |
break;
|
111 |
|
112 |
case Event.ONKEYUP: |
113 |
key = DOM.eventGetKeyCode(event); |
114 |
if (key == KeyCodes.KEY_CTRL)
|
115 |
ctrlKeyPressed = false;
|
116 |
break;
|
117 |
|
118 |
case Event.ONMOUSEDOWN: |
119 |
if (DOM.eventGetButton(event) == NativeEvent.BUTTON_RIGHT)
|
120 |
rightClicked = true;
|
121 |
else if (DOM.eventGetButton(event) == NativeEvent.BUTTON_LEFT) |
122 |
leftClicked = true;
|
123 |
break;
|
124 |
|
125 |
case Event.ONMOUSEUP: |
126 |
if (DOM.eventGetButton(event) == NativeEvent.BUTTON_RIGHT)
|
127 |
rightClicked = false;
|
128 |
else if (DOM.eventGetButton(event) == NativeEvent.BUTTON_LEFT) |
129 |
leftClicked = false;
|
130 |
break;
|
131 |
} |
132 |
|
133 |
super.onBrowserEvent(event);
|
134 |
} |
135 |
|
136 |
protected void showPopup(final int x, final int y) { |
137 |
if (treeSelectedItem == null) |
138 |
return;
|
139 |
if (menu != null) |
140 |
menu.hide(); |
141 |
menu = new FolderContextMenu(images);
|
142 |
menu.setPopupPosition(x, y); |
143 |
menu.show(); |
144 |
} |
145 |
|
146 |
public void processItemSelected(TreeItem item, boolean fireEvents) { |
147 |
|
148 |
if (GSS.get().getCurrentSelection() == null || !GSS.get().getCurrentSelection().equals(item.getUserObject())) |
149 |
GSS.get().setCurrentSelection(item.getUserObject()); |
150 |
if (!GSS.get().isFileListShowing())
|
151 |
GSS.get().showFileList(); |
152 |
|
153 |
// refresh Others Shared Node
|
154 |
if (GSS.get().getFolders().isOthersShared(item)) {
|
155 |
GSS.get().getFolders().update(item); |
156 |
GSS.get().showFileList(); |
157 |
} |
158 |
// refresh Others Shared User Node
|
159 |
// else if(GSS.get().getFolders().isOthersSharedItem(item) &&
|
160 |
// item.getUserObject() instanceof UserDTO)
|
161 |
// GSS.get().getFolders().update(item);
|
162 |
|
163 |
if (!item.equals(treeSelectedItem))
|
164 |
processSelection(item); |
165 |
if (rightClicked) {
|
166 |
rightClicked = false;
|
167 |
int left = item.getAbsoluteLeft() + 40; |
168 |
int top = item.getAbsoluteTop() + 20; |
169 |
showPopup(left, top); |
170 |
} else if (leftClicked && ctrlKeyPressed) { |
171 |
leftClicked = false;
|
172 |
ctrlKeyPressed = false;
|
173 |
int left = item.getAbsoluteLeft() + 40; |
174 |
int top = item.getAbsoluteTop() + 20; |
175 |
showPopup(left, top); |
176 |
} |
177 |
} |
178 |
|
179 |
public void clearSelection() { |
180 |
if (treeSelectedItem != null) |
181 |
((DnDTreeItem) treeSelectedItem).getContent().removeStyleName("gss-SelectedRow");
|
182 |
// treeSelectedItem.getWidget().removeStyleName("gss-SelectedRow");
|
183 |
|
184 |
treeSelectedItem = null;
|
185 |
setSelectedItem(null, true); |
186 |
GSS.get().setCurrentSelection(null);
|
187 |
} |
188 |
|
189 |
private void processSelection(TreeItem item) { |
190 |
if (treeSelectedItem != null) { |
191 |
GSS.get().setCurrentSelection(null);
|
192 |
// treeSelectedItem.getWidget().removeStyleName("gss-SelectedRow");
|
193 |
((DnDTreeItem) treeSelectedItem).getContent().removeStyleName("gss-SelectedRow");
|
194 |
treeSelectedItem = null;
|
195 |
setSelectedItem(null, true); |
196 |
} |
197 |
treeSelectedItem = item; |
198 |
setSelectedItem(item, true);
|
199 |
// ensureSelectedItemVisible();
|
200 |
if (((DnDTreeItem) item).getFolderResource() != null) |
201 |
GSS.get().setCurrentSelection(((DnDTreeItem) item).getFolderResource()); |
202 |
if (item.getUserObject() instanceof FolderResource) |
203 |
GSS.get().setCurrentSelection(item.getUserObject()); |
204 |
else if (item.getUserObject() instanceof OtherUserResource) |
205 |
GSS.get().setCurrentSelection(item.getUserObject()); |
206 |
else if (GSS.get().getFolders().isTrash(item)) |
207 |
GSS.get().setCurrentSelection(null);
|
208 |
// item.getWidget().addStyleName("gss-SelectedRow");
|
209 |
((DnDTreeItem) item).getContent().addStyleName("gss-SelectedRow");
|
210 |
// if(GSS.get().getFolders().isFileItem(item)||GSS.get().getFolders().isTrashItem(item)||GSS.get().getFolders().isMySharedItem(item))
|
211 |
GSS.get().showFileList(true);
|
212 |
} |
213 |
|
214 |
/**
|
215 |
* Retrieve the selectedItem.
|
216 |
*
|
217 |
* @return the selectedItem
|
218 |
*/
|
219 |
public TreeItem getTreeSelectedItem() {
|
220 |
return treeSelectedItem;
|
221 |
} |
222 |
|
223 |
/**
|
224 |
* Modify the selectedItem.
|
225 |
*
|
226 |
* @param newSelectedItem the selectedItem to set
|
227 |
*/
|
228 |
public void setTreeSelectedItem(TreeItem newSelectedItem) { |
229 |
treeSelectedItem = newSelectedItem; |
230 |
} |
231 |
|
232 |
} |