[OpenLayers-Dev] removeControl not working as expected
Eric Lemoine
eric.c2c at gmail.com
Fri Jul 18 02:16:32 EDT 2008
Hi. Instead of removing a control have you tried to deactivate it? I
dont have the code handy but it may be that removing a control from
the map doesn't actually deactivate it, so the underlying handler is
still there and active. Eric
2008/7/15, Dejung Gewissler <dejung.gewissler at oit.state.nj.us>:
> Hi Devs-
>
> I'm trying to create my own control and extend its functionality like
> shown in the control API documentation [1]. I only ever want one control
> activated on the map at any given time (essentially functionality like
> the panel except with a different layout). I've got three buttons
> (images) that allow the user to designate which control to use (draw
> points, lines or polygons). When no button is active the default map
> navigation should then be active. In my HTML I've got three images that
> have their respective
> onmousedown="javascript:setupInteractiveSelection('Line');" properties
> set. This is the js so far:
>
> OGIS.InteractiveSelectionControl = null;
>
> function setupInteractiveSelection(selType){
>
> if (OGIS.Misc.typeOf(OGIS.InteractiveSelectionControl) == "object"){
> if (OGIS.InteractiveSelectionControl.OGIS_selectionType == selType){
> OGIS.map.removeControl(OGIS.InteractiveSelectionControl);
> OGIS.InteractiveSelectionControl = null;
> OGIS.map.controls[0].activate();
> return;
> }
> OGIS.map.removeControl(OGIS.InteractiveSelectionControl);
> OGIS.InteractiveSelectionControl = null;
> }
> switch (selType){
> case "point":
> $("selectByPoint").src =
> "../../libraries/openlayers/theme/default/img/draw_point_on.png";
> OGIS.InteractiveSelectionControl = new OpenLayers.Control();
> OpenLayers.Util.extend(OGIS.InteractiveSelectionControl, {
> draw: function () {
> // this Handler.Box will intercept the shift-mousedown
> // before Control.MouseDefault gets to see it
> this.box = new OpenLayers.Handler.Point(
> OGIS.InteractiveSelectionControl,
> {"done": this.notice});
> // {keyMask: OpenLayers.Handler.MOD_SHIFT});
> this.box.activate();
> },
> notice: function (bounds) {
> alert(bounds.x + " " + bounds.y);
> },
> OGIS_selectionType : selType
> });
> break;
>
> case "line":
> //line code here
> break;
>
> case "polygon":
> //polygon code here
> break;
> }
> OGIS.map.addControl(OGIS.InteractiveSelectionControl);
> }
>
>
> Switching the control from point to line to polygon and back again works
> fine. I am able to override the drawing end of the control to do my bidding.
>
> My problem lies in the in the first conditional. There I am trying to
> remove the newly created control from the map if the user clicks on the
> same image again and put the default map panning/zoom controls back.
>
> What happens currently when the same button is clicked twice is that the
> control is removed from the map.controls array, but the mousedown
> actions are still of the path handler and vectors are drawn on the map!
>
> [1] - http://dev.openlayers.org/apidocs/files/OpenLayers/Control-js.html
>
> Am I doing this wrong or incompletely or should I file this as a bug?
>
> Thanks,
> Dejung
> _______________________________________________
> Dev mailing list
> Dev at openlayers.org
> http://openlayers.org/mailman/listinfo/dev
>
More information about the Dev
mailing list