Extend goog.events.Event for custom vector layer events

Vector events include features and extents.  In the case of feature change events, the extents array will include old and new extents for features with modified geometries.w
This commit is contained in:
Tim Schaub
2013-10-03 11:25:30 -06:00
parent 97b56add70
commit 64dd5cfc1f
2 changed files with 63 additions and 50 deletions

View File

@@ -1,8 +1,9 @@
goog.provide('ol.layer.Vector');
goog.provide('ol.layer.VectorLayerEventType');
goog.provide('ol.layer.VectorEventType');
goog.require('goog.array');
goog.require('goog.asserts');
goog.require('goog.events.Event');
goog.require('goog.object');
goog.require('ol.Feature');
goog.require('ol.extent');
@@ -127,25 +128,6 @@ ol.layer.FeatureCache.prototype.remove = function(feature) {
};
/**
* @enum {string}
*/
ol.layer.VectorLayerEventType = {
ADD: 'add',
CHANGE: 'featurechange',
REMOVE: 'remove',
INTENTCHANGE: 'intentchange'
};
/**
* @typedef {{extent: (ol.Extent|undefined),
* features: (Array.<ol.Feature>|undefined),
* type: ol.layer.VectorLayerEventType}}
*/
ol.layer.VectorLayerEventObject;
/**
* @constructor
@@ -200,11 +182,8 @@ ol.layer.Vector.prototype.addFeatures = function(features) {
ol.extent.extend(extent, geometry.getBounds());
}
}
this.dispatchEvent(/** @type {ol.layer.VectorLayerEventObject} */ ({
extent: extent,
features: features,
type: ol.layer.VectorLayerEventType.ADD
}));
this.dispatchEvent(new ol.layer.VectorEvent(ol.layer.VectorEventType.ADD,
features, [extent]));
};
@@ -213,9 +192,8 @@ ol.layer.Vector.prototype.addFeatures = function(features) {
*/
ol.layer.Vector.prototype.clear = function() {
this.featureCache_.clear();
this.dispatchEvent(/** @type {ol.layer.VectorLayerEventObject} */ ({
type: ol.layer.VectorLayerEventType.CHANGE
}));
this.dispatchEvent(
new ol.layer.VectorEvent(ol.layer.VectorEventType.CHANGE, [], []));
};
@@ -409,11 +387,8 @@ ol.layer.Vector.prototype.removeFeatures = function(features) {
ol.extent.extend(extent, geometry.getBounds());
}
}
this.dispatchEvent(/** @type {ol.layer.VectorLayerEventObject} */ ({
extent: extent,
features: features,
type: ol.layer.VectorLayerEventType.REMOVE
}));
this.dispatchEvent(new ol.layer.VectorEvent(ol.layer.VectorEventType.REMOVE,
features, [extent]));
};
@@ -437,11 +412,8 @@ ol.layer.Vector.prototype.setRenderIntent =
ol.extent.extend(extent, geometry.getBounds());
}
}
this.dispatchEvent(/** @type {ol.layer.VectorLayerEventObject} */ ({
extent: extent,
features: features,
type: ol.layer.VectorLayerEventType.INTENTCHANGE
}));
this.dispatchEvent(new ol.layer.VectorEvent(
ol.layer.VectorEventType.INTENTCHANGE, features, [extent]));
};
@@ -462,3 +434,40 @@ ol.layer.Vector.uidTransformFeatureInfo = function(features) {
function(feature) { return goog.getUid(feature); });
return uids.join(', ');
};
/**
* @constructor
* @extends {goog.events.Event}
* @param {string} type Event type.
* @param {Array.<ol.Feature>} features Features associated with the event.
* @param {Array.<ol.Extent>} extents Any extents associated with the event.
*/
ol.layer.VectorEvent = function(type, features, extents) {
goog.base(this, type);
/**
* @type {Array.<ol.Feature>}
*/
this.features = features;
/**
* @type {Array.<ol.Extent>}
*/
this.extents = extents;
};
goog.inherits(ol.layer.VectorEvent, goog.events.Event);
/**
* @enum {string}
*/
ol.layer.VectorEventType = {
ADD: 'featureadd',
CHANGE: 'featurechange',
REMOVE: 'featureremove',
INTENTCHANGE: 'intentchange'
};