[OpenLayers-Users] Strange behaviour with panel and custom control

avlee slinavlee at gmail.com
Thu Oct 15 21:46:15 EDT 2009


You should specify the handlers in the constructor of your control, and you
should call activate/deactivate method of OpenLayers.Control when you
overrite the activate/deactivate method.

And you can using the SelectFeature control instead of yourself.


David Alda Fernandez de Lezea wrote:
> 
> Hello list,
>  
> Sorry but I don't know how the previous message was sent incomplete and by
> mistake. I'll go on:
>  
> I managed to develope a custom control called IktSelectTool.js which
> basically selects and highlights fetures from a WFS layer . The control
> doesn't select features, but it registers a click event on the map to
> select the WFS features (that's my idea). The registry of the event and
> the selection of the features works fine, and know I want to make a tool.
> Basically the source of this file is: 
>  
> /* Copyright (c) 2006-2007 MetaCarta, Inc., published under the Clear BSD
>  * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt
> for the
>  * full text of the license. */
>  
> /**
>  * @requires OpenLayers/Control.js
>  *
>  * Class: OpenLayers.Control.IktSelectTool
>  *
>  * Inherits from:
>  *  - <OpenLayers.Control>
>  */
> OpenLayers.Control.IktSelectTool = OpenLayers.Class(OpenLayers.Control, {
>     /**
>      * Property: type
>      * {OpenLayers.Control.TYPE}
>      */
>     type: OpenLayers.Control.TYPE_TOOL,
>     
>     /**
>      * Constructor: OpenLayers.Control.Switch 
>      * Fires a user defined function when toggled on/off
>      *
>      * Parameters:
>      * options - {func} An optional object whose properties will be used
>      *     to extend the control.
>      */
>     initialize: function(on, off, options) {
>         OpenLayers.Control.prototype.initialize.apply(this, [options]);
>         this.userOn = on;
>         this.userOff = off;
>     },
>     
>     /**
>      * Method: activate
>      * Override OpenLayers.Control.activate to call user defined "on"
> function
>      */
>     activate: function () {
>         if (this.active) {
>             return false;
>         }
>         if (this.handler) {
>             this.handler.activate();
>         }
>         this.active = true;
>         this.userOn();
>         return true;
>     },
>      
>     /**
>      * Method: deactivate
>      * Override OpenLayers.Control.deactivate to call user defined "off"
> function
>      */ 
>     deactivate: function () {
>         if (this.active) {
>             if (this.handler) {
>                 this.handler.deactivate();
>             }
>             this.active = false;
>             this.userOff();
>             return true;
>         }
>         return false;
>     },
>  
>     
>     /**
>      * Method: userOn
>      * placeholder for the user defined function that will be fired when
> Switch is activated
>      */
>     userOn: function(){
>     },
>     /**
>      * Method: userOn
>      * placeholder for the user defined function that will be fired when
> Switch is deactivated
>      */
>     userOff: function(){
>     },
>  
>     CLASS_NAME: "OpenLayers.Control.IktSelectTool"
> }); 
>  
> I create the control in my init function in this way:
>  
> var oDrawSelCtrl = new OpenLayers.Control.IktSelectTool(f1,f2,{
> id:"oSelFeatureCtrl", title: 'Selección', displayClass:
> 'olSelectFeature'});
>  
> where f1 is the function which is triggered when the control is activated
> and f2 is the function which is triggered when the function is
> deactivated. For my test they are only two functions that do nothing (just
> create somo strings to see if they work), but the idea is to register or
> unregister a map event. Then I add this control to my panel by this way:
>  
> panel.addControls([oDragPanCtrl,history.next,
> history.previous,zoombox,oZoomBoxOutCtrl,
> zoomtomaxextent,oDrawLnCtrl,oDrawPtCtrl,oDrawPolCtrl,oDrawSelCtrl]);
>  
> And in my index.html I've defined the corresponding CSS class:
>  
> /* SelectFeature */
>   .olControlPanel .olSelectFeatureItemActive{
>    background-image: url("images/Select_on.png");
>       background-repeat: no-repeat;
>       background-position: 0px 0px;
>   }
>   
>   .olControlPanel .olSelectFeatureItemInactive{
>    background-image: url("images/Select_off.png");
>       background-repeat: no-repeat;
>       background-position: 0px 0px;
>   }
>  
> At this point everything is OK, the page can be loaded without errors and
> all that stuff. The strange behaviour I'm talking about is that when I
> select the tool, the tool's image is not uploaded, I mean, it doesn't
> change from Select_off.png to Select_on.png, but if I drag a bit on the
> map or make a zoom, the tool's image is uploaded. I'd like to figure out
> what's happening because the user, future user of the app, won't know that
> the tool is activated until he makes a zoom or something related to the
> map.
>  
>  
> Can someone, please, help me with this problem.
>  
> Thanks again.
>  
> 
>  
> 
>  
> 
> Un saludo,
> 
>  
> 
> ··················································································
> 
> 
> David Alda Fernández de Lezea
> 
> Lurralde eta Biodibertsitate Saila / Dpto. de Territorio y Biodiversidad
> 
>  
> 
> IKT
> 
> Granja Modelo s/n · 01192 · Arkaute (Araba)
> 
> 
> ··················································································
> Tlfnos.: 945-00-32-95                         Fax: 945-00.32.90
> ··················································································
> email: dalda at ikt.es                                web: www.ikt.es
> <http://www.ikt.es/> 
> ··················································································
> 
> 
>  
> _______________________________________________
> Users mailing list
> Users at openlayers.org
> http://openlayers.org/mailman/listinfo/users
> 
> 

-- 
View this message in context: http://n2.nabble.com/Strange-behaviour-with-panel-and-custom-control-tp3828331p3833135.html
Sent from the OpenLayers Users mailing list archive at Nabble.com.



More information about the Users mailing list