title: GWT confirmation dialog box
body: <p>I'm trying to create a modal confirmation dialog box. I'd like it to work like <code>Window.confirm("")</code>, where I can just call it, and get a boolean response.  </p>
  
  <p>My trouble is I'm not sure how to do it.  I'm trying to use MVP in my application.  Here is the code I have so far:</p>
  
  <pre><code>public class DialogBoxPresenter implements Presenter {
  
      public interface Display {
  
          Label getDialogText();
  
          Button getAffirmativeButton();
  
          Button getCancelButton();
  
          Widget asWidget();
  
          public void center();
  
          public void hide();
  
          public void setHeader(String text);
      }
      private Display display;
      private String header;
      private String dialogText;
      private String cancelButtonText;
      private String affirmativeButtonText;
  
      protected DialogBoxPresenter() {
      }
  
      public DialogBoxPresenter(Display display, String header, String dialogText, String cancelButtonText, String affirmativeButtonText) {
          this.display = display;
          this.header = header;
          this.dialogText = dialogText;
          this.cancelButtonText = cancelButtonText;
          this.affirmativeButtonText = affirmativeButtonText;
  
          bind();
      }
  
      public DialogBoxPresenter(Display display, String header, String dialogText) {
          this.display = display;
          this.header = header;
          this.dialogText = dialogText;
          this.cancelButtonText = "Cancel";
          this.affirmativeButtonText = "OK";
  
          bind();
      }
  
      private void bind() {
  
          this.display.getDialogText().setText(dialogText);
          this.display.getAffirmativeButton().setText(affirmativeButtonText);
          this.display.getCancelButton().setText(cancelButtonText);
          this.display.setHeader(header);
  
          addClickHandlers();
  
      }
  
      private void addClickHandlers() {
          this.display.getAffirmativeButton().addClickHandler(new ClickHandler() {
  
              @Override
              public void onClick(ClickEvent event) {
                  doAffirmative();
              }
          });
  
          this.display.getCancelButton().addClickHandler(new ClickHandler() {
  
              @Override
              public void onClick(ClickEvent event) {
                  doCancel();
              }
          });
      }
  
      private void doAffirmative() {
          //do something
          display.hide();
      }
  
      private void doCancel() {
          //do something
          display.hide();
      }
  
      public void init() {
          display.center();
      }
  
      @Override
      public void go(HasWidgets container) {
          container.clear();
          container.add(display.asWidget());
      }
  }
  </code></pre>
  
  <p>and my view:</p>
  
  <pre><code>public class DialogBoxView extends DialogBox implements DialogBoxPresenter.Display {
  
      private Label dialogText;
      private Button affirmativeButton;
      private Button cancelButton;
      private VerticalPanel container;
  
      public DialogBoxView() {
          //init items
          dialogText = new Label();
  
          affirmativeButton = new Button();
          cancelButton = new Button();
  
          container = new VerticalPanel();
  
          setGlassEnabled(true);
          setAnimationEnabled(true);
          setModal(false);
  
          init();
      }
  
      private void init() {
          //add items
          container.add(dialogText);
  
          HorizontalPanel hp = new HorizontalPanel();
          hp.add(affirmativeButton);
          hp.add(cancelButton);
  
          container.add(hp);
          this.add(container);
      }
  
      @Override
      public Widget asWidget() {
          return this;
      }
  
      @Override
      public Label getDialogText() {
         return dialogText;
      }
  
      @Override
      public Button getAffirmativeButton() {
          return affirmativeButton;
      }
  
      @Override
      public Button getCancelButton() {
         return cancelButton;
      }
  
      @Override
      public void setHeader(String text) {
         this.setText(text);
      }
  
  }
  </code></pre>