X-Git-Url: https://code.grnet.gr/git/pithos-web-client/blobdiff_plain/8e61880b2a568612c6d7cf518e42039a0e6709c6..d18749bcd6213ca1173ac91645c3a6c3594256ac:/src/gr/grnet/pithos/web/client/foldertree/FolderTreeView.java diff --git a/src/gr/grnet/pithos/web/client/foldertree/FolderTreeView.java b/src/gr/grnet/pithos/web/client/foldertree/FolderTreeView.java index ff807c0..2f86a37 100644 --- a/src/gr/grnet/pithos/web/client/foldertree/FolderTreeView.java +++ b/src/gr/grnet/pithos/web/client/foldertree/FolderTreeView.java @@ -1,110 +1,229 @@ /* - * Copyright (c) 2011 Greek Research and Technology Network + * Copyright 2011-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.foldertree; -import com.google.gwt.cell.client.AbstractCell; +import gr.grnet.pithos.web.client.FolderContextMenu; +import gr.grnet.pithos.web.client.PithosDisclosurePanel; +import gr.grnet.pithos.web.client.TreeView; + import com.google.gwt.core.client.GWT; -import com.google.gwt.resources.client.ClientBundle; +import com.google.gwt.i18n.client.NumberFormat; import com.google.gwt.resources.client.ImageResource; import com.google.gwt.resources.client.ImageResource.ImageOptions; +import com.google.gwt.resources.client.ImageResource.RepeatStyle; import com.google.gwt.safehtml.client.SafeHtmlTemplates; import com.google.gwt.safehtml.shared.SafeHtml; -import com.google.gwt.safehtml.shared.SafeHtmlBuilder; import com.google.gwt.user.cellview.client.CellTree; import com.google.gwt.user.cellview.client.HasKeyboardSelectionPolicy.KeyboardSelectionPolicy; -import com.google.gwt.user.client.Event; -import com.google.gwt.user.client.ui.AbstractImagePrototype; +import com.google.gwt.user.cellview.client.TreeNode; +import com.google.gwt.user.client.Command; import com.google.gwt.user.client.ui.Composite; +import com.google.gwt.user.client.ui.HTML; +import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.Tree; -import com.google.gwt.view.client.SelectionChangeEvent; -import com.google.gwt.view.client.SelectionChangeEvent.Handler; -import com.google.gwt.view.client.SingleSelectionModel; -import com.google.gwt.view.client.TreeViewModel.NodeInfo; -import gr.grnet.pithos.web.client.FolderContextMenu; -import gr.grnet.pithos.web.client.GSS; -import gwtquery.plugins.droppable.client.gwt.DragAndDropCellTree; +import com.google.gwt.user.client.ui.VerticalPanel; + +public class FolderTreeView extends Composite implements TreeView { + + public boolean isFolderOpen(Folder folder) { + TreeNode root = ((CellTree) getWidget()).getRootTreeNode(); + return isFolderOpen(root, folder); + } + + private boolean isFolderOpen(TreeNode node, Folder folder) { + for (int i=0; i{0}") + @Template("{0}") public SafeHtml nameSpan(String name); - } - static class FolderCell extends AbstractCell { + @Template("{0}") + public SafeHtml imageSpan(String name); + } - @Override - public void render(Context context, Folder folder, SafeHtmlBuilder safeHtmlBuilder) { - String html = AbstractImagePrototype.create(images.folderYellow()).getHTML(); - safeHtmlBuilder.appendHtmlConstant(html); - safeHtmlBuilder.append(Templates.INSTANCE.nameSpan(folder.getName())); - } + interface Resources extends gr.grnet.pithos.web.client.PithosDisclosurePanel.Resources { + @Override + @Source("gr/grnet/pithos/resources/home22.png") + ImageResource icon(); } - private SingleSelectionModel selectionModel = new SingleSelectionModel(); + private FolderTreeViewModel model; + + private CellTree tree; + + private HTML usedBytes; + + private HTML totalBytes; + + private HTML usedPercent; + + public FolderTreeView(FolderTreeViewModel viewModel) { + this.model = viewModel; - public FolderTreeView() { - final FolderTreeViewModel model = new FolderTreeViewModel(selectionModel); + PithosDisclosurePanel panel = new PithosDisclosurePanel((Resources) GWT.create(Resources.class), "My Files", true); + + VerticalPanel content = new VerticalPanel(); + /* * Create the tree using the model. We use null as the default * value of the root node. The default value will be passed to * CustomTreeModel#getNodeInfo(); */ CellTree.Resources res = GWT.create(BasicResources.class); - DragAndDropCellTree tree = new DragAndDropCellTree(model,null, res); - + tree = new CellTree(model, null, res); tree.setKeyboardSelectionPolicy(KeyboardSelectionPolicy.ENABLED); + content.add(tree); + + HorizontalPanel separator = new HorizontalPanel(); + separator.addStyleName("pithos-statisticsSeparator"); + content.add(separator); + + HorizontalPanel statistics = new HorizontalPanel(); + statistics.addStyleName("pithos-statistics"); + statistics.add(new HTML("Used: ")); + usedBytes = new HTML(); + statistics.add(usedBytes); + statistics.add(new HTML(" of ")); + totalBytes = new HTML(); + statistics.add(totalBytes); + statistics.add(new HTML(" (")); + usedPercent = new HTML(); + statistics.add(usedPercent); + statistics.add(new HTML(")")); + content.add(statistics); + + panel.setContent(content); + initWidget(panel); + } - Handler selectionHandler = new SelectionChangeEvent.Handler() { - @Override - public void onSelectionChange(com.google.gwt.view.client.SelectionChangeEvent event) { - NodeInfo nodeInfo = (NodeInfo) model.getNodeInfo(selectionModel.getSelectedObject()); - if(nodeInfo == null || nodeInfo.getValueUpdater() == null) { - //GSS.get().showFileList(selectionModel.getSelectedObject()); - } - else - nodeInfo.getValueUpdater().update(selectionModel.getSelectedObject()); - GSS.get().setCurrentSelection(selectionModel.getSelectedObject()); + @Override + public Folder getSelection() { + return model.getSelection(); + } - } - }; - selectionModel.addSelectionChangeHandler(selectionHandler); - sinkEvents(Event.ONCONTEXTMENU); - sinkEvents(Event.ONMOUSEUP); - initWidget(tree); + public void updateFolder(Folder folder, boolean showfiles, Command callback, final boolean openParent) { + model.updateFolder(folder, showfiles, callback, openParent); } + + public void showStatistics(AccountResource account) { + usedBytes.setHTML(String.valueOf(account.getFileSizeAsString())); + totalBytes.setHTML(String.valueOf(account.getQuotaAsString())); + NumberFormat nf = NumberFormat.getPercentFormat(); + usedPercent.setHTML(nf.format(account.getUsedPercentage())); + } }