GWT confirmation dialog box

前端 未结 2 1968
小蘑菇
小蘑菇 2021-02-19 23:17

I\'m trying to create a modal confirmation dialog box. I\'d like it to work like Window.confirm(\"\"), where I can just call it, and get a boolean response.

2条回答
  •  伪装坚强ぢ
    2021-02-19 23:42

    Here is the code I have working if anyone is curious.

        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;
            private ConfirmDialogCallback confirmCallback;
            private AlertDialogCallback alertCallback;
    
            protected DialogBoxPresenter() {
            }
    
            public DialogBoxPresenter(Display display, String header, String dialogText, String cancelButtonText, String affirmativeButtonText, ConfirmDialogCallback callback) {
                this.display = display;
                this.header = header;
                this.dialogText = dialogText;
                this.cancelButtonText = cancelButtonText;
                this.affirmativeButtonText = affirmativeButtonText;
                this.confirmCallback = callback;
    
                bind();
            }
    
            public DialogBoxPresenter(Display display, String header, String dialogText, String affirmativeButtonText, AlertDialogCallback callback) {
                this.display = display;
                this.header = header;
                this.dialogText = dialogText;
                this.affirmativeButtonText = affirmativeButtonText;
                this.alertCallback = callback;
    
                this.display.getCancelButton().setVisible(false);
    
                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() {
                if (confirmCallback != null) {
                    confirmCallback.onAffirmative();
                } else {
                    alertCallback.onAffirmative();
                }
                display.hide();
            }
    
            private void doCancel() {
                confirmCallback.onCancel();
                display.hide();
            }
    
            public void init() {
                display.center();
            }
    
            @Override
            public void go(HasWidgets container) {
                container.clear();
                container.add(display.asWidget());
            }
        }
    
    
    
    
        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);
            }
    
        }
    
    
        public class DialogBoxWidget implements LensooConstant {
    
            private static DialogBoxView view = null;
            private static DialogBoxPresenter presenter = null;
    
            public static DialogBoxPresenter confirm(String header, String dialogText, String cancelButtonText, String affirmativeButtonText, ConfirmDialogCallback callback) {
                view = new DialogBoxView();
                presenter = new DialogBoxPresenter(view, header, dialogText, cancelButtonText, affirmativeButtonText, callback);
    
                presenter.init();
    
                return presenter;
            }
    
            public static DialogBoxPresenter confirm(String header, String dialogText, ConfirmDialogCallback callback) {
                return DialogBoxWidget.confirm(header, dialogText, constants.cancelButton(), constants.okButton(), callback);
            }
    
            public static DialogBoxPresenter alert(String header, String dialogText, String affirmativeButtonText, AlertDialogCallback callback) {
                view = new DialogBoxView();
                presenter = new DialogBoxPresenter(view, header, dialogText, affirmativeButtonText, callback);
    
                presenter.init();
    
                return presenter;
            }
    
            public static DialogBoxPresenter alert(String header, String dialogText, AlertDialogCallback callback) {
                return DialogBoxWidget.alert(header, dialogText, constants.okButton(), callback);
            }
    
            protected DialogBoxWidget() {
            }
        }
    
    public interface AlertDialogCallback {
    
        void onAffirmative();
    
    }
    
    public interface ConfirmDialogCallback {
    
        void onAffirmative();
    
        void onCancel();
    }
    

提交回复
热议问题