2 * Copyright 2012 GRNET S.A. All rights reserved.
4 * Redistribution and use in source and binary forms, with or
5 * without modification, are permitted provided that the following
8 * 1. Redistributions of source code must retain the above
9 * copyright notice, this list of conditions and the following
12 * 2. Redistributions in binary form must reproduce the above
13 * copyright notice, this list of conditions and the following
14 * disclaimer in the documentation and/or other materials
15 * provided with the distribution.
17 * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
18 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
20 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
21 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
24 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
25 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
27 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28 * POSSIBILITY OF SUCH DAMAGE.
30 * The views and conclusions contained in the software and
31 * documentation are those of the authors and should not be
32 * interpreted as representing official policies, either expressed
33 * or implied, of GRNET S.A.
36 package gr.grnet.pithos.web.client;
38 import gr.grnet.pithos.web.client.commands.NewFolderCommand;
39 import gr.grnet.pithos.web.client.commands.PropertiesCommand;
40 import gr.grnet.pithos.web.client.foldertree.Folder;
42 import com.google.gwt.dom.client.Style.Display;
43 import com.google.gwt.event.dom.client.ClickEvent;
44 import com.google.gwt.event.dom.client.ClickHandler;
45 import com.google.gwt.user.client.Command;
46 import com.google.gwt.user.client.ui.Anchor;
47 import com.google.gwt.user.client.ui.Composite;
48 import com.google.gwt.user.client.ui.FlowPanel;
50 public class Toolbar extends Composite {
54 Anchor newFolderButton;
56 Anchor shareFolderButton;
60 private Anchor toolsButton;
64 public Toolbar(final Pithos _app) {
66 FlowPanel toolbar = new FlowPanel();
67 toolbar.getElement().setId("toolbar");
68 toolbar.addStyleName("clearfix");
69 toolbar.getElement().getStyle().setDisplay(Display.BLOCK);
71 newFolderButton = new Anchor("<span class='ico'></span><span class='title'>New folder</span>", true);
72 newFolderButton.getElement().setId("newfolder-button");
73 newFolderButton.addStyleName("pithos-toolbarItem");
74 newFolderButton.setVisible(false);
75 newFolderButton.addClickHandler(new ClickHandler() {
78 public void onClick(ClickEvent event) {
79 Folder folder = app.getSelectedTree().getSelection();
81 Boolean[] permissions = folder.getPermissions().get(app.getUsername());
82 boolean canWrite = folder.getOwner().equals(app.getUsername()) || (permissions!= null && permissions[1] != null && permissions[1]);
84 if (!folder.isInTrash() && canWrite)
85 new NewFolderCommand(app, null, folder).execute();
89 toolbar.add(newFolderButton);
91 shareFolderButton = new Anchor("<span class='ico'></span><span class='title'>Share folder</span>", true);
92 shareFolderButton.getElement().setId("sharefolder-button");
93 shareFolderButton.addStyleName("pithos-toolbarItem");
94 shareFolderButton.setVisible(false);
95 shareFolderButton.addClickHandler(new ClickHandler() {
98 public void onClick(ClickEvent event) {
99 Folder folder = app.getSelectedTree().getSelection();
100 if (folder != null) {
101 Boolean[] permissions = folder.getPermissions().get(app.getUsername());
102 boolean canWrite = folder.getOwner().equals(app.getUsername()) || (permissions!= null && permissions[1] != null && permissions[1]);
103 boolean isFolderTreeSelected = app.getSelectedTree().equals(app.getFolderTreeView());
105 if (!folder.isInTrash() && canWrite && isFolderTreeSelected && !folder.isContainer())
106 new PropertiesCommand(app, null, folder, PropertiesCommand.PERMISSIONS).execute();
110 toolbar.add(shareFolderButton);
112 refreshButton = new Anchor("<span class='ico'></span><span class='title'>Refresh</span>", true);
113 refreshButton.getElement().setId("refresh-button");
114 refreshButton.addStyleName("pithos-toolbarItem");
115 refreshButton.setVisible(false);
116 refreshButton.addClickHandler(new ClickHandler() {
119 public void onClick(ClickEvent event) {
120 boolean isFolderTreeSelected = app.getSelectedTree().equals(app.getFolderTreeView());
121 boolean otherSharedTreeSelected = app.getSelectedTree().equals(app.getOtherSharedTreeView());
122 Folder folder = app.getSelectedTree().getSelection();
124 if (folder != null) {
125 if (!app.isMySharedSelected()) {
126 app.updateFolder(folder, true, new Command() {
129 public void execute() {
130 app.updateStatistics();
135 app.updateSharedFolder(folder, true);
140 toolbar.add(refreshButton);
142 toolsButton = new Anchor("<span class='ico'></span><span class='title'>More...</span>", true);
143 toolsButton.getElement().setId("tools-button");
144 toolsButton.addStyleName("pithos-toolbarItem");
145 toolsButton.setVisible(false);
146 toolsButton.addClickHandler(new ClickHandler() {
149 public void onClick(ClickEvent event) {
150 if (!menu.isEmpty()) {
151 menu.setPopupPosition(event.getClientX(), event.getClientY());
156 toolbar.add(toolsButton);
161 public void showRelevantButtons() {
162 TreeView selectedTree = app.getSelectedTree();
163 if (selectedTree != null) {
164 final Folder folder = app.getSelectedTree().getSelection();
165 if (folder != null) {
166 app.scheduleFolderHeadCommand(folder, new Command() {
169 public void execute() {
170 Boolean[] permissions = folder.getPermissions().get(app.getUsername());
171 boolean canWrite = folder.getOwner().equals(app.getUsername()) || (permissions!= null && permissions[1] != null && permissions[1]);
172 boolean isFolderTreeSelected = app.getSelectedTree().equals(app.getFolderTreeView());
173 boolean otherSharedTreeSelected = app.getSelectedTree().equals(app.getOtherSharedTreeView());
175 refreshButton.setVisible(true);
177 if (!folder.isInTrash() && canWrite) {
178 if (isFolderTreeSelected || otherSharedTreeSelected)
179 newFolderButton.setVisible(true);
181 newFolderButton.setVisible(false);
182 if (isFolderTreeSelected && !folder.isContainer())
183 shareFolderButton.setVisible(true);
185 shareFolderButton.setVisible(false);
188 newFolderButton.setVisible(false);
189 shareFolderButton.setVisible(false);
195 newFolderButton.setVisible(false);
196 shareFolderButton.setVisible(false);
197 refreshButton.setVisible(false);
201 newFolderButton.setVisible(false);
202 shareFolderButton.setVisible(false);
203 refreshButton.setVisible(false);
206 if (selectedTree != null) {
207 menu = new ToolsMenu(app, Pithos.images, selectedTree, selectedTree.getSelection(), app.getFileList().getSelectedFiles());
209 toolsButton.setVisible(true);
211 toolsButton.setVisible(false);