X-Git-Url: https://code.grnet.gr/git/pithos-web-client/blobdiff_plain/3f62b626eccb7795b741d0821b63da37ad242459..cbca5b13c55681d63dbe816e29a7df4af29ca8fd:/src/gr/grnet/pithos/web/client/Pithos.java diff --git a/src/gr/grnet/pithos/web/client/Pithos.java b/src/gr/grnet/pithos/web/client/Pithos.java index 0da97e6..d034e86 100644 --- a/src/gr/grnet/pithos/web/client/Pithos.java +++ b/src/gr/grnet/pithos/web/client/Pithos.java @@ -34,6 +34,7 @@ */ package gr.grnet.pithos.web.client; +import gr.grnet.pithos.web.client.PithosDisclosurePanel.Style; import gr.grnet.pithos.web.client.commands.UploadFileCommand; import gr.grnet.pithos.web.client.foldertree.AccountResource; import gr.grnet.pithos.web.client.foldertree.File; @@ -82,7 +83,10 @@ import com.google.gwt.json.client.JSONObject; import com.google.gwt.json.client.JSONParser; import com.google.gwt.json.client.JSONString; import com.google.gwt.json.client.JSONValue; +import com.google.gwt.resources.client.ClientBundle; +import com.google.gwt.resources.client.CssResource; import com.google.gwt.resources.client.ImageResource; +import com.google.gwt.resources.client.ClientBundle.Source; import com.google.gwt.resources.client.ImageResource.ImageOptions; import com.google.gwt.user.client.Command; import com.google.gwt.user.client.Cookies; @@ -92,6 +96,7 @@ import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.AbstractImagePrototype; 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; @@ -114,6 +119,17 @@ public class Pithos implements EntryPoint, ResizeHandler { public static final Configuration config = GWT.create(Configuration.class); + public interface Style extends CssResource { + String commandAnchor(); + } + + public interface Resources extends ClientBundle { + @Source("Pithos.css") + Style pithosCss(); + } + + public static Resources resources = GWT.create(Resources.class); + /** * Instantiate an application-level image bundle. This object will provide * programmatic access to all the images needed by widgets. @@ -144,10 +160,14 @@ public class Pithos implements EntryPoint, ResizeHandler { mysharedTreeView.updateRoot(); } - public void updateSharedFolder(Folder f, boolean showfiles) { - mysharedTreeView.updateFolder(f, showfiles); + public void updateSharedFolder(Folder f, boolean showfiles, Command callback) { + mysharedTreeView.updateFolder(f, showfiles, callback); } + public void updateSharedFolder(Folder f, boolean showfiles) { + updateSharedFolder(f, showfiles, null); + } + public void updateOtherSharedFolder(Folder f, boolean showfiles) { otherSharedTreeView.updateFolder(f, showfiles); } @@ -249,7 +269,7 @@ public class Pithos implements EntryPoint, ResizeHandler { @SuppressWarnings("rawtypes") List selectionModels = new ArrayList(); - Button upload; + public Button upload; private HTML numOfFiles; @@ -264,6 +284,7 @@ public class Pithos implements EntryPoint, ResizeHandler { } private void initialize() { + resources.pithosCss().ensureInjected(); boolean bareContent = Window.Location.getParameter("noframe") != null; String contentWidth = bareContent ? "100%" : "75%"; @@ -359,11 +380,11 @@ public class Pithos implements EntryPoint, ResizeHandler { fileList = new FileList(this, images); inner.add(fileList); + inner.add(createUploadArea()); + trees = new VerticalPanel(); trees.setWidth("100%"); - trees.add(folderTreeView); - // Add the left and right panels to the split panel. splitPanel.setLeftWidget(trees); splitPanel.setRightWidget(inner); @@ -419,6 +440,7 @@ public class Pithos implements EntryPoint, ResizeHandler { trash = f; break; } + trees.add(folderTreeView); folderTreeViewModel.initialize(account, new Command() { @Override @@ -461,31 +483,32 @@ public class Pithos implements EntryPoint, ResizeHandler { public void applyPermissions(Folder f) { if (f != null) { - if (f.isInTrash()) + if (f.isInTrash()) { upload.setEnabled(false); + hideUploadArea(); + } else { Boolean[] perms = f.getPermissions().get(username); if (f.getOwner().equals(username) || (perms != null && perms[1] != null && perms[1])) { upload.setEnabled(true); + showUploadArea(); } - else + else { upload.setEnabled(false); + hideUploadArea(); + } } } - else + else { upload.setEnabled(false); + hideUploadArea(); + } } @SuppressWarnings({ "rawtypes", "unchecked" }) public void deselectOthers(TreeView _selectedTree, SingleSelectionModel model) { selectedTree = _selectedTree; - for (Composite c : treeViews) - if (c.equals(selectedTree)) - c.addStyleName("cellTreeWidget-selectedTree"); - else - c.removeStyleName("cellTreeWidget-selectedTree"); - for (SingleSelectionModel s : selectionModels) if (!s.equals(model) && s.getSelectedObject() != null) s.setSelected(s.getSelectedObject(), false); @@ -1045,10 +1068,11 @@ public class Pithos implements EntryPoint, ResizeHandler { groupTreeView.updateGroupNode(null); } - public void addGroup(String groupname) { + public Group addGroup(String groupname) { Group newGroup = new Group(groupname); account.addGroup(newGroup); groupTreeView.updateGroupNode(null); + return newGroup; } public void removeGroup(Group group) { @@ -1094,6 +1118,7 @@ public class Pithos implements EntryPoint, ResizeHandler { if (mysharedTreeSelectionModel.getSelectedObject() != null) { deselectOthers(mysharedTreeView, mysharedTreeSelectionModel); upload.setEnabled(false); + hideUploadArea(); updateSharedFolder(mysharedTreeSelectionModel.getSelectedObject(), true); showRelevantToolbarButtons(); } @@ -1126,7 +1151,6 @@ public class Pithos implements EntryPoint, ResizeHandler { public void onSelectionChange(SelectionChangeEvent event) { if (otherSharedTreeSelectionModel.getSelectedObject() != null) { deselectOthers(otherSharedTreeView, otherSharedTreeSelectionModel); - otherSharedTreeView.addStyleName("cellTreeWidget-selectedTree"); applyPermissions(otherSharedTreeSelectionModel.getSelectedObject()); updateOtherSharedFolder(otherSharedTreeSelectionModel.getSelectedObject(), true); showRelevantToolbarButtons(); @@ -1284,4 +1308,132 @@ public class Pithos implements EntryPoint, ResizeHandler { public boolean isMySharedSelected() { return getSelectedTree().equals(getMySharedTreeView()); } + + private FlowPanel createUploadArea() { + FlowPanel area = new FlowPanel(); + area.getElement().setId("container"); + HTML list = new HTML(); + list.getElement().setId("filelist"); + area.add(list); + Scheduler.get().scheduleDeferred(new ScheduledCommand() { + + @Override + public void execute() { + setupUploadArea(Pithos.this, getToken()); + } + }); + + return area; + } + + native void setupUploadArea(Pithos app, String token) /*-{ + $wnd.$("#container").pluploadQueue({ + // General settings + runtimes : 'html5', + unique_names : true, + multiple_queues: true, + drop_element: 'filelist', + + preinit: { + Init: function(up, info) { + if ($wnd.console && $wnd.console.log) + $wnd.console.log("Init fired"); + up.settings.file_data_name = "X-Object-Data"; + } + }, + + init: { + FilesAdded: function(up, files) { + $wnd.$('#container').css('border', ''); + var api = app.@gr.grnet.pithos.web.client.Pithos::getApiPath()(); + var folder = app.@gr.grnet.pithos.web.client.Pithos::getUploadFolder()(); + var owner = folder.@gr.grnet.pithos.web.client.foldertree.Folder::getOwner()(); + var uri = folder.@gr.grnet.pithos.web.client.foldertree.Folder::getUri()(); + var path = api + owner + uri; + for (var j=0; j