refactoring SelectFeature.js a bit - adding onSelect and onUnselect properties that control users can set to respond to feature selections

git-svn-id: http://svn.openlayers.org/trunk/openlayers@2895 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
This commit is contained in:
Tim Schaub
2007-03-26 03:33:17 +00:00
parent 8e3856b4ac
commit d82108c2d7

View File

@@ -25,6 +25,18 @@ OpenLayers.Control.SelectFeature.prototype =
*/ */
hover: false, hover: false,
/**
* @type {Function} Optional function to be called when a feature is selected.
* The function should expect to be called with a geometry.
*/
onSelect: function() {},
/**
* @type {Function} Optional function to be called when a feature is unselected.
* The function should expect to be called with a geometry.
*/
onUnselect: function() {},
/** /**
* @type {OpenLayers.Layer.Vector} * @type {OpenLayers.Layer.Vector}
*/ */
@@ -73,38 +85,22 @@ OpenLayers.Control.SelectFeature.prototype =
if(geometry.parent) { if(geometry.parent) {
geometry = geometry.parent; geometry = geometry.parent;
} }
// Store feature style for restoration later
if(geometry.feature.originalStyle == null) {
geometry.feature.originalStyle = geometry.feature.style;
}
if (this.multiple) { if (this.multiple) {
if(OpenLayers.Util.indexOf(this.layer.selectedFeatures, geometry.feature) > -1) { if(OpenLayers.Util.indexOf(this.layer.selectedFeatures, geometry.feature) > -1) {
this.layer.renderer.drawGeometry(geometry, this.unselect(geometry);
geometry.feature.originalStyle);
OpenLayers.Util.removeItem(this.layer.selectedFeatures,
geometry.feature);
} else { } else {
this.layer.selectedFeatures.push(geometry.feature); this.select(geometry);
this.layer.renderer.drawGeometry(geometry, this.selectStyle);
} }
} else { } else {
if(OpenLayers.Util.indexOf(this.layer.selectedFeatures, geometry.feature) > -1) { if(OpenLayers.Util.indexOf(this.layer.selectedFeatures, geometry.feature) > -1) {
this.layer.renderer.drawGeometry(geometry, this.unselect(geometry);
geometry.feature.originalStyle);
OpenLayers.Util.removeItem(this.layer.selectedFeatures,
geometry.feature);
} else { } else {
if (this.layer.selectedFeatures) { if (this.layer.selectedFeatures) {
for (var i = 0; i < this.layer.selectedFeatures.length; i++) { for (var i = 0; i < this.layer.selectedFeatures.length; i++) {
this.layer.renderer.drawGeometry( this.unselect(this.layer.selectedFeatures[i].geometry);
this.layer.selectedFeatures[i].geometry,
this.layer.selectedFeatures[i].originalStyle);
} }
OpenLayers.Util.clearArray(this.layer.selectedFeatures);
} }
this.layer.selectedFeatures.push(geometry.feature); this.select(geometry);
this.layer.renderer.drawGeometry(geometry, this.selectStyle);
} }
} }
}, },
@@ -121,14 +117,8 @@ OpenLayers.Control.SelectFeature.prototype =
if(geometry.parent) { if(geometry.parent) {
geometry = geometry.parent; geometry = geometry.parent;
} }
// Store feature style for restoration later
if(geometry.feature.originalStyle == null) {
geometry.feature.originalStyle = geometry.feature.style;
}
if(!(OpenLayers.Util.indexOf(this.layer.selectedFeatures, geometry.feature) > -1)) { if(!(OpenLayers.Util.indexOf(this.layer.selectedFeatures, geometry.feature) > -1)) {
this.layer.selectedFeatures.push(geometry.feature); this.select(geometry);
this.layer.renderer.drawGeometry(geometry, this.selectStyle);
} }
}, },
@@ -144,8 +134,37 @@ OpenLayers.Control.SelectFeature.prototype =
if(geometry.parent) { if(geometry.parent) {
geometry = geometry.parent; geometry = geometry.parent;
} }
this.unselect(geometry);
},
/**
* Add feature to the layer's selectedFeature array, render the feature as
* selected, and call the onSelect function.
* @param {OpenLayers.Geometry} geometry
*/
select: function(geometry) {
// Store feature style for restoration later
if(geometry.feature.originalStyle == null) {
geometry.feature.originalStyle = geometry.feature.style;
}
this.layer.selectedFeatures.push(geometry.feature);
this.layer.renderer.drawGeometry(geometry, this.selectStyle);
this.onSelect(geometry);
},
/**
* Remove feature from the layer's selectedFeature array, render the feature as
* normal, and call the onUnselect function.
* @param {OpenLayers.Geometry} geometry
*/
unselect: function(geometry) {
// Store feature style for restoration later
if(geometry.feature.originalStyle == null) {
geometry.feature.originalStyle = geometry.feature.style;
}
this.layer.renderer.drawGeometry(geometry, geometry.feature.originalStyle); this.layer.renderer.drawGeometry(geometry, geometry.feature.originalStyle);
OpenLayers.Util.removeItem(this.layer.selectedFeatures, geometry.feature); OpenLayers.Util.removeItem(this.layer.selectedFeatures, geometry.feature);
this.onUnselect(geometry);
}, },
/** Set the map property for the control. /** Set the map property for the control.