[OpenLayers-Users] Event "featureunhighlighted" not triggered

Olivier THIERRY olivier.thierry at gmail.com
Thu Mar 18 07:06:23 EDT 2010


2010/3/18 Eric Lemoine <eric.lemoine at camptocamp.com>:
> On Thu, Mar 18, 2010 at 11:08 AM, Olivier THIERRY
> <olivier.thierry at gmail.com> wrote:
>> 2010/3/17 Eric Lemoine <eric.lemoine at camptocamp.com>:
>>> On Wed, Mar 17, 2010 at 5:14 PM, Olivier THIERRY
>>> <olivier.thierry at gmail.com> wrote:
>>>> Hi,
>>>>
>>>> I have a vector layer with two SelectFeature controls : one is used
>>>> for selection, the other is used to show a popup.
>>>> It works well except for one case : if I select an element in the
>>>> vector, then I move the mouse to this element, the
>>>> "featurehighlighted" event is fired, but on mouse out the
>>>> "featureunhighlighted" event is not fired !
>>>
>>> This is expected, although it's not clear to me whether this the
>>> wished behavior.
>>>
>>> 1. mouse click on the feature -> control 1 selects the feature
>>> 2. mouse over the feature -> control 2 highlights the feature ->
>>> "featurehighlighted" triggers
>>> 3. mouse out of feature -> control 2 detects that another control
>>> (control 1) had highlighted the feature before it highlighted it
>>> itself, so it uses that control to highlight the feature the way it
>>> was highlighted before it highlighted it itself ->
>>> "featureunhighlighted" does not trigger
>>>
>>> Do you (or others) think we should trigger "featureunhighlighted"
>>> after the call to theOtherControl.highlight()?
>>>
>>> See attached patch (untested).
>>>
>>> --
>>> Eric Lemoine
>>>
>>> Camptocamp France SAS
>>> Savoie Technolac, BP 352
>>> 73377 Le Bourget du Lac, Cedex
>>>
>>> Tel : 00 33 4 79 44 44 96
>>> Mail : eric.lemoine at camptocamp.com
>>> http://www.camptocamp.com
>>>
>>
>> Thanks for your response.
>> I think "featureunhighlighted" event sould be triggered in my case,
>> but I don't know for other cases.
>>
>> Anyway I found a way to workaround the problem by writing my own
>> control for highlighting. I started from an example found on the web.
>> Here it is :
>>
>> OpenLayers.Control.OverRejet = OpenLayers.Class(OpenLayers.Control,
>>                {
>>                    layer: null,
>>                    defaultHandlerOptions: {
>>                    'delay': 2000,
>>                    'pixelTolerance': 1,
>>                    'stopMove': false
>>            },
>>            initialize: function(layer, options)
>>                        {
>>                        this.layer = layer;
>>                        this.handlerOptions = OpenLayers.Util.extend(
>>                                {}, this.defaultHandlerOptions);
>>                                OpenLayers.Control.prototype.initialize.apply(
>>                                        this, arguments
>>                                );
>>
>>                        this.handlers = {
>>                                feature: new OpenLayers.Handler.Feature(
>>                                        this,
>>                                        this.layer,
>>                                        {
>>                                                'over': this.over,
>>                                                'out' : this.out
>>                                        },
>>                                        {}
>>                                )};
>>                        },
>>
>>                        draw: function() {
>>                                return false;
>>                        },
>>
>>                        activate: function() {
>>                                this.handlers.feature.activate();
>>                        },
>>
>>                        deactivate: function() {
>>                                this.handlers.feature.deactivate();
>>                        },
>>
>>                        over: function(feature) {
>>                                var rejet = feature.rejet;
>>                                if (rejet != null) {
>>                                        rejet.showTooltip();
>>                                }
>>                        },
>>
>>                        out: function(feature) {
>>                                var rejet = feature.rejet;
>>                                if (rejet != null) {
>>                                        rejet.hideTooltip();
>>                                }
>>                        });
>>
>> Then I configure this control for my layer :
>>
>> var highlightControl = new OpenLayers.Control.OverRejet(layer);
>> map.addControl(highlightControl);
>> highlightControl.activate();
>>
>> This does what I needed so no more problem for me ;)
>
> You didn't bother testing my patch, did you?
>
> Cheers,
>
>
>
> --
> Eric Lemoine
>
> Camptocamp France SAS
> Savoie Technolac, BP 352
> 73377 Le Bourget du Lac, Cedex
>
> Tel : 00 33 4 79 44 44 96
> Mail : eric.lemoine at camptocamp.com
> http://www.camptocamp.com
>

No, sorry, I was in a hurry and had no time to test it.
Once I found a solution to workaround the problem, it was OK for me.
But I will test it later  ;)

Regards,

Olivier



More information about the Users mailing list