[Commits] r2364 - in core/trunk/geoext: lib/GeoExt/widgets tests/lib/GeoExt/widgets

commits at geoext.org commits at geoext.org
Thu Sep 16 16:38:04 CEST 2010


Author: tschaub
Date: 2010-09-16 16:38:04 +0200 (Thu, 16 Sep 2010)
New Revision: 2364

Modified:
   core/trunk/geoext/lib/GeoExt/widgets/FeatureRenderer.js
   core/trunk/geoext/lib/GeoExt/widgets/VectorLegend.js
   core/trunk/geoext/tests/lib/GeoExt/widgets/FeatureRenderer.html
   core/trunk/geoext/tests/lib/GeoExt/widgets/VectorLegend.html
Log:
Modifying the FeatureRenderer so it works with OpenLayers.Symbolizer instances and does not render text symbolizers.  Updating the VectorLegend to work with rules that contain multiple symbolizers while still working with builds that don't include OpenLayers.Symbolizer types.  r=ahocevar (closes #338)

Modified: core/trunk/geoext/lib/GeoExt/widgets/FeatureRenderer.js
===================================================================
--- core/trunk/geoext/lib/GeoExt/widgets/FeatureRenderer.js	2010-09-16 12:22:17 UTC (rev 2363)
+++ core/trunk/geoext/lib/GeoExt/widgets/FeatureRenderer.js	2010-09-16 14:38:04 UTC (rev 2364)
@@ -304,11 +304,25 @@
     drawFeature: function() {
         this.renderer.clear();
         this.setRendererDimensions();
+        // TODO: remove this when OpenLayers.Symbolizer is required
+        var Symbolizer = OpenLayers.Symbolizer;
+        var Text = Symbolizer && Symbolizer.Text;
+        var symbolizer;
         for (var i=0, len=this.symbolizers.length; i<len; ++i) {
-            this.renderer.drawFeature(
-                this.feature.clone(),
-                Ext.apply({}, this.symbolizers[i])
-            );
+            symbolizer = this.symbolizers[i];
+            // don't render text symbolizers
+            if (!Text || !(symbolizer instanceof Text)) {
+                if (Symbolizer && (symbolizer instanceof Symbolizer)) {
+                    symbolizer = symbolizer.clone();
+                } else {
+                    // TODO: remove this when OpenLayers.Symbolizer is used everywhere
+                    symbolizer = Ext.apply({}, symbolizer);
+                }
+                this.renderer.drawFeature(
+                    this.feature.clone(),
+                    symbolizer
+                );
+            }
         }
     },
     

Modified: core/trunk/geoext/lib/GeoExt/widgets/VectorLegend.js
===================================================================
--- core/trunk/geoext/lib/GeoExt/widgets/VectorLegend.js	2010-09-16 12:22:17 UTC (rev 2363)
+++ core/trunk/geoext/lib/GeoExt/widgets/VectorLegend.js	2010-09-16 14:38:04 UTC (rev 2364)
@@ -446,21 +446,40 @@
      *  Create a renderer for the rule.
      */
     createRuleRenderer: function(rule) {
-        var symbolizer = rule.symbolizer;
         var types = [this.symbolType, "Point", "Line", "Polygon"];
         var type, haveType;
-        for(var i=0, len=types.length; i<len; ++i) {
-            type = types[i];
-            if(symbolizer[type]) {
-                symbolizer = symbolizer[type];
-                haveType = true;
-                break;
+        var symbolizers = rule.symbolizers;
+        if (!symbolizers) {
+            // TODO: remove this when OpenLayers.Symbolizer is used everywhere
+            var symbolizer = rule.symbolizer;
+            for (var i=0, len=types.length; i<len; ++i) {
+                type = types[i];
+                if (symbolizer[type]) {
+                    symbolizer = symbolizer[type];
+                    haveType = true;
+                    break;
+                }
             }
+            symbolizers = [symbolizer];
+        } else {
+            var Type;
+            outer: for (var i=0, ii=types.length; i<ii; ++i) {
+                type = types[i];
+                Type = OpenLayers.Symbolizer[type];
+                if (Type) {
+                    for (var j=0, jj=symbolizers.length; j<jj; ++j) {
+                        if (symbolizers[j] instanceof Type) {
+                            haveType = true;
+                            break outer;
+                        }
+                    }
+                }
+            }
         }
         return {
             xtype: "gx_renderer",
-            symbolType: haveType === true ? type : this.symbolType,
-            symbolizers: [symbolizer],
+            symbolType: haveType ? type : this.symbolType,
+            symbolizers: symbolizers,
             style: this.clickableSymbol ? {cursor: "pointer"} : undefined,
             listeners: {
                 click: function() {

Modified: core/trunk/geoext/tests/lib/GeoExt/widgets/FeatureRenderer.html
===================================================================
--- core/trunk/geoext/tests/lib/GeoExt/widgets/FeatureRenderer.html	2010-09-16 12:22:17 UTC (rev 2363)
+++ core/trunk/geoext/tests/lib/GeoExt/widgets/FeatureRenderer.html	2010-09-16 14:38:04 UTC (rev 2364)
@@ -22,7 +22,7 @@
 }
 
 function test_drawFeature(t) {
-    t.plan(4);
+    t.plan(7);
     
 
     var renderer = new GeoExt.FeatureRenderer({
@@ -44,6 +44,23 @@
     t.eq(log.length, 2, "drawFeature called twice for two symbolizers");
     t.ok(log[0][0] !== log[1][0], "drawFeature called with unique features");
     
+    // confirm we don't render text symbolizers
+    log = [];
+    var poly = new OpenLayers.Symbolizer.Polygon({
+        fillColor: "red"
+    });
+    renderer.update({
+        symbolizers: [
+            new OpenLayers.Symbolizer.Text({
+                fontFamily: "Times"
+            }),
+            poly
+        ]
+    });
+    t.eq(log.length, 1, "drawFeature called once given text and polygon symbolizers");
+    t.ok(log[0][1] instanceof OpenLayers.Symbolizer.Polygon, "drawFeature called with polygon symbolizer only");
+    t.ok(log[0][1] !== poly, "drawFeature called with clone of original symbolizer");
+    
     renderer.destroy();
     
 }
@@ -90,6 +107,6 @@
     renderer.destroy();
     
 }
-    
+
 </script>
 </head><body></body></html>
\ No newline at end of file

Modified: core/trunk/geoext/tests/lib/GeoExt/widgets/VectorLegend.html
===================================================================
--- core/trunk/geoext/tests/lib/GeoExt/widgets/VectorLegend.html	2010-09-16 12:22:17 UTC (rev 2363)
+++ core/trunk/geoext/tests/lib/GeoExt/widgets/VectorLegend.html	2010-09-16 14:38:04 UTC (rev 2364)
@@ -120,6 +120,46 @@
     }
     
 
+    function test_createRuleRenderer(t) {
+        
+        t.plan(2);
+
+        var map = new OpenLayers.Map();
+        var layer = new OpenLayers.Layer.Vector("old");
+        map.addLayer(layer);
+
+        var store = new GeoExt.data.LayerStore({map: map});
+        
+        var legend = new GeoExt.VectorLegend({
+            layerRecord: store.getAt(0),
+            renderTo: "legendpanel",
+            symbolType: "Point"
+        });
+        
+        var polyRule = new OpenLayers.Rule({
+            symbolizers: [
+                new OpenLayers.Symbolizer.Polygon({
+                    fillColor: "red"
+                })
+            ]
+        });
+        var pointRule = new OpenLayers.Rule({
+            symbolizers: [
+                new OpenLayers.Symbolizer.Point({
+                    fillColor: "red",
+                    pointRadius: 10
+                })
+            ]
+        });
+        
+        var polyRenderer = legend.createRuleRenderer(polyRule);
+        t.eq(polyRenderer.symbolType, "Polygon", "forced polygon renderer");
+        
+        var pointRenderer = legend.createRuleRenderer(pointRule);
+        t.eq(pointRenderer.symbolType, "Point", "got point renderer");
+
+    }
+
     </script>
 </head><body>
     <div id="legendpanel"></div>



More information about the Commits mailing list