[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