From bde61a0b4b9d6fff42bcfb88137992dc88eb5daa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89ric=20Lemoine?= Date: Fri, 1 Feb 2013 18:10:37 +0100 Subject: [PATCH] Simplify control architecture --- examples/side-by-side.js | 15 +++-- src/objectliterals.exports | 3 +- src/ol/control/attribution.exports | 1 + src/ol/control/mouseposition.exports | 1 + src/ol/control/zoom.exports | 2 +- src/ol/map.exports | 1 - src/ol/map.js | 83 ++++++++-------------------- 7 files changed, 37 insertions(+), 69 deletions(-) diff --git a/examples/side-by-side.js b/examples/side-by-side.js index 4c5bb354b7..488793f74e 100644 --- a/examples/side-by-side.js +++ b/examples/side-by-side.js @@ -42,12 +42,13 @@ var domMap = new ol.Map({ view: view }); -domMap.getControls().push(new ol.control.MousePosition({ +var domMousePosition = new ol.control.MousePosition({ coordinateFormat: ol.Coordinate.toStringHDMS, projection: ol.Projection.getFromCode('EPSG:4326'), target: document.getElementById('domMousePosition'), undefinedHTML: ' ' -})); +}); +domMousePosition.setMap(domMap); var webglMap = new ol.Map({ renderer: ol.RendererHint.WEBGL, @@ -58,12 +59,13 @@ if (webglMap !== null) { webglMap.bindTo('view', domMap); } -webglMap.getControls().push(new ol.control.MousePosition({ +var webglMousePosition = new ol.control.MousePosition({ coordinateFormat: ol.Coordinate.toStringHDMS, projection: ol.Projection.getFromCode('EPSG:4326'), target: document.getElementById('webglMousePosition'), undefinedHTML: ' ' -})); +}); +webglMousePosition.setMap(webglMap); var canvasMap = new ol.Map({ renderer: ol.RendererHint.CANVAS, @@ -74,12 +76,13 @@ if (canvasMap !== null) { canvasMap.bindTo('view', domMap); } -canvasMap.getControls().push(new ol.control.MousePosition({ +var canvasMousePosition = new ol.control.MousePosition({ coordinateFormat: ol.Coordinate.toStringHDMS, projection: ol.Projection.getFromCode('EPSG:4326'), target: document.getElementById('canvasMousePosition'), undefinedHtml: ' ' -})); +}); +canvasMousePosition.setMap(canvasMap); var keyboardInteraction = new ol.interaction.Keyboard(); keyboardInteraction.addCallback('0', function() { diff --git a/src/objectliterals.exports b/src/objectliterals.exports index bbd66ec223..aacd8a7b7a 100644 --- a/src/objectliterals.exports +++ b/src/objectliterals.exports @@ -1,5 +1,5 @@ @exportObjectLiteral ol.MapOptions -@exportObjectLiteralProperty ol.MapOptions.controls ol.Collection|undefined +@exportObjectLiteralProperty ol.MapOptions.attributionControl boolean|undefined @exportObjectLiteralProperty ol.MapOptions.doubleClickZoom boolean|undefined @exportObjectLiteralProperty ol.MapOptions.dragPan boolean|undefined @exportObjectLiteralProperty ol.MapOptions.interactions ol.Collection|undefined @@ -13,6 +13,7 @@ @exportObjectLiteralProperty ol.MapOptions.shiftDragZoom boolean|undefined @exportObjectLiteralProperty ol.MapOptions.target Element|string @exportObjectLiteralProperty ol.MapOptions.view ol.IView|undefined +@exportObjectLiteralProperty ol.MapOptions.zoomControl boolean|undefined @exportObjectLiteralProperty ol.MapOptions.zoomDelta number|undefined @exportObjectLiteral ol.View2DOptions diff --git a/src/ol/control/attribution.exports b/src/ol/control/attribution.exports index 961219fc9d..57e5bdb9d8 100644 --- a/src/ol/control/attribution.exports +++ b/src/ol/control/attribution.exports @@ -1,2 +1,3 @@ @exportClass ol.control.Attribution ol.control.AttributionOptions +@exportProperty ol.control.Attribution.prototype.setMap diff --git a/src/ol/control/mouseposition.exports b/src/ol/control/mouseposition.exports index 7a4856fcb5..e29f9caa13 100644 --- a/src/ol/control/mouseposition.exports +++ b/src/ol/control/mouseposition.exports @@ -1,2 +1,3 @@ @exportClass ol.control.MousePosition ol.control.MousePositionOptions +@exportProperty ol.control.MousePosition.prototype.setMap diff --git a/src/ol/control/zoom.exports b/src/ol/control/zoom.exports index 1a1835cffb..91cb9a7fbe 100644 --- a/src/ol/control/zoom.exports +++ b/src/ol/control/zoom.exports @@ -1,2 +1,2 @@ @exportClass ol.control.Zoom ol.control.ZoomOptions - +@exportProperty ol.control.Zoom.prototype.setMap diff --git a/src/ol/map.exports b/src/ol/map.exports index 8c4285f1c3..96ee6e3e29 100644 --- a/src/ol/map.exports +++ b/src/ol/map.exports @@ -1,7 +1,6 @@ @exportClass ol.Map ol.MapOptions @exportProperty ol.Map.prototype.addPreRenderFunction @exportProperty ol.Map.prototype.addPreRenderFunctions -@exportProperty ol.Map.prototype.getControls @exportProperty ol.Map.prototype.getInteractions @exportSymbol ol.RendererHint diff --git a/src/ol/map.js b/src/ol/map.js index 58925d8443..29c6e623dc 100644 --- a/src/ol/map.js +++ b/src/ol/map.js @@ -22,8 +22,6 @@ goog.require('goog.events.MouseWheelHandler'); goog.require('goog.events.MouseWheelHandler.EventType'); goog.require('ol.BrowserFeature'); goog.require('ol.Collection'); -goog.require('ol.CollectionEvent'); -goog.require('ol.CollectionEventType'); goog.require('ol.Color'); goog.require('ol.Coordinate'); goog.require('ol.Extent'); @@ -230,17 +228,6 @@ ol.Map = function(mapOptions) { this.handleBrowserEvent, false, this); this.registerDisposable(mouseWheelHandler); - /** - * @type {ol.Collection} - * @private - */ - this.controls_ = mapOptionsInternal.controls; - - goog.events.listen(this.controls_, ol.CollectionEventType.ADD, - this.handleControlsAdd_, false, this); - goog.events.listen(this.controls_, ol.CollectionEventType.REMOVE, - this.handleControlsRemove_, false, this); - /** * @type {ol.Collection} * @private @@ -299,7 +286,9 @@ ol.Map = function(mapOptions) { // this gives the map an initial size this.handleBrowserWindowResize(); - this.controls_.forEach( + /** @type {Array.} */ + var controls = mapOptionsInternal.controls; + goog.array.forEach(controls, /** * @param {ol.control.Control} control Control. */ @@ -387,14 +376,6 @@ ol.Map.prototype.getTarget = function() { }; -/** - * @return {ol.Collection} Controls. - */ -ol.Map.prototype.getControls = function() { - return this.controls_; -}; - - /** * @param {ol.Pixel} pixel Pixel. * @return {ol.Coordinate} Coordinate. @@ -523,26 +504,6 @@ ol.Map.prototype.handleBrowserEvent = function(browserEvent, opt_type) { }; -/** - * @param {ol.CollectionEvent} collectionEvent Collection event. - * @private - */ -ol.Map.prototype.handleControlsAdd_ = function(collectionEvent) { - var control = /** @type {ol.control.Control} */ (collectionEvent.elem); - control.setMap(this); -}; - - -/** - * @param {ol.CollectionEvent} collectionEvent Collection event. - * @private - */ -ol.Map.prototype.handleControlsRemove_ = function(collectionEvent) { - var control = /** @type {ol.control.Control} */ (collectionEvent.elem); - control.setMap(null); -}; - - /** * @param {ol.MapBrowserEvent} mapBrowserEvent The event to handle. */ @@ -849,7 +810,7 @@ ol.Map.prototype.withFrozenRendering = function(f, opt_obj) { /** - * @typedef {{controls: ol.Collection, + * @typedef {{controls: Array., * interactions: ol.Collection, * rendererConstructor: * function(new: ol.renderer.Map, Element, ol.Map), @@ -915,14 +876,9 @@ ol.Map.createOptionsInternal = function(mapOptions) { } /** - * @type {ol.Collection} + * @type {Array.} */ - var controls; - if (goog.isDef(mapOptions.controls)) { - controls = mapOptions.controls; - } else { - controls = ol.Map.createControls_(mapOptions); - } + var controls = ol.Map.createControls_(mapOptions); /** * @type {ol.Collection} @@ -953,22 +909,29 @@ ol.Map.createOptionsInternal = function(mapOptions) { /** * @private * @param {ol.MapOptions} mapOptions Map options. - * @return {ol.Collection} Controls. + * @return {Array.} Controls. */ ol.Map.createControls_ = function(mapOptions) { + /** @type {Array.} */ + var controls = []; - var controls = new ol.Collection(); + var attributionControl = goog.isDef(mapOptions.attributionControl) ? + mapOptions.attributionControl : true; + if (attributionControl) { + controls.push(new ol.control.Attribution({})); + } - controls.push(new ol.control.Attribution({})); - - var zoomDelta = goog.isDef(mapOptions.zoomDelta) ? - mapOptions.zoomDelta : 4; - controls.push(new ol.control.Zoom({ - delta: zoomDelta - })); + var zoomControl = goog.isDef(mapOptions.zoomControl) ? + mapOptions.zoomControl : true; + if (zoomControl) { + var zoomDelta = goog.isDef(mapOptions.zoomDelta) ? + mapOptions.zoomDelta : 4; + controls.push(new ol.control.Zoom({ + delta: zoomDelta + })); + } return controls; - };