diff --git a/src/ol.js b/src/ol.js index 3970586ace..2ff8dfea9a 100644 --- a/src/ol.js +++ b/src/ol.js @@ -2,8 +2,7 @@ goog.provide("ol"); goog.require('ol.base'); goog.require('ol.bounds'); -goog.require('ol.control.DragPan'); -goog.require('ol.control.MouseWheelZoom'); +goog.require('ol.control.Navigation'); 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 fdcc4bbf46..b4dd0d3c8b 100644 --- a/src/ol/Map.js +++ b/src/ol/Map.js @@ -91,15 +91,9 @@ ol.Map = function() { /** * @private - * @type {ol.control.Control} + * @type {ol.control.DefaultControl} */ - this.defaultDragControl_ = null; - - /** - * @private - * @type {ol.control.Control} - */ - this.defaultMouseWheelControl_ = null; + this.defaultControl_ = null; /** * @private @@ -169,7 +163,7 @@ ol.Map.DEFAULT_TILE_SIZE = 256; @const @type {Array.} */ -ol.Map.CONTROLS = ["dragpan", "mousewheelzoom", "attribution", "zoom"]; +ol.Map.CONTROLS = ["navigation", "attribution", "zoom"]; /** * @return {ol.Loc} Map center in map projection. @@ -456,35 +450,17 @@ ol.Map.prototype.addLayers = function(layers) { /** - * @param {ol.control.Control} control + * @returns {ol.control.DefaultControl} */ -ol.Map.prototype.setDefaultDragControl = function(control) { - this.defaultDragControl_ = control; +ol.Map.prototype.getDefaultControl = function() { + return this.defaultControl_; }; /** - * @param {ol.events.MapEvent} e + * @param {ol.control.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); - } +ol.Map.prototype.setDefaultControl = function(control) { + this.defaultControl_ = control; }; /** diff --git a/src/ol/control/DefaultControl.js b/src/ol/control/DefaultControl.js new file mode 100644 index 0000000000..683171017d --- /dev/null +++ b/src/ol/control/DefaultControl.js @@ -0,0 +1,50 @@ +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 deleted file mode 100644 index b30f16e293..0000000000 --- a/src/ol/control/DragPan.js +++ /dev/null @@ -1,41 +0,0 @@ -/** - * @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/MouseWheelZoom.js b/src/ol/control/Navigation.js similarity index 53% rename from src/ol/control/MouseWheelZoom.js rename to src/ol/control/Navigation.js index e3d001ed48..9255b412aa 100644 --- a/src/ol/control/MouseWheelZoom.js +++ b/src/ol/control/Navigation.js @@ -1,36 +1,34 @@ -/** - * @fileoverview Mouse Wheel Zoom Control. - * - * This control registers itself in the map as the default mouse wheel control. - */ +goog.provide('ol.control.Navigation'); -goog.provide('ol.control.MouseWheelZoom'); - -goog.require('ol.control.Control'); +goog.require('ol.control.DefaultControl'); +goog.require('ol.Map'); /** * @constructor - * @extends {ol.control.Control} + * @extends {ol.control.DefaultControl} * @param {boolean|undefined} opt_autoActivate */ -ol.control.MouseWheelZoom = function(opt_autoActivate) { +ol.control.Navigation = function(opt_autoActivate) { goog.base(this, opt_autoActivate); }; -goog.inherits(ol.control.MouseWheelZoom, ol.control.Control); +goog.inherits(ol.control.Navigation, ol.control.DefaultControl); + /** - * @param {ol.Map} map + * @inheritDoc */ -ol.control.MouseWheelZoom.prototype.setMap = function(map) { - goog.base(this, 'setMap', map); - this.map_.setDefaultMouseWheelControl(this); +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); + } }; /** - * @param {ol.events.MapEvent} e + * @inheritDoc */ -ol.control.MouseWheelZoom.prototype.handleEvent = function(e) { - // FIXME do we want to test ENABLE_DRAG_HANDLER here? +ol.control.Navigation.prototype.defaultMouseWheel = function(e) { if (ol.ENABLE_MOUSEWHEEL_HANDLER) { var me = this, originalE = e.originalEvent; @@ -53,4 +51,4 @@ ol.control.MouseWheelZoom.prototype.handleEvent = function(e) { } }; -ol.control.addControl('mousewheelzoom', ol.control.MouseWheelZoom); +ol.control.addControl('navigation', ol.control.Navigation); diff --git a/src/ol/handler/Drag.js b/src/ol/handler/Drag.js index 14e76ad9fa..0b04294823 100644 --- a/src/ol/handler/Drag.js +++ b/src/ol/handler/Drag.js @@ -4,8 +4,7 @@ * Provides a class for listening to drag sequences on a DOM element and * dispatching dragstart, drag and dragend events to a map object. * - * Calls handleDragEvent on the map if default is not prevented by - * listeners. + * The default behavior for the drag event is moving the map. */ goog.provide('ol.handler.Drag'); @@ -102,7 +101,10 @@ ol.handler.Drag.prototype.handleDrag = function(e) { this.prevY_ = e.clientY; var rt = goog.events.dispatchEvent(this.map_, newE); if (rt) { - this.map_.handleDragEvent(newE); + var defaultControl = this.map_.getDefaultControl(); + if (defaultControl) { + defaultControl.defaultDrag(newE); + } } }; diff --git a/src/ol/handler/MouseWheel.js b/src/ol/handler/MouseWheel.js index 8bb39681a3..042fd7423e 100644 --- a/src/ol/handler/MouseWheel.js +++ b/src/ol/handler/MouseWheel.js @@ -4,8 +4,7 @@ * Provides a class for listening to mousewheel events on a DOM element * and dispatching mousewheel events to a map instance. * - * Calls handleMouseWheelEvent on the map if default is not prevented by - * listeners. + * The default behavior for the mousewheel event is zooming the map. */ goog.provide('ol.handler.MouseWheel'); @@ -48,6 +47,9 @@ 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) { - this.map_.handleMouseWheelEvent(newE); + var defaultControl = this.map_.getDefaultControl(); + if (defaultControl) { + defaultControl.defaultMouseWheel(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 d025832ee2..8d278343f0 100644 --- a/test/spec/ol/handler/Drag.test.js +++ b/test/spec/ol/handler/Drag.test.js @@ -61,12 +61,13 @@ describe('ol.handler.Drag', function() { }); it('calls the default action on the default control', function() { - var control = {handleEvent: jasmine.createSpy()}; - map.setDefaultDragControl(control); + var control = new ol.control.DefaultControl(); + spyOn(control, 'defaultDrag'); + map.setDefaultControl(control); var handler = new ol.handler.Drag(map, {}); handler.dragger_.dispatchEvent({type: 'drag'}); - expect(control.handleEvent).toHaveBeenCalled(); + expect(control.defaultDrag).toHaveBeenCalled(); }); }); }); diff --git a/test/spec/ol/handler/MouseWheel.test.js b/test/spec/ol/handler/MouseWheel.test.js index 717124f7a9..208ac2889e 100644 --- a/test/spec/ol/handler/MouseWheel.test.js +++ b/test/spec/ol/handler/MouseWheel.test.js @@ -32,12 +32,13 @@ describe('ol.handler.MouseWheel', function() { }); it('calls the default action on the default control', function() { - var control = {handleEvent: jasmine.createSpy()}; - map.setDefaultMouseWheelControl(control); + var control = new ol.control.DefaultControl(); + spyOn(control, 'defaultMouseWheel'); + map.setDefaultControl(control); var handler = new ol.handler.MouseWheel(map, {}); handler.handleMouseWheel(new goog.events.MouseWheelEvent(1, 'foo', 0, 1)); - expect(control.handleEvent).toHaveBeenCalled(); + expect(control.defaultMouseWheel).toHaveBeenCalled(); }); });