package org.geogebra.web.web.gui.dialog;
import org.geogebra.common.main.error.ErrorHandler;
import org.geogebra.web.html5.gui.FastButton;
import org.geogebra.web.html5.gui.FastClickHandler;
import org.geogebra.web.html5.gui.GDialogBox;
import org.geogebra.web.html5.gui.HasKeyboardPopup;
import org.geogebra.web.web.gui.browser.BrowseResources;
import org.geogebra.web.web.gui.util.StandardButton;
import com.google.gwt.event.dom.client.KeyCodes;
import com.google.gwt.event.logical.shared.ResizeEvent;
import com.google.gwt.event.logical.shared.ResizeHandler;
import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.Event.NativePreviewEvent;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.DialogBox;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.SimplePanel;
import com.google.gwt.user.client.ui.Widget;
/**
* A DialogBox for Web
*
*/
public class DialogBoxW extends GDialogBox {
private ErrorHandler eh;
FastButton cancelButton;
//private boolean hasOverlapFeature;
/**
* creates a {@link DialogBox}
* @param autoHide {@code true} if the dialog should be automatically hidden when the user clicks outside of it
* @param modal {@code true} if keyboard and mouse events for widgets not contained by the dialog should be ignored
*/
public DialogBoxW(boolean autoHide, boolean modal, ErrorHandler eh,
Panel root) {
super(autoHide, modal, root);
addResizeHandler();
this.addStyleName("DialogBox");
this.addStyleName("GeoGebraFrame");
this.setGlassEnabled(modal);
this.eh = eh;
}
/**
* creates a {@link DialogBox} with {@code autoHide = false} and {@code modal = true}.
*/
public DialogBoxW(Panel root) {
this(false, true, null, root);
}
/**
* close dialog on ESC
*/
@Override
protected void onPreviewNativeEvent(final NativePreviewEvent event) {
super.onPreviewNativeEvent(event);
if (event.getTypeInt() == Event.ONKEYUP && event.getNativeEvent().getKeyCode() == KeyCodes.KEY_ESCAPE) {
hide();
}
}
@Override
public void show(){
super.show();
if(eh != null){
eh.resetError();
}
}
/**
* add resizeHandler to center the dialog
*/
private void addResizeHandler() {
Window.addResizeHandler(new ResizeHandler() {
@Override
public void onResize(ResizeEvent event) {
if (DialogBoxW.this.isShowing()) {
if (!hasOverlapFeature
|| !(DialogBoxW.this instanceof HasKeyboardPopup)) {
centerAndResize(0);
}
}
}
});
}
/**
* closes the dialog
*/
protected void onCancel() {
hide();
}
/**
* Adds a little cross to cancel the dialog if there is already a panel
* attached to the Dialogbox. If the first child of the Dialogbox is not a
* Panel this will do nothing!
*
* Pulled up from SaveDialogW
*/
protected void addCancelButton() {
if (getWidget() instanceof Panel) {
SimplePanel cancel = new SimplePanel();
this.cancelButton = new StandardButton(
BrowseResources.INSTANCE.dialog_cancel());
this.cancelButton.addStyleName("cancelSaveButton");
this.cancelButton.addFastClickHandler(new FastClickHandler() {
@Override
public void onClick(Widget source) {
onCancel();
}
});
cancel.add(this.cancelButton);
((Panel) getWidget()).add(cancel);
}
}
}