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

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

/*
* Copyright 2008 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.Element;
import com.google.gwt.museum.client.common.AbstractIssue;
import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.ui.AbsolutePanel;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.FocusPanel;
import com.google.gwt.user.client.ui.MouseListener;
import com.google.gwt.user.client.ui.MouseListenerCollection;
import com.google.gwt.user.client.ui.Widget;

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

/**
* Ensure the ListenerWrapper for mouse still works like the old listeners did.
*/
@SuppressWarnings("deprecation")
public class Issue3186 extends AbstractIssue {

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

  private final class TestWidget extends FocusPanel {
    private class Control implements MouseListener {
      int controlX;
      int controlY;
      int controlMouseEnter;
      int controlMouseLeave;

      public void onMouseDown(Widget sender, int x, int y) {
        this.controlX = x;
        this.controlY = y;
      }

      public void onMouseEnter(Widget sender) {
        ++controlMouseEnter;
      }

      public void onMouseLeave(Widget sender) {
        ++controlMouseLeave;
      }

      public void onMouseMove(Widget sender, int x, int y) {
        this.controlX = x;
        this.controlY = y;
      }

      public void onMouseUp(Widget sender, int x, int y) {
        this.controlX = x;
        this.controlY = y;
      }
    }

    private class Current implements MouseListener {
      private int mouseEnterCount;
      private int mouseLeaveCount;

      public void onMouseDown(Widget sender, int x, int y) {
        check(x, y, VisibleEvents.mouseDown);
      }

      public void onMouseEnter(Widget sender) {
        ++mouseEnterCount;
        if (mouseEnterCount != control.controlMouseEnter) {
          fail("recieved:" + mouseEnterCount + " events, expected:"
              + control.controlMouseEnter, VisibleEvents.mouseEnter);
        } else {
          pass(VisibleEvents.mouseEnter);
        }
        sender.getElement().getStyle().setProperty("background", "yellow");
      }

      public void onMouseLeave(Widget sender) {
        ++mouseLeaveCount;
        if (mouseLeaveCount != control.controlMouseLeave) {
          fail("recieved:" + mouseLeaveCount + " events, expected:"
              + control.controlMouseLeave, VisibleEvents.mouseLeave);
        } else {
          pass(VisibleEvents.mouseLeave);
        }

        sender.getElement().getStyle().setProperty("background", "");
      }

      public void onMouseMove(Widget sender, int x, int y) {
        check(x, y, VisibleEvents.mouseMove);
      }

      public void onMouseUp(Widget sender, int x, int y) {
        check(x, y, VisibleEvents.mouseUp);
      }

      private void check(int x, int y, VisibleEvents event) {
        String errorReport = getErrorReport(x, y);
        if (errorReport == null) {
          eventToElement.get(event).setInnerHTML(
              "<span style='color:green'>pass</span>");
        } else {
          fail(errorReport, event);
        }
      }

      private String getErrorReport(int x, int y) {
        String errorReport = null;
        if (x != control.controlX) {
          errorReport = "wanted x: " + control.controlX + " actual x" + x;
        } else if (y != control.controlY) {
          errorReport += "wanted y: " + control.controlY + " actual y" + y;
        }
        return errorReport;
      }
    }

    private FlexTable layout = null;
    private MouseListenerCollection collection = new MouseListenerCollection();

    private Control control = new Control();
    private Current current = new Current();
    private final Map<VisibleEvents, Element> eventToElement = new HashMap<VisibleEvents, Element>();

    public TestWidget() {
      layout = new FlexTable();
      layout.setCellPadding(3);
      layout.setBorderWidth(2);

      layout.setHTML(0, 0, "<b>MouseEvents</b>");
      layout.setHTML(0, 1, "<b>Status</b>");

      for (VisibleEvents e : VisibleEvents.values()) {
        eventToElement.put(e, addResultRow(e.name()));
      }
      add(layout);
      this.addMouseListener(current);
      collection.add(control);
    }

    public void fail(String errorReport, VisibleEvents event) {
      eventToElement.get(event).setInnerHTML(
          "<span style='color:red'>" + errorReport + "</span>");
    }

    @Override
    public void onBrowserEvent(Event event) {
      collection.fireMouseEvent(this, event);
      super.onBrowserEvent(event);
    }

    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;
    }
  }

  @Override
  public Widget createIssue() {
    AbsolutePanel p = new AbsolutePanel();
    p.setHeight("500px");
    p.setWidth("500px");
    final TestWidget dialog = showTestWidget();
    p.add(dialog, 100, 100);
    return p;
  }

  @Override
  public String getInstructions() {
    return "move your mouse around ";
  }

  @Override
  public String getSummary() {
    return "mouse listeners work the same";
  }

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

  private TestWidget showTestWidget() {
    final TestWidget dialog = new TestWidget();
    return dialog;
  }

}
TOP

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

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.