blob: df9121ff964ac7049338c3c2b12da98420141148 [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.common;
import com.google.gwt.event.dom.client.BlurEvent;
import com.google.gwt.event.dom.client.BlurHandler;
import com.google.gwt.event.dom.client.ChangeEvent;
import com.google.gwt.event.dom.client.ChangeHandler;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.FocusEvent;
import com.google.gwt.event.dom.client.FocusHandler;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.event.dom.client.KeyDownEvent;
import com.google.gwt.event.dom.client.KeyDownHandler;
import com.google.gwt.event.dom.client.KeyPressEvent;
import com.google.gwt.event.dom.client.KeyPressHandler;
import com.google.gwt.event.dom.client.KeyUpEvent;
import com.google.gwt.event.dom.client.KeyUpHandler;
import com.google.gwt.event.logical.shared.CloseEvent;
import com.google.gwt.event.logical.shared.CloseHandler;
import com.google.gwt.event.logical.shared.SelectionEvent;
import com.google.gwt.event.logical.shared.SelectionHandler;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.user.client.ui.ChangeListener;
import com.google.gwt.user.client.ui.CheckBox;
import com.google.gwt.user.client.ui.ClickListener;
import com.google.gwt.user.client.ui.FocusListener;
import com.google.gwt.user.client.ui.HasHTML;
import com.google.gwt.user.client.ui.HasText;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.KeyboardListener;
import com.google.gwt.user.client.ui.MouseListener;
import com.google.gwt.user.client.ui.SuggestionEvent;
import com.google.gwt.user.client.ui.SuggestionHandler;
import com.google.gwt.user.client.ui.UIObject;
import com.google.gwt.user.client.ui.Widget;
import com.google.gwt.user.client.ui.SuggestOracle.Suggestion;
/**
* Helper class to create visual tests.
*
* @param <V> value type
* @param <T> target type
*/
@SuppressWarnings("deprecation")
public class EventReporter<V, T> extends SimpleLogger implements
ChangeListener, FocusListener, ValueChangeHandler<V>,
SelectionHandler<Suggestion>, SuggestionHandler, KeyboardListener,
ChangeHandler, BlurHandler, FocusHandler, ClickHandler, ClickListener,
CloseHandler<T>, MouseListener, KeyDownHandler, KeyUpHandler,
KeyPressHandler {
/**
* Add/remove handlers via check box.
*
*/
public abstract class CheckBoxEvent extends CheckBox implements
ValueChangeHandler<Boolean> {
String name;
private HandlerRegistration registration;
public CheckBoxEvent(String name, HasWidgets p) {
this.name = name;
this.setText(name);
p.add(this);
this.addValueChangeHandler(this);
this.setValue(true, true);
}
public abstract HandlerRegistration addHandler();
public void onValueChange(ValueChangeEvent<Boolean> event) {
if (event.getValue().booleanValue()) {
report("add " + name);
registration = addHandler();
} else {
report("remove " + name);
removeHandler();
}
}
public void removeHandler() {
registration.removeHandler();
registration = null;
}
}
/**
* Add/remove handlers via check box.
*
*/
public abstract class CheckBoxListener extends CheckBox implements
ValueChangeHandler<Boolean> {
String name;
public CheckBoxListener(String name, HasWidgets p) {
this.name = name;
this.setText(name);
p.add(this);
this.addValueChangeHandler(this);
this.setValue(true, true);
}
public abstract void addListener();
public void onValueChange(ValueChangeEvent<Boolean> event) {
if (event.getValue().booleanValue()) {
report("add " + name);
addListener();
} else {
report("remove " + name);
removeListener();
}
}
public abstract void removeListener();
}
public EventReporter() {
}
public EventReporter(HasWidgets parent) {
parent.add(this);
}
public void addClickHandler(final HasClickHandlers h, HasWidgets p) {
addClickHandler(h, p, getInfo(h) + " click handler");
}
public void addClickHandler(final HasClickHandlers h, HasWidgets p,
String title) {
new CheckBoxEvent(title, p) {
@Override
public HandlerRegistration addHandler() {
return h.addClickHandler(EventReporter.this);
}
};
}
@Override
public String getInfo(Object sender) {
if (sender instanceof HasText) {
return ((HasText) sender).getText();
} else if (sender instanceof UIObject
&& ((UIObject) sender).getTitle() != null) {
return ((UIObject) sender).getTitle();
} else if (sender instanceof HasHTML) {
return ((HasHTML) sender).getHTML();
} else {
return sender.toString();
}
}
public void onBlur(BlurEvent event) {
report(event);
}
public void onChange(ChangeEvent event) {
report(event);
}
public void onChange(Widget sender) {
report("change on " + getInfo(sender));
}
public void onClick(ClickEvent event) {
report(event);
}
public void onClick(Widget sender) {
report("click: " + getInfo(sender));
}
public void onClose(CloseEvent<T> event) {
report("close " + getInfo(event.getTarget()));
}
public void onFocus(FocusEvent event) {
report(event);
}
public void onFocus(Widget sender) {
report("focus: " + getInfo(sender));
}
public void onKeyDown(KeyDownEvent event) {
report(event);
}
public void onKeyDown(Widget sender, char keyCode, int modifiers) {
report(getInfo(sender) + "key down code: " + keyCode + " modifiers: "
+ modifiers);
}
public void onKeyPress(KeyPressEvent event) {
report(event);
}
public void onKeyPress(Widget sender, char keyCode, int modifiers) {
report(getInfo(sender) + "key press code: " + keyCode + " modifiers: "
+ modifiers);
}
public void onKeyUp(KeyUpEvent event) {
report(event);
}
public void onKeyUp(Widget sender, char keyCode, int modifiers) {
report(getInfo(sender) + "key up code: " + keyCode + " modifiers: "
+ modifiers);
}
public void onLostFocus(Widget sender) {
report("blur: " + sender.getClass());
}
public void onMouseDown(Widget sender, int x, int y) {
report(getInfo(sender) + "mouse down");
}
public void onMouseEnter(Widget sender) {
report(getInfo(sender) + "mouse enter");
}
public void onMouseLeave(Widget sender) {
report(getInfo(sender) + "mouse leave");
}
public void onMouseMove(Widget sender, int x, int y) {
report(getInfo(sender) + "mouse move");
}
public void onMouseUp(Widget sender, int x, int y) {
report(getInfo(sender) + "mouse up");
}
public void onSelection(SelectionEvent<Suggestion> event) {
report(event);
}
public void onSuggestionSelected(SuggestionEvent event) {
report("suggestion: " + event.getSelectedSuggestion());
}
public void onValueChange(ValueChangeEvent<V> event) {
report(event);
}
}