I got it working : 2 select features, 1 select on click, the other highlight only on hover... Both could select, but select on hover and click at the same time is not useful.
I didn't need to have each control to have their unique array of selected features to do so. The concept of "selected feature" is not the same as "highlighted feature" so I didn't want to touch that. Instead, the layer has a highlightedFeature property and corresponding events. The only issue remaining is how can I change the style of a feature given a renderIntent without changing the renderIntent of the feature. This changes the renderIntent of the feature : var highlightStyle = this.highlightStyle || this.renderIntent; this.layer.drawFeature(feature, highlightStyle); This doesn't change the renderIntent of the feature : var style = { fillColor:"purple", strokeColor: "black", strokeWidth: 2, strokeOpacity: 1, fillOpacity: 0.8 }; this.layer.drawFeature(feature, style); Any hint ? Alexandre Alexandre Dube wrote: > Hey Eric, Ivan, > > That issue could occur if both controls would actually change the > renderIntent of the feature ( without actually selecting the feature ). > > Let's assume that you can only have one feature hovered at a time ( > only one feature can be hovered by the mouse). That said, we could have > its renderIntent copied to a this.oldRenderIntent local property, then > on "beforefeatureunselected" restore the feature with its old > renderIntent. What do you think ? Simple but that could work. > > Also, can we agree on this : 2 SelectFeature controls both doing > selection by click or both by hover are not compatible with multiple > styling, so let's forget about this for now. > > I'll definitively have to try all this soon. > > Alexandre > > Eric Lemoine wrote: > >> Hi >> >> A first note. The current select feature implementation should >> accomodate this use case: two controls on the same layer, one working >> on click and the other on hover, only one of them actually changing >> the feature style. This is achievable by registering a >> beforefeatureselected listener, and have this listener return false. >> Adding beforefeatureunselected might help fully accomodate that use >> case. >> >> Now if we want the two controls to do feature styling, we need the >> stuff I mentioned previously - per-control selectedFeatures arrays and >> events. But this is unfortunately not sufficient. Use case: two >> controls, one working on click and the other on hover, both doing >> feature styling but with different render intents. If we have this >> sequence "mouse goes over feature, mouse clicks feature, mouse goes >> out of feature", then the feature ends up being rendered with the >> "default" render intent, while it's still selected from the click >> control's perspective. In most cases, this isn't desirable I think. >> >> At this point I don't have a solution to the above issue. >> >> Eric >> >> 2009/1/20, Alexandre Dube <ad...@mapgears.com>: >> >> >>> Hi Ivan, Eric, >>> >>> I was actually thinking a similar idea. The more I thought about it, >>> the more I thought about copying/pasting the SelectFeature control, make >>> some changes to the copy and name it HighlightFeature. But Eric's idea >>> is much better. >>> >>> Having the control itself know which feature it has selected + having >>> its own events could enable the possibility of having multiple >>> SelectFeature controls for a single layer. Having both selecting on >>> hover and/or click won't matter except for the style and the >>> renderIntent applied to the selected feature. I guess the last declared >>> control would have the last word of determining those... >>> >>> About that, what if we want 2 different colors for each ctrl ? Having >>> 2 selectfeature ctrls doing the same thing ( hover and click ) is not >>> very logic, but let's say one select on hover, the other on click, it >>> would be nice be able to have 2 different styles for each action. But >>> how could we do that ? (I guess I don't fully understand the whole >>> renderIntent stuff yet... Could we specify a specific renderIntent for >>> the selectFeature ? Could "select" be the default value and we could be >>> able to set our own ?) To do so without changing the renderIntent of >>> the feature is to change its style only, without selecting it. >>> >>> Ivan's idea (selectOnHover:false) sounds good. I'd like to see the >>> code and try it. Ivan, could you share what you've done ? At the same >>> time, I'd like to try to add events to the control and its >>> selectedFeatures array, like Eric said. >>> >>> Finally, I would like to know more about what you think about all this. >>> >>> Best regards, >>> >>> Alexandre >>> >>> Ivan Grcic wrote: >>> >>> >>>> On Mon, Jan 19, 2009 at 10:19 PM, Eric Lemoine <eric....@gmail.com> wrote: >>>> >>>> >>>> >>>>> On Mon, Jan 19, 2009 at 3:30 PM, Alexandre Dube <ad...@mapgears.com> >>>>> wrote: >>>>> >>>>> >>>>> >>>>>> Hi Eric, >>>>>> >>>>>> I took a look at the SelectFeature control. Now I understand what you >>>>>> meant and it makes sense. Also, it's also making sense to have this >>>>>> control >>>>>> have the possibility to highlight on hover or on click. >>>>>> >>>>>> "beforefeaturehighlighted" and "featurehighlighted" events make sense, >>>>>> but >>>>>> a "featureunhighlighted" (or some other term meaning that the feature >>>>>> was >>>>>> highlighted and is now no more) would also be useful. >>>>>> >>>>>> >>>>>> >>>>> Alexandre, >>>>> >>>>> The more I think about this highlight feature control the more I think >>>>> there's no room for both a select feature and a highlight feature >>>>> controls. >>>>> >>>>> >>>>> >>>>> >>>> Same opinion here. We already have a bunch of controls, and now adding >>>> two very similar ones... >>>> >>>> Currently im using slightly modified SelectFeature control, i added >>>> one more option to it: selectOnHover, thats how i quickly solved the >>>> problem of only highlighting feature without selecting it. >>>> >>>> If selectOnHover is true, feature is selected&higlighted (select >>>> method is called) on hover, if its false feature is only higlighted, >>>> not selected. >>>> >>>> >>>> >>>> >>>>> What causes people trouble is that they can't use two select feature >>>>> controls, one in hover mode and the other in click mode. This is >>>>> because once a feature is hovered it is selected, and cannot be >>>>> selected again when it is clicked. >>>>> >>>>> Maybe we could modify the select feature control so that (1) it >>>>> optionally uses its own selectedFeatures array, as opposed to relying >>>>> on the layer's, and (b) defines its own "beforefeatureselected", >>>>> "featureselected" and "featureunselected" event types. In this way, >>>>> one should be able to use two select feature controls, and get >>>>> "featureselected" events, from the first control when features are >>>>> hovered and from the second control when features are clicked. >>>>> >>>>> Tell me what you think, >>>>> >>>>> >>>>> >>>>> >>>> >>>> >>>>> -- >>>>> Eric >>>>> _______________________________________________ >>>>> Users mailing list >>>>> Users@openlayers.org >>>>> http://openlayers.org/mailman/listinfo/users >>>>> >>>>> >>>>> >>>>> >>>> >>>> >>> -- >>> Alexandre Dubé >>> Mapgears >>> www.mapgears.com >>> >>> >>> >>> > > > -- Alexandre Dubé Mapgears www.mapgears.com _______________________________________________ Users mailing list Users@openlayers.org http://openlayers.org/mailman/listinfo/users