OpenLayers OpenLayers

Changeset 2949

Show
Ignore:
Timestamp:
04/01/07 08:08:13 (2 years ago)
Author:
crschmidt
Message:
  • Remove default styling from the Feature.Vector class.
  • Add a 'style' property to the layer.
  • When a feature is added to a layer, either uses the style on the
    layer, or uses the default feature style.
  • Add test to Layer.Vector for this funcionality
  • Adds a preFeatureInsert hook to change a feature *before*
    drawing it.
  • Change openmnnd demo to include the use of preFeatureInsert
    and style attribute on layer.
Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/openlayers/examples/openmnnd.html

    r2848 r2949  
    3030             
    3131            wfs = new OpenLayers.Layer.WFS("Minnesota Streams (WFS)", wfs_url, {'typename':'streams'}, {ratio:1.25, minZoomLevel:4}); 
    32             wfs.onFeatureInsert= function(feature) { feature.style.strokeWidth="3"; feature.style.strokeColor="blue"; feature.layer.renderer.drawGeometry(feature.geometry,feature.style); $('stream_features').innerHTML = feature.layer.features.length;} 
     32             
     33            // preFeatureInsert can be used to set style before the feature is drawn  
     34            wfs.preFeatureInsert= function(feature) { feature.style.strokeWidth="3"; feature.style.strokeColor="blue";   
     35            } 
     36            wfs.onFeatureInsert = function() { 
     37              $('stream_features').innerHTML = feature.layer.features.length; 
     38            }   
    3339            map.addLayer(wfs); 
    3440             
    35             pwfs = new OpenLayers.Layer.WFS("Minnesota Plat (WFS)", wfs_url, {'typename':'plat'}, {ratio:1.25, minZoomLevel:8, extractAttributes: true}); 
    36             pwfs.onFeatureInsert= function(feature) { feature.style.fillColor="green"; feature.layer.renderer.drawGeometry(feature.geometry,feature.style); $('plat_features').innerHTML = feature.layer.features.length;} 
     41            // Or a style can be set on the layer. 
     42            pwfsstyle = OpenLayers.Util.extend({}, OpenLayers.Feature.Vector.style['default']); 
     43            OpenLayers.Util.extend(pwfsstyle, {'fillColor': 'green'});  
     44             
     45            pwfs = new OpenLayers.Layer.WFS("Minnesota Plat (WFS)", wfs_url,  
     46              {'typename':'plat'},  
     47              { 
     48               ratio:1.25,  
     49               minZoomLevel:8,  
     50               extractAttributes: true,  
     51               style: pwfsstyle 
     52              }); 
     53             
     54            pwfs.onFeatureInsert= function(feature) {  
     55              $('plat_features').innerHTML = feature.layer.features.length; 
     56            } 
    3757            map.addLayer(pwfs);  
    3858             
    39             rwfs = new OpenLayers.Layer.WFS("Minnesota Roads (WFS)", wfs_url, {'typename':'roads'}, {ratio:1.25, minZoomLevel:7, extractAttributes: true}); 
    40             rwfs.onFeatureInsert= function(feature) { feature.style.strokeColor="white"; feature.style.strokeWidth="4"; feature.layer.renderer.drawGeometry(feature.geometry,feature.style); $('road_features').innerHTML = feature.layer.features.length; } 
     59            rstyle = OpenLayers.Util.extend({}, OpenLayers.Feature.Vector.style['default']); 
     60            OpenLayers.Util.extend(rstyle, {'strokeColor': 'white', strokeWIdth: "4"});  
     61            rwfs = new OpenLayers.Layer.WFS("Minnesota Roads (WFS)", wfs_url, {'typename':'roads'},  
     62              {ratio:1.25, minZoomLevel:7, extractAttributes: true, style:rstyle}); 
     63             
     64            rwfs.onFeatureInsert= function(feature) {   
     65              $('road_features').innerHTML = feature.layer.features.length;  
     66            } 
     67             
    4168            map.addLayer(rwfs);  
    4269             
  • trunk/openlayers/lib/OpenLayers/Feature/Vector.js

    r2803 r2949  
    5252            OpenLayers.Util.extend(this.attributes, data); 
    5353        }     
    54         this.style = style ? style : OpenLayers.Util.extend({}, OpenLayers.Feature.Vector.style['default']); 
     54        this.style = style ? style : null;  
    5555    }, 
    5656     
  • trunk/openlayers/lib/OpenLayers/Layer/Vector.js

    r2803 r2949  
    3737    reportError: true,  
    3838 
     39    /** @type {Object} */ 
     40    style: null, 
     41 
    3942    /** 
    4043     * List of supported Renderer classes. Add to this list to 
     
    225228            feature.layer = this; 
    226229 
     230            if (!feature.style) { 
     231                if (this.style) { 
     232                    feature.style = OpenLayers.Util.extend({}, this.style); 
     233                } else { 
     234                    feature.style = OpenLayers.Util.extend({}, OpenLayers.Feature.Vector.style['default']); 
     235                }     
     236            } 
     237 
     238            this.preFeatureInsert(feature); 
     239 
    227240            if (this.drawn) { 
    228241                this.renderer.drawGeometry(feature.geometry, feature.style); 
     
    316329    onFeatureInsert: function(feature) { 
    317330    }, 
     331     
     332    /** 
     333     * method called before a feature is inserted. 
     334     * Does nothing by default. Override this if you 
     335     * need to do something when features are first added to the 
     336     * layer, but before they are drawn, such as adjust the style. 
     337     *  
     338     * @param {OpenLayers.Feature.Vector} feature 
     339     */ 
     340    preFeatureInsert: function(feature) { 
     341    }, 
    318342 
    319343    /** @final @type String */ 
  • trunk/openlayers/tests/Layer/test_Vector.html

    r2803 r2949  
    4545        t.ok(layer.features.length == 1, "OpenLayers.Layer.Vector.removeFeatures removes a feature from the features array"); 
    4646    } 
     47     
     48    function test_Layer_Vector_addsStyle (t) { 
     49        t.plan(2);     
     50        layer = new OpenLayers.Layer.Vector(name); 
     51        var map = new OpenLayers.Map('map'); 
     52        map.addLayer(layer); 
     53        f = new OpenLayers.Feature.Vector(); 
     54        t.eq( f.style,  null, "Feature style is null by default."); 
     55        layer.addFeatures(f); 
     56        t.ok( f.style != null, "Feature style is set by layer."); 
     57    } 
    4758 
    4859    function test_99_Layer_Vector_destroy (t) {