Would you mind creating a pull request for this? It is easier to discuss things like this over code that can be seen in context an executed.
Thanks, Andreas. On Fri, Dec 7, 2012 at 1:24 PM, Slawomir Messner <[email protected]> wrote: > Hi, > when you use select/unselect function of SelectFeature control why > this.handlers.feature.lastFeature is set in select function but not in unset > in unselect? It's not just the asymmetry which bother me, it is also that it > would solve an issue in the following scenario: > We have a RemoveFeature control which can also remove vertices of polygons > and lines. > We use a SelectFeature to select a feature. On select it draws edit vertices > on the edges, like the ModifyFeature control and a Feature handler handles > the click on the vertices and removes it form layer and the geometry. After > removing it redraws the feature and all seams well, the feature is correctly > drawn, the vertex is gone and it's selected but unfortunately clickout > doesn't work(it works when you select and clickout without deleting vertex). > After some investigation I found out that lastFeature of the feature handler > in SelectFeature control is the deleted vertex. So on click outside the > feature the handler runs handle method where it sets lastFeature to null, > because it is removed from layer. > if(this.lastFeature && !this.lastFeature.layer) { > // last feature has been destroyed > this.lastFeature = null; > } > so it never gets some lines below: > } else { > if(this.lastFeature && (previouslyIn || click)) { > this.triggerCallback(type, 'out', [this.lastFeature]); > } > } > there it should call the clickout callback. So I tried it with unselect and > than select the feature programmatically after deleting the vertex, to reset > the select, but this didn't help. The only thing that helps is when I set > the lastFeature to null before reselect or to set it to the feature without > . Why not "simple" do something like: > "this.selectFeature.handlers.feature.lastFeature = this.feature" > because it looks ugly, uses some attributes which should be private and I > saw the asymmetry in the code of the SelectFeature and asked myself if it's > a bug or a feature. > Is there something why not change the unselect method of SelectFeature to: > unselect: function(feature) { > var layer = feature.layer; > // Store feature style for restoration later > this.unhighlight(feature); > // if the feature handler isn't involved in the feature > // selection (because the feature is selected programatically) > // we fake the > // feature handler to allow unselecting on clickout > if(this.handlers.feature.lastFeature) { > this.handlers.feature.lastFeature = null; > } > OpenLayers.Util.removeItem(layer.selectedFeatures, feature); > layer.events.triggerEvent("featureunselected", {feature: feature}); > this.onUnselect.call(this.scope, feature); > }, > It doesn't crash the tests. > Btw: > I think there is a documentation error in OL.Handler.Feauture deactivate > function it should be: > > /** > * Method: deactivate > * Turn off the handler. Returns false if the handler was not active. > * > * Returns: > * {Boolean} > */ > > Keep up the excellent work guys, we look forward to OL3. > Regards > Slawomir > > _______________________________________________ > Users mailing list > [email protected] > http://lists.osgeo.org/mailman/listinfo/openlayers-users -- Andreas Hocevar OpenGeo - http://opengeo.org/ Expert service straight from the developers. _______________________________________________ Users mailing list [email protected] http://lists.osgeo.org/mailman/listinfo/openlayers-users
