Advertisement
mitrakov

GWT OkCancel Dialog

Sep 4th, 2019
402
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.72 KB | None | 0 0
  1. import java.util.Optional;
  2. import java.util.function.BiConsumer;
  3. import com.google.gwt.user.client.ui.*;
  4. import com.google.gwt.user.client.Event;
  5. import com.google.gwt.event.dom.client.*;
  6.  
  7. @SuppressWarnings({"OptionalUsedAsFieldOrParameterType", "WeakerAccess", "unused"})
  8. public class OkCancelDialog<T extends Widget> extends DialogBox {
  9.     protected final T widget;
  10.     protected final BiConsumer<T, OkCancelDialog<T>> onClick;
  11.     protected final Button btnOk;
  12.     protected Optional<Focusable> onCloseFocusedWidget = Optional.empty();
  13.  
  14.     public OkCancelDialog(String title, T widget, BiConsumer<T, OkCancelDialog<T>> onClick) {
  15.         this.widget = widget;
  16.         this.onClick = onClick;
  17.  
  18.         final VerticalPanel mainPanel = new VerticalPanel();
  19.         final Panel buttonsPanel = new HorizontalPanel();
  20.  
  21.         btnOk = new Button("OK", (ClickHandler) e -> onClick.accept(widget, this));
  22.  
  23.         mainPanel.setHorizontalAlignment(VerticalPanel.ALIGN_RIGHT);
  24.         mainPanel.add(new Anchor("×", "#") {{addClickHandler(e -> hide()); setStyleName("mg-CloseButton");}});
  25.         mainPanel.add(widget);
  26.         mainPanel.add(new HTML("<hr/>"));
  27.         mainPanel.add(buttonsPanel);
  28.  
  29.         buttonsPanel.setStyleName("buttons-panel");
  30.         buttonsPanel.add(btnOk);
  31.  
  32.         setText(title);
  33.         setWidget(mainPanel);
  34.     }
  35.  
  36.     public OkCancelDialog withOnCloseFocusable(Focusable widget) {
  37.         onCloseFocusedWidget = Optional.of(widget);
  38.         return this;
  39.     }
  40.  
  41.     public OkCancelDialog withButtonText(String text) {
  42.         btnOk.setText(text);
  43.         return this;
  44.     }
  45.  
  46.     @Override
  47.     public void show() {
  48.         super.show();
  49.         if (widget instanceof Focusable)
  50.             ((Focusable) widget).setFocus(true);
  51.     }
  52.  
  53.     @Override
  54.     public void center() {
  55.         super.center();
  56.         if (widget instanceof Focusable)
  57.             ((Focusable) widget).setFocus(true);
  58.     }
  59.  
  60.     @Override
  61.     public void hide() {
  62.         super.hide();
  63.         onCloseFocusedWidget.ifPresent(f -> f.setFocus(true));
  64.     }
  65.  
  66.     @Override
  67.     protected void onPreviewNativeEvent(Event.NativePreviewEvent event) {
  68.         super.onPreviewNativeEvent(event);
  69.         if (event.getTypeInt() == Event.ONKEYDOWN) {
  70.             final int code = event.getNativeEvent().getKeyCode();
  71.             switch (code) {
  72.                 case KeyCodes.KEY_ENTER: btnOk.click(); break;
  73.                 case KeyCodes.KEY_ESCAPE: hide(); break;
  74.             }
  75.         }
  76.     }
  77. }
  78.  
  79. /*
  80. .mg-CloseButton, .mg-CloseButton:visited, .mg-CloseButton:hover {
  81.   color: aliceblue;
  82.   float: right;
  83.   display: block;
  84.   margin-top: -52px;
  85.   font-size: 2.5rem;
  86.   padding-right: .3rem;
  87.   text-decoration: none;
  88. }
  89. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement