blob: dcb7019b3102cee76fdab82af21e2a45a93131b9 [file] [log] [blame]
/*
* 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.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.logical.shared.CloseEvent;
import com.google.gwt.event.logical.shared.CloseHandler;
import com.google.gwt.event.logical.shared.ResizeEvent;
import com.google.gwt.event.logical.shared.ResizeHandler;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.museum.client.common.AbstractIssue;
import com.google.gwt.museum.client.common.SimpleLogger;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.Window.ClosingEvent;
import com.google.gwt.user.client.Window.ScrollEvent;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.ScrollPanel;
import com.google.gwt.user.client.ui.Widget;
import java.util.ArrayList;
/**
* Simple visual test for checking up on window events with Handlers.
*/
public class VisualsForWindowEvents extends AbstractIssue implements
CloseHandler<Window>, Window.ClosingHandler, Window.ScrollHandler,
ResizeHandler {
static int numResizes = 0;
private SimpleLogger messages = new SimpleLogger();
private ArrayList<HandlerRegistration> registrations = new ArrayList<HandlerRegistration>();
@Override
public Widget createIssue() {
FlowPanel out = new FlowPanel();
FlowPanel body = new FlowPanel();
body.setHeight(Window.getClientHeight() * 2 + "px");
FlowPanel buttons = new FlowPanel();
Button addHandlersButton = new Button("Add window handlers.");
addHandlersButton.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
setupWindowHandlers();
}
});
Button removeHandlersButton = new Button("Remove window handlers.");
removeHandlersButton.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
removeWindowHandlers();
}
});
buttons.add(addHandlersButton);
buttons.add(removeHandlersButton);
body.add(buttons);
body.add(messages);
ScrollPanel p = new ScrollPanel();
p.setHeight("100%");
p.setWidth("100%");
HTML tester = new HTML("scroller");
tester.setHeight("500px");
tester.getElement().getStyle().setProperty("border", "10px solid green");
p.add(tester);
body.add(p);
out.add(body);
return out;
}
@Override
public String getInstructions() {
return "Click on the button to add all the window handlers. "
+ "Then click the other button to remove them all. "
+ "With handlers enabled, you should get messages for scrolling or "
+ "resizing the window, a \"do you want to navigate away?\" message"
+ "if you're about to navigate away, and an alert when you do navigate"
+ "away or close the window.";
}
@Override
public String getSummary() {
return "window events";
}
@Override
public boolean hasCSS() {
return false;
}
public void onClose(CloseEvent<Window> event) {
Window.alert("Closing the window.");
}
public void onResize(ResizeEvent event) {
messages.report("Got resize " + numResizes++ + " with values "
+ event.getWidth() + ", " + event.getHeight());
}
public void onWindowClosing(ClosingEvent event) {
event.setMessage("Are you sure you want to navigate away?");
}
public void onWindowScroll(ScrollEvent event) {
addMessage("Got a window scroll with " + event.getScrollLeft() + ", "
+ event.getScrollTop());
}
private void addMessage(String msg) {
messages.report(msg);
}
private void removeWindowHandlers() {
for (HandlerRegistration reg : registrations) {
reg.removeHandler();
}
registrations.clear();
}
private void setupWindowHandlers() {
if (registrations.size() == 0) {
registrations.add(Window.addCloseHandler(this));
registrations.add(Window.addResizeHandler(this));
registrations.add(Window.addWindowClosingHandler(this));
registrations.add(Window.addWindowScrollHandler(this));
}
}
}