Changeset 5572


Ignore:
Timestamp:
06/08/09 11:49:33 (10 years ago)
Author:
pnorton
Message:

Fixed some problems with adding and removing endpoints from the layer control. Also added a maximum limit on the number of layers in the layer list.

Location:
cowsclient/branches/qesdi/cowsclient/public
Files:
1 added
5 edited

Legend:

Unmodified
Added
Removed
  • cowsclient/branches/qesdi/cowsclient/public/js/layerControl.js

    r5551 r5572  
    5353        this._selectedTreeNode = null; 
    5454        this._selectedLayer = null; 
    55         this._selectedDims = {}; 
    5655                 
    5756        this.tree = new YAHOO.widget.TreeView($(this.treeDiv)); 
     
    7675        this.layersToSelect = {}; 
    7776         
     77        this._delIconHandlers = {}; 
     78         
    7879    }, 
    7980     
     
    8687        this.tree.unsubscribe(); 
    8788    }, 
    88  
    89   
    9089     
    9190    /** 
     
    102101            if (delIcon != null) 
    103102            { 
    104                 delIcon.onclick = this._removeNode.bindAsEventListener(this); 
    105             } 
    106         } 
     103//                delIcon.onclick = this._removeNode.bindAsEventListener(this); 
     104                this._delIconHandlers[delIcon.id] = addHTMLEventListener(delIcon,  
     105                        'click', this._removeNode, this);                 
     106            } 
     107        } 
     108    }, 
     109     
     110    removeListeners: function() { 
     111        removeEventHandlersFromLookup(this._delIconHandlers); 
     112        this._delIconHandlers = {}; 
     113    }, 
     114     
     115    redrawTree: function() { 
     116        this.removeListeners(); 
     117        this.tree.draw(); 
     118         
     119        // add listeners again to the delete icons; these are lost when the tree redraws 
     120        this.addListeners(); 
     121         
    107122    }, 
    108123 
     
    113128    addWebMapContext: function(wmcEndpoint)  
    114129    { 
    115         var treeNode = new YAHOO.widget.TextNode( 
    116                  {wmcEndpoint: wmcEndpoint},  
    117                  this.tree.getRoot(), false); 
    118          
    119         treeNode.label = this._createNodeLabel("...loading", treeNode.index); 
    120          
     130        var root = this.tree.getRoot(); 
     131        var loadingLabel = '<table><tr><td class="nodeTitle">...loading</td></tr></table>'; 
     132        var loadingNode = new YAHOO.widget.TextNode({label:loadingLabel}, root, false); 
     133                 
    121134        var bindDataToTree = function(wmc)  
    122135        { 
    123             var tree = this._addWMCTree(wmc,  
    124                 treeNode.data,  
    125                 this.tree.getRoot(),  
    126                 treeNode); 
    127  
    128              
    129             this.tree.draw(); 
    130              
    131             // Add listener to delete icon to allow node to be removed 
    132             this.addListeners(); 
     136            this.tree.removeNode(loadingNode); 
     137            var WMCNode = this._addWMCTree(wmc, wmcEndpoint); 
     138             
     139            this.redrawTree(); 
    133140             
    134141            if (this.layersToSelect[wmcEndpoint] != undefined) { 
    135                 this._selectEndpointLayers(wmcEndpoint, this.layersToSelect[wmcEndpoint]); 
    136                 this.layersToSelect[wmcEndpoint] = undefined; 
    137             } 
    138              
     142                this._selectEndpointLayers(wmcEndpoint, this.layersToSelect[wmcEndpoint]); 
     143                this.layersToSelect[wmcEndpoint] = undefined; 
     144            } 
    139145             
    140146            //re apply the selected node (as the html will have been re-built 
     
    147153        }; 
    148154         
     155        var onRetriveWMCFail = function(resp) { 
     156            alert("Attempt to retrive endpoint " + wmcEndpoint + " failed, response.status = " + resp.status + " (" + resp.statusText+ ")" + "."); 
     157            this.tree.removeNode(loadingNode); 
     158            this.redrawTree(); 
     159            WMSC.log("Attempt to retrive endpoint " + wmcEndpoint + " failed, response.status = " + resp.status + " (" + resp.statusText+ ")" + ".") 
     160        } 
     161         
     162        this.redrawTree(); 
     163         
    149164        successFn =bindDataToTree.bindAsEventListener(this); 
    150          
    151         this.wmcRetriever.getWMC(wmcEndpoint, successFn); 
    152  
    153          
    154          
     165        failureFn = onRetriveWMCFail.bindAsEventListener(this); 
     166                 
     167        this.wmcRetriever.getWMC(wmcEndpoint, successFn, failureFn); 
     168 
     169         
     170         
     171    }, 
     172     
     173     
     174    /** 
     175     * Add WMC sub-layers to tree view as a new tree node 
     176     * 
     177     * @param wmc - the wmc object to add a root node for 
     178     * @param wmcEndpoint - the endpoint url for the wmc object 
     179     * @param parentNode - parent node in treeview 
     180     */ 
     181    _addWMCTree: function(wmc, wmcEndpoint, parentNode)  
     182    { 
     183         
     184        var nodeData = {}; 
     185        var labelText = wmc.getTitle() + " (" + wmcEndpoint + ")"; 
     186 
     187        nodeData.label = labelText; 
     188        nodeData.layer = wmc.getTitle(); 
     189        nodeData.abstract = wmc.getTitle(); 
     190        nodeData.wmcEndpoint = wmcEndpoint; 
     191         
     192        var wmcTreeNode = new YAHOO.widget.MenuNode(nodeData, this.tree.getRoot(), false); 
     193         
     194        wmcTreeNode.label = this._createNodeLabel(labelText, wmcTreeNode.index); 
     195         
     196        // add in the child nodes 
     197        var subLayers = wmc.getSubLayers(); 
     198         
     199        for (var i=0; i<subLayers.length; i++)  
     200        { 
     201            this._addLayerTree( subLayers[i], wmcEndpoint, wmcTreeNode); 
     202        } 
     203         
     204        return wmcTreeNode; 
    155205    }, 
    156206     
     
    160210     * 
    161211     * @param layer - WMS sublayer to add 
    162      * @param nodeData - additional data to associate with tree node 
     212     * @param wmcEndpoint - the endpoint url this node is part of 
    163213     * @param parentNode - parent node in treeview 
    164      * @param treeNode - treenode to use; if this is null, a new node is added 
    165      */ 
    166     _addLayerTree: function(layer, nodeData, parentNode, treeNode)  
    167     { 
    168         nodeData.label = layer.getTitle(); 
    169         nodeData.layer = layer.getName(); 
    170         nodeData.abstract = layer.getAbstract(); 
    171         nodeData.layerData = layer; 
    172         nodeData.title = layer.getAbstract(); //used for tooltips 
    173  
    174         var subLayers = layer.getSubLayers(); 
    175  
    176         // When initialising a top-level node it will  
    177         // already exist (showing loading indicator). 
    178         // In this case replace data, otherwise create a new node. 
    179         if (treeNode == null)  
    180         { 
    181             var treeNode = new YAHOO.widget.MenuNode( 
    182                 nodeData, parentNode, false); 
    183         } 
    184         else  
    185         { 
    186             treeNode.data = nodeData; 
    187             treeNode.label = nodeData.label; 
    188         } 
    189          
    190         for (var i=0; i<subLayers.length; i++)  
    191         { 
    192             this._addLayerTree(subLayers[i],  
    193                 {endpoint: nodeData.endpoint, 
    194                 wmcEndpoint: nodeData.wmcEndpoint}, 
    195                 treeNode); 
    196         } 
    197         return treeNode; 
    198     }, 
    199      
    200      
    201     /** 
    202      * Add WMC sub-layers to tree view as a new tree node 
    203      * 
    204      * @param layer - WMS sublayer to add 
    205      * @param nodeData - additional data to associate with tree node 
    206      * @param parentNode - parent node in treeview 
    207      * @param treeNode - treenode to use; if this is null, a new node is added 
    208      */ 
    209     _addWMCTree: function(wmc, nodeData, parentNode, treeNode)  
    210     { 
    211         nodeData.label = wmc.getTitle() + " (" + nodeData.wmcEndpoint + ")"; 
    212         nodeData.layer = wmc.getTitle(); 
    213         nodeData.abstract = wmc.getTitle(); 
    214         
    215         var subLayers = wmc.getSubLayers(); 
    216  
    217         // When initialising a top-level node it will  
    218         // already exist (showing loading indicator). 
    219         // In this case replace data, otherwise create a new node. 
    220         if (treeNode == null)  
    221         { 
    222             var treeNode = new YAHOO.widget.MenuNode( 
    223                 nodeData, parentNode, false); 
    224         } 
    225         else  
    226         { 
    227             treeNode.data = nodeData; 
    228             // NB, add listener later on since the delete is not currently available in the DOM 
    229             treeNode.label = this._createNodeLabel(nodeData.label, treeNode.index); 
    230         } 
    231          
    232         for (var i=0; i<subLayers.length; i++)  
    233         { 
    234             this._addLayerTree( 
    235                 subLayers[i],  
    236                 {endpoint: nodeData.endpoint, 
    237                 wmcEndpoint: nodeData.wmcEndpoint}, 
    238                 treeNode); 
    239         } 
    240         return treeNode; 
     214     */ 
     215    _addLayerTree: function(layer, wmcEndpoint, parentNode) { 
     216         nodeData = {}; 
     217         nodeData.wmcEndpoint = wmcEndpoint; 
     218         nodeData.label = layer.getTitle(); 
     219         nodeData.layer = layer.getName(); 
     220         nodeData.abstract = layer.getAbstract(); 
     221         nodeData.layerData = layer; 
     222         nodeData.title = layer.getAbstract(); //used for tooltips 
     223  
     224         var treeNode = new YAHOO.widget.MenuNode(nodeData, parentNode, false); 
     225          
     226         var subLayers = layer.getSubLayers(); 
     227         for (var i=0; i<subLayers.length; i++)  
     228         { 
     229             this._addLayerTree(subLayers[i], wmcEndpoint, treeNode); 
     230         } 
     231          
     232         return treeNode; 
    241233    }, 
    242234     
     
    270262        this.tree.removeNode(node) 
    271263        // need to redraw to show this change  
    272         this.tree.draw(); 
    273          
    274         var updateView = function(xhr)  
    275         { 
    276             // add listeners again to the delete icons; these are lost when the tree redraws 
    277             this.addListeners(); 
    278         } 
    279          
    280         new Ajax.Request('removeViewItem',  
    281             { 
    282                 parameters: params, 
    283                  method: "get", 
    284                 onSuccess: updateView.bindAsEventListener(this)             
    285             }); 
     264        this.redrawTree();        
     265         
    286266    }, 
    287267                 
     
    408388     
    409389    _selectEndpointLayers: function(endpointURL, layers) { 
    410          
    411         var endpointNode = this._getNodeForEndpoint(endpointURL); 
    412          
    413         if (endpointNode == null) { 
    414                 WMSC.log("No node found for endpoint " + endpointURL); 
    415                 return 
    416         } 
    417          
    418         if (endpointNode.expanded == false) { 
    419                 endpointNode.expand(); 
    420         } 
    421          
    422         for (var i=0;i<layers.length;i++){ 
    423                 var layerName = layers[i]; 
    424                 var layerNode = this._getChildNodeForLayer(endpointNode, layerName); 
    425                  
    426                 if (layerNode == null) { 
    427                         WMSC.log("No node found for layer " + layerName +" in endpoint " + endpointURL); 
    428                         continue; 
    429                 } 
    430                  
    431                 layerNode.expand(); 
    432         } 
    433          
     390         
     391        var endpointNode = this._getNodeForEndpoint(endpointURL); 
     392         
     393        if (endpointNode == null) { 
     394            WMSC.log("No node found for endpoint " + endpointURL); 
     395            return 
     396        } 
     397         
     398        if (endpointNode.expanded == false) { 
     399            endpointNode.expand(); 
     400        } 
     401         
     402        for (var i=0;i<layers.length;i++){ 
     403            var layerName = layers[i]; 
     404            var layerNode = this._getChildNodeForLayer(endpointNode, layerName); 
     405             
     406            if (layerNode == null) { 
     407                WMSC.log("No node found for layer " + layerName +" in endpoint " + endpointURL); 
     408                continue; 
     409            } 
     410             
     411            layerNode.expand(); 
     412        } 
     413         
    434414    }, 
    435415     
    436416    _getNodeForEndpoint: function(endpointURL) { 
    437         var endpointNodes = this.tree.root.children; 
     417        var endpointNodes = this.tree.root.children; 
    438418        for (var i=0;i<endpointNodes.length;i++){ 
    439419            var node = endpointNodes[i]; 
    440420            if (node.data.wmcEndpoint == endpointURL) { 
    441                 return node; 
     421                return node; 
    442422            } 
    443423        } 
     
    455435        return null; 
    456436    }, 
     437     
    457438     
    458439} 
  • cowsclient/branches/qesdi/cowsclient/public/js/layerList.js

    r5557 r5572  
    2525    EVENTS_RAISED: ['SELECTED_LAYER_CHANGED', 'LAYER_ORDER_CHANGED'], 
    2626 
     27    MAX_LAYERS:10, 
     28     
    2729    /** 
    2830     * OpenLayers Events object managing EVENTS_RAISED 
     
    5456        _addOnClickListeners: function() { 
    5557                var currentItems = this._getCurrentListItems(); 
    56                 for (var i in currentItems) { 
     58                for (var i=0; i<currentItems.length; i++) { 
    5759                        addHTMLEventListener( currentItems[i], 'click', this._onItemClick, this); 
    5860                } 
     
    182184                var oldLayers = this._layers; 
    183185                var newLayers = []; 
    184                 for (var i in oldLayers) { 
     186                for (var i=0; i<oldLayers.length;i++) { 
    185187                        layer = oldLayers[i]; 
    186188                        if (layer.id == layerId) { 
     
    210212                var li = document.createElement('li'); 
    211213                 
    212                  
    213214                var firstItem = this._dragList.firstChild; 
    214215                this._dragList.insertBefore( li, firstItem); 
     
    228229        _getCurrentListItems: function() { 
    229230                var items = []; 
    230                 for (i=0; i<this._dragList.childNodes.length; i++){ 
     231                for (var i=0; i<this._dragList.childNodes.length; i++){ 
    231232                        child = this._dragList.childNodes[i]; 
    232233                        if (child.nodeType == 1 && child.nodeName == 'LI') { 
     
    249250     */ 
    250251    onNewLayer: function(e) { 
    251         this._addLayer(e.layer); 
     252         
     253        if (this._layers.length >= this.MAX_LAYERS) { 
     254          
     255            alert("Can't have more than " + this.MAX_LAYERS + " layers in the list.") 
     256        } 
     257        else { 
     258            this._addLayer(e.layer); 
     259        } 
     260         
    252261    }, 
    253262 
     
    306315     */ 
    307316    _getLayerById: function(id) { 
    308         for (var i in this._layers)  { 
     317        for (var i=0; i<this._layers.length; i++)  { 
    309318                if (this._layers[i].id == id) { 
    310319                        return this._layers[i]; 
     
    340349        _removeAllItems: function() { 
    341350        var currentItems = this._getCurrentListItems(); 
    342                 for (var i in currentItems) { 
     351         
     352                for (var i=0; i<currentItems.length; i++) { 
    343353                        this._removeItem(currentItems[i].id); 
    344354                }        
  • cowsclient/branches/qesdi/cowsclient/public/js/mapControl.js

    r5563 r5572  
    9696        // retain the correct bounds. 
    9797        this.map.resolution = this.map.getResolutionForZoom(this.map.zoom); 
    98         WMSC.log("this.map.maxExtent: bottom=" + this.map.maxExtent.bottom +" left=" + this.map.maxExtent.left + " top=" + this.map.maxExtent.top + " right="+ this.map.maxExtent.right); 
    99         WMSC.log("this.map.zoom = " + this.map.zoom);         
    100         WMSC.log("this.map.resolution = " + this.map.resolution); 
     98        WMSC.log("this.map resolution = " + this.map.resolution + " zoom=" + this.map.zoom + " maxExtent: b=" + this.map.maxExtent.bottom +" l=" + this.map.maxExtent.left + " t=" + this.map.maxExtent.top + " r="+ this.map.maxExtent.right); 
    10199         
    102100        // Enter selection mode 
     
    123121     
    124122    updateBoundsBoundsControl: function(events) { 
    125          WMSC.log("updateBoundsBoundsControl"); 
    126          
    127          WMSC.log("this.map.maxExtent: bottom=" + this.map.maxExtent.bottom +" left=" + this.map.maxExtent.left + " top=" + this.map.maxExtent.top + " right="+ this.map.maxExtent.right); 
    128          WMSC.log("this.map.zoom = " + this.map.zoom);         
    129          WMSC.log("this.map.resolution = " + this.map.resolution); 
     123         WMSC.log("map zoomed -- this.map resolution = " + this.map.resolution + " zoom=" + this.map.zoom + " maxExtent: b=" + this.map.maxExtent.bottom +" l=" + this.map.maxExtent.left + " t=" + this.map.maxExtent.top + " r="+ this.map.maxExtent.right); 
    130124    }, 
    131125 
  • cowsclient/branches/qesdi/cowsclient/public/js/wmcRetriever.js

    r5551 r5572  
    1515            },           
    1616             
    17             getWMC: function(endpoint, onSuccessFunction) { 
     17            getWMC: function(endpoint, onSuccessFunction, onFailureFunction) { 
    1818                 
    1919                if (this.isWMCCached(endpoint)) { 
     
    3535                                var params = {REQUEST: 'GetWebMapCapabilities', ENDPOINT: endpoint}; 
    3636         
     37                                if (onFailureFunction == undefined) { 
     38                                    onFailureFunction = function(resp) {   WMSC.log("Failure:" + resp); } 
     39                                } 
     40                                 
    3741                                // invoke the GetWebMapContext call asynchronously via AJAX 
    3842                                new Ajax.Request('',  
     
    4145                                 onSuccess: onRetrieveWMC.bindAsEventListener(this), 
    4246                                 onException : function(resp, e) {   WMSC.log("Exception:" + e); }, 
    43                                  onFailure : function(resp) {   WMSC.log("Failure:" + resp); }, 
     47                                 onFailure : onFailureFunction, 
    4448                                        }); 
    4549                } 
  • cowsclient/branches/qesdi/cowsclient/public/layout/drag_drop_style.css

    r5480 r5572  
    1313ul.draglist {  
    1414    position: relative; 
    15     width: 200px;  
    16     height:200px; 
     15    width: 150px;  
     16    height:172px; 
    1717    background: #f7f7f7; 
    1818    border: 1px solid gray; 
     
    2626    cursor: move; 
    2727    zoom: 1; 
     28    font-size:12px; 
    2829} 
    2930 
Note: See TracChangeset for help on using the changeset viewer.