Remove one constructor of PithosDisclosurePanel
[pithos-web-client] / src / gr / grnet / pithos / web / client / PithosDisclosurePanel.java
index bdfa793..e3294b0 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2012 GRNET S.A. All rights reserved.
+ * Copyright 2012-2013 GRNET S.A. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or
  * without modification, are permitted provided that the following
 
 package gr.grnet.pithos.web.client;
 
-import gr.grnet.pithos.web.client.grouptree.GroupTreeView;
-import gr.grnet.pithos.web.client.grouptree.GroupTreeView.Templates;
-
-import com.google.gwt.dom.client.Style;
 import com.google.gwt.event.logical.shared.CloseEvent;
 import com.google.gwt.event.logical.shared.CloseHandler;
 import com.google.gwt.event.logical.shared.OpenEvent;
@@ -46,18 +42,18 @@ import com.google.gwt.event.logical.shared.OpenHandler;
 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.CssResource.ImportedWithPrefix;
-import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
-import com.google.gwt.user.client.ui.AbstractImagePrototype;
-import com.google.gwt.user.client.ui.Composite;
-import com.google.gwt.user.client.ui.DisclosurePanel;
-import com.google.gwt.user.client.ui.HTML;
-import com.google.gwt.user.client.ui.IsWidget;
+import com.google.gwt.user.client.ui.*;
 
 public class PithosDisclosurePanel extends Composite {
 
        public interface Style extends CssResource {
                String disclosurePanel();
+               
+               String header();
+               
+               String arrow();
+               
+               String content();
        }
        
        public interface Resources extends ClientBundle {
@@ -72,43 +68,76 @@ public class PithosDisclosurePanel extends Composite {
                
                @Source("downArrow.png")
                ImageResource closed();
+
+        @Source("gr/grnet/pithos/resources/ajax-loader.gif")
+        ImageResource ajaxLoader();
        }
        
-       DisclosurePanel panel;
-       
-       public PithosDisclosurePanel(final Resources resources, final String title, boolean open) {
+       private final DisclosurePanel panel;
+    private final Resources resources;
+    private final String title;
+
+       public PithosDisclosurePanel(final Resources _resources, final String title, boolean ajaxLoader, boolean open) {
+        this.title = title;
+
+               this.resources = _resources;
                resources.pithosDisclosurePanelCss().ensureInjected();
-               panel = new DisclosurePanel();
+               this.panel = new DisclosurePanel();
                panel.addStyleName(resources.pithosDisclosurePanelCss().disclosurePanel());
-               panel.setHeader(createHeader(resources, title, open));
+               panel.setHeader(createHeader(resources, title, ajaxLoader, open));
                panel.setOpen(open);
-               panel.setAnimationEnabled(true);
-               panel.addOpenHandler(new OpenHandler<DisclosurePanel>() {
-                       
-                       @Override
-                       public void onOpen(OpenEvent<DisclosurePanel> event) {
-                               panel.setHeader(createHeader(resources, title, true));
-                       }
-               });
-               panel.addCloseHandler(new CloseHandler<DisclosurePanel>() {
-                       
-                       @Override
-                       public void onClose(CloseEvent<DisclosurePanel> event) {
-                               panel.setHeader(createHeader(resources, title, false));
-                       }
-               });
+
+        if(!ajaxLoader) {
+            addOpenCloseHandlers();
+        }
+
                initWidget(panel);
        }
+
+    private void addOpenCloseHandlers() {
+        panel.addOpenHandler(new OpenHandler<DisclosurePanel>() {
+            @Override
+            public void onOpen(OpenEvent<DisclosurePanel> event) {
+                panel.setHeader(createHeader(resources, title, false, true));
+            }
+        });
+        panel.addCloseHandler(new CloseHandler<DisclosurePanel>() {
+
+            @Override
+            public void onClose(CloseEvent<DisclosurePanel> event) {
+                panel.setHeader(createHeader(resources, title, false, false));
+            }
+        });
+    }
+
+    public void setLoaded(boolean open) {
+        this.panel.setHeader(createHeader(resources, title, false, open));
+        addOpenCloseHandlers();
+    }
        
-       HTML createHeader(Resources resources, String title, boolean open) {
-        SafeHtmlBuilder sb = new SafeHtmlBuilder();
-        sb.appendHtmlConstant(AbstractImagePrototype.create(resources.icon()).getHTML()).appendHtmlConstant("&nbsp;");
-        sb.append(Templates.INSTANCE.nameSpan(title));
-        sb.appendHtmlConstant(AbstractImagePrototype.create(open ? resources.open() : resources.closed()).getHTML());
-        return new HTML(sb.toSafeHtml());
+       Widget createHeader(Resources resources, String title, boolean ajaxLoader, boolean open) {
+               HorizontalPanel header = new HorizontalPanel();
+        
+               Image img = new Image(resources.icon());
+               header.add(img);
+               header.setCellVerticalAlignment(img, HasVerticalAlignment.ALIGN_MIDDLE);
+               header.setCellWidth(img, "32px");
+               HTML titleHtml = new HTML(title);
+               header.add(titleHtml);
+               header.setCellVerticalAlignment(titleHtml, HasVerticalAlignment.ALIGN_MIDDLE);
+               Image arrow = new Image(ajaxLoader ? resources.ajaxLoader() : open ? resources.open() : resources.closed());
+               arrow.addStyleName(resources.pithosDisclosurePanelCss().arrow());
+               header.add(arrow);
+               header.setCellHorizontalAlignment(arrow, HasHorizontalAlignment.ALIGN_RIGHT);
+               header.setCellVerticalAlignment(arrow, HasVerticalAlignment.ALIGN_MIDDLE);
+               
+               header.addStyleName(resources.pithosDisclosurePanelCss().header());
+               return header;
        }
        
-       public void add(IsWidget widget) {
-               panel.add(widget);
+       public void setContent(Widget widget) {
+               panel.setContent(widget);
+               panel.getContent().removeStyleName("content");
+               panel.getContent().addStyleName(resources.pithosDisclosurePanelCss().content());
        }
 }