package com.baselet.gwt.client.view.widgets; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.event.dom.client.KeyCodes; import com.google.gwt.event.dom.client.KeyPressEvent; import com.google.gwt.event.dom.client.KeyPressHandler; 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.Button; import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.TextBox; public class SaveDialogBox extends MyPopupPanel { public static interface Callback { void callback(String chosenName); } private final TextBox textBox = new TextBox(); private final Button saveButton = new Button("Save"); private final Button cancelButton = new Button("Cancel"); public SaveDialogBox(final Callback callback, String headerText) { super(true, Type.POPUP); initSaveDialogBox(callback, headerText); } public SaveDialogBox(final Callback callback) { super(true, Type.POPUP); initSaveDialogBox(callback, "Save Diagram"); } private void initSaveDialogBox(final Callback callback, String headerText) { setHeader(headerText); textBox.addKeyPressHandler(new KeyPressHandler() { @Override public void onKeyPress(KeyPressEvent event) { if (event.getNativeEvent().getKeyCode() == KeyCodes.KEY_ENTER) { submitDialog(callback); } } }); saveButton.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { submitDialog(callback); } }); cancelButton.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { hide(); } }); FlowPanel panel = new FlowPanel(); panel.add(new HTML("Please choose a name")); panel.add(textBox); FlowPanel fp = new FlowPanel(); fp.add(saveButton); fp.add(cancelButton); panel.add(fp); setWidget(panel); } private void submitDialog(final Callback callback) { if (textBox.getText().isEmpty()) { Window.alert("You must enter a name to save the diagram"); } else { hide(); callback.callback(textBox.getText()); } } public void clearAndCenter() { center(); textBox.setFocus(true); textBox.selectAll(); } /** * pressing ESC closes the dialogbox */ @Override protected void onPreviewNativeEvent(NativePreviewEvent event) { super.onPreviewNativeEvent(event); if (event.getTypeInt() == Event.ONKEYDOWN && event.getNativeEvent().getKeyCode() == KeyCodes.KEY_ESCAPE) { hide(); } } }