Statistics
| Branch: | Tag: | Revision:

root / src / gr / grnet / pithos / web / client / PithosDisclosurePanel.java @ d4ace10a

History | View | Annotate | Download (5.2 kB)

1
/*
2
 * Copyright 2012-2013 GRNET S.A. All rights reserved.
3
 *
4
 * Redistribution and use in source and binary forms, with or
5
 * without modification, are permitted provided that the following
6
 * conditions are met:
7
 *
8
 *   1. Redistributions of source code must retain the above
9
 *      copyright notice, this list of conditions and the following
10
 *      disclaimer.
11
 *
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.
16
 *
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.
29
 *
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.
34
 */
35

    
36
package gr.grnet.pithos.web.client;
37

    
38
import com.google.gwt.event.logical.shared.CloseEvent;
39
import com.google.gwt.event.logical.shared.CloseHandler;
40
import com.google.gwt.event.logical.shared.OpenEvent;
41
import com.google.gwt.event.logical.shared.OpenHandler;
42
import com.google.gwt.resources.client.ClientBundle;
43
import com.google.gwt.resources.client.CssResource;
44
import com.google.gwt.resources.client.ImageResource;
45
import com.google.gwt.user.client.ui.Composite;
46
import com.google.gwt.user.client.ui.DisclosurePanel;
47
import com.google.gwt.user.client.ui.HTML;
48
import com.google.gwt.user.client.ui.HasHorizontalAlignment;
49
import com.google.gwt.user.client.ui.HasVerticalAlignment;
50
import com.google.gwt.user.client.ui.HorizontalPanel;
51
import com.google.gwt.user.client.ui.Image;
52
import com.google.gwt.user.client.ui.Widget;
53

    
54
public class PithosDisclosurePanel extends Composite {
55

    
56
        public interface Style extends CssResource {
57
                String disclosurePanel();
58
                
59
                String header();
60
                
61
                String arrow();
62
                
63
                String content();
64
        }
65
        
66
        public interface Resources extends ClientBundle {
67
                @Source("PithosDisclosurePanel.css")
68
                Style pithosDisclosurePanelCss();
69
                
70
                @Source("upArrow.png")
71
                ImageResource icon();
72
                
73
                @Source("upArrow.png")
74
                ImageResource open();
75
                
76
                @Source("downArrow.png")
77
                ImageResource closed();
78

    
79
        @Source("gr/grnet/pithos/resources/ajax-loader.gif")
80
        ImageResource ajaxLoader();
81
        }
82
        
83
        DisclosurePanel panel;
84
        
85
        Resources resources;
86

    
87
    final boolean ajaxLoader;
88

    
89
    public PithosDisclosurePanel(final Resources _resources, final String title, boolean open) {
90
        this(_resources, title, open, false);
91
    }
92

    
93
        public PithosDisclosurePanel(final Resources _resources, final String title, boolean open, boolean ajaxLoader) {
94
        this.ajaxLoader = ajaxLoader;
95

    
96
                resources = _resources;
97
                resources.pithosDisclosurePanelCss().ensureInjected();
98
                panel = new DisclosurePanel();
99
                panel.addStyleName(resources.pithosDisclosurePanelCss().disclosurePanel());
100
                panel.setHeader(createHeader(resources, title, open));
101
                panel.setOpen(open);
102
                panel.addOpenHandler(new OpenHandler<DisclosurePanel>() {
103
                        
104
                        @Override
105
                        public void onOpen(OpenEvent<DisclosurePanel> event) {
106
                                panel.setHeader(createHeader(resources, title, true));
107
                        }
108
                });
109
                panel.addCloseHandler(new CloseHandler<DisclosurePanel>() {
110
                        
111
                        @Override
112
                        public void onClose(CloseEvent<DisclosurePanel> event) {
113
                                panel.setHeader(createHeader(resources, title, false));
114
                        }
115
                });
116
                
117
                initWidget(panel);
118
        }
119
        
120
        Widget createHeader(Resources resources, String title, boolean open) {
121
                HorizontalPanel header = new HorizontalPanel();
122
        
123
                Image img = new Image(resources.icon());
124
                header.add(img);
125
        if(ajaxLoader) {
126
            final Image alImg = new Image(resources.ajaxLoader());
127
            header.add(alImg);
128
        }
129
                header.setCellVerticalAlignment(img, HasVerticalAlignment.ALIGN_MIDDLE);
130
                header.setCellWidth(img, "32px");
131
                HTML titleHtml = new HTML(title);
132
                header.add(titleHtml);
133
                header.setCellVerticalAlignment(titleHtml, HasVerticalAlignment.ALIGN_MIDDLE);
134
                Image arrow = new Image(open ? resources.open() : resources.closed());
135
                arrow.addStyleName(resources.pithosDisclosurePanelCss().arrow());
136
                header.add(arrow);
137
                header.setCellHorizontalAlignment(arrow, HasHorizontalAlignment.ALIGN_RIGHT);
138
                header.setCellVerticalAlignment(arrow, HasVerticalAlignment.ALIGN_MIDDLE);
139
                
140
                header.addStyleName(resources.pithosDisclosurePanelCss().header());
141
                return header;
142
        }
143
        
144
        public void setContent(Widget widget) {
145
                panel.setContent(widget);
146
                panel.getContent().removeStyleName("content");
147
                panel.getContent().addStyleName(resources.pithosDisclosurePanelCss().content());
148
        }
149
}