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: [email protected] web: www.ikt.es > <http://www.ikt.es/> > ·················································································· > > > > _______________________________________________ > Users mailing list > [email protected] > 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 [email protected] http://openlayers.org/mailman/listinfo/users
