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 && (isFolderTreeSelected || otherSharedTreeSelected))
125 app.updateFolder(folder, true, new Command() {
128 public void execute() {
129 app.updateStatistics();
134 toolbar.add(refreshButton);
136 toolsButton = new Anchor("<span class='ico'></span><span class='title'>More...</span>", true);
137 toolsButton.getElement().setId("tools-button");
138 toolsButton.addStyleName("pithos-toolbarItem");
139 toolsButton.setVisible(false);
140 toolsButton.addClickHandler(new ClickHandler() {
143 public void onClick(ClickEvent event) {
144 if (!menu.isEmpty()) {
145 menu.setPopupPosition(event.getClientX(), event.getClientY());
150 toolbar.add(toolsButton);
155 public void showRelevantButtons() {
156 TreeView selectedTree = app.getSelectedTree();
157 if (selectedTree != null) {
158 final Folder folder = app.getSelectedTree().getSelection();
159 if (folder != null) {
160 app.scheduleFolderHeadCommand(folder, new Command() {
163 public void execute() {
164 Boolean[] permissions = folder.getPermissions().get(app.getUsername());
165 boolean canWrite = folder.getOwner().equals(app.getUsername()) || (permissions!= null && permissions[1] != null && permissions[1]);
166 boolean isFolderTreeSelected = app.getSelectedTree().equals(app.getFolderTreeView());
167 boolean otherSharedTreeSelected = app.getSelectedTree().equals(app.getOtherSharedTreeView());
169 if (isFolderTreeSelected || otherSharedTreeSelected)
170 refreshButton.setVisible(true);
172 refreshButton.setVisible(true);
174 if (!folder.isInTrash() && canWrite) {
175 if (isFolderTreeSelected || otherSharedTreeSelected)
176 newFolderButton.setVisible(true);
178 newFolderButton.setVisible(false);
179 if (isFolderTreeSelected && !folder.isContainer())
180 shareFolderButton.setVisible(true);
182 shareFolderButton.setVisible(false);
185 newFolderButton.setVisible(false);
186 shareFolderButton.setVisible(false);
192 newFolderButton.setVisible(false);
193 shareFolderButton.setVisible(false);
194 refreshButton.setVisible(false);
198 newFolderButton.setVisible(false);
199 shareFolderButton.setVisible(false);
200 refreshButton.setVisible(false);
203 if (selectedTree != null) {
204 menu = new ToolsMenu(app, Pithos.images, selectedTree, selectedTree.getSelection(), app.getFileList().getSelectedFiles());
206 toolsButton.setVisible(true);
208 toolsButton.setVisible(false);