Files
openlayers/lib/OpenLayers/Control/SelectFeature.js
crschmidt 3ca974acec Merge vector-2.4 branch back to trunk.
svn merge sandbox/vector-2.4/@2307 sandbox/vector-2.4/@HEAD trunk/openlayers/


git-svn-id: http://svn.openlayers.org/trunk/openlayers@2803 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
2007-03-16 13:23:56 +00:00

107 lines
3.5 KiB
JavaScript

/* Copyright (c) 2006 MetaCarta, Inc., published under a modified BSD license.
* See http://svn.openlayers.org/trunk/openlayers/repository-license.txt
* for the full text of the license. */
/**
* Draws features on a vector layer when active.
*
* @class
* @requires OpenLayers/Control.js
* @requires OpenLayers/Feature/Vector.js
*/
OpenLayers.Control.SelectFeature = OpenLayers.Class.create();
OpenLayers.Control.SelectFeature.prototype =
OpenLayers.Class.inherit(OpenLayers.Control, {
/**
* @type {OpenLayers.Layer.Vector}
*/
layer: null,
/**
* @type {OpenLayers.Handler.Select}
*/
handler: null,
/**
* @type {Object} The functions that are sent to the handler for callback
*/
callbacks: {},
/**
* @type {Object} Hash of styles
*/
selectStyle: OpenLayers.Feature.Vector.style['select'],
/**
* @type {Object} Hash of styles
* @private
*/
originalStyle: null,
/**
* @type {Boolean} Allow selection of multiple geometries
*/
multiple: false,
/**
* @param {OpenLayers.Layer.Vector} layer
* @param {OpenLayers.Handler} handler
* @param {Object} options
*/
initialize: function(layer, options) {
OpenLayers.Control.prototype.initialize.apply(this, [options]);
this.callbacks = OpenLayers.Util.extend({down: this.downFeature},
this.callbacks);
this.layer = layer;
this.handler = new OpenLayers.Handler.Select(this, layer, this.callbacks);
},
/**
*
*/
downFeature: function(geometry) {
// Store feature style for restoration later
if(geometry.feature.originalStyle == null) {
geometry.feature.originalStyle = geometry.feature.style;
}
if (this.multiple) {
if(OpenLayers.Util.indexOf(this.layer.selectedFeatures, geometry.feature) > -1) {
this.layer.renderer.drawGeometry(geometry, geometry.feature.originalStyle);
OpenLayers.Util.removeItem(this.layer.selectedFeatures, geometry.feature);
} else {
this.layer.selectedFeatures.push(geometry.feature);
this.layer.renderer.drawGeometry(geometry, this.selectStyle);
}
} else {
if(OpenLayers.Util.indexOf(this.layer.selectedFeatures, geometry.feature) > -1) {
this.layer.renderer.drawGeometry(geometry, geometry.feature.originalStyle);
OpenLayers.Util.removeItem(this.layer.selectedFeatures, geometry.feature);
} else {
if (this.layer.selectedFeatures) {
for (var i = 0; i < this.layer.selectedFeatures.length; i++) {
this.layer.renderer.drawGeometry(this.layer.selectedFeatures[i].geometry, this.layer.selectedFeatures[i].originalStyle);
}
OpenLayers.Util.clearArray(this.layer.selectedFeatures);
}
this.layer.selectedFeatures.push(geometry.feature);
this.layer.renderer.drawGeometry(geometry, this.selectStyle);
}
}
},
/** Set the map property for the control.
*
* @param {OpenLayers.Map} map
*/
setMap: function(map) {
this.handler.setMap(map);
OpenLayers.Control.prototype.setMap.apply(this, arguments);
},
/** @final @type String */
CLASS_NAME: "OpenLayers.Control.SelectFeature"
});