com.google.gwt.query.client.plugins.events.SpecialEvent Maven / Gradle / Ivy
/*
* Copyright 2014, The gwtquery team.
*
* 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.query.client.plugins.events;
import com.google.gwt.dom.client.Element;
import com.google.gwt.query.client.Function;
import com.google.gwt.user.client.Event;
/**
* Interface used to register special events.
*
* Use EventsListeners.special.add(
*/
public interface SpecialEvent {
/**
* Default implementation of SpecialEvents for simple cases like
* creating event aliases. Extend this for creating more complex
* cases.
*/
public static class DefaultSpecialEvent implements SpecialEvent {
protected final String delegateType;
protected final String type;
protected Function handler = new Function() {
public boolean f(Event e, Object... arg) {
setEvent(e);
EventsListener.getInstance(getElement()).dispatchEvent(e, type);
return true;
};
};
public DefaultSpecialEvent(String type, String delegateType) {
this.type = type;
this.delegateType = delegateType;
}
protected EventsListener listener(Element e) {
return EventsListener.getInstance(e);
}
@Override
public void add(Element e, String eventType, String nameSpace, Object data, Function f) {
// Nothing to do, let gQuery use default events mechanism
}
@Override
public boolean hasHandlers(Element e) {
return listener(e).hasHandlers(Event.getTypeInt(type), type, handler);
}
@Override
public void remove(Element e, String eventType, String nameSpace, Function f) {
// Nothing to do, let gQuery use default events mechanism
}
@Override
public boolean setup(Element e) {
if (!hasHandlers(e)) {
listener(e).bind(delegateType, null, handler);
}
return false;
}
@Override
public boolean tearDown(Element e) {
if (!hasHandlers(e)) {
listener(e).unbind(delegateType, handler);
}
return false;
}
}
/**
* For each bind call the add function is called.
*/
void add(Element e, String eventType, String nameSpace, Object data, Function f);
/**
* Return true if there are handlers bound to this special event.
*/
boolean hasHandlers(Element e);
/**
* For each unbind call the remove function is called.
*/
void remove(Element e, String eventType, String nameSpace, Function f);
/**
* When the first event handler is bound for an EventsListener gQuery executes the setup function.
*
* If the method returns false means that gQuery has to run the default bind for the event before
* calling add.
*/
boolean setup(Element e);
/**
* The last unbind call triggers the tearDown method.
*
* If the method returns false means that gQuery has to run the default unbind for the event
* before calling remove.
*/
boolean tearDown(Element e);
}