123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- /*
- * 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);
- }
|