[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