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

David Alda Fernandez de Lezea dalda at ikt.es
Fri Oct 16 02:37:13 EDT 2009


 
Hello, thanks for your answer, if you see the code I provided I think I'm specifying those handlers you talk about in the constructor:

/**
>      * 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;
>     },

And then when I call the constructor: 

> var oDrawSelCtrl = new OpenLayers.Control.IktSelectTool(f1,f2,{
> id:"oSelFeatureCtrl", title: 'Selección', displayClass:
> 'olSelectFeature'});

 
 "...and you should call activate/deactivate method of OpenLayers.Control when you overrite the activate/deactivate method."

Do you mean doing something like this??

 /**
     * Method: activate
     * Override OpenLayers.Control.activate to call user defined "on" function
     */
    activate: function () {
        this.activate()
        this.userOn();
        return true;
    },
     
    /**
     * Method: deactivate
     * Override OpenLayers.Control.deactivate to call user defined "off" function
     */ 
    deactivate: function () {
        this.deactivate();
        this.userOff();
        return true;		
    },


"And you can using the SelectFeature control instead of yourself."


 I tried to do that, but I don't know why it didn't work for me. My goal is to select features from a WFS Layer, and this's the unique way that I found that worked for me. Maybe is too complicated or not much sofisticated but it works, and it works pretty well.

Thanks

--------------------------------------------
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.
_______________________________________________
Users mailing list
Users at openlayers.org
http://openlayers.org/mailman/listinfo/users



More information about the Users mailing list