[Commits] r2596 - in sandbox/mapgears/geoext.ux/ux/LayerTreeBuilder: examples lib/GeoExt.ux lib/GeoExt.ux/plugins lib/GeoExt.ux/widgets/tree
commits at geoext.org
commits at geoext.org
Fri Feb 4 16:22:52 CET 2011
Author: adube
Date: 2011-02-04 16:22:52 +0100 (Fri, 04 Feb 2011)
New Revision: 2596
Added:
sandbox/mapgears/geoext.ux/ux/LayerTreeBuilder/lib/GeoExt.ux/SingleFile.js
sandbox/mapgears/geoext.ux/ux/LayerTreeBuilder/lib/GeoExt.ux/plugins/
sandbox/mapgears/geoext.ux/ux/LayerTreeBuilder/lib/GeoExt.ux/plugins/LayerTreeBuilderNodeAgent.js
Modified:
sandbox/mapgears/geoext.ux/ux/LayerTreeBuilder/examples/tree-builder.html
sandbox/mapgears/geoext.ux/ux/LayerTreeBuilder/examples/tree-builder.js
sandbox/mapgears/geoext.ux/ux/LayerTreeBuilder/lib/GeoExt.ux/widgets/tree/LayerTreeBuilder.js
Log:
LayerTreeBuilder - new events and plugin to manage async node visibility when layer visibility is changed, SingleFile added
Modified: sandbox/mapgears/geoext.ux/ux/LayerTreeBuilder/examples/tree-builder.html
===================================================================
--- sandbox/mapgears/geoext.ux/ux/LayerTreeBuilder/examples/tree-builder.html 2011-02-04 10:14:23 UTC (rev 2595)
+++ sandbox/mapgears/geoext.ux/ux/LayerTreeBuilder/examples/tree-builder.html 2011-02-04 15:22:52 UTC (rev 2596)
@@ -17,7 +17,8 @@
<script type="text/javascript" src="../../../../geoext/lib/GeoExt.js"></script>
<link rel="stylesheet" type="text/css" href="../resources/css/LayerTreeBuilder.css" />
- <script type="text/javascript" src="../lib/GeoExt.ux/widgets/tree/LayerTreeBuilder.js"></script>
+ <script type="text/javascript" src="../lib/GeoExt.ux/SingleFile.js"></script>
+
<script type="text/javascript" src="../resources/lang/fr.js"></script>
<script type="text/javascript" src="tree-builder.js"></script>
</head>
Modified: sandbox/mapgears/geoext.ux/ux/LayerTreeBuilder/examples/tree-builder.js
===================================================================
--- sandbox/mapgears/geoext.ux/ux/LayerTreeBuilder/examples/tree-builder.js 2011-02-04 10:14:23 UTC (rev 2595)
+++ sandbox/mapgears/geoext.ux/ux/LayerTreeBuilder/examples/tree-builder.js 2011-02-04 15:22:52 UTC (rev 2596)
@@ -32,7 +32,7 @@
singleTile: true,
group: "GMap/Polygons",
isBaseLayer: false,
- visibility: true
+ visibility: false
}
));
@@ -99,6 +99,7 @@
styleMap: new OpenLayers.StyleMap(
new OpenLayers.Style({}, {rules: rules})
),
+ visibility: false,
group: "Vector"
});
vector.addFeatures(features);
Added: sandbox/mapgears/geoext.ux/ux/LayerTreeBuilder/lib/GeoExt.ux/SingleFile.js
===================================================================
--- sandbox/mapgears/geoext.ux/ux/LayerTreeBuilder/lib/GeoExt.ux/SingleFile.js (rev 0)
+++ sandbox/mapgears/geoext.ux/ux/LayerTreeBuilder/lib/GeoExt.ux/SingleFile.js 2011-02-04 15:22:52 UTC (rev 2596)
@@ -0,0 +1,81 @@
+/**
+ * Copyright (c) 2008-2010 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.
+ */
+
+/*
+ * The code in this file is based on code taken from OpenLayers.
+ *
+ * Copyright (c) 2006-2007 MetaCarta, Inc., published under the Clear BSD
+ * license. See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+ * full text of the license.
+ */
+
+(function() {
+
+ /**
+ * The relative path of this script.
+ */
+ var scriptName = "lib/GeoExt.ux/SingleFile.js";
+
+ /**
+ * Function returning the path of this script.
+ */
+ var getScriptLocation = function() {
+ var scriptLocation = "";
+ // If we load other scripts right before GeoExt using the same
+ // mechanism to add script resources dynamically (e.g. OpenLayers),
+ // document.getElementsByTagName will not find the GeoExt script tag
+ // in FF2. Using document.documentElement.getElementsByTagName instead
+ // works around this issue.
+ var scripts = document.documentElement.getElementsByTagName('script');
+ for(var i=0, len=scripts.length; i<len; i++) {
+ var src = scripts[i].getAttribute('src');
+ if(src) {
+ var index = src.lastIndexOf(scriptName);
+ // set path length for src up to a query string
+ var pathLength = src.lastIndexOf('?');
+ if(pathLength < 0) {
+ pathLength = src.length;
+ }
+ // is it found, at the end of the URL?
+ if((index > -1) && (index + scriptName.length == pathLength)) {
+ scriptLocation = src.slice(0, pathLength - scriptName.length);
+ break;
+ }
+ }
+ }
+ return scriptLocation;
+ };
+
+ var jsfiles = new Array(
+ "plugins/LayerTreeBuilderNodeAgent.js",
+ "widgets/tree/LayerTreeBuilder.js"
+ );
+
+ var agent = navigator.userAgent;
+ var docWrite = (agent.match("MSIE") || agent.match("Safari"));
+ if(docWrite) {
+ var allScriptTags = new Array(jsfiles.length);
+ }
+ var host = getScriptLocation() + "lib/GeoExt.ux/";
+ for (var i=0, len=jsfiles.length; i<len; i++) {
+ if (docWrite) {
+ allScriptTags[i] = "<script src='" + host + jsfiles[i] +
+ "'></script>";
+ } else {
+ var s = document.createElement("script");
+ s.src = host + jsfiles[i];
+ var h = document.getElementsByTagName("head").length ?
+ document.getElementsByTagName("head")[0] :
+ document.body;
+ h.appendChild(s);
+ }
+ }
+ if (docWrite) {
+ document.write(allScriptTags.join(""));
+ }
+})();
Added: sandbox/mapgears/geoext.ux/ux/LayerTreeBuilder/lib/GeoExt.ux/plugins/LayerTreeBuilderNodeAgent.js
===================================================================
--- sandbox/mapgears/geoext.ux/ux/LayerTreeBuilder/lib/GeoExt.ux/plugins/LayerTreeBuilderNodeAgent.js (rev 0)
+++ sandbox/mapgears/geoext.ux/ux/LayerTreeBuilder/lib/GeoExt.ux/plugins/LayerTreeBuilderNodeAgent.js 2011-02-04 15:22:52 UTC (rev 2596)
@@ -0,0 +1,63 @@
+Ext.namespace("GeoExt.ux.plugins");
+
+GeoExt.ux.plugins.LayerTreeBuilderNodeAgent = Ext.extend(Ext.util.Observable, {
+
+ /** private: property[tree]
+ * :class:`GeoExt.ux.LayerTreeBuilder`
+ */
+ tree: null,
+
+ /** private: method[init]
+ * :param tree: :class:`GeoExt.ux.LayerTreeBuilder`
+ */
+ init: function(tree, config) {
+ this.tree = tree;
+ this.tree.on('layermanaged', this.onLayerManaged, this);
+ },
+
+ /** private: method[onLayerManaged]
+ * :param layer: :class:`OpenLayers.Layer`
+ *
+ * Called when a "layermanaged" event is fired by the
+ * :class:`GeoExt.ux.LayerTreeBuilder` widget. Registers a
+ * "visibilitychanged" callback on the layer to manage the node visibility.
+ */
+ onLayerManaged: function(layer) {
+ layer.events.on({"visibilitychanged": function(event) {
+ var layer = event.object;
+ if (layer.visibility) {
+ if (layer.layerContainer) {
+ layer.layerContainer.ensureVisible();
+ layer.layerContainer.expand();
+ } else if (layer.options && layer.options.group) {
+ var groups = layer.options.group.split('/');
+ this.expandTreeNodesFromGroup(
+ groups, tree.getRootNode(), layer);
+ }
+ }
+ }, scope: this});
+ },
+
+ /** private: method[expandTreeNodesFromGroup]
+ * :param groups: ``Array`` of node names following the depth of the
+ * nodes
+ * :param parentNode: :class:`Ext.tree.TreeNode`
+ * :param layer: :class:`OpenLayers.Layer`
+ *
+ * Called when a "layermanaged" event is fired by the
+ * :class:`GeoExt.ux.LayerTreeBuilder` widget. Registers a
+ * "visibilitychanged" callback on the layer to manage the node visibility.
+ */
+ expandTreeNodesFromGroup: function(groups, parentNode, layer) {
+ var group = groups.shift();
+ var childNode = parentNode.findChild("text", group);
+ if (childNode) {
+ childNode.expand();
+ if (groups.length > 0) {
+ this.expandTreeNodesFromGroup(groups, childNode, layer);
+ } else {
+ layer.layerContainer = childNode;
+ }
+ }
+ }
+});
Modified: sandbox/mapgears/geoext.ux/ux/LayerTreeBuilder/lib/GeoExt.ux/widgets/tree/LayerTreeBuilder.js
===================================================================
--- sandbox/mapgears/geoext.ux/ux/LayerTreeBuilder/lib/GeoExt.ux/widgets/tree/LayerTreeBuilder.js 2011-02-04 10:14:23 UTC (rev 2595)
+++ sandbox/mapgears/geoext.ux/ux/LayerTreeBuilder/lib/GeoExt.ux/widgets/tree/LayerTreeBuilder.js 2011-02-04 15:22:52 UTC (rev 2596)
@@ -2,6 +2,13 @@
GeoExt.ux.tree.LayerTreeBuilder = Ext.extend(Ext.tree.TreePanel, {
+ /** private: property[CUSTOM_EVENTS]
+ * ``Array(String)`` Array of custom events used by this widget
+ */
+ CUSTOM_EVENTS: [
+ "layermanaged"
+ ],
+
/* begin i18n */
/** api: config[title] ``String`` i18n */
title: "Layers",
@@ -53,7 +60,7 @@
*/
layerStore: null,
- plugins: [{ptype: "gx_treenodecomponent"}],
+ plugins: null,
loader: {
applyLoader: false,
@@ -69,6 +76,13 @@
},
initComponent: function(){
+ this.addEvents(this.CUSTOM_EVENTS);
+
+ this.plugins = [
+ {ptype: "gx_treenodecomponent"},
+ new GeoExt.ux.plugins.LayerTreeBuilderNodeAgent()
+ ];
+
GeoExt.ux.tree.LayerTreeBuilder.superclass.initComponent.call(this);
if(!this.layerStore) {
this.layerStore = GeoExt.MapPanel.guess().layers;
@@ -131,6 +145,8 @@
group, this.getRootNode(), groupString, record
);
}
+
+ this.fireEvent('layermanaged', layer);
}, this);
},
@@ -411,21 +427,6 @@
onLayerContainerNodeAdded: function(tree, parentNode, childNode) {
this.validateLayerContainerStatus(parentNode);
-
- // make sure all LayerNode objects added to a LayerContainer listen to
- // the layer "visibilitychanged" event. If visibility is changed by
- // something else than the tree, ensure that the node and all its
- // parents are visibles.
- var onLayerNodeAdded = function(tree, parentNode, childNode) {
- childNode.layer &&
- childNode.layer.events.on({"visibilitychanged": function() {
- if(!this._visibilityChanging) {
- this.layer.getVisibility() && this.ensureVisible();
- }
- }, scope: childNode});
- };
- this.on("insert", onLayerNodeAdded, this);
- this.on("append", onLayerNodeAdded, this);
},
validateLayerContainerStatus: function(node) {
More information about the Commits
mailing list