de.swm.commons.mobile.client.widgets.NotificationBox Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of swm-mobile Show documentation
Show all versions of swm-mobile Show documentation
GWT Bibliothek fuer Mobile Plattformen der SWM
package de.swm.commons.mobile.client.widgets;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.ui.*;
import de.swm.commons.mobile.client.SWMMobile;
import de.swm.commons.mobile.client.theme.components.NotificationBoxCss;
import de.swm.commons.mobile.client.theme.components.TransitionsCss;
import de.swm.commons.mobile.client.utils.IsSWMMobileWidgetHelper;
import de.swm.commons.mobile.client.widgets.itf.IsSWMMobileWidget;
import java.util.Iterator;
/**
* A notification box wich displays a message at the botton of the Page. Will showup for 5 seconds and fadeout
* automatically after this time period.
*
* Useag
* NotificationBox.showPopupDialog(container, "Message1", "Message2");
*
* @author Daniel Wiese
*/
public class NotificationBox extends Composite implements HasWidgets, IsSWMMobileWidget {
/**
* There should only be one NotificationBox!
*/
public static NotificationBox HIGH_LANDER;
private static final int DEFAULT_DELAY = 10;
private static final int FADE_IN_AFTER_MS = 1000;
private static final int FADE_OUT_AFTER_MS = 5000;
private static final int FADE_OUT_DURATION = 1000;
protected final FlowPanel slideUpPanel;
private final FlowPanel container;
protected HasWidgets panelToOverlay;
protected final NotificationBoxCss css;
protected final Anchor closeButton;
private boolean isVisible = false;
private final IsSWMMobileWidgetHelper myWidgetHelper = new IsSWMMobileWidgetHelper();
/**
* Construct a popin dialog
*/
public NotificationBox() {
this.css = SWMMobile.getTheme().getMGWTCssBundle().getNotificationBox();
slideUpPanel = new FlowPanel();
slideUpPanel.addStyleName(css.animationContainerCenter());
container = new FlowPanel();
container.addStyleName(css.getBottomPanel());
closeButton = new Anchor();
closeButton.setStyleName(css.getCloseLink());
container.add(closeButton);
slideUpPanel.add(container);
initWidget(slideUpPanel);
}
/**
* Wil show the notificationf or 5 secs.
*
* @param toAdd
*/
public void addText(String toAdd) {
this.add(new Label(toAdd));
}
/**
* Will perform a smmoth fadeout.
*
* @param containerForThisWidget
*/
private void fadeOut(final HasWidgets containerForThisWidget) {
final TransitionsCss transitionsCss = SWMMobile.getTheme().getMGWTCssBundle().getTransitionsCss();
//Opacity 0 --> unvisible
new Timer() {
@Override
public void run() {
container.addStyleName(transitionsCss.in());
container.addStyleName(transitionsCss.fade());
new Timer() {
@Override
public void run() {
container.removeStyleName(transitionsCss.in());
container.removeStyleName(transitionsCss.fade());
containerForThisWidget.remove(NotificationBox.this);
isVisible = false;
}
}.schedule(FADE_OUT_DURATION);
}
}.schedule(DEFAULT_DELAY);
}
/*
* (non-Javadoc)
* @see com.google.gwt.user.client.ui.HasWidgets#add(com.google.gwt.user.client.ui.Widget)
*/
/**
* {@inheritDoc}
*/
@Override
public void add(Widget w) {
container.add(w);
}
/*
* (non-Javadoc)
* @see com.google.gwt.user.client.ui.HasWidgets#clear()
*/
/**
* {@inheritDoc}
*/
@Override
public void clear() {
container.clear();
}
/*
* (non-Javadoc)
* @see com.google.gwt.user.client.ui.HasWidgets#iterator()
*/
/**
* {@inheritDoc}
*/
@Override
public Iterator iterator() {
return container.iterator();
}
/*
* (non-Javadoc)
* @see com.google.gwt.user.client.ui.HasWidgets#remove(com.google.gwt.user.client.ui.Widget)
*/
/**
* {@inheritDoc}
*/
@Override
public boolean remove(Widget w) {
return container.remove(w);
}
/**
* Set the area to cover
*
* @param widgetToCover the widet to cover
*/
public void setPanelToOverlay(HasWidgets widgetToCover) {
setPanelToOverlay(widgetToCover);
}
/**
* get the panel that the dialog overlays
*
* @return the panel that is overlayed by this dialog
*/
public HasWidgets getPanelToOverlay() {
if (panelToOverlay == null) {
panelToOverlay = RootPanel.get();
}
return panelToOverlay;
}
/**
* Returns true if this notification is currently visible.
*
* @return true if visible
*/
public boolean isVisible() {
return isVisible;
}
/**
* When the widget is loaded first time.
*/
@Override
public void onInitialLoad() {
}
/**
* When an transition containing this widget ends.
*/
@Override
public void onTransitionEnd() {
}
/**
* Will set the secondary style.
*
* @param style the style to set.
*/
@Override
public void setSecondaryStyle(String style) {
myWidgetHelper.setSecondaryStyle(this, style);
}
/**
* Defines if the notificationbox should have a close button or not.
* @param show .
* @param containerForThisWidget .
*/
public void showCloseButton(boolean show, final HasWidgets containerForThisWidget) {
this.closeButton.setVisible(show);
if (show) {
closeButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent clickEvent) {
fadeOut(containerForThisWidget);
}
});
}
}
/**
* Will dispay a notification for 5 seconds and hide it again.
* @param containerForThisWidget the container (may outer HTML pannel of a Page)
* @param messages messages to display
*/
public static void showPopupDialog(final HasWidgets containerForThisWidget, final String... messages) {
showPopupDialog(containerForThisWidget, FADE_IN_AFTER_MS, FADE_OUT_AFTER_MS, false, messages);
}
/**
* Will display a notification box, which will fade in and out after a specified time.
* @param containerForThisWidget -
* @param fadeInAfter .
* @param fadeOutAfter .
* @param messages .
*/
public static void showPopupDialog(final HasWidgets containerForThisWidget, final int fadeInAfter,
final int fadeOutAfter, final String... messages) {
showPopupDialog(containerForThisWidget, fadeInAfter, fadeOutAfter, false, messages);
}
/**
* Will display a notification box, which will fade in and out after a specified time and defines if it should
* have a close button or not.
* @param containerForThisWidget .
* @param fadeInAfter .
* @param fadeOutAfter .
* @param showCloseButton .
* @param messages .
*/
public static void showPopupDialog(final HasWidgets containerForThisWidget, final int fadeInAfter,
final int fadeOutAfter, final boolean showCloseButton, final String... messages) {
if (HIGH_LANDER != null) {
HIGH_LANDER.fadeOut(containerForThisWidget);
}
new Timer() {
@Override
public void run() {
final NotificationBox popinDialog = new NotificationBox();
HIGH_LANDER = popinDialog;
popinDialog.showCloseButton(showCloseButton, containerForThisWidget);
for (String message : messages) {
popinDialog.add(new Label(message));
}
containerForThisWidget.add(popinDialog);
new Timer() {
@Override
public void run() {
popinDialog.fadeOut(containerForThisWidget);
//goTo(getView(), Transition.SLIDEDOWN, Direction.LEFT, null);
}
}.schedule(fadeOutAfter);
}
}.schedule(fadeInAfter);
}
}