Package com.google.gwt.museum.client.defaultmuseum

Source Code of com.google.gwt.museum.client.defaultmuseum.VisualsForDialogBox

/*
* Copyright 2009 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.google.gwt.museum.client.defaultmuseum;

import com.google.gwt.dom.client.Document;
import com.google.gwt.dom.client.Element;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.MouseDownEvent;
import com.google.gwt.event.dom.client.MouseDownHandler;
import com.google.gwt.museum.client.common.AbstractIssue;
import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.DialogBox;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.SimplePanel;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;

import java.util.HashMap;
import java.util.Map;

/**
* Verify that events fire in all browsers.
*/
public class VisualsForDialogBox extends AbstractIssue {

  enum VisibleEvents {
    mouseDown, mouseEnter, mouseLeave, mouseMove, mouseUp, captionMouseDown
  }

  private final class VisibleDialogBox extends DialogBox {
    private FlexTable layout = null;

    private final Map<VisibleEvents, Element> eventToElement = new HashMap<VisibleEvents, Element>();

    private boolean maybeClose;

    public VisibleDialogBox() {
      this(false);
    }

    public VisibleDialogBox(boolean autoHide) {
      this(autoHide, true);
    }

    public VisibleDialogBox(boolean autoHide, boolean modal) {
      super(autoHide, modal);
      layout = new FlexTable();
      layout.setCellPadding(3);
      layout.setBorderWidth(2);
      layout.setHTML(0, 0, "<b>VisibleEvents</b>");
      layout.setHTML(0, 1, "<b>Status</b>");

      final String style = "float:right; border: 1px solid blue; color:blue;"
          + "font-weight:bold; font-size:85%";
      setHTML("I Gots a Close Box<div id='vis-closebox' style='" + style
          + "'>&nbsp;X&nbsp;</div>");

      for (VisibleEvents e : VisibleEvents.values()) {
        eventToElement.put(e, addResultRow(e.name()));
      }
      add(layout);
    }

    @Override
    public void onBrowserEvent(Event event) {
      switch (event.getTypeInt()) {
        case Event.ONMOUSEDOWN:
          if (isCloseBoxEvent(event)) {
            maybeClose = true;
            return;
          }
          break;
        case Event.ONMOUSEUP:
          if (maybeClose && isCloseBoxEvent(event)) {
            maybeClose = false;
            hide();
            return;
          }
          break;
      }
      maybeClose = false;
      super.onBrowserEvent(event);
    }

    @SuppressWarnings("deprecation")
    @Override
    public void onMouseDown(Widget sender, int x, int y) {
      pass(VisibleEvents.mouseDown);
      super.onMouseDown(sender, x, y);
    }

    @SuppressWarnings("deprecation")
    @Override
    public void onMouseEnter(Widget sender) {
      pass(VisibleEvents.mouseEnter);
      sender.getElement().getStyle().setProperty("background", "yellow");
      super.onMouseEnter(sender);
    }

    @SuppressWarnings("deprecation")
    @Override
    public void onMouseLeave(Widget sender) {
      pass(VisibleEvents.mouseLeave);
      sender.getElement().getStyle().setProperty("background", "");
      super.onMouseLeave(sender);
    }

    @SuppressWarnings("deprecation")
    @Override
    public void onMouseMove(Widget sender, int x, int y) {
      pass(VisibleEvents.mouseMove);
      super.onMouseMove(sender, x, y);
    }

    @SuppressWarnings("deprecation")
    @Override
    public void onMouseUp(Widget sender, int x, int y) {
      pass(VisibleEvents.mouseUp);
      super.onMouseUp(sender, x, y);
    }

    public void pass(VisibleEvents event) {
      eventToElement.get(event).setInnerHTML(
          "<span style='color:green'>pass</span>");
    }

    private Element addResultRow(String eventName) {
      int row = layout.getRowCount();
      layout.setHTML(row, 0, eventName);
      layout.setHTML(row, 1, "<span style='color:red'>?</span>");
      Element cell = layout.getCellFormatter().getElement(row, 1);
      return cell;
    }

    private boolean isCloseBoxEvent(Event event) {
      return Document.get().getElementById("vis-closebox").isOrHasChild(
          event.getTarget());
    }
  }

  @Override
  public Widget createIssue() {
    // Create a few extra dialog boxes
    final DialogBox dialog0 = showCustomDialog(true, true, false, "Dialog 0",
        "I cannot be dragged or closed until Dialog 2 is closed", 0, 100);
    final DialogBox dialog1 = showCustomDialog(true, false, false, "Dialog 1",
        "I cannot be dragged or closed until Dialog 2 is closed", 0, 200);
    final DialogBox dialog2 = showCustomDialog(false, false, true, "Dialog 2",
        "I can be dragged", 0, 300);
    final DialogBox dialog3 = showCustomDialog(
        true,
        false,
        false,
        "Dialog 3",
        "I should auto close as soon as you click outside of me and Dialog 4 or greater",
        0, 400);
    final DialogBox dialog4 = showCustomDialog(false, false, false, "Dialog 4",
        "I can be dragged", 0, 500);

    final VisibleDialogBox dialog = showVisibleDialog();

    SimplePanel panel = new SimplePanel() {
      @Override
      protected void onUnload() {
        if (dialog.isAttached()) {
          dialog.hide();
          dialog0.hide();
          dialog1.hide();
          dialog2.hide();
          dialog3.hide();
          dialog4.hide();
        }
      }
    };
    return panel;
  }

  @Override
  public String getInstructions() {
    return "Confirm color change on mouse over caption, that the "
        + "custom close box works, and that each mouse event fires.  "
        + "Verify that the text in each DialogBox is true.";
  }

  @Override
  public String getSummary() {
    return "Legacy mouse event callbacks fire";
  }

  @Override
  public boolean hasCSS() {
    return false;
  }

  private DialogBox showCustomDialog(boolean autoHide,
      boolean previewAllEvents, boolean modal, String caption, String message,
      int left, int top) {
    final DialogBox dialog = new DialogBox(autoHide, modal);
    dialog.setPreviewingAllNativeEvents(previewAllEvents);

    // Set the caption
    caption += " (autoHide=" + dialog.isAutoHideEnabled();
    caption += ", previewAllEvents=" + dialog.isPreviewingAllNativeEvents();
    caption += ", modal=" + dialog.isModal() + ")";
    dialog.setText(caption);

    // Set the content
    Label content = new Label(message);
    if (autoHide || previewAllEvents) {
      dialog.setWidget(content);
    } else {
      VerticalPanel vPanel = new VerticalPanel();
      vPanel.add(content);
      vPanel.add(new Button("Close", new ClickHandler() {
        public void onClick(ClickEvent event) {
          dialog.hide();
        }
      }));
      dialog.setWidget(vPanel);
    }
    dialog.setPopupPosition(left, top);
    dialog.show();
    return dialog;
  }

  private VisibleDialogBox showVisibleDialog() {
    final VisibleDialogBox dialog = new VisibleDialogBox();
    dialog.setModal(false);
    dialog.center();
    dialog.getCaption().addMouseDownHandler(new MouseDownHandler() {
      public void onMouseDown(MouseDownEvent event) {
        dialog.pass(VisibleEvents.captionMouseDown);
      }
    });

    return dialog;
  }
}
TOP

Related Classes of com.google.gwt.museum.client.defaultmuseum.VisualsForDialogBox

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.