package org.activityinfo.ui.client.widget;
import com.google.gwt.aria.client.Roles;
import com.google.gwt.core.shared.GWT;
import com.google.gwt.event.logical.shared.ResizeEvent;
import com.google.gwt.event.logical.shared.ResizeHandler;
import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.AbsolutePanel;
import com.google.gwt.user.client.ui.IsWidget;
import com.google.gwt.user.client.ui.PopupPanel;
import com.google.gwt.user.client.ui.Widget;
import org.activityinfo.ui.client.style.BaseStylesheet;
/**
* ActivityInfo (will ultimately be) use a responsive, grid-based
* layout that has a natural web flow. However, for some cases,
* we really need a traditional application style layout that fits
* to the size of the window and use traditional desktop-style layout.
* <p/>
* <p>The idea is that those components will live in a popup over the
* rest of the document style layout.
*/
public class FullScreenOverlay {
public static final int LEFT_MARGIN = 64;
public static final int PADDING = 20;
public static final FullScreenBundle BUNDLE = GWT.create(FullScreenBundle.class);
private PopupPanel popupPanel;
private AbsolutePanel container;
private Widget widget;
public FullScreenOverlay() {
BaseStylesheet.INSTANCE.ensureInjected();
BUNDLE.style().ensureInjected();
}
public void show(IsWidget widget) {
this.widget = widget.asWidget();
container = new AbsolutePanel();
container.addStyleName(BaseStylesheet.CONTAINER_STYLE);
container.addStyleName(BUNDLE.style().container());
container.add(widget);
sizeContainer();
popupPanel = new PopupPanel(false);
popupPanel.setPopupPosition(LEFT_MARGIN, 0);
popupPanel.setWidget(container);
popupPanel.show();
Roles.getDialogRole().set(popupPanel.getElement());
Window.addResizeHandler(new ResizeHandler() {
Timer resizeTimer = new Timer() {
@Override
public void run() {
sizeContainer();
}
};
@Override
public void onResize(ResizeEvent event) {
resizeTimer.cancel();
resizeTimer.schedule(250);
}
});
}
private void sizeContainer() {
container.setWidth((Window.getClientWidth() - LEFT_MARGIN) + "px");
container.setHeight((Window.getClientHeight()) + "px");
container.setWidgetPosition(widget, PADDING, PADDING);
widget.setWidth((Window.getClientWidth() - LEFT_MARGIN - (PADDING * 2)) + "px");
widget.setHeight((Window.getClientHeight() - (PADDING * 2)) + "px");
}
public void hide() {
popupPanel.hide();
}
}