Statistics
| Branch: | Tag: | Revision:

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

History | View | Annotate | Download (4.7 kB)

1
/*
2
 * Copyright 2012 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
        
80
        DisclosurePanel panel;
81
        
82
        Resources resources;
83
        
84
        public PithosDisclosurePanel(final Resources _resources, final String title, boolean open) {
85
                resources = _resources;
86
                resources.pithosDisclosurePanelCss().ensureInjected();
87
                panel = new DisclosurePanel();
88
                panel.addStyleName(resources.pithosDisclosurePanelCss().disclosurePanel());
89
                panel.setHeader(createHeader(resources, title, open));
90
                panel.setOpen(open);
91
                panel.addOpenHandler(new OpenHandler<DisclosurePanel>() {
92
                        
93
                        @Override
94
                        public void onOpen(OpenEvent<DisclosurePanel> event) {
95
                                panel.setHeader(createHeader(resources, title, true));
96
                        }
97
                });
98
                panel.addCloseHandler(new CloseHandler<DisclosurePanel>() {
99
                        
100
                        @Override
101
                        public void onClose(CloseEvent<DisclosurePanel> event) {
102
                                panel.setHeader(createHeader(resources, title, false));
103
                        }
104
                });
105
                
106
                initWidget(panel);
107
        }
108
        
109
        Widget createHeader(Resources resources, String title, boolean open) {
110
                HorizontalPanel header = new HorizontalPanel();
111
        
112
                Image img = new Image(resources.icon());
113
                header.add(img);
114
                header.setCellVerticalAlignment(img, HasVerticalAlignment.ALIGN_MIDDLE);
115
                header.setCellWidth(img, "32px");
116
                HTML titleHtml = new HTML(title);
117
                header.add(titleHtml);
118
                header.setCellVerticalAlignment(titleHtml, HasVerticalAlignment.ALIGN_MIDDLE);
119
                Image arrow = new Image(open ? resources.open() : resources.closed());
120
                arrow.addStyleName(resources.pithosDisclosurePanelCss().arrow());
121
                header.add(arrow);
122
                header.setCellHorizontalAlignment(arrow, HasHorizontalAlignment.ALIGN_RIGHT);
123
                header.setCellVerticalAlignment(arrow, HasVerticalAlignment.ALIGN_MIDDLE);
124
                
125
                header.addStyleName(resources.pithosDisclosurePanelCss().header());
126
                return header;
127
        }
128
        
129
        public void setContent(Widget widget) {
130
                panel.setContent(widget);
131
                panel.getContent().removeStyleName("content");
132
                panel.getContent().addStyleName(resources.pithosDisclosurePanelCss().content());
133
        }
134
}