From f7d62f054c09c8569d76dd12b770060fc0b9afa4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Harrtell?= Date: Thu, 2 Apr 2015 10:41:43 +0200 Subject: [PATCH 1/2] High level Modify interaction events --- externs/oli.js | 13 +++++++ src/ol/interaction/modifyinteraction.js | 52 +++++++++++++++++++++++++ 2 files changed, 65 insertions(+) diff --git a/externs/oli.js b/externs/oli.js index 0f0acb4896..d5c1846b31 100644 --- a/externs/oli.js +++ b/externs/oli.js @@ -49,6 +49,19 @@ oli.DrawEvent.prototype.feature; +/** + * @interface + */ +oli.ModifyEvent = function() {}; + + +/** + * @type {ol.Collection.} + */ +oli.ModifyEvent.prototype.features; + + + /** * @interface */ diff --git a/src/ol/interaction/modifyinteraction.js b/src/ol/interaction/modifyinteraction.js index e90df9d183..c8e0a28f8a 100644 --- a/src/ol/interaction/modifyinteraction.js +++ b/src/ol/interaction/modifyinteraction.js @@ -3,6 +3,7 @@ goog.provide('ol.interaction.Modify'); goog.require('goog.array'); goog.require('goog.asserts'); goog.require('goog.events'); +goog.require('goog.events.Event'); goog.require('goog.functions'); goog.require('ol.Collection'); goog.require('ol.CollectionEventType'); @@ -26,6 +27,52 @@ goog.require('ol.structs.RBush'); goog.require('ol.style.Style'); +/** + * @enum {string} + */ +ol.ModifyEventType = { + /** + * Triggered upon feature modification start + * @event ol.ModifyEvent#modifystart + * @api stable + */ + MODIFYSTART: 'modifystart', + /** + * Triggered upon feature modification end + * @event ol.ModifyEvent#modifyend + * @api stable + */ + MODIFYEND: 'modifyend' +}; + + + +/** + * @classdesc + * Events emitted by {@link ol.interaction.Modify} instances are instances of + * this type. + * + * @constructor + * @extends {goog.events.Event} + * @implements {oli.ModifyEvent} + * @param {ol.ModifyEventType} type Type. + * @param {ol.Collection.} features The features modified. + */ +ol.ModifyEvent = function(type, features) { + + goog.base(this, type); + + /** + * The feature being modified. + * @type {ol.Collection.} + * @api stable + */ + this.features = features; + +}; +goog.inherits(ol.ModifyEvent, goog.events.Event); + + /** * @typedef {{depth: (Array.|undefined), * feature: ol.Feature, @@ -44,6 +91,7 @@ ol.interaction.SegmentDataType; * @constructor * @extends {ol.interaction.Pointer} * @param {olx.interaction.ModifyOptions} options Options. + * @fires ol.ModifyEvent * @api stable */ ol.interaction.Modify = function(options) { @@ -466,6 +514,8 @@ ol.interaction.Modify.handleDownEvent_ = function(evt) { for (i = insertVertices.length - 1; i >= 0; --i) { this.insertVertex_.apply(this, insertVertices[i]); } + this.dispatchEvent(new ol.ModifyEvent(ol.ModifyEventType.MODIFYSTART, + this.features_)); } return !goog.isNull(this.vertexFeature_); }; @@ -537,6 +587,8 @@ ol.interaction.Modify.handleUpEvent_ = function(evt) { this.rBush_.update(ol.extent.boundingExtent(segmentData.segment), segmentData); } + this.dispatchEvent(new ol.ModifyEvent(ol.ModifyEventType.MODIFYEND, + this.features_)); return false; }; From f81e36d8e00047f6ef443d05b716dc5c2a3fb3ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Harrtell?= Date: Wed, 1 Jul 2015 20:51:04 +0200 Subject: [PATCH 2/2] Add mapBrowserPointerEvent property to ModifyEvent --- externs/oli.js | 6 ++++++ src/ol/interaction/modifyinteraction.js | 24 ++++++++++++++++-------- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/externs/oli.js b/externs/oli.js index d5c1846b31..659148c77c 100644 --- a/externs/oli.js +++ b/externs/oli.js @@ -61,6 +61,12 @@ oli.ModifyEvent = function() {}; oli.ModifyEvent.prototype.features; +/** + * @type {ol.MapBrowserPointerEvent} + */ +oli.ModifyEvent.prototype.mapBrowserPointerEvent; + + /** * @interface diff --git a/src/ol/interaction/modifyinteraction.js b/src/ol/interaction/modifyinteraction.js index c8e0a28f8a..b58206fb2d 100644 --- a/src/ol/interaction/modifyinteraction.js +++ b/src/ol/interaction/modifyinteraction.js @@ -34,13 +34,13 @@ ol.ModifyEventType = { /** * Triggered upon feature modification start * @event ol.ModifyEvent#modifystart - * @api stable + * @api */ MODIFYSTART: 'modifystart', /** * Triggered upon feature modification end * @event ol.ModifyEvent#modifyend - * @api stable + * @api */ MODIFYEND: 'modifyend' }; @@ -57,18 +57,26 @@ ol.ModifyEventType = { * @implements {oli.ModifyEvent} * @param {ol.ModifyEventType} type Type. * @param {ol.Collection.} features The features modified. + * @param {ol.MapBrowserPointerEvent} mapBrowserPointerEvent Associated + * {@link ol.MapBrowserPointerEvent}. */ -ol.ModifyEvent = function(type, features) { +ol.ModifyEvent = function(type, features, mapBrowserPointerEvent) { goog.base(this, type); /** - * The feature being modified. + * The features being modified. * @type {ol.Collection.} - * @api stable + * @api */ this.features = features; + /** + * Associated {@link ol.MapBrowserPointerEvent}. + * @type {ol.MapBrowserPointerEvent} + * @api + */ + this.mapBrowserPointerEvent = mapBrowserPointerEvent; }; goog.inherits(ol.ModifyEvent, goog.events.Event); @@ -92,7 +100,7 @@ ol.interaction.SegmentDataType; * @extends {ol.interaction.Pointer} * @param {olx.interaction.ModifyOptions} options Options. * @fires ol.ModifyEvent - * @api stable + * @api */ ol.interaction.Modify = function(options) { @@ -515,7 +523,7 @@ ol.interaction.Modify.handleDownEvent_ = function(evt) { this.insertVertex_.apply(this, insertVertices[i]); } this.dispatchEvent(new ol.ModifyEvent(ol.ModifyEventType.MODIFYSTART, - this.features_)); + this.features_, evt)); } return !goog.isNull(this.vertexFeature_); }; @@ -588,7 +596,7 @@ ol.interaction.Modify.handleUpEvent_ = function(evt) { segmentData); } this.dispatchEvent(new ol.ModifyEvent(ol.ModifyEventType.MODIFYEND, - this.features_)); + this.features_, evt)); return false; };