Adjust page size in filelist as the list increases
[pithos-web-client] / src / gr / grnet / pithos / web / client / MessagePanel.java
1 /*\r
2  * Copyright 2011 GRNET S.A. All rights reserved.\r
3  *\r
4  * Redistribution and use in source and binary forms, with or\r
5  * without modification, are permitted provided that the following\r
6  * conditions are met:\r
7  *\r
8  *   1. Redistributions of source code must retain the above\r
9  *      copyright notice, this list of conditions and the following\r
10  *      disclaimer.\r
11  *\r
12  *   2. Redistributions in binary form must reproduce the above\r
13  *      copyright notice, this list of conditions and the following\r
14  *      disclaimer in the documentation and/or other materials\r
15  *      provided with the distribution.\r
16  *\r
17  * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS\r
18  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r
19  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\r
20  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR\r
21  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r
22  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
23  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF\r
24  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED\r
25  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r
26  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\r
27  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
28  * POSSIBILITY OF SUCH DAMAGE.\r
29  *\r
30  * The views and conclusions contained in the software and\r
31  * documentation are those of the authors and should not be\r
32  * interpreted as representing official policies, either expressed\r
33  * or implied, of GRNET S.A.\r
34  */\r
35 package gr.grnet.pithos.web.client;\r
36 \r
37 import gr.grnet.pithos.web.client.animation.FadeIn;\r
38 import gr.grnet.pithos.web.client.animation.FadeOut;\r
39 \r
40 import com.google.gwt.core.client.GWT;\r
41 import com.google.gwt.event.dom.client.ClickEvent;\r
42 import com.google.gwt.event.dom.client.ClickHandler;\r
43 import com.google.gwt.resources.client.ClientBundle;\r
44 import com.google.gwt.resources.client.ImageResource;\r
45 import com.google.gwt.user.client.DOM;\r
46 import com.google.gwt.user.client.ui.AbstractImagePrototype;\r
47 import com.google.gwt.user.client.ui.Composite;\r
48 import com.google.gwt.user.client.ui.HTML;\r
49 import com.google.gwt.user.client.ui.HasHorizontalAlignment;\r
50 import com.google.gwt.user.client.ui.HasVerticalAlignment;\r
51 import com.google.gwt.user.client.ui.HorizontalPanel;\r
52 import com.google.gwt.user.client.ui.SimplePanel;\r
53 \r
54 /**\r
55  * A panel that displays various system messages.\r
56  */\r
57 public class MessagePanel extends Composite {\r
58         /**\r
59          * An image bundle for this widget's images.\r
60          */\r
61         public interface Images extends ClientBundle {\r
62                 @Source("gr/grnet/pithos/resources/messagebox_info.png")\r
63                 ImageResource info();\r
64 \r
65                 @Source("gr/grnet/pithos/resources/messagebox_warning.png")\r
66                 ImageResource warn();\r
67 \r
68                 @Source("gr/grnet/pithos/resources/messagebox_critical.png")\r
69                 ImageResource error();\r
70         }\r
71 \r
72         /**\r
73          * The widget's images.\r
74          */\r
75         public static Images images;\r
76 \r
77         /**\r
78          * The system message to be displayed.\r
79          */\r
80         private HTML message = new HTML(" ");\r
81 \r
82         /**\r
83          * A link to clear the displayed message.\r
84          */\r
85         private HTML clearMessageLink = new HTML("<a class='pithos-clearMessage' href='javascript:;'>Clear</a>");\r
86 \r
87         /**\r
88          * The panel that contains the messages.\r
89          */\r
90         private HorizontalPanel inner = new HorizontalPanel();\r
91 \r
92         /**\r
93          * The panel that enables special effects for this widget.\r
94          */\r
95         protected SimplePanel simplePanel = new SimplePanel();\r
96 \r
97         /**\r
98          * The widget's constructor.\r
99          *\r
100          * @param newImages a bundle that provides the images for this widget\r
101          */\r
102         public MessagePanel(final Images newImages) {\r
103                 images = newImages;\r
104                 buildPanel();\r
105                 simplePanel.setStyleName("effectPanel");\r
106                 inner.setStyleName("effectPanel-inner");\r
107                 DOM.setStyleAttribute(simplePanel.getElement(), "zoom", "1");\r
108                 simplePanel.add(inner);\r
109                 initWidget(simplePanel);\r
110         }\r
111 \r
112         /**\r
113          * Build the panel that contains the icon, the message and the 'clear' link.\r
114          */\r
115         private void buildPanel() {\r
116                 inner.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_CENTER);\r
117                 inner.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE);\r
118                 inner.setSpacing(4);\r
119                 inner.add(message);\r
120                 inner.add(clearMessageLink);\r
121                 inner.setCellVerticalAlignment(message, HasVerticalAlignment.ALIGN_MIDDLE);\r
122                 clearMessageLink.addClickHandler(new ClickHandler() {\r
123 \r
124                         @Override\r
125                         public void onClick(@SuppressWarnings("unused") ClickEvent event) {\r
126                                 FadeOut anim = new FadeOut(simplePanel){\r
127                                         @Override\r
128                                         protected void onComplete() {\r
129                                                 super.onComplete();\r
130                                                 hideMessage();\r
131                                         }\r
132                                 };\r
133                                 anim.run(500);\r
134                         }\r
135                 });\r
136         }\r
137 \r
138         /**\r
139          * Display an error message.\r
140          *\r
141          * @param msg the message to display\r
142          */\r
143         public void displayError(final String msg) {\r
144                 GWT.log(msg, null);\r
145                 message = new HTML("<table class='pithos-errorMessage'><tr><td>" + AbstractImagePrototype.create(images.error()).getHTML() + "</td><td>" + msg + "</td></tr></table>");\r
146                 message.addClickHandler(new ClickHandler() {\r
147 \r
148                         @Override\r
149                         public void onClick(@SuppressWarnings("unused") ClickEvent event) {\r
150                                 FadeOut anim = new FadeOut(simplePanel){\r
151 \r
152                                         @Override\r
153                                         protected void onComplete() {\r
154                                                 super.onComplete();\r
155                                                 hideMessage();\r
156                                         }\r
157                                 };\r
158                                 anim.run(500);\r
159                         }\r
160                 });\r
161                 buildPanel();\r
162                 setVisible(true);\r
163                 FadeIn anim = new FadeIn(simplePanel);\r
164                 anim.run(500);\r
165         }\r
166 \r
167         /**\r
168          * Display a warning message.\r
169          *\r
170          * @param msg the message to display\r
171          */\r
172         public void displayWarning(final String msg) {\r
173                 message = new HTML("<table class='pithos-warnMessage'><tr><td>" + AbstractImagePrototype.create(images.warn()).getHTML() + "</td><td>" + msg + "</td></tr></table>");\r
174                 message.addClickHandler(new ClickHandler() {\r
175 \r
176                         @Override\r
177                         public void onClick(@SuppressWarnings("unused") ClickEvent event) {\r
178                                 FadeOut anim = new FadeOut(simplePanel){\r
179 \r
180                                         @Override\r
181                                         protected void onComplete() {\r
182                                                 super.onComplete();\r
183                                                 hideMessage();\r
184                                         }\r
185                                 };\r
186                                 anim.run(500);\r
187                         }\r
188                 });\r
189 \r
190                 buildPanel();\r
191                 setVisible(true);\r
192                 FadeIn anim = new FadeIn(simplePanel);\r
193                 anim.run(500);\r
194         }\r
195 \r
196         /**\r
197          * Display an informational message.\r
198          *\r
199          * @param msg the message to display\r
200          */\r
201         public void displayInformation(final String msg) {\r
202                 message = new HTML("<table class='pithos-infoMessage'><tr><td>" + AbstractImagePrototype.create(images.info()).getHTML() + "</td><td>" + msg + "</td></tr></table>");\r
203                 message.addClickHandler(new ClickHandler() {\r
204 \r
205                         @Override\r
206                         public void onClick(@SuppressWarnings("unused") ClickEvent event) {\r
207                                 FadeOut anim = new FadeOut(simplePanel){\r
208 \r
209                                         @Override\r
210                                         protected void onComplete() {\r
211                                                 super.onComplete();\r
212                                                 hideMessage();\r
213                                         }\r
214                                 };\r
215                                 anim.run(500);\r
216                         }\r
217                 });\r
218 \r
219                 buildPanel();\r
220                 setVisible(true);\r
221                 FadeIn anim = new FadeIn(simplePanel);\r
222                 anim.run(500);\r
223         }\r
224 \r
225         /**\r
226          * Clear the displayed message and hide the panel.\r
227          */\r
228         public void hideMessage() {\r
229                 inner.clear();\r
230                 message = new HTML("&nbsp;");\r
231                 this.setVisible(false);\r
232         }\r
233 \r
234 }\r