[OpenLayers-Users] Event "featureunhighlighted" not triggered
Eric Lemoine
eric.lemoine at camptocamp.com
Thu Mar 18 06:58:53 EDT 2010
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
More information about the Users
mailing list