Ticket #60: 60-also-fixes-39.1.patch

File 60-also-fixes-39.1.patch, 8.2 kB (added by elemoine, 1 year ago)
  • tests/lib/GeoExt/widgets/MapPanel.html

    old new  
    1212            var map = new OpenLayers.Map(); 
    1313            var layer = new OpenLayers.Layer("test", {isBaseLayer: true}); 
    1414            map.addLayer(layer); 
     15            // add a vector layer, which would fail onmapresize if we render 
     16            // the map before the panel has a layout. 
     17            map.addLayer(new OpenLayers.Layer.Vector("vector layer")); 
    1518            return map; 
    1619        } 
    1720 
    1821        function test_mappanel(t) { 
    19             t.plan(3
     22            t.plan(4
    2023 
     24            var moveToCnt; 
     25 
    2126            var map = createMap(); 
    22              
     27            map.moveTo = function() { 
     28                moveToCnt++; 
     29                OpenLayers.Map.prototype.moveTo.apply(this, arguments); 
     30            }; 
     31 
     32            moveToCnt = 0; 
    2333            var mapPanel = new GeoExt.MapPanel({ 
    2434                // panel options 
    2535                id: "map-panel", 
     
    3242                center: new OpenLayers.LonLat(5, 45), 
    3343                zoom: 4 
    3444            }); 
     45            t.eq(moveToCnt, 1, "map.moveTo called exactly once"); 
    3546            t.eq(mapPanel.map.getCenter().toString(), "lon=5,lat=45", "Map center set correctly"); 
    3647            t.eq(mapPanel.map.getZoom(), 4, "Zoom set correctly"); 
    3748            t.eq(GeoExt.MapPanel.guess().id, mapPanel.id, "MapPanel guessed correctly"); 
     
    8293            map = createMap(); 
    8394            map.zoomToExtent = function(extent) { 
    8495                log.extent = extent; 
    85             } 
     96            }; 
    8697            panel = new GeoExt.MapPanel({ 
    8798                renderTo: "mappanel", 
    8899                map: map, 
     100                height: 400, 
     101                width: 600, 
    89102                extent: [1, 2, 3, 4] 
    90103            });             
    91104            t.eq(log.extent.toArray(), [1, 2, 3, 4], "map extent set with array"); 
     
    97110            map = createMap(); 
    98111            map.zoomToExtent = function(extent) { 
    99112                log.extent = extent; 
    100             } 
     113            }; 
    101114            panel = new GeoExt.MapPanel({ 
    102115                renderTo: "mappanel", 
    103116                map: map, 
     117                height: 400, 
     118                width: 600, 
    104119                extent: "1, 2, 3, 4" 
    105120            }); 
    106121            t.eq(log.extent.toArray(), [1, 2, 3, 4], "map extent set with string"); 
     
    111126            map = createMap(); 
    112127            map.zoomToExtent = function(extent) { 
    113128                log.extent = extent; 
    114             } 
     129            }; 
    115130            panel = new GeoExt.MapPanel({ 
    116131                renderTo: "mappanel", 
    117132                map: map, 
     133                height: 400, 
     134                width: 600, 
    118135                extent: new OpenLayers.Bounds(1, 2, 3, 4) 
    119136            }); 
    120137            t.eq(log.extent.toArray(), [1, 2, 3, 4], "map extent set with Bounds"); 
     
    132149            map = createMap(); 
    133150            map.setCenter = function(center) { 
    134151                log.center = center; 
    135             } 
     152            }; 
    136153            panel = new GeoExt.MapPanel({ 
    137154                renderTo: "mappanel", 
    138155                map: map, 
     156                height: 400, 
     157                width: 600, 
    139158                center: [1, 2] 
    140159            });             
    141160            t.eq(log.center.toString(), "lon=1,lat=2", "map center set with array"); 
     
    147166            map = createMap(); 
    148167            map.setCenter = function(center) { 
    149168                log.center = center; 
    150             } 
     169            }; 
    151170            panel = new GeoExt.MapPanel({ 
    152171                renderTo: "mappanel", 
    153172                map: map, 
     173                height: 400, 
     174                width: 600, 
    154175                center: "1, 2" 
    155176            });             
    156177            t.eq(log.center.toString(), "lon=1,lat=2", "map center set with string"); 
     
    162183            map = createMap(); 
    163184            map.setCenter = function(center) { 
    164185                log.center = center; 
    165             } 
     186            }; 
    166187            panel = new GeoExt.MapPanel({ 
    167188                renderTo: "mappanel", 
    168189                map: map, 
     190                height: 400, 
     191                width: 600, 
    169192                center: new OpenLayers.LonLat(1, 2) 
    170193            });             
    171194            t.eq(log.center.toString(), "lon=1,lat=2", "map center set with LonLat"); 
     
    213236             
    214237        } 
    215238 
     239        function test_layout(t) { 
     240            t.plan(1); 
    216241 
     242            var map, panel, layout = 0; 
     243 
     244            map = new OpenLayers.Map({ 
     245                render: function() { 
     246                    OpenLayers.Map.prototype.render.apply(this, arguments); 
     247                    t.ok(layout, 1, 
     248                         "the OpenLayers map is rendered once the container " + 
     249                         "has its final dimensions"); 
     250                }, 
     251                allOverlays: true 
     252            }); 
     253             
     254            panel = new Ext.Panel({ 
     255                layout: "border", 
     256                renderTo: "mappanel", 
     257                listeners: { 
     258                    afterlayout: function() { 
     259                        layout++; 
     260                    } 
     261                }, 
     262                items: [{ 
     263                    region: "center", 
     264                    xtype: "gx_mappanel", 
     265                    map: map, 
     266                    layers: [ 
     267                        new OpenLayers.Layer("") 
     268                    ] 
     269                }] 
     270            }); 
     271 
     272            panel.destroy(); 
     273        } 
     274 
     275 
    217276    </script> 
    218277  <body> 
    219278    <div id="mappanel"></div> 
  • lib/GeoExt/widgets/MapPanel.js

    old new  
    125125    }, 
    126126     
    127127    /** private: method[updateMapSize] 
    128      *  Tell the map that it needs to recaculate its size and position. 
     128     *  Tell the map that it needs to recalculate its size and position. 
    129129     */ 
    130130    updateMapSize: function() { 
    131131        if(this.map) { 
    132132            this.map.updateSize(); 
    133133        } 
    134134    }, 
    135      
    136     /** private: method[onRender
    137      *  Private method called after the panel has been 
    138      *  rendered
     135 
     136    /** private: method[renderMap
     137     *  Private method called after the panel has been rendered or after it 
     138     *  has been laid out by its parent's layout
    139139     */ 
    140     onRender: function() { 
    141         GeoExt.MapPanel.superclass.onRender.apply(this, arguments); 
    142         this.map.render(this.body.dom); 
    143         if(this.map.layers.length > 0) { 
     140    renderMap: function() { 
     141        var map = this.map; 
     142 
     143        // hack: set map.size to null to prevent map.updateSize (called from 
     144        // within map.render) from zooming to the map extent. This hack is a 
     145        // workaround for <http://trac.openlayers.org/ticket/2105> and must be 
     146        // removed once this ticket is closed. 
     147        map.size = null; 
     148 
     149        map.render(this.body.dom); 
     150 
     151        if(map.layers.length > 0) { 
    144152            if(this.center) { 
    145153                // zoom does not have to be defined 
    146                 this.map.setCenter(this.center, this.zoom); 
    147             } else if(this.extent) { 
    148                 this.map.zoomToExtent(this.extent); 
     154                map.setCenter(this.center, this.zoom); 
     155            } else if(this.extent) { 
     156                map.zoomToExtent(this.extent); 
    149157            } else { 
    150                 this.map.zoomToMaxExtent(); 
     158                map.zoomToMaxExtent(); 
    151159            } 
    152160        } 
    153161    }, 
     
    157165     */ 
    158166    afterRender: function() { 
    159167        GeoExt.MapPanel.superclass.afterRender.apply(this, arguments); 
    160         if(this.ownerCt) { 
     168        if(!this.ownerCt) { 
     169            this.renderMap(); 
     170        } else { 
    161171            this.ownerCt.on("move", this.updateMapSize, this); 
     172            this.ownerCt.on({ 
     173                "afterlayout": { 
     174                    fn: this.renderMap, 
     175                    scope: this, 
     176                    single: true 
     177                } 
     178            }); 
    162179        } 
    163     },     
     180    }, 
    164181 
    165182    /** private: method[onResize] 
    166183     *  Private method called after the panel has been resized.