Statistics
| Branch: | Tag: | Revision:

root / src / gr / ebs / gss / client / FileContextMenu.java @ fc0fa492

History | View | Annotate | Download (12 kB)

1
/*
2
 * Copyright 2007, 2008, 2009 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.commands.CopyCommand;
22
import gr.ebs.gss.client.commands.CutCommand;
23
import gr.ebs.gss.client.commands.DeleteCommand;
24
import gr.ebs.gss.client.commands.PasteCommand;
25
import gr.ebs.gss.client.commands.PropertiesCommand;
26
import gr.ebs.gss.client.commands.RefreshCommand;
27
import gr.ebs.gss.client.commands.RestoreTrashCommand;
28
import gr.ebs.gss.client.commands.ToTrashCommand;
29
import gr.ebs.gss.client.commands.UploadFileCommand;
30
import gr.ebs.gss.client.dnd.DnDTreeItem;
31
import gr.ebs.gss.client.rest.resource.FileResource;
32
import gr.ebs.gss.client.rest.resource.FolderResource;
33

    
34
import java.util.List;
35

    
36
import com.google.gwt.event.dom.client.ClickEvent;
37
import com.google.gwt.event.dom.client.ClickHandler;
38
import com.google.gwt.event.dom.client.ContextMenuEvent;
39
import com.google.gwt.resources.client.ClientBundle;
40
import com.google.gwt.resources.client.ImageResource;
41
import com.google.gwt.user.client.Command;
42
import com.google.gwt.user.client.Event;
43
import com.google.gwt.user.client.ui.AbstractImagePrototype;
44
import com.google.gwt.user.client.ui.MenuBar;
45
import com.google.gwt.user.client.ui.MenuItem;
46
import com.google.gwt.user.client.ui.PopupPanel;
47
import com.google.gwt.user.client.ui.TreeItem;
48

    
49
/**
50
 * The 'File Context' menu implementation.
51
 */
52
public class FileContextMenu extends PopupPanel implements ClickHandler {
53

    
54
        /**
55
         * The widget's images.
56
         */
57
        private final Images images;
58

    
59
        private MenuItem cutItem;
60

    
61
        private MenuItem copyItem;
62

    
63
        private MenuItem pasteItem;
64

    
65
        private MenuItem updateItem;
66

    
67
        private MenuItem sharingItem;
68

    
69
        private MenuItem propItem;
70

    
71
        private MenuItem trashItem;
72

    
73
        private MenuItem deleteItem;
74

    
75
        private MenuItem downloadItem;
76

    
77
        private MenuItem saveAsItem;
78

    
79
        /**
80
         * The image bundle for this widget's images that reuses images defined in
81
         * other menus.
82
         */
83
        public interface Images extends ClientBundle,FileMenu.Images, EditMenu.Images {
84

    
85
                @Source("gr/ebs/gss/resources/mimetypes/document.png")
86
                ImageResource fileContextMenu();
87

    
88
                @Source("gr/ebs/gss/resources/doc_versions.png")
89
                ImageResource versions();
90

    
91
                @Override
92
                @Source("gr/ebs/gss/resources/group.png")
93
                ImageResource sharing();
94

    
95
                @Override
96
                @Source("gr/ebs/gss/resources/border_remove.png")
97
                ImageResource unselectAll();
98

    
99
                @Source("gr/ebs/gss/resources/demo.png")
100
                ImageResource viewImage();
101
}
102

    
103
        public static native String getDate()/*-{
104
                return (new Date()).toUTCString();
105
        }-*/;
106

    
107
        /**
108
         * The widget's constructor.
109
         *
110
         * @param newImages the image bundle passed on by the parent object
111
         */
112
        public FileContextMenu(Images newImages, boolean isTrash, boolean isEmpty) {
113
                // The popup's constructor's argument is a boolean specifying that it
114
                // auto-close itself when the user clicks outside of it.
115
                super(true);
116
                GSS gss = GSS.get();
117
                setAnimationEnabled(true);
118
                images = newImages;
119

    
120
                // The command that does some validation before downloading a file.
121
                Command downloadCmd = new Command() {
122

    
123
                        @Override
124
                        public void execute() {
125
                                hide();
126
                                GSS.get().getTopPanel().getFileMenu().preDownloadCheck();
127
                        }
128
                };
129

    
130
                pasteItem = new MenuItem("<span>" + AbstractImagePrototype.create(newImages.paste()).getHTML() + "&nbsp;Paste</span>", true, new PasteCommand(this));
131

    
132
                MenuBar contextMenu = new MenuBar(true);
133
                if (isEmpty) {
134
                        contextMenu.addItem(pasteItem);
135
                        if (GSS.get().getFolders().getCurrent() != null)
136
                                if (GSS.get().getFolders().isFileItem(GSS.get().getFolders().getCurrent()))
137
                                        contextMenu.addItem("<span>" + AbstractImagePrototype.create(newImages.fileUpdate()).getHTML() + "&nbsp;Upload</span>", true, new UploadFileCommand(this));
138
                                else if (GSS.get().getFolders().isMySharedItem(GSS.get().getFolders().getCurrent()) || GSS        .get()
139
                                                                                                                                                                                                                        .getFolders()
140
                                                                                                                                                                                                                        .isOthersSharedItem(GSS        .get()
141
                                                                                                                                                                                                                                                                        .getFolders()
142
                                                                                                                                                                                                                                                                        .getCurrent()))
143
                                        if(GSS.get().getFolders().getCurrent().getUserObject() instanceof FolderResource)
144
                                                contextMenu.addItem("<span>" + AbstractImagePrototype.create(newImages.fileUpdate()).getHTML() + "&nbsp;Upload</span>", true, new UploadFileCommand(this));
145
                        contextMenu.addItem("<span>" + AbstractImagePrototype.create(images.refresh()).getHTML() + "&nbsp;Refresh</span>", true, new RefreshCommand(this, images));
146
                } else if (isTrash) {
147
                        contextMenu.addItem("<span>" + AbstractImagePrototype.create(newImages.versions()).getHTML() + "&nbsp;Restore</span>", true, new RestoreTrashCommand(this));
148
                        contextMenu.addItem("<span>" + AbstractImagePrototype.create(newImages.delete()).getHTML() + "&nbsp;Delete</span>", true, new DeleteCommand(this, images));
149
                } else {
150
                        final Command unselectAllCommand = new Command() {
151

    
152
                                @Override
153
                                public void execute() {
154
                                        hide();
155
                                        if(GSS.get().isFileListShowing())
156
                                                GSS.get().getFileList().clearSelectedRows();
157
                                        else if(GSS.get().isSearchResultsShowing())
158
                                                GSS.get().getSearchResults().clearSelectedRows();
159
                                }
160
                        };
161
                        cutItem = new MenuItem("<span>" + AbstractImagePrototype.create(newImages.cut()).getHTML() + "&nbsp;Cut</span>", true, new CutCommand(this));
162
                        copyItem = new MenuItem("<span>" + AbstractImagePrototype.create(newImages.copy()).getHTML() + "&nbsp;Copy</span>", true, new CopyCommand(this));
163

    
164
                        updateItem = new MenuItem("<span>" + AbstractImagePrototype.create(newImages.fileUpdate()).getHTML() + "&nbsp;Upload</span>", true, new UploadFileCommand(this));
165

    
166
                        trashItem = new MenuItem("<span>" + AbstractImagePrototype.create(newImages.emptyTrash()).getHTML() + "&nbsp;Move to Trash</span>", true, new ToTrashCommand(this));
167
                        deleteItem = new MenuItem("<span>" + AbstractImagePrototype.create(newImages.delete()).getHTML() + "&nbsp;Delete</span>", true, new DeleteCommand(this, images));
168

    
169
                        sharingItem = new MenuItem("<span>" + AbstractImagePrototype.create(newImages.sharing()).getHTML() + "&nbsp;Sharing</span>", true, new PropertiesCommand(this, images, 1));
170
                        propItem = new MenuItem("<span>" + AbstractImagePrototype.create(newImages.viewText()).getHTML() + "&nbsp;Properties</span>", true, new PropertiesCommand(this, images, 0));
171

    
172
                        TreeItem currentFolder = gss.getFolders().getCurrent();
173
                        if(currentFolder!=null && currentFolder.getUserObject() instanceof FolderResource)
174
                                contextMenu.addItem(updateItem);
175
                        String[] link = {"", ""};
176
                        gss.getTopPanel().getFileMenu().createDownloadLink(link, false);
177
                        downloadItem = new MenuItem("<span>" + link[0] + AbstractImagePrototype.create(newImages.download()).getHTML() + " Download" + link[1] + "</span>", true, downloadCmd);
178
                        contextMenu.addItem(downloadItem);
179
                        gss.getTopPanel().getFileMenu().createDownloadLink(link, true);
180
                        saveAsItem = new MenuItem("<span>" + link[0] + AbstractImagePrototype.create(newImages.download()).getHTML() + " Save As" + link[1] + "</span>", true, downloadCmd);
181
                        contextMenu.addItem(saveAsItem);
182
                        contextMenu.addItem(cutItem);
183
                        contextMenu.addItem(copyItem);
184
                        if(currentFolder!=null && currentFolder.getUserObject() instanceof FolderResource)
185
                                contextMenu.addItem(pasteItem);
186
                        contextMenu.addItem("<span>" + AbstractImagePrototype.create(images.unselectAll()).getHTML() + "&nbsp;Unselect</span>", true, unselectAllCommand);
187
                        contextMenu.addItem(trashItem);
188
                        contextMenu.addItem(deleteItem);
189
                        contextMenu.addItem("<span>" + AbstractImagePrototype.create(images.refresh()).getHTML() + "&nbsp;Refresh</span>", true, new RefreshCommand(this, images));
190
                        contextMenu.addItem(sharingItem);
191
                        contextMenu.addItem(propItem);
192
                }
193
                add(contextMenu);
194
                if (gss.getClipboard().hasFileItem())
195
                        pasteItem.setVisible(true);
196
                else
197
                        pasteItem.setVisible(false);
198
        }
199

    
200
        void onMultipleSelection() {
201
                updateItem.setVisible(false);
202
                downloadItem.setVisible(false);
203
                saveAsItem.setVisible(false);
204
                sharingItem.setVisible(false);
205
        }
206
        @Override
207
        public void onClick(ClickEvent event) {
208
                if (GSS.get().getCurrentSelection() != null)
209
                        if (GSS.get().getCurrentSelection() instanceof FileResource) {
210
                                FileResource res = (FileResource) GSS.get().getCurrentSelection();
211
                                FileContextMenu menu;
212
                                if (res.isDeleted())
213
                                        menu = new FileContextMenu(images, true, false);
214
                                else
215
                                        menu = new FileContextMenu(images, false, false);
216
                                int left = event.getRelativeElement().getAbsoluteLeft();
217
                                int top = event.getRelativeElement().getAbsoluteTop() + event.getRelativeElement().getOffsetHeight();
218
                                menu.setPopupPosition(left, top);
219
                                menu.show();
220
                        } else if (GSS.get().getCurrentSelection() instanceof List) {
221
                                FileContextMenu menu;
222
                                if (GSS.get().getFolders().isTrashItem(GSS.get().getFolders().getCurrent()))
223
                                        menu = new FileContextMenu(images, true, false);
224
                                else {
225
                                        menu = new FileContextMenu(images, false, false);
226
                                        menu.onMultipleSelection();
227
                                }
228
                                int left = event.getRelativeElement().getAbsoluteLeft();
229
                                int top = event.getRelativeElement().getAbsoluteTop() + event.getRelativeElement().getOffsetHeight();
230
                                menu.setPopupPosition(left, top);
231
                                menu.show();
232
                        }
233
        }
234

    
235
        
236
        public void onContextEvent(ContextMenuEvent event) {
237
                if (GSS.get().getCurrentSelection() != null)
238
                        if (GSS.get().getCurrentSelection() instanceof FileResource) {
239
                                FileResource res = (FileResource) GSS.get().getCurrentSelection();
240
                                FileContextMenu menu;
241
                                if (res.isDeleted())
242
                                        menu = new FileContextMenu(images, true, false);
243
                                else
244
                                        menu = new FileContextMenu(images, false, false);
245
                                int left = event.getNativeEvent().getClientX();
246
                                int top = event.getNativeEvent().getClientY();
247
                                menu.setPopupPosition(left, top);
248
                                menu.show();
249

    
250
                        } else if (GSS.get().getCurrentSelection() instanceof List) {
251
                                FileContextMenu menu;
252
                                if (GSS.get().getFolders().isTrashItem(GSS.get().getFolders().getCurrent()))
253
                                        menu = new FileContextMenu(images, true, false);
254
                                else {
255
                                        menu = new FileContextMenu(images, false, false);
256
                                        menu.onMultipleSelection();
257
                                }
258
                                int left = event.getNativeEvent().getClientX();
259
                                int top = event.getNativeEvent().getClientY();
260
                                menu.setPopupPosition(left, top);
261
                                menu.show();
262
                        }
263
        }
264

    
265
        public FileContextMenu onEvent(Event event) {
266
                FileContextMenu menu=null;
267
                if (GSS.get().getCurrentSelection() != null)
268
                        if (GSS.get().getCurrentSelection() instanceof FileResource) {
269
                                FileResource res = (FileResource) GSS.get().getCurrentSelection();
270

    
271
                                if (res.isDeleted())
272
                                        menu = new FileContextMenu(images, true, false);
273
                                else
274
                                        menu = new FileContextMenu(images, false, false);
275
                                int left = event.getClientX();
276
                                int top = event.getClientY();
277
                                menu.setPopupPosition(left, top);
278
                                menu.show();
279
                        } else if (GSS.get().getCurrentSelection() instanceof List) {
280

    
281
                                if (GSS.get().getFolders().isTrashItem(GSS.get().getFolders().getCurrent()))
282
                                        menu = new FileContextMenu(images, true, false);
283
                                else {
284
                                        menu = new FileContextMenu(images, false, false);
285
                                        menu.onMultipleSelection();
286
                                }
287
                                int left = event.getClientX();
288
                                int top = event.getClientY();
289
                                menu.setPopupPosition(left, top);
290
                                menu.show();
291
                        }
292
                return menu;
293
        }
294

    
295
        public FileContextMenu onEmptyEvent(Event event) {
296
                FileContextMenu menu=null;
297
                if (GSS.get().getFolders().isTrashItem(GSS.get().getFolders().getCurrent()))
298
                        menu = new FileContextMenu(images, true, true);
299
                else if(((DnDTreeItem)GSS.get().getFolders().getCurrent()).getFolderResource() != null)
300
                        menu = new FileContextMenu(images, false, true);
301
                else return menu;
302
                int left = event.getClientX();
303
                int top = event.getClientY();
304
                menu.setPopupPosition(left, top);
305
                menu.show();
306
                return menu;
307
        }
308

    
309

    
310
}