[Commits] r1239 - sandbox/bartvde/layernodes/trunk/geoext/lib/GeoExt/widgets/tree

commits at geoext.org commits at geoext.org
Thu Jul 9 14:22:35 CEST 2009


Author: bartvde
Date: 2009-07-09 14:22:35 +0200 (Thu, 09 Jul 2009)
New Revision: 1239

Removed:
   sandbox/bartvde/layernodes/trunk/geoext/lib/GeoExt/widgets/tree/LayerNode.js
Log:
putting in LayerNode from trunk

Deleted: sandbox/bartvde/layernodes/trunk/geoext/lib/GeoExt/widgets/tree/LayerNode.js
===================================================================
--- sandbox/bartvde/layernodes/trunk/geoext/lib/GeoExt/widgets/tree/LayerNode.js	2009-07-09 12:04:55 UTC (rev 1238)
+++ sandbox/bartvde/layernodes/trunk/geoext/lib/GeoExt/widgets/tree/LayerNode.js	2009-07-09 12:22:35 UTC (rev 1239)
@@ -1,363 +0,0 @@
-/**
- * Copyright (c) 2008-2009 The Open Source Geospatial Foundation
- * 
- * Published under the BSD license.
- * See http://svn.geoext.org/core/trunk/geoext/license.txt for the full text
- * of the license.
- */
-
-Ext.namespace("GeoExt.tree");
-
-/** private: constructor
- *  .. class:: LayerNodeUI
- *
- *      Place in a separate file if this should be documented.
- */
-GeoExt.tree.LayerNodeUI = Ext.extend(Ext.tree.TreeNodeUI, {
-    
-    /** private: property[radio]
-     *  ``Ext.Element``
-     */
-    radio: null,
-    
-    /** private: method[constructor]
-     */
-    constructor: function(config) {
-        GeoExt.tree.LayerNodeUI.superclass.constructor.apply(this, arguments);
-    },
-    
-    /** private: method[render]
-     *  :param bulkRender: ``Boolean``
-     */
-    render: function(bulkRender) {
-        GeoExt.tree.LayerNodeUI.superclass.render.call(this, bulkRender);
-        var a = this.node.attributes;
-        if (a.radioGroup && this.radio === null) {
-            this.radio = Ext.DomHelper.insertAfter(this.checkbox,
-                ['<input type="radio" class="x-tree-node-radio" name="',
-                a.radioGroup, '_radio"></input>'].join(""));
-        }
-    },
-    
-    /** private: method[onClick]
-     *  :param e: ``Object``
-     */
-    onClick: function(e) {
-        if (e.getTarget('input[type=radio]', 1)) {
-            this.fireEvent("radiochange", this.node);
-        } else {
-            GeoExt.tree.LayerNodeUI.superclass.onClick.call(this, e);
-        }
-    },
-    
-    /** private: method[toggleCheck]
-     *  :param value: ``Boolean``
-     */
-    toggleCheck: function(value) {
-        GeoExt.tree.LayerNodeUI.superclass.toggleCheck.call(this, value);
-        var node = this.node;
-        var layer = this.node.layer;
-        node.visibilityChanging = true;
-        if(this.checkbox && (layer.getVisibility() != this.isChecked())) {
-            layer.setVisibility(this.isChecked());
-        }
-        node.visibilityChanging = false;
-    },
-    
-    /** private: method[destroy]
-     */
-    destroy: function() {
-        delete this.radio;
-        GeoExt.tree.LayerNodeUI.superclass.destroy.call(this);
-    }
-});
-
-/** api: (define)
- *  module = GeoExt.tree
- *  class = LayerNode
- *  base_link = `Ext.tree.TreeNode <http://extjs.com/deploy/dev/docs/?class=Ext.tree.TreeNode>`_
- */
-
-/** api: constructor
- *  .. class:: LayerNode(config)
- * 
- *      A subclass of ``Ext.tree.TreeNode`` that is connected to an
- *      ``OpenLayers.Layer`` by setting the node's layer property. Checking or
- *      unchecking the checkbox of this node will directly affect the layer and
- *      vice versa. The default iconCls for this node's icon is "layer-icon",
- *      unless it has children.
- * 
- *      Setting the node's layer property to a layer name instead of an object
- *      will also work. As soon as a layer is found, it will be stored as layer
- *      property in the attributes hash.
- * 
- *      The node's text property defaults to the layer name.
- * 
- *      If the node has a radioGroup attribute configured, the node will be
- *      rendered with a radio button. This works like the checkbox with the
- *      checked attribute, but radioGroup is a string that identifies the options
- *      group. Clicking the radio button will fire a radioChange event.
- * 
- *      To use this node type in a ``TreePanel`` config, set ``nodeType`` to
- *      "gx_layer".
- */
-GeoExt.tree.LayerNode = Ext.extend(Ext.tree.TreeNode, {
-    
-    /** api: config[layer]
-     *  ``OpenLayers.Layer or String``
-     *  The layer that this layer node will
-     *  be bound to, or the name of the layer (has to match the layer's
-     *  name property). If a layer name is provided, ``layerStore`` also has
-     *  to be provided.
-     */
-
-    /** api: property[layer]
-     *  ``OpenLayers.Layer``
-     *  The layer this node is bound to.
-     */
-    layer: null,
-    
-    /** api: config[layerStore]
-     *  :class:`GeoExt.data.LayerStore` ``or "auto"``
-     *  The layer store containing the layer that this node represents.  If set
-     *  to "auto", the node will query the ComponentManager for a
-     *  :class:`GeoExt.MapPanel`, take the first one it finds and take its layer
-     *  store. This property is only required if ``layer`` is provided as a
-     *  string.
-     */
-    layerStore: null,
-    
-    /** api: config[childNodeType]
-     *  ``Ext.tree.Node or String``
-     *  Node class or nodeType of childnodes for this node. A node type provided
-     *  here needs to have an add method, with a scope argument. This method
-     *  will be run by this node in the context of this node, to create child nodes.
-     */
-    childNodeType: null,
-    
-    /** private: property[visibilityChanging]
-     * {Boolean} private property indicating layer visibility being changed
-     *     by this node in order to prevent visibilitychanged events bouncing
-     *     back and forth
-     */
-    visibilityChanging: false,
-    
-    /** private: method[constructor]
-     *  Private constructor override.
-     */
-    constructor: function(config) {
-        config.leaf = config.leaf || !config.children;
-        
-        config.iconCls = typeof config.iconCls == "undefined" &&
-            !config.children ? "layer-icon" : config.iconCls;
-        // checked status will be set by layer event, so setting it to false
-        // to always get the checkbox rendered
-        config.checked = false;
-        
-        this.defaultUI = this.defaultUI || GeoExt.tree.LayerNodeUI;
-        this.addEvents(
-            /** api: event[radiochange]
-             *  Notifies listener when a differnt radio button was selected.
-             *  Will be called with the currently selected node as argument.
-             */
-            "radiochange"
-        );
-        
-        Ext.apply(this, {
-            layer: config.layer,
-            layerStore: config.layerStore,
-            childNodeType: config.childNodeType
-        });
-        GeoExt.tree.LayerNode.superclass.constructor.apply(this, arguments);
-    },
-
-    /** private: method[render]
-     *  :param bulkRender: ``Boolean``
-     */
-    render: function(bulkRender) {
-        var layer = this.layer instanceof OpenLayers.Layer && this.layer;
-        if(!layer) {
-            // guess the store if not provided
-            if(!this.layerStore || this.layerStore == "auto") {
-                this.layerStore = GeoExt.MapPanel.guess().layers;
-            }
-            // now we try to find the layer by its name in the layer store
-            var i = this.layerStore.findBy(function(o) {
-                return o.get("title") == this.layer;
-            }, this);
-            if(i != -1) {
-                // if we found the layer, we can assign it and everything
-                // will be fine
-                layer = this.layerStore.getAt(i).get("layer");
-            }
-        }
-        if (!this.rendered || !layer) {
-            var ui = this.getUI();
-            
-            if(layer) {
-                this.layer = layer;
-                if(!this.text) {
-                    this.text = layer.name;
-                }
-                
-                if(this.childNodeType) {
-                    this.addChildNodes();
-                }
-                
-                ui.show();
-                ui.toggleCheck(layer.getVisibility());
-                this.addVisibilityEventHandlers();
-                // set initial checked status
-                this.attributes.checked = layer.getVisibility();
-            } else {
-                ui.hide();
-            }
-            
-            if(this.layerStore instanceof GeoExt.data.LayerStore) {
-                this.addStoreEventHandlers(layer);
-            }            
-        }
-        GeoExt.tree.LayerNode.superclass.render.call(this, bulkRender);
-    },
-    
-    /** private: method[addVisibilityHandlers]
-     *  Adds handlers that sync the checkbox state with the layer's visibility
-     *  state
-     */
-    addVisibilityEventHandlers: function() {
-        this.layer.events.on({
-            "visibilitychanged": this.onLayerVisibilityChanged,
-            scope: this
-        }); 
-        this.on({
-            "checkchange": this.onCheckChange,
-            scope: this
-        });
-    },
-    
-    /** private: method[onLayerVisiilityChanged
-     *  handler for visibilitychanged events on the layer
-     */
-    onLayerVisibilityChanged: function() {
-        if(!this.visibilityChanging &&
-                this.attributes.checked != this.layer.getVisibility()) {
-            this.getUI().toggleCheck(this.layer.getVisibility());
-        }
-    },
-    
-    /** private: method[onCheckChange]
-     *  :param node: ``GeoExt.tree.LayerNode``
-     *  :param checked: ``Boolean``
-     *
-     *  handler for checkchange events 
-     */
-    onCheckChange: function(node, checked) {
-        if (checked && this.layer.isBaseLayer && this.layer.map) {
-            this.layer.map.setBaseLayer(this.layer);
-        }
-        this.layer.setVisibility(checked);
-    },
-    
-    /** private: method[addStoreEventHandlers]
-     *  Adds handlers that make sure the node disappeares when the layer is
-     *  removed from the store, and appears when it is re-added.
-     */
-    addStoreEventHandlers: function() {
-        this.layerStore.on({
-            "add": this.onStoreAdd,
-            "remove": this.onStoreRemove,
-            "update": this.onStoreUpdate,
-            scope: this
-        });
-    },
-    
-    /** private: method[onStoreAdd]
-     *  :param store: ``Ext.data.Store``
-     *  :param records: ``Array(Ext.data.Record)``
-     *  :param index: ``Number``
-     *
-     *  handler for add events on the store 
-     */
-    onStoreAdd: function(store, records, index) {
-        var l;
-        for(var i=0; i<records.length; ++i) {
-            l = records[i].get("layer");
-            if(this.layer == l) {
-                this.getUI().show();
-            } else if (this.layer == l.name) {
-                // layer is a string, which means the node has not yet
-                // been rendered because the layer was not found. But
-                // now we have the layer and can render.
-                this.render(bulkRender);
-                return;
-            }
-        }
-    },
-    
-    /** private: method[onStoreRemove]
-     *  :param store: ``Ext.data.Store``
-     *  :param record: ``Ext.data.Record``
-     *  :param index: ``Number``
-     *
-     *  handler for remove events on the store 
-     */
-    onStoreRemove: function(store, record, index) {
-        if(this.layer == record.get("layer")) {
-            this.getUI().hide();
-        }
-    },
-
-    /** private: method[onStoreUpdate]
-     *  :param store: ``Ext.data.Store``
-     *  :param record: ``Ext.data.Record``
-     *  :param operation: ``String``
-     *  
-     *  Listener for the store's update event.
-     */
-    onStoreUpdate: function(store, record, operation) {
-    	var layer = record.get("layer");
-        if(this.layer == layer && this.text !== layer.name) {
-            this.setText(layer.name);
-        }
-    },
-
-    /** private: method[addChildNodes]
-     *  Calls the add method of a node type configured as ``childNodeType``
-     *  to add children.
-     */
-    addChildNodes: function() {
-        if(typeof this.childNodeType == "string") {
-            Ext.tree.TreePanel.nodeTypes[this.childNodeType].add(this);
-        } else if(typeof this.childNodeType.add === "function") {
-            this.childNodeType.add(this);
-        }
-    },
-    
-    /** private: method[destroy]
-     */
-    destroy: function() {
-        var layer = this.layer;
-        if (layer instanceof OpenLayers.Layer) {
-            layer.events.un({
-                "visibilitychanged": this.onLayerVisibilityChanged,
-                scope: this
-            });
-        }
-        delete this.layer;
-        var layerStore = this.layerStore;
-        if(layerStore) {
-            layerStore.un("add", this.onStoreAdd, this);
-            layerStore.un("remove", this.onStoreRemove, this);
-            layerStore.un("update", this.onStoreUpdate, this);
-        }
-        delete this.layerStore;
-        this.un("checkchange", this.onCheckChange, this);
-
-        GeoExt.tree.LayerNode.superclass.destroy.call(this);
-    }
-});
-
-/**
- * NodeType: gx_layer
- */
-Ext.tree.TreePanel.nodeTypes.gx_layer = GeoExt.tree.LayerNode;



More information about the Commits mailing list