com.google.gwt.maps.client.events.MapHandlerRegistration Maven / Gradle / Ivy
package com.google.gwt.maps.client.events;
/*
* #%L
* GWT Maps API V3 - Core API
* %%
* Copyright (C) 2011 - 2012 GWT Maps API V3
* %%
* 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.
* #L%
*/
import com.google.gwt.ajaxloader.client.ArrayHelper;
import com.google.gwt.ajaxloader.client.Properties;
import com.google.gwt.core.client.GWT;
import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.core.client.JsArray;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.maps.client.MapWidget;
import com.google.gwt.maps.client.events.mapchange.MapChangeEventFormatter;
public class MapHandlerRegistration {
/**
* event handler
*
* @param jso
* @param eventType
* @param handler
* @param formatter
*/
@SuppressWarnings("rawtypes")
// is ugly, but is a cyclic generic type, so suppressed
public static HandlerRegistration addHandler(JavaScriptObject jso, MapEventType eventType,
MapHandler handler, MapEventFormatter formatter) {
final JavaScriptObject listener = addHandlerImpl(jso, eventType.value(), handler, formatter);
HandlerRegistration registration = new HandlerRegistration() {
@Override
public void removeHandler() {
removeHandlerImpl(listener);
}
};
return registration;
}
/**
* event handler for the mvc object
*
* @param jso
* @param eventType
* @param handler
* @param formatter
*/
@SuppressWarnings("rawtypes")
// is ugly, but is a cyclic generic type, so suppressed
public static HandlerRegistration addHandlerMvc(JavaScriptObject jso, MapEventType eventType,
MapHandler handler, MapEventFormatter formatter) {
final JavaScriptObject listener = addHandlerImplMvc(jso, eventType.value(), handler, formatter);
HandlerRegistration registration = new HandlerRegistration() {
@Override
public void removeHandler() {
removeHandlerImpl(listener);
}
};
return registration;
}
/**
* event handler for the drawing overlay objects
*
* @param jso
* @param eventType
* @param handler
* @param formatter
*/
@SuppressWarnings("rawtypes")
// is ugly, but is a cyclic generic type, so suppressed
public static HandlerRegistration addHandlerDrawing(JavaScriptObject jso,
MapEventType eventType, MapHandler handler, MapEventFormatter formatter) {
final JavaScriptObject listener = addHandlerImplDrawing(jso, eventType.value(), handler, formatter);
HandlerRegistration registration = new HandlerRegistration() {
@Override
public void removeHandler() {
removeHandlerImpl(listener);
}
};
return registration;
}
/**
* process the callback and send it to the handler
*
* @param jso
* @param eventName
* @param handler
* @param formatter
*/
@SuppressWarnings("rawtypes")
// is ugly, but is a cyclic generic type, so suppressed
private static native JavaScriptObject addHandlerImpl(JavaScriptObject jso, String eventName,
MapHandler handler, MapEventFormatter formatter) /*-{
var callback = function(event) {
$entry(@com.google.gwt.maps.client.events.MapHandlerRegistration::onCallback(Lcom/google/gwt/maps/client/events/MapHandler;Lcom/google/gwt/ajaxloader/client/Properties;Lcom/google/gwt/maps/client/events/MapEventFormatter;)(handler, event, formatter));
};
return $wnd.google.maps.event.addListener(jso, eventName, callback)
}-*/;
/**
* process the callback and send it to the handler
*
* @param jso
* @param eventName
* @param handler
* @param formatter
*/
@SuppressWarnings("rawtypes")
// is ugly, but is a cyclic generic type, so suppressed
private static native JavaScriptObject addHandlerImplMvc(JavaScriptObject jso, String eventName,
MapHandler handler, MapEventFormatter formatter) /*-{
var callback = function(event) {
var eventCon = {
index : event
};
$entry(@com.google.gwt.maps.client.events.MapHandlerRegistration::onCallback(Lcom/google/gwt/maps/client/events/MapHandler;Lcom/google/gwt/ajaxloader/client/Properties;Lcom/google/gwt/maps/client/events/MapEventFormatter;)(handler, eventCon, formatter));
};
return $wnd.google.maps.event.addListener(jso, eventName, callback)
}-*/;
/**
* drawing sends events partly with different signature or arguments.
*
* @param jso
* @param eventName
* @param handler
* @param formatter
*/
@SuppressWarnings("rawtypes")
// is ugly, but is a cyclic generic type, so suppressed
private static native JavaScriptObject addHandlerImplDrawing(JavaScriptObject jso,
String eventName, MapHandler handler, MapEventFormatter formatter) /*-{
var callback = function(event) {
var eventCon = {
overlay : event
};
$entry(@com.google.gwt.maps.client.events.MapHandlerRegistration::onCallback(Lcom/google/gwt/maps/client/events/MapHandler;Lcom/google/gwt/ajaxloader/client/Properties;Lcom/google/gwt/maps/client/events/MapEventFormatter;)(handler, eventCon, formatter));
};
return $wnd.google.maps.event.addListener(jso, eventName, callback)
}-*/;
/**
* HandlerRegistration call when finished
*
* @param listener
*/
private static native void removeHandlerImpl(JavaScriptObject listener) /*-{
$wnd.google.maps.event.removeListener(listener);
}-*/;
/**
* process generic handler callback
*
* @param handler
* @param properties
* @param formatter
*/
@SuppressWarnings("rawtypes")
// is ugly, but is a cyclic generic type, so suppressed
protected static void onCallback(final MapHandler handler, final Properties properties,
final MapEventFormatter formatter) {
try {
formatEvent(handler, properties, formatter);
} catch (Throwable x) {
GWT.getUncaughtExceptionHandler().onUncaughtException(x);
}
}
/**
* create a map event
*
* @param handler
* @param properties
* @param formatter
*/
@SuppressWarnings("rawtypes")
// is ugly, but is a cyclic generic type, so suppressed
private static void formatEvent(MapHandler handler, Properties properties,
MapEventFormatter formatter) {
E event = formatter.createEvent(properties);
handler.onEvent(event);
}
/**
* Triggers the given event. All arguments after eventName are passed as arguments to the listeners.
* Note: Use Marker in objects to click on.
*
* @param w
* @param eventType
* @param objects
*/
public static void trigger(MapWidget w, MapEventType eventType, JavaScriptObject... objects) {
JsArray a = ArrayHelper.toJsArray(objects);
triggerImpl(w, eventType.value(), a);
}
private static native void triggerImpl(MapWidget w, String eventName, JsArray args) /*-{
var jso = [email protected]::getJso()();
$wnd.google.maps.event.trigger(jso, eventName, args);
}-*/;
/**
* Triggers the given event. All arguments after eventName are passed as arguments to the listeners.
* Note: Use Marker in objects to click on.
*
* @param w
* @param eventType
*/
public static void trigger(MapWidget w, MapEventType eventType) {
triggerImpl(w, eventType.value());
}
private static native void triggerImpl(MapWidget w, String eventName) /*-{
var jso = [email protected]::getJso()();
$wnd.google.maps.event.trigger(jso, eventName);
}-*/;
/**
* experimental for the moment. I'm not satisfied as of yet with this strategy.
*
* Cross browser event handler registration. This listener is removed by calling removeListener(handle) for the handle
* that is returned by this function.
*
* @param jso
* @param type
* @param handler
* @param capture
*/
public static void addDomListener(JavaScriptObject jso,
com.google.gwt.event.dom.client.DomEvent.Type type, MapHandler handler, boolean capture) {
addDomListener(jso, type.getName(), handler, capture);
}
private static native void addDomListener(JavaScriptObject object, String eventName, MapHandler> handler,
boolean capture) /*-{
var callback = function(event) {
@com.google.gwt.maps.client.events.MapHandlerRegistration::addDomListenerImpl(Lcom/google/gwt/ajaxloader/client/Properties;Lcom/google/gwt/maps/client/events/MapHandler;)(event, handler)
};
$wnd.google.maps.event.addDomListener(object, eventName, callback, capture);
}-*/;
@SuppressWarnings("rawtypes")
// is ugly, but is a cyclic generic type, so suppressed
private static void addDomListenerImpl(Properties properties, MapHandler handler) {
MapChangeEventFormatter formatter = new MapChangeEventFormatter();
handler.onEvent(formatter.createEvent(properties));
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy