From: Andrew H. <ahh...@gm...> - 2010-11-03 23:23:01
|
Getting close but not yet, I think my native javascript is fundementally flawed... says "OpenLayers is undefined".... perhaps I am missing some $wnd.* somewhere :'( Any idea's? Sorry to bug people... ------------------------------------------------------------------------------------ public class HoverControl extends Control { public interface HoverControlListener { void onPause(JSObject evt); void onMove(JSObject evt); } protected HoverControl(JSObject element) { super(element); } public HoverControl(HoverControlListener listener) { this(HoverControlImpl.create(listener)); } public static HoverControl narrowToHoverControl(JSObject element) { return (element == null) ? null: new HoverControl(element); } } ------------------------------------------------------------------------------------ class HoverControlImpl { public static native JSObject create(HoverControl.HoverControlListener callback) /*-{ OpenLayers.Control.Hover = OpenLayers.Class(OpenLayers.Control, { defaultHandlerOptions: { 'delay': 500, 'pixelTolerance': null, 'stopMove': false }, initialize: function(options) { this.handlerOptions = OpenLayers.Util.extend( {}, this.defaultHandlerOptions ); OpenLayers.Control.prototype.initialize.apply( this, arguments ); this.handler = new OpenLayers.Handler.Hover( this, {'pause': this.onPause, 'move': this.onMove}, this.handlerOptions ); }, onPause: function(evt) { callback.@com.acme.client.hover.HoverControl.HoverControlListener ::onPause(Lorg/gwtopenmaps/openlayers/client/util/JSObject;)(evt); }, onMove: function(evt) { callback.@com.acme.client.hover.HoverControl.HoverControlListener ::onPause(Lorg/gwtopenmaps/openlayers/client/util/JSObject;)(evt); } }); return new $wnd.OpenLayers.Control.Hover(); }-*/; } ------------------------------------------------------------------------------------ On Wed, Nov 3, 2010 at 6:08 AM, Edwin Commandeur <com...@gm... > wrote: > Hi Andrew, > > The example you send works nicely, so I wonder what you are confused > about in native JavaScript. Seems a perfectly fine example of a custom > Handler. > > A way to incorporate this handler in GWT-OL is by adding the code for > the Hover control in a javascript file and distribute that with GWT-OL > and wrap the native javascript like we wrap other Controls. > > There are already some javascript utility functions which are in: > > gwt-openlayers-client/src/main/java/org/gwtopenmaps/openlayers/public/js/gwt-openlayers/utils.js > > Maybe we could put a ol-extensions.js file in there, and also make > clear in the GWT wrapper class namespace that it uses stuff in this > extensions file. > > Another way would be to distribute the handler code with > GWT-OpenLayers and explain in the wrapper Javadoc that the js file > needs to be loaded in the page to use that specific wrapper class. > > A combination of Javascript and GWT wrapper seems the way to go, since > I don't see a way to provide a Control in native GWT (you would always > need JSNI to add functions to the Control as fas as I can see). > > Greetings, > Edwin > > On 2 November 2010 13:45, Andrew Hughes <ahh...@gm...> wrote: > > Hi Everyone, > > We have a requirement that we need to register a hover handler on a map. > > GWT-OpenLayers can't do this yet and the native javascript has me a > little > > confused... I have a simple javascript example working below. This seems > > like it would be complex to wrap, advice would be most appreciated. > > > > > > <html xmlns="http://www.w3.org/1999/xhtml"> > > <head> > > <link rel="stylesheet" > > href="http://openlayers.org/dev/theme/default/style.css" type="text/css" > /> > > <link rel="stylesheet" > > href="http://openlayers.org/dev/examples/style.css" type="text/css" /> > > > > <style type="text/css"> > > #map { > > width: 640px; > > height: 480px; > > } > > </style> > > <script > > src="http://openlayers.org/dev/lib/Firebug/firebug.js"></script> > > <script src="http://openlayers.org/dev/OpenLayers.js"></script> > > <script type="text/javascript"> > > > > OpenLayers.Control.Hover = > OpenLayers.Class(OpenLayers.Control, > > { > > defaultHandlerOptions: { > > 'delay': 500, > > 'pixelTolerance': null, > > 'stopMove': false > > }, > > > > initialize: function(options) { > > this.handlerOptions = OpenLayers.Util.extend( > > {}, this.defaultHandlerOptions > > ); > > OpenLayers.Control.prototype.initialize.apply( > > this, arguments > > ); > > this.handler = new OpenLayers.Handler.Hover( > > this, > > {'pause': this.onPause, 'move': this.onMove}, > > this.handlerOptions > > ); > > }, > > > > onPause: function(evt) { > > var output = document.getElementById('output'); > > var msg = 'pause ' + evt.xy; > > output.value = output.value + msg + "\r\n"; > > }, > > > > onMove: function(evt) { > > // do something... like cancel > > } > > }); > > > > var map; > > > > function init(){ > > map = new OpenLayers.Map('map'); > > var layer = new OpenLayers.Layer.WMS('OpenLayers > > WMS','http://vmap0.tiles.osgeo.org/wms/vmap0',{layers: 'basic'}); > > map.addLayers([layer]); > > var hoverControl = new OpenLayers.Control.Hover({ > > handlerOptions: { > > 'delay': 500 > > } > > }); > > map.addControl(hoverControl); > > map.zoomToMaxExtent(); > > hoverControl.activate(); > > } > > > > </script> > > </head> > > <body onload="init()"> > > <div id="map" class="smallmap"></div> > > <textarea class="output" id="output"></textarea></td> > > </body> > > </html> > > > > > > > ------------------------------------------------------------------------------ > > Nokia and AT&T present the 2010 Calling All Innovators-North America > contest > > Create new apps & games for the Nokia N8 for consumers in U.S. and > Canada > > $10 million total in prizes - $4M cash, 500 devices, nearly $6M in > marketing > > Develop with Nokia Qt SDK, Web Runtime, or Java and Publish to Ovi Store > > http://p.sf.net/sfu/nokia-dev2dev > > _______________________________________________ > > Gwt-openlayers-users mailing list > > Gwt...@li... > > https://lists.sourceforge.net/lists/listinfo/gwt-openlayers-users > > > > > |