From c2a30f4ac47f764ac0bb7b9351b1422ff6d1d25b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89ric=20Lemoine?= Date: Fri, 13 Jul 2012 08:57:40 +0200 Subject: [PATCH] Replace the navigation control by two controls, namely DragPan and MouseWheelZoom. DragPan is the map default drag control. MouseWheelZoom is the map default mouse wheel control. --- src/ol.js | 3 +- src/ol/Map.js | 42 ++++++++++++---- src/ol/control/DefaultControl.js | 50 ------------------- src/ol/control/DragPan.js | 41 +++++++++++++++ .../{Navigation.js => MouseWheelZoom.js} | 36 ++++++------- src/ol/handler/Drag.js | 8 ++- src/ol/handler/MouseWheel.js | 10 ++-- test/spec/ol/handler/Drag.test.js | 7 ++- test/spec/ol/handler/MouseWheel.test.js | 7 ++- 9 files changed, 108 insertions(+), 96 deletions(-) delete mode 100644 src/ol/control/DefaultControl.js create mode 100644 src/ol/control/DragPan.js rename src/ol/control/{Navigation.js => MouseWheelZoom.js} (53%) diff --git a/src/ol.js b/src/ol.js index 2ff8dfea9a..3970586ace 100644 --- a/src/ol.js +++ b/src/ol.js @@ -2,7 +2,8 @@ goog.provide("ol"); goog.require('ol.base'); goog.require('ol.bounds'); -goog.require('ol.control.Navigation'); +goog.require('ol.control.DragPan'); +goog.require('ol.control.MouseWheelZoom'); goog.require('ol.control.Attribution'); goog.require('ol.control.Zoom'); goog.require('ol.handler.Drag'); diff --git a/src/ol/Map.js b/src/ol/Map.js index b4dd0d3c8b..fdcc4bbf46 100644 --- a/src/ol/Map.js +++ b/src/ol/Map.js @@ -91,9 +91,15 @@ ol.Map = function() { /** * @private - * @type {ol.control.DefaultControl} + * @type {ol.control.Control} */ - this.defaultControl_ = null; + this.defaultDragControl_ = null; + + /** + * @private + * @type {ol.control.Control} + */ + this.defaultMouseWheelControl_ = null; /** * @private @@ -163,7 +169,7 @@ ol.Map.DEFAULT_TILE_SIZE = 256; @const @type {Array.} */ -ol.Map.CONTROLS = ["navigation", "attribution", "zoom"]; +ol.Map.CONTROLS = ["dragpan", "mousewheelzoom", "attribution", "zoom"]; /** * @return {ol.Loc} Map center in map projection. @@ -450,17 +456,35 @@ ol.Map.prototype.addLayers = function(layers) { /** - * @returns {ol.control.DefaultControl} + * @param {ol.control.Control} control */ -ol.Map.prototype.getDefaultControl = function() { - return this.defaultControl_; +ol.Map.prototype.setDefaultDragControl = function(control) { + this.defaultDragControl_ = control; }; /** - * @param {ol.control.DefaultControl} control + * @param {ol.events.MapEvent} e */ -ol.Map.prototype.setDefaultControl = function(control) { - this.defaultControl_ = control; +ol.Map.prototype.handleDragEvent = function(e) { + if (!goog.isNull(this.defaultDragControl_)) { + this.defaultDragControl_.handleEvent(e); + } +}; + +/** + * @param {ol.control.Control} control + */ +ol.Map.prototype.setDefaultMouseWheelControl = function(control) { + this.defaultMouseWheelControl_ = control; +}; + +/** + * @param {ol.events.MapEvent} e + */ +ol.Map.prototype.handleMouseWheelEvent = function(e) { + if (!goog.isNull(this.defaultMouseWheelControl_)) { + this.defaultMouseWheelControl_.handleEvent(e); + } }; /** diff --git a/src/ol/control/DefaultControl.js b/src/ol/control/DefaultControl.js deleted file mode 100644 index 683171017d..0000000000 --- a/src/ol/control/DefaultControl.js +++ /dev/null @@ -1,50 +0,0 @@ -goog.provide('ol.control.DefaultControl'); - -goog.require('ol.control.Control'); - -/** - * @constructor - * @extends {ol.control.Control} - * @param {boolean|undefined} opt_autoActivate - */ -ol.control.DefaultControl = function(opt_autoActivate) { - goog.base(this, opt_autoActivate); - - /** - * Activate this control when it is added to a map. Default is true. - * - * @type {boolean} autoActivate - */ - this.autoActivate_ = - goog.isDef(opt_autoActivate) ? opt_autoActivate : true; - -}; -goog.inherits(ol.control.DefaultControl, ol.control.Control); - -/** @inheritDoc */ -ol.control.DefaultControl.prototype.activate = function() { - var active = goog.base(this, 'activate'); - if (active) { - this.map_.setDefaultControl(this); - } - return active; -}; - -/** @inheritDoc */ -ol.control.DefaultControl.prototype.deactivate = function() { - var inactive = goog.base(this, 'deactivate'); - if (inactive) { - this.map_.setDefaultControl(null); - } - return inactive; -}; - -/** - * @param {ol.events.MapEvent} e - */ -ol.control.DefaultControl.prototype.defaultDrag = function(e) {}; - -/** - * @param {ol.events.MapEvent} e - */ -ol.control.DefaultControl.prototype.defaultMouseWheel = function(e) {}; diff --git a/src/ol/control/DragPan.js b/src/ol/control/DragPan.js new file mode 100644 index 0000000000..b30f16e293 --- /dev/null +++ b/src/ol/control/DragPan.js @@ -0,0 +1,41 @@ +/** + * @fileoverview Drag Pan Control. + * + * This control registers itself in the map as the default drag control. + */ + +goog.provide('ol.control.DragPan'); + +goog.require('ol.control.Control'); + +/** + * @constructor + * @extends {ol.control.Control} + * @param {boolean|undefined} opt_autoActivate + */ +ol.control.DragPan = function(opt_autoActivate) { + goog.base(this, opt_autoActivate); +}; +goog.inherits(ol.control.DragPan, ol.control.Control); + +/** + * @param {ol.Map} map + */ +ol.control.DragPan.prototype.setMap = function(map) { + goog.base(this, 'setMap', map); + this.map_.setDefaultDragControl(this); +}; + +/** + * @param {ol.events.MapEvent} e + */ +ol.control.DragPan.prototype.handleEvent = function(e) { + // FIXME do we want to test ENABLE_DRAG_HANDLER here? + if (ol.ENABLE_DRAG_HANDLER) { + var deltaX = /** @type {number} */ e.deltaX; + var deltaY = /** @type {number} */ e.deltaY; + this.map_.moveByViewportPx(deltaX, deltaY); + } +}; + +ol.control.addControl('dragpan', ol.control.DragPan); diff --git a/src/ol/control/Navigation.js b/src/ol/control/MouseWheelZoom.js similarity index 53% rename from src/ol/control/Navigation.js rename to src/ol/control/MouseWheelZoom.js index 9255b412aa..e3d001ed48 100644 --- a/src/ol/control/Navigation.js +++ b/src/ol/control/MouseWheelZoom.js @@ -1,34 +1,36 @@ -goog.provide('ol.control.Navigation'); +/** + * @fileoverview Mouse Wheel Zoom Control. + * + * This control registers itself in the map as the default mouse wheel control. + */ -goog.require('ol.control.DefaultControl'); -goog.require('ol.Map'); +goog.provide('ol.control.MouseWheelZoom'); + +goog.require('ol.control.Control'); /** * @constructor - * @extends {ol.control.DefaultControl} + * @extends {ol.control.Control} * @param {boolean|undefined} opt_autoActivate */ -ol.control.Navigation = function(opt_autoActivate) { +ol.control.MouseWheelZoom = function(opt_autoActivate) { goog.base(this, opt_autoActivate); }; -goog.inherits(ol.control.Navigation, ol.control.DefaultControl); - +goog.inherits(ol.control.MouseWheelZoom, ol.control.Control); /** - * @inheritDoc + * @param {ol.Map} map */ -ol.control.Navigation.prototype.defaultDrag = function(e) { - if (ol.ENABLE_DRAG_HANDLER) { - var deltaX = /** @type {number} */ e.deltaX; - var deltaY = /** @type {number} */ e.deltaY; - this.map_.moveByViewportPx(deltaX, deltaY); - } +ol.control.MouseWheelZoom.prototype.setMap = function(map) { + goog.base(this, 'setMap', map); + this.map_.setDefaultMouseWheelControl(this); }; /** - * @inheritDoc + * @param {ol.events.MapEvent} e */ -ol.control.Navigation.prototype.defaultMouseWheel = function(e) { +ol.control.MouseWheelZoom.prototype.handleEvent = function(e) { + // FIXME do we want to test ENABLE_DRAG_HANDLER here? if (ol.ENABLE_MOUSEWHEEL_HANDLER) { var me = this, originalE = e.originalEvent; @@ -51,4 +53,4 @@ ol.control.Navigation.prototype.defaultMouseWheel = function(e) { } }; -ol.control.addControl('navigation', ol.control.Navigation); +ol.control.addControl('mousewheelzoom', ol.control.MouseWheelZoom); diff --git a/src/ol/handler/Drag.js b/src/ol/handler/Drag.js index 0b04294823..14e76ad9fa 100644 --- a/src/ol/handler/Drag.js +++ b/src/ol/handler/Drag.js @@ -4,7 +4,8 @@ * Provides a class for listening to drag sequences on a DOM element and * dispatching dragstart, drag and dragend events to a map object. * - * The default behavior for the drag event is moving the map. + * Calls handleDragEvent on the map if default is not prevented by + * listeners. */ goog.provide('ol.handler.Drag'); @@ -101,10 +102,7 @@ ol.handler.Drag.prototype.handleDrag = function(e) { this.prevY_ = e.clientY; var rt = goog.events.dispatchEvent(this.map_, newE); if (rt) { - var defaultControl = this.map_.getDefaultControl(); - if (defaultControl) { - defaultControl.defaultDrag(newE); - } + this.map_.handleDragEvent(newE); } }; diff --git a/src/ol/handler/MouseWheel.js b/src/ol/handler/MouseWheel.js index 042fd7423e..8bb39681a3 100644 --- a/src/ol/handler/MouseWheel.js +++ b/src/ol/handler/MouseWheel.js @@ -4,7 +4,8 @@ * Provides a class for listening to mousewheel events on a DOM element * and dispatching mousewheel events to a map instance. * - * The default behavior for the mousewheel event is zooming the map. + * Calls handleMouseWheelEvent on the map if default is not prevented by + * listeners. */ goog.provide('ol.handler.MouseWheel'); @@ -47,9 +48,6 @@ ol.handler.MouseWheel.prototype.handleMouseWheel = function(e) { var newE = new ol.events.MapEvent(ol.events.MapEventType.MOUSEWHEEL, e); var rt = goog.events.dispatchEvent(this.map_, newE); if (rt) { - var defaultControl = this.map_.getDefaultControl(); - if (defaultControl) { - defaultControl.defaultMouseWheel(newE); - } + this.map_.handleMouseWheelEvent(newE); } -}; \ No newline at end of file +}; diff --git a/test/spec/ol/handler/Drag.test.js b/test/spec/ol/handler/Drag.test.js index 379ea75801..f88bbfc413 100644 --- a/test/spec/ol/handler/Drag.test.js +++ b/test/spec/ol/handler/Drag.test.js @@ -61,13 +61,12 @@ describe('ol.handler.Drag', function() { }); it('calls the default action on the default control', function() { - var control = new ol.control.DefaultControl(); - spyOn(control, 'defaultDrag'); - map.setDefaultControl(control); + var control = {handleEvent: jasmine.createSpy()}; + map.setDefaultDragControl(control); var handler = new ol.handler.Drag(map, {}); handler.dragger_.dispatchEvent({type: 'drag'}); - expect(control.defaultDrag).toHaveBeenCalled(); + expect(control.handleEvent).toHaveBeenCalled(); }); }); }); diff --git a/test/spec/ol/handler/MouseWheel.test.js b/test/spec/ol/handler/MouseWheel.test.js index cd029c9401..735161c241 100644 --- a/test/spec/ol/handler/MouseWheel.test.js +++ b/test/spec/ol/handler/MouseWheel.test.js @@ -32,13 +32,12 @@ describe('ol.handler.MouseWheel', function() { }); it('calls the default action on the default control', function() { - var control = new ol.control.DefaultControl(); - spyOn(control, 'defaultMouseWheel'); - map.setDefaultControl(control); + var control = {handleEvent: jasmine.createSpy()}; + map.setDefaultMouseWheelControl(control); var handler = new ol.handler.MouseWheel(map, {}); handler.handleMouseWheel(new goog.events.MouseWheelEvent(1, 'foo', 0, 1)); - expect(control.defaultMouseWheel).toHaveBeenCalled(); + expect(control.handleEvent).toHaveBeenCalled(); }); });