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

commits at geoext.org commits at geoext.org
Thu Sep 23 00:09:59 CEST 2010


Author: ahocevar
Date: 2010-09-23 00:09:59 +0200 (Thu, 23 Sep 2010)
New Revision: 2397

Modified:
   core/trunk/geoext/lib/GeoExt/widgets/FeatureRenderer.js
   core/trunk/geoext/tests/lib/GeoExt/widgets/FeatureRenderer.html
Log:
If OpenLayers.Symbolizer instances are used, use an according symbol rather than the configured symbolType. r=tschaub (closes #349)


Modified: core/trunk/geoext/lib/GeoExt/widgets/FeatureRenderer.js
===================================================================
--- core/trunk/geoext/lib/GeoExt/widgets/FeatureRenderer.js	2010-09-22 13:10:26 UTC (rev 2396)
+++ core/trunk/geoext/lib/GeoExt/widgets/FeatureRenderer.js	2010-09-22 22:09:59 UTC (rev 2397)
@@ -22,26 +22,30 @@
 
     /** api: config[feature]
      *  ``OpenLayers.Feature.Vector``
-     *  Optional vector to be drawn.  If a feature is not provided, 
-     * ``symbolType`` should be specified.
+     *  Optional vector to be drawn.  If not provided, and if ``symbolizers``
+     *  is configured with an array of plain symbolizer objects, ``symbolType``
+     *  should be configured.
      */
     feature: undefined,
     
     /** api: config[symbolizers]
      *  ``Array(Object)``
-     *  An array of symbolizer objects (in painters order) for rendering a 
-     *  feature.  If no symbolizers are provided, the OpenLayers default will be
-     *  used.
+     *  An array of ``OpenLayers.Symbolizer`` instances or plain symbolizer
+     *  objects (in painters order) for rendering a  feature.  If no
+     *  symbolizers are provided, the OpenLayers default will be used. If a
+     *  symbolizer is an instance of ``OpenLayers.Symbolizer``, its type will
+     *  override the symbolType for rendering.
      */
     symbolizers: [OpenLayers.Feature.Vector.style["default"]],
 
     /** api: config[symbolType]
      *  ``String``
-     *  One of ``"Point"``, ``"Line"``, or ``"Polygon"``.  If ``feature``
-     *  is provided, it will be preferred.  Default is ``"Point"``.
+     *  One of ``"Point"``, ``"Line"``, or ``"Polygon"``.  Only pertinent if 
+     *  OpenLayers.Symbolizer objects are not used.  If ``feature``
+     *  is provided, it will be preferred.  The default is "Polygon".
      */
-    symbolType: "Point",
-
+    symbolType: "Polygon",
+    
     /** private: property[resolution]
      *  ``Number``
      *  The resolution for the renderer.
@@ -307,19 +311,24 @@
         // TODO: remove this when OpenLayers.Symbolizer is required
         var Symbolizer = OpenLayers.Symbolizer;
         var Text = Symbolizer && Symbolizer.Text;
-        var symbolizer;
+        var symbolizer, feature, geomType;
         for (var i=0, len=this.symbolizers.length; i<len; ++i) {
             symbolizer = this.symbolizers[i];
+            feature = this.feature;
             // don't render text symbolizers
             if (!Text || !(symbolizer instanceof Text)) {
                 if (Symbolizer && (symbolizer instanceof Symbolizer)) {
                     symbolizer = symbolizer.clone();
+                    if (!this.initialConfig.feature) {
+                        geomType = symbolizer.CLASS_NAME.split(".").pop().toLowerCase();
+                        feature = this[geomType + "Feature"];
+                    }
                 } else {
                     // TODO: remove this when OpenLayers.Symbolizer is used everywhere
                     symbolizer = Ext.apply({}, symbolizer);
                 }
                 this.renderer.drawFeature(
-                    this.feature.clone(),
+                    feature.clone(),
                     symbolizer
                 );
             }

Modified: core/trunk/geoext/tests/lib/GeoExt/widgets/FeatureRenderer.html
===================================================================
--- core/trunk/geoext/tests/lib/GeoExt/widgets/FeatureRenderer.html	2010-09-22 13:10:26 UTC (rev 2396)
+++ core/trunk/geoext/tests/lib/GeoExt/widgets/FeatureRenderer.html	2010-09-22 22:09:59 UTC (rev 2397)
@@ -15,14 +15,14 @@
     
     var feature = renderer.feature;
     t.ok(feature, "renderer feature set by default");
-    t.ok(feature.geometry instanceof OpenLayers.Geometry.Point, "point feature by default");
+    t.ok(feature.geometry instanceof OpenLayers.Geometry.Polygon, "polygon feature by default");
     
     renderer.destroy();
     
 }
 
 function test_drawFeature(t) {
-    t.plan(7);
+    t.plan(10);
     
 
     var renderer = new GeoExt.FeatureRenderer({
@@ -49,18 +49,26 @@
     var poly = new OpenLayers.Symbolizer.Polygon({
         fillColor: "red"
     });
+    var line = new OpenLayers.Symbolizer.Line({
+        strokeColor: "red"
+    });
     renderer.update({
         symbolizers: [
             new OpenLayers.Symbolizer.Text({
                 fontFamily: "Times"
             }),
-            poly
+            poly, line, {fillColor: "red"}
         ]
     });
-    t.eq(log.length, 1, "drawFeature called once given text and polygon symbolizers");
+    t.eq(log.length, 3, "drawFeature called three times given text, polygon, line and object 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");
     
+    // confirm that we use the correct features for rendering
+    t.ok(log[0][0].geometry instanceof OpenLayers.Geometry.Polygon, "polygon symbolizer applied to a polygon feature");
+    t.ok(log[1][0].geometry instanceof OpenLayers.Geometry.LineString, "line symbolizer applied to a line feature");
+    t.ok(log[2][0].geometry instanceof OpenLayers.Geometry.Polygon, "symbolizer object applied to a symbolType feature");
+    
     renderer.destroy();
     
 }



More information about the Commits mailing list