Merge pull request #1273 from tschaub/select-layers

Rename layerFilter option to layers and accept array for select interaction.
This commit is contained in:
Tim Schaub
2013-11-13 06:35:17 -08:00
5 changed files with 24 additions and 17 deletions

View File

@@ -92,13 +92,14 @@ var vector = new ol.layer.Vector({
})
});
var selectInteraction = new ol.interaction.Select({
layerFilter: function(layer) { return layer.get('id') == 'vector'; }
var select = new ol.interaction.Select({
layers: [vector]
});
var modify = new ol.interaction.Modify();
var map = new ol.Map({
interactions: ol.interaction.defaults().extend(
[selectInteraction, new ol.interaction.Modify()]),
interactions: ol.interaction.defaults().extend([select, modify]),
layers: [raster, vector],
renderer: ol.RendererHint.CANVAS,
target: 'map',

View File

@@ -47,12 +47,12 @@ var vector = new ol.layer.Vector({
})
});
var selectInteraction = new ol.interaction.Select({
layerFilter: function(layer) { return layer.get('id') == 'vector'; }
var select = new ol.interaction.Select({
layers: [vector]
});
var map = new ol.Map({
interactions: ol.interaction.defaults().extend([selectInteraction]),
interactions: ol.interaction.defaults().extend([select]),
layers: [raster, vector],
renderer: ol.RendererHint.CANVAS,
target: 'map',

View File

@@ -395,8 +395,8 @@
* modifier (e.g. shift key) that determines if the interaction is active
* (i.e. selection occurs) or not. By default, a click with no modifier keys
* toggles the selection.
* @property {undefined|function(ol.layer.Layer):boolean} layerFilter Filter
* function to restrict selection to a subset of layers.
* @property {undefined|Array.<ol.layer.Layer>|function(ol.layer.Layer):boolean} layers
* Layers or filter function to restrict selection to a subset of layers.
* @todo stability experimental
*/

View File

@@ -1,6 +1,7 @@
goog.provide('ol.interaction.Select');
goog.require('goog.array');
goog.require('goog.asserts');
goog.require('ol.Feature');
goog.require('ol.events.ConditionType');
goog.require('ol.events.condition');
@@ -34,12 +35,19 @@ ol.interaction.Select = function(opt_options) {
this.addCondition_ = goog.isDef(options.addCondition) ?
options.addCondition : ol.events.condition.shiftKeyOnly;
var layerFilter = options.layers;
if (!goog.isDef(layerFilter)) {
layerFilter = goog.functions.TRUE;
} else if (goog.isArray(layerFilter)) {
layerFilter = function(layer) {return options.layers.indexOf(layer) > -1;};
}
goog.asserts.assertFunction(layerFilter);
/**
* @type {null|function(ol.layer.Layer):boolean}
* @type {function(ol.layer.Layer):boolean}
* @private
*/
this.layerFilter_ = goog.isDef(options.layerFilter) ?
options.layerFilter : null;
this.layerFilter_ = layerFilter;
goog.base(this);
};
@@ -53,10 +61,8 @@ ol.interaction.Select.prototype.handleMapBrowserEvent =
function(mapBrowserEvent) {
if (this.condition_(mapBrowserEvent)) {
var map = mapBrowserEvent.map;
var layers = map.getLayerGroup().getLayersArray();
if (!goog.isNull(this.layerFilter_)) {
layers = goog.array.filter(layers, this.layerFilter_);
}
var layers = goog.array.filter(
map.getLayerGroup().getLayersArray(), this.layerFilter_);
var clear = !this.addCondition_(mapBrowserEvent);
var that = this;

View File

@@ -30,7 +30,7 @@ describe('ol.interaction.Select', function() {
vector = new ol.layer.Vector({source: new ol.source.Vector({})});
vector.addFeatures(features);
select = new ol.interaction.Select({
layerFilter: function(layer) { return layer === vector; }
layers: [vector]
});
map.getInteractions().push(select);
});