Statistics
| Branch: | Tag: | Revision:

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
}