Toolbar buttons are shown only when relevant
authorChristos Stathis <chstath@ebs.gr>
Fri, 27 Jan 2012 15:42:37 +0000 (17:42 +0200)
committerChristos Stathis <chstath@ebs.gr>
Fri, 27 Jan 2012 15:42:37 +0000 (17:42 +0200)
src/gr/grnet/pithos/web/client/Pithos.java
src/gr/grnet/pithos/web/client/Toolbar.java [new file with mode: 0644]
src/gr/grnet/pithos/web/client/ToolsMenu.java

index fc3d955..c469226 100644 (file)
@@ -34,8 +34,6 @@
  */
 package gr.grnet.pithos.web.client;
 
-import gr.grnet.pithos.web.client.commands.NewFolderCommand;
-import gr.grnet.pithos.web.client.commands.PropertiesCommand;
 import gr.grnet.pithos.web.client.commands.UploadFileCommand;
 import gr.grnet.pithos.web.client.foldertree.AccountResource;
 import gr.grnet.pithos.web.client.foldertree.File;
@@ -67,7 +65,6 @@ import com.google.gwt.core.client.EntryPoint;
 import com.google.gwt.core.client.GWT;
 import com.google.gwt.core.client.Scheduler;
 import com.google.gwt.core.client.Scheduler.ScheduledCommand;
-import com.google.gwt.dom.client.Style.Display;
 import com.google.gwt.event.dom.client.ClickEvent;
 import com.google.gwt.event.dom.client.ClickHandler;
 import com.google.gwt.event.logical.shared.ResizeEvent;
@@ -92,10 +89,8 @@ import com.google.gwt.user.client.Event;
 import com.google.gwt.user.client.History;
 import com.google.gwt.user.client.Window;
 import com.google.gwt.user.client.ui.AbstractImagePrototype;
-import com.google.gwt.user.client.ui.Anchor;
 import com.google.gwt.user.client.ui.Button;
 import com.google.gwt.user.client.ui.Composite;
-import com.google.gwt.user.client.ui.FlowPanel;
 import com.google.gwt.user.client.ui.HTML;
 import com.google.gwt.user.client.ui.HasHorizontalAlignment;
 import com.google.gwt.user.client.ui.HasVerticalAlignment;
@@ -271,10 +266,6 @@ public class Pithos implements EntryPoint, ResizeHandler {
     
     private HTML numOfFiles;
     
-    private Anchor refreshButton;
-
-    private Anchor toolsButton;
-
        @Override
        public void onModuleLoad() {
                if (parseUserCredentials())
@@ -319,89 +310,7 @@ public class Pithos implements EntryPoint, ResizeHandler {
         header.setCellHorizontalAlignment(messagePanel, HasHorizontalAlignment.ALIGN_CENTER);
         header.setCellVerticalAlignment(messagePanel, HasVerticalAlignment.ALIGN_MIDDLE);
 
-        FlowPanel toolbar = new FlowPanel();
-        toolbar.getElement().setId("toolbar");
-        toolbar.addStyleName("clearfix");
-        toolbar.getElement().getStyle().setDisplay(Display.BLOCK);
-
-        Anchor newFolderButton = new Anchor("<span class='ico'></span><span class='title'>New folder</span>", true);
-        newFolderButton.getElement().setId("newfolder-button");
-        newFolderButton.addStyleName("pithos-toolbarItem");
-        newFolderButton.addClickHandler(new ClickHandler() {
-                       
-                       @Override
-                       public void onClick(ClickEvent event) {
-                               Folder folder = getSelectedTree().getSelection();
-                               if (folder != null) {
-                               Boolean[] permissions = folder.getPermissions().get(getUsername());
-                               boolean canWrite = folder.getOwner().equals(getUsername()) || (permissions!= null && permissions[1] != null && permissions[1]);
-                               
-                               if (!folder.isInTrash() && canWrite)
-                                       new NewFolderCommand(Pithos.this, null, folder).execute();
-                               }
-                       }
-               });
-        toolbar.add(newFolderButton);
-
-        Anchor shareFolderButton = new Anchor("<span class='ico'></span><span class='title'>Share folder</span>", true);
-        shareFolderButton.getElement().setId("sharefolder-button");
-        shareFolderButton.addStyleName("pithos-toolbarItem");
-        shareFolderButton.addClickHandler(new ClickHandler() {
-                       
-                       @Override
-                       public void onClick(ClickEvent event) {
-                               Folder folder = getSelectedTree().getSelection();
-                               if (folder != null) {
-                               Boolean[] permissions = folder.getPermissions().get(getUsername());
-                               boolean canWrite = folder.getOwner().equals(getUsername()) || (permissions!= null && permissions[1] != null && permissions[1]);
-                               boolean isFolderTreeSelected = selectedTree.equals(getFolderTreeView());
-                               
-                               if (!folder.isInTrash() && canWrite && isFolderTreeSelected && !folder.isContainer())
-                                       new PropertiesCommand(Pithos.this, null, folder, PropertiesCommand.PERMISSIONS).execute();
-                               }
-                       }
-               });
-        toolbar.add(shareFolderButton);
-
-        refreshButton = new Anchor("<span class='ico'></span><span class='title'>Refresh</span>", true);
-        refreshButton.getElement().setId("refresh-button");
-        refreshButton.addStyleName("pithos-toolbarItem");
-        refreshButton.addClickHandler(new ClickHandler() {
-                       
-                       @Override
-                       public void onClick(ClickEvent event) {
-                       boolean isFolderTreeSelected = selectedTree.equals(getFolderTreeView());
-                       boolean otherSharedTreeSelected = selectedTree.equals(getOtherSharedTreeView());
-                       Folder folder = getSelectedTree().getSelection();
-                       
-                       if (folder != null && (isFolderTreeSelected || otherSharedTreeSelected))
-                               updateFolder(folder, true, new Command() {
-                                       
-                                       @Override
-                                       public void execute() {
-                                               updateStatistics();
-                                       }
-                               });
-                       }
-               });
-        toolbar.add(refreshButton);
-
-        toolsButton = new Anchor("<span class='ico'></span><span class='title'>More...</span>", true);
-        toolsButton.getElement().setId("tools-button");
-        toolsButton.addStyleName("pithos-toolbarItem");
-        toolsButton.addClickHandler(new ClickHandler() {
-                       
-                       @Override
-                       public void onClick(ClickEvent event) {
-                ToolsMenu menu = new ToolsMenu(Pithos.this, images, getSelectedTree(), getSelectedTree().getSelection(), getFileList().getSelectedFiles());
-                if (!menu.isEmpty()) {
-                           menu.setPopupPosition(event.getClientX(), event.getClientY());
-                           menu.show();
-                }
-                       }
-               });
-        toolbar.add(toolsButton);
-  
+        final Toolbar toolbar = new Toolbar(this);
         header.add(toolbar);
         header.setCellHorizontalAlignment(toolbar, HasHorizontalAlignment.ALIGN_CENTER);
         header.setCellVerticalAlignment(toolbar, HasVerticalAlignment.ALIGN_MIDDLE);
@@ -440,6 +349,7 @@ public class Pithos implements EntryPoint, ResizeHandler {
                                }
                        });
                 }
+                toolbar.showRelevantButtons();
             }
         });
         selectionModels.add(folderTreeSelectionModel);
diff --git a/src/gr/grnet/pithos/web/client/Toolbar.java b/src/gr/grnet/pithos/web/client/Toolbar.java
new file mode 100644 (file)
index 0000000..73cb1e0
--- /dev/null
@@ -0,0 +1,193 @@
+/*
+ * Copyright 2012 GRNET S.A. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or
+ * without modification, are permitted provided that the following
+ * conditions are met:
+ *
+ *   1. Redistributions of source code must retain the above
+ *      copyright notice, this list of conditions and the following
+ *      disclaimer.
+ *
+ *   2. Redistributions in binary form must reproduce the above
+ *      copyright notice, this list of conditions and the following
+ *      disclaimer in the documentation and/or other materials
+ *      provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * The views and conclusions contained in the software and
+ * documentation are those of the authors and should not be
+ * interpreted as representing official policies, either expressed
+ * or implied, of GRNET S.A.
+ */
+
+package gr.grnet.pithos.web.client;
+
+import gr.grnet.pithos.web.client.commands.NewFolderCommand;
+import gr.grnet.pithos.web.client.commands.PropertiesCommand;
+import gr.grnet.pithos.web.client.foldertree.Folder;
+
+import com.google.gwt.dom.client.Style.Display;
+import com.google.gwt.event.dom.client.ClickEvent;
+import com.google.gwt.event.dom.client.ClickHandler;
+import com.google.gwt.user.client.Command;
+import com.google.gwt.user.client.ui.Anchor;
+import com.google.gwt.user.client.ui.Composite;
+import com.google.gwt.user.client.ui.FlowPanel;
+
+public class Toolbar extends Composite {
+
+       Pithos app;
+       
+       private Anchor newFolderButton;
+       
+       private Anchor shareFolderButton;
+       
+       private Anchor refreshButton;
+       
+       private Anchor toolsButton;
+       
+       ToolsMenu menu;
+       
+       public Toolbar(final Pithos _app) {
+               app = _app;
+        FlowPanel toolbar = new FlowPanel();
+        toolbar.getElement().setId("toolbar");
+        toolbar.addStyleName("clearfix");
+        toolbar.getElement().getStyle().setDisplay(Display.BLOCK);
+
+        newFolderButton = new Anchor("<span class='ico'></span><span class='title'>New folder</span>", true);
+        newFolderButton.getElement().setId("newfolder-button");
+        newFolderButton.addStyleName("pithos-toolbarItem");
+        newFolderButton.setVisible(false);
+        newFolderButton.addClickHandler(new ClickHandler() {
+                       
+                       @Override
+                       public void onClick(ClickEvent event) {
+                               Folder folder = app.getSelectedTree().getSelection();
+                               if (folder != null) {
+                               Boolean[] permissions = folder.getPermissions().get(app.getUsername());
+                               boolean canWrite = folder.getOwner().equals(app.getUsername()) || (permissions!= null && permissions[1] != null && permissions[1]);
+                               
+                               if (!folder.isInTrash() && canWrite)
+                                       new NewFolderCommand(app, null, folder).execute();
+                               }
+                       }
+               });
+        toolbar.add(newFolderButton);
+
+        shareFolderButton = new Anchor("<span class='ico'></span><span class='title'>Share folder</span>", true);
+        shareFolderButton.getElement().setId("sharefolder-button");
+        shareFolderButton.addStyleName("pithos-toolbarItem");
+        shareFolderButton.setVisible(false);
+        shareFolderButton.addClickHandler(new ClickHandler() {
+                       
+                       @Override
+                       public void onClick(ClickEvent event) {
+                               Folder folder = app.getSelectedTree().getSelection();
+                               if (folder != null) {
+                               Boolean[] permissions = folder.getPermissions().get(app.getUsername());
+                               boolean canWrite = folder.getOwner().equals(app.getUsername()) || (permissions!= null && permissions[1] != null && permissions[1]);
+                               boolean isFolderTreeSelected = app.getSelectedTree().equals(app.getFolderTreeView());
+                               
+                               if (!folder.isInTrash() && canWrite && isFolderTreeSelected && !folder.isContainer())
+                                       new PropertiesCommand(app, null, folder, PropertiesCommand.PERMISSIONS).execute();
+                               }
+                       }
+               });
+        toolbar.add(shareFolderButton);
+
+        refreshButton = new Anchor("<span class='ico'></span><span class='title'>Refresh</span>", true);
+        refreshButton.getElement().setId("refresh-button");
+        refreshButton.addStyleName("pithos-toolbarItem");
+        refreshButton.setVisible(false);
+        refreshButton.addClickHandler(new ClickHandler() {
+                       
+                       @Override
+                       public void onClick(ClickEvent event) {
+                       boolean isFolderTreeSelected = app.getSelectedTree().equals(app.getFolderTreeView());
+                       boolean otherSharedTreeSelected = app.getSelectedTree().equals(app.getOtherSharedTreeView());
+                       Folder folder = app.getSelectedTree().getSelection();
+                       
+                       if (folder != null && (isFolderTreeSelected || otherSharedTreeSelected))
+                               app.updateFolder(folder, true, new Command() {
+                                       
+                                       @Override
+                                       public void execute() {
+                                               app.updateStatistics();
+                                       }
+                               });
+                       }
+               });
+        toolbar.add(refreshButton);
+
+        toolsButton = new Anchor("<span class='ico'></span><span class='title'>More...</span>", true);
+        toolsButton.getElement().setId("tools-button");
+        toolsButton.addStyleName("pithos-toolbarItem");
+        toolsButton.setVisible(false);
+        toolsButton.addClickHandler(new ClickHandler() {
+                       
+                       @Override
+                       public void onClick(ClickEvent event) {
+                if (!menu.isEmpty()) {
+                           menu.setPopupPosition(event.getClientX(), event.getClientY());
+                           menu.show();
+                }
+                       }
+               });
+        toolbar.add(toolsButton);
+        
+        initWidget(toolbar);
+       }
+       
+       public void showRelevantButtons() {
+               Folder folder = app.getSelectedTree().getSelection();
+               if (folder != null) {
+               Boolean[] permissions = folder.getPermissions().get(app.getUsername());
+               boolean canWrite = folder.getOwner().equals(app.getUsername()) || (permissions!= null && permissions[1] != null && permissions[1]);
+               boolean isFolderTreeSelected = app.getSelectedTree().equals(app.getFolderTreeView());
+               boolean otherSharedTreeSelected = app.getSelectedTree().equals(app.getOtherSharedTreeView());
+               
+               if (isFolderTreeSelected || otherSharedTreeSelected)
+                       refreshButton.setVisible(true);
+               else
+                       refreshButton.setVisible(true);
+               
+               if (!folder.isInTrash() && canWrite) {
+                       if (isFolderTreeSelected || otherSharedTreeSelected)
+                               newFolderButton.setVisible(true);
+                       if (isFolderTreeSelected && !folder.isContainer())
+                               shareFolderButton.setVisible(true);
+                       else
+                               shareFolderButton.setVisible(false);
+               }
+               else {
+                       newFolderButton.setVisible(false);
+                       shareFolderButton.setVisible(false);
+               }
+               }
+               else {
+                       newFolderButton.setVisible(false);
+                       shareFolderButton.setVisible(false);
+                       refreshButton.setVisible(false);
+               }
+
+        menu = new ToolsMenu(app, Pithos.images, app.getSelectedTree(), app.getSelectedTree().getSelection(), app.getFileList().getSelectedFiles());
+        if (!menu.isEmpty())
+               toolsButton.setVisible(true);
+        else
+               toolsButton.setVisible(false);
+    }
+}
index b45baf7..f1d1dfb 100644 (file)
@@ -80,7 +80,7 @@ public class ToolsMenu extends PopupPanel {
 
        private MenuItem pasteItem;
 
-       private boolean empty = false;;
+       private boolean empty = true;
        
        /**
         * The widget's constructor.
@@ -111,18 +111,22 @@ public class ToolsMenu extends PopupPanel {
                                        else if (!folder.isContainer()) {
                                            cut = new MenuItem("<span>" + AbstractImagePrototype.create(newImages.cut()).getHTML() + "&nbsp;Cut folder</span>", true, new CutCommand(app, this, folder));
                                        }
-                                       if (cut != null)
+                                       if (cut != null) {
                                                contextMenu.addItem(cut);
+                                               empty = false;
+                                       }
                                }
                        }
        
                        MenuItem copy = null;
                        if (files != null && !files.isEmpty())
                                copy = new MenuItem("<span>" + AbstractImagePrototype.create(newImages.copy()).getHTML() + "&nbsp;Copy files</span>", true, new CopyCommand(app, this, files));
-                       else if (!folder.isContainer())
+                       else if (isFolderTreeSelected && !folder.isContainer())
                                copy = new MenuItem("<span>" + AbstractImagePrototype.create(newImages.copy()).getHTML() + "&nbsp;Copy folder</span>", true, new CopyCommand(app, this, folder));
-                       if (copy != null)
+                       if (copy != null) {
                                contextMenu.addItem(copy);
+                               empty = false;
+                       }
                
                        if (canWrite) {
                                if (!app.getClipboard().isEmpty()) {
@@ -142,6 +146,7 @@ public class ToolsMenu extends PopupPanel {
                                        if (showPaste) {
                                            pasteItem = new MenuItem("<span id = 'folderContextMenu.paste'>" + AbstractImagePrototype.create(newImages.paste()).getHTML() + "&nbsp;Paste</span>", true, new PasteCommand(app, this, folder));
                                            contextMenu.addItem(pasteItem);
+                                               empty = false;
                                        }
                                }
        
@@ -153,8 +158,10 @@ public class ToolsMenu extends PopupPanel {
                                        else if (!folder.isContainer()) {
                                                moveToTrash = new MenuItem("<span>" + AbstractImagePrototype.create(newImages.emptyTrash()).getHTML() + "&nbsp;Move folder to Trash</span>", true, new ToTrashCommand(app, this, folder));
                                        }
-                                       if (moveToTrash != null)
+                                       if (moveToTrash != null) {
                                                contextMenu.addItem(moveToTrash);
+                                               empty = false;
+                                       }
                                
                                        MenuItem delete = null;
                                        if (files != null && !files.isEmpty()) {
@@ -162,17 +169,21 @@ public class ToolsMenu extends PopupPanel {
                                        }
                                        else if (!folder.isContainer())
                                                delete = new MenuItem("<span>" + AbstractImagePrototype.create(newImages.delete()).getHTML() + "&nbsp;Delete folder</span>", true, new DeleteCommand(app, this, folder, MessagePanel.images));
-                                       if (delete != null)
+                                       if (delete != null) {
                                                contextMenu.addItem(delete);
+                                               empty = false;
+                                       }
                                
                                        if (files != null && files.size() == 1) {
                                                contextMenu.addItem(new MenuItem("<span>" + AbstractImagePrototype.create(newImages.viewText()).getHTML() + "&nbsp;File properties</span>", true, new PropertiesCommand(app, this, files, PropertiesCommand.PROPERTIES)));
                                                contextMenu.addItem(new MenuItem("<span>" + AbstractImagePrototype.create(newImages.group()).getHTML() + "&nbsp;Sharing</span>", true, new PropertiesCommand(app, this, files, PropertiesCommand.PERMISSIONS)));
                                                contextMenu.addItem(new MenuItem("<span>" + AbstractImagePrototype.create(newImages.versions()).getHTML() + "&nbsp;Versions</span>", true, new PropertiesCommand(app, this, files, PropertiesCommand.VERSIONS)));
+                                               empty = false;
                                        }
                                        else if (!folder.isContainer()) {
                                                contextMenu.addItem(new MenuItem("<span>" + AbstractImagePrototype.create(newImages.viewText()).getHTML() + "&nbsp;Folder properties</span>", true, new PropertiesCommand(app, this, folder, PropertiesCommand.PROPERTIES)));
                                                contextMenu.addItem(new MenuItem("<span>" + AbstractImagePrototype.create(newImages.sharing()).getHTML() + "&nbsp;Folder sharing</span>", true, new PropertiesCommand(app, this, folder, PropertiesCommand.PERMISSIONS)));
+                                               empty = false;
                                        }
                                    }
                                if (files != null && !files.isEmpty()) {
@@ -184,6 +195,7 @@ public class ToolsMenu extends PopupPanel {
                                                                Window.open(app.getApiPath() + f.getOwner() + f.getUri() + "?X-Auth-Token=" + app.getToken(), "_blank", "");
                                                        }
                                                }));
+                                       empty = false;
                                }
                        }
                }
@@ -195,13 +207,15 @@ public class ToolsMenu extends PopupPanel {
                                else
                                        restore = new MenuItem("<span>" + AbstractImagePrototype.create(images.versions()).getHTML() + "&nbsp;Restore</span>", true, new RestoreTrashCommand(app, this, folder));
                                contextMenu.addItem(restore);
-       
+
                                MenuItem delete = new MenuItem("<span id = 'folderContextMenu.delete'>" + AbstractImagePrototype.create(newImages.delete()).getHTML() + "&nbsp;Delete</span>", true, new DeleteCommand(app, this, folder, MessagePanel.images));
                                contextMenu.addItem(delete);
+                               empty = false;
                        }
                        else {
                                MenuItem emptyTrash = new MenuItem("<span>" + AbstractImagePrototype.create(images.emptyTrash()).getHTML() + "&nbsp;Empty Trash</span>", true, new EmptyTrashCommand(app, this));
                                contextMenu.addItem(emptyTrash);
+                               empty = false;
                        }
                }
         }
@@ -211,6 +225,7 @@ public class ToolsMenu extends PopupPanel {
                        if (o instanceof User) {
                        MenuItem removeUser = new MenuItem("<span>" + AbstractImagePrototype.create(images.delete()).getHTML() + "&nbsp;Remove User</span>", true, new RemoveUserCommand(app, this, (User) o));
                        contextMenu.addItem(removeUser);
+                               empty = false;
                        }
                        else if (o instanceof Group) {
                        MenuItem addUser = new MenuItem("<span>" + AbstractImagePrototype.create(images.user()).getHTML() + "&nbsp;Add User</span>", true, new AddUserCommand(app, this, (Group) o));
@@ -218,14 +233,14 @@ public class ToolsMenu extends PopupPanel {
                
                        MenuItem deleteGroup = new MenuItem("<span>" + AbstractImagePrototype.create(images.delete()).getHTML() + "&nbsp;Delete Group</span>", true, new DeleteGroupCommand(app, this, (Group) o));
                        contextMenu.addItem(deleteGroup);
+                               empty = false;
                        }
                        else {
                        MenuItem createGroup = new MenuItem("<span>" + AbstractImagePrototype.create(images.group()).getHTML() + "&nbsp;Create Group</span>", true, new CreateGroupCommand(app, this));
                        contextMenu.addItem(createGroup);
+                               empty = false;
                        }
                }
-               else
-                       empty = true;
         }
                add(contextMenu);
        }