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

commits at geoext.org commits at geoext.org
Wed Jul 28 21:38:54 CEST 2010


Author: bartvde
Date: 2010-07-28 21:38:54 +0200 (Wed, 28 Jul 2010)
New Revision: 2246

Modified:
   core/trunk/geoext/lib/GeoExt/widgets/LayerOpacitySlider.js
   core/trunk/geoext/tests/lib/GeoExt/widgets/LayerOpacitySlider.html
Log:
LayerOpacitySlider should be able to change layer on the fly, r=fredj (closes #301)

Modified: core/trunk/geoext/lib/GeoExt/widgets/LayerOpacitySlider.js
===================================================================
--- core/trunk/geoext/lib/GeoExt/widgets/LayerOpacitySlider.js	2010-07-27 07:20:50 UTC (rev 2245)
+++ core/trunk/geoext/lib/GeoExt/widgets/LayerOpacitySlider.js	2010-07-28 19:38:54 UTC (rev 2246)
@@ -133,34 +133,55 @@
      */
     constructor: function(config) {
         if (config.layer) {
-            if (config.layer instanceof OpenLayers.Layer) {
-                this.layer = config.layer;
-            } else if (config.layer instanceof GeoExt.data.LayerRecord) {
-                this.layer = config.layer.get('layer');
-            }
-
-            if (config.complementaryLayer instanceof OpenLayers.Layer) {
-                this.complementaryLayer = config.complementaryLayer;
-            } else if (config.complementaryLayer instanceof
-                       GeoExt.data.LayerRecord) {
-                this.complementaryLayer =
-                    config.complementaryLayer.get('layer');
-            }
-
-            if (this.layer && this.layer.opacity !== null) {
-                config.value = parseInt(
-                    this.layer.opacity * (this.maxValue - this.minValue)
-                );
-            } else if (config.value === undefined) {
-                config.value = this.maxValue;
-            }
-
+            this.layer = this.getLayer(config.layer);
+            this.complementaryLayer = this.getLayer(config.complementaryLayer);
+            config.value = (config.value !== undefined) ? 
+                config.value : this.getOpacityValue(this.layer);
             delete config.layer;
             delete config.complementaryLayer;
         }
         GeoExt.LayerOpacitySlider.superclass.constructor.call(this, config);
     },
 
+    /** api: method[setLayer]
+     *  :param layer: ``OpenLayers.Layer`` or :class:`GeoExt.data.LayerRecord`
+     *
+     *  Bind a new layer to the opacity slider.
+     */
+    setLayer: function(layer) {
+        this.layer = this.getLayer(layer);
+        this.setValue(this.getOpacityValue(layer));
+    },
+
+    /** private: method[getOpacityValue]
+     *  :param layer: ``OpenLayers.Layer`` or :class:`GeoExt.data.LayerRecord`
+     *  :return:  ``Integer`` The opacity for the layer.
+     *
+     *  Returns the opacity value for the layer.
+     */
+    getOpacityValue: function(layer) {
+        if (layer && layer.opacity !== null) {
+            return parseInt(layer.opacity * (this.maxValue - this.minValue));
+        } else {
+            return this.maxValue;
+        }
+    },
+
+    /** private: method[getLayer]
+     *  :param layer: ``OpenLayers.Layer`` or :class:`GeoExt.data.LayerRecord`
+     *  :return:  ``OpenLayers.Layer`` The OpenLayers layer object
+     *
+     *  Returns the OpenLayers layer object for a layer record or a plain layer 
+     *  object.
+     */
+    getLayer: function(layer) {
+        if (layer instanceof OpenLayers.Layer) {
+            return layer;
+        } else if (layer instanceof GeoExt.data.LayerRecord) {
+            return layer.get('layer');
+        }
+    },
+
     /** private: method[initComponent]
      *  Initialize the component.
      */

Modified: core/trunk/geoext/tests/lib/GeoExt/widgets/LayerOpacitySlider.html
===================================================================
--- core/trunk/geoext/tests/lib/GeoExt/widgets/LayerOpacitySlider.html	2010-07-27 07:20:50 UTC (rev 2245)
+++ core/trunk/geoext/tests/lib/GeoExt/widgets/LayerOpacitySlider.html	2010-07-28 19:38:54 UTC (rev 2246)
@@ -283,6 +283,24 @@
 
             slider.destroy();
         }
+
+        function test_setlayer(t) {
+            t.plan(2);
+            var layer1, layer2, slider;
+            layer1 = new OpenLayers.Layer("1");
+            layer1.setOpacity(0.3);
+            layer2 = new OpenLayers.Layer("2");
+            layer2.setOpacity(0.6);
+            slider = new GeoExt.LayerOpacitySlider({
+                renderTo: document.body,
+                value: 100
+            });
+            slider.setLayer(layer1);
+            t.eq(slider.getValue(), 30, "Opacity of first layer is used");
+            slider.setLayer(layer2);
+            t.eq(slider.getValue(), 60, "Opacity of second layer is used");
+            slider.destroy();
+        }
     </script>
   <body>
   </body>



More information about the Commits mailing list