Changeset 5515


Ignore:
Timestamp:
24/07/09 14:48:42 (10 years ago)
Author:
pnorton
Message:

Modified the behaviour of the layerList so that new items added are automatically selected and added to the start of the list.

Also implemented an attempt at setting up the initial selection via the URL arguments.

Location:
cowsclient/branches/qesdi
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • cowsclient/branches/qesdi/buildout/buildout.cfg

    r5457 r5515  
    11[buildout] 
    22 
    3 parts = qesdi_ui 
    4 develop =  
    5   ../ 
     3parts = cowsclient 
     4develop = .. 
    65 
    76download-cache = ../../../../python_eggs/ 
    87 
    9 [qesdi_ui] 
     8[cowsclient] 
    109recipe = zc.recipe.egg 
    1110interpreter = py 
     
    1716  PasteScript 
    1817  Genshi 
    19    
     18  simplejson 
    2019 
  • cowsclient/branches/qesdi/cowsclient/controllers/wmsviz.py

    r5502 r5515  
    1717from cowsclient.model import selectedItem 
    1818 
    19  
     19import simplejson as json 
     20import urlparse 
    2021 
    2122import copy, logging 
     
    123124#            c.pageTabs.append(('View', h.url_for(controller='viewItems',action='index'))) 
    124125 
     126        initialSetup = [] 
     127        if 'ENDPOINT' in self.inputs: 
     128            for ep in self.inputs['ENDPOINT'].split(','): 
     129                endpoint = {} 
     130                o = urlparse.urlparse(ep) 
     131                 
     132                if o.path.find(':') > 0: 
     133                    path = o.path[:o.path.find(':')] 
     134 
     135                    url = "%(scheme)s://%(hostname)s%(port)s%(path)s" % { 
     136                        'scheme' : o.scheme if o.scheme != None else '', 
     137                        'hostname' : o.hostname if o.hostname != None else '', 
     138                        'port' : ':' + str(o.port) if o.port != None else '', 
     139                        'path': path, 
     140                    } 
     141                    layers = o.path[o.path.find(':')+1:].split('|') 
     142                     
     143                else: 
     144                    url = ep 
     145                    layers = "" 
     146                 
     147                endpoint['url'] = url 
     148                endpoint['layers'] = layers 
     149 
     150                initialSetup.append(endpoint) 
     151             
     152        c.initialSetupJSON = json.dumps(initialSetup).replace('"', '\\"')  
     153 
    125154        return render('wmsviz') 
    126155 
  • cowsclient/branches/qesdi/cowsclient/public/js/layerControl.js

    r5502 r5515  
    5353        this._selectedTreeNode = null; 
    5454        this._selectedLayer = null; 
    55         this._selectedLayerElement = null; 
    5655        this._selectedDims = {}; 
    5756                 
     
    7978                time:'1905-01-15T00:00:00.0' }; 
    8079         
     80        this.layersToSelect = {}; 
     81         
    8182    }, 
    8283     
     
    9091    }, 
    9192 
    92     /** 
    93      * Add a WMS doc to the treeview 
    94      * NB, this is not fully tested as the current implementation 
    95      * only uses WMC docs 
    96      * @param wmsEndpoint - endpoint of WMS service 
    97      * @param context - context param - to use in GetCapabilities call 
    98      * @param depth - depth of layer - to use in GetCapabilities call 
    99      */ 
    100     addWMS: function(wmsEndpoint, context, depth)  
    101     { 
    102         alert("Adding WMS!!!"); 
    103         var treeNode = new YAHOO.widget.MenuNode( 
    104                  {endpoint: wmsEndpoint, 
    105                   label: "...loading"},  
    106                  this.tree.getRoot(), false); 
    107                   
    108         var f = function(xhr)  
    109         { 
    110             var cap = new WMSC.Capabilities(xhr.responseXML.documentElement); 
    111             var tree = this._addLayerTree( 
    112                 cap.getRootLayer(),  
    113                 treeNode.data,  
    114                 this.tree.getRoot(),  
    115                 treeNode); 
    116                  
    117             this.tree.draw(); 
    118         }; 
    119  
    120         var params = {REQUEST: 'GetCapabilities'}; 
    121         if (context) params.CONTEXT = context; 
    122         if (depth) params.DEPTH = depth; 
    123  
    124         // invoke the GetCapabilities call asynchronously via AJAX 
    125         new Ajax.Request(wmsEndpoint,  
    126             {parameters: params, 
    127             method: "get", 
    128             onSuccess: f.bindAsEventListener(this) 
    129             }); 
    130     }, 
     93  
    13194     
    13295    /** 
     
    167130                treeNode); 
    168131 
     132             
    169133            this.tree.draw(); 
    170134             
    171135            // Add listener to delete icon to allow node to be removed 
    172136            this.addListeners(); 
     137             
     138            console.log("loading wmc " + wmcEndpoint + " this.layersToSelect = " + this.layersToSelect); 
     139             
     140            if (this.layersToSelect[wmcEndpoint] != undefined) { 
     141                this._selectEndpointLayers(wmcEndpoint, this.layersToSelect[wmcEndpoint]); 
     142                this.layersToSelect[wmcEndpoint] = undefined; 
     143            } 
     144             
     145             
     146            //re apply the selected node (as the html will have been re-built 
     147            if (this._selectedTreeNode != null) { 
     148                if (this._selectedTreeNode.labelElId) { 
     149                    $(this._selectedTreeNode.labelElId).className = 'WMSC_selectedField'; 
     150                } 
     151            } 
     152             
    173153        }; 
    174154         
     
    177157        this.wmcRetriever.getWMC(wmcEndpoint, successFn); 
    178158 
     159         
     160         
    179161    }, 
    180162     
     
    321303        var leafDiv; 
    322304        var node1; 
    323  
     305         
    324306        // clear the already selected node 
    325307        node1 = this._selectedTreeNode; 
     
    344326        { 
    345327            if (node1.labelElId)  
    346             { 
     328            {    
    347329                $(node1.labelElId).className = 'WMSC_selectedField'; 
    348330                node1 = node1.parent; 
     
    372354    }, 
    373355     
    374     /** 
    375      * Respond to the user clicking on the delete icon for layer - by removing this layer 
    376      * 
    377      * @param evt 
    378      */ 
    379     _removeLayer: function(evt) 
    380     { 
    381         var delIcon = Event.element(evt); 
    382  
    383         // get the layer number from the icon ID 
    384         layerIndex = delIcon.id.substring(delIcon.id.indexOf("_") + 1, delIcon.id.length);             
    385          
    386         layer = document.getElementById("li_" + layerIndex); 
    387  
    388         // hide this layer by changing the style - NB, if the layer is removed, the  
    389         // associated drag+drop functionality will stop working if the list item is recreated 
    390         layer.className = "hiddenList"; 
    391         layer.innerHTML = ''; 
    392          
    393         // reduce the layer counter 
    394         this.layerNo--; 
    395  
    396         this._updateLeafLayerMessage(); 
    397  
    398         // and reload the maps 
    399         this.events.triggerEvent('changeWMS'); 
    400     }, 
     356 
    401357     
    402358    /** 
     
    447403     
    448404     
    449     /** 
    450      * Iterate over the list elements and return the first hidden one - or return null if none found 
    451      */ 
    452     _getFirstHiddenListElement: function() 
    453     { 
    454         for (var i = 1; i <= this.MAX_LAYER_NO; i++) 
    455         { 
    456             layer = document.getElementById('li_' + i); 
    457             if (layer == null) 
    458                 continue; 
    459             if (layer.className == "hiddenList") 
    460                 return layer; 
    461         } 
    462         return null; 
    463     }, 
    464  
    465405    
    466406    onNewEndpointClick: function(evt) { 
     
    469409    }, 
    470410     
     411    addLayersToSelect: function(endpoint, layers) { 
     412        this.layersToSelect[endpoint] = layers; 
     413    }, 
     414     
     415    _selectEndpointLayers: function(endpointURL, layers) { 
     416         
     417        var endpointNode = this._getNodeForEndpoint(endpointURL); 
     418         
     419        if (endpointNode == null) { 
     420                console.log("No node found for endpoint " + endpointURL); 
     421                return 
     422        } 
     423         
     424        if (endpointNode.expanded == false) { 
     425                endpointNode.expand(); 
     426        } 
     427         
     428        for (var i=0;i<layers.length;i++){ 
     429                var layerName = layers[i]; 
     430                var layerNode = this._getChildNodeForLayer(endpointNode, layerName); 
     431                 
     432                if (layerNode == null) { 
     433                        console.log("No node found for layer " + layerName +" in endpoint " + endpointURL); 
     434                        continue; 
     435                } 
     436                 
     437                layerNode.expand(); 
     438        } 
     439         
     440    }, 
     441     
     442    _getNodeForEndpoint: function(endpointURL) { 
     443        var endpointNodes = this.tree.root.children; 
     444        for (var i=0;i<endpointNodes.length;i++){ 
     445            var node = endpointNodes[i]; 
     446            if (node.data.wmcEndpoint == endpointURL) { 
     447                return node; 
     448            } 
     449        } 
     450        return null; 
     451    }, 
     452     
     453    _getChildNodeForLayer: function(endpointNode, layerName) { 
     454        for (var i=0; i<endpointNode.children.length; i++) { 
     455            var child = endpointNode.children[i]; 
     456             
     457            if (child.data.layer == layerName) { 
     458                return child; 
     459            } 
     460        } 
     461        return null; 
     462    }, 
     463     
    471464} 
    472465 
  • cowsclient/branches/qesdi/cowsclient/public/js/layerDisplayOptions.js

    r5505 r5515  
    7070          */ 
    7171        _onCurrentLayerChanged: function(e) { 
     72                console.log("Current layer changed to layer name = " + e.olLayer.name); 
    7273            this._clearForm(); 
     74            console.log("cleared form, this._form.innerHTML.length = " + this._form.innerHTML.length); 
     75             
    7376             
    7477             
     
    7881            if (e.wmcLayer != null && e.olLayer != null) { 
    7982                this._buildDisplayControls(e.wmcLayer); 
     83                console.log("built form, this._form.innerHTML.length = " + this._form.innerHTML.length); 
    8084            } 
    8185             
     
    112116        _buildDisplayOptions: function(displayOptions) { 
    113117             
     118                this._form.innerHTML = ""; 
     119                 
    114120            var fs = document.createElement('fieldset'); 
    115121            var leg = document.createElement('legend'); 
  • cowsclient/branches/qesdi/cowsclient/public/js/layerList.js

    r5484 r5515  
    5757 
    5858        _onItemClick: function(event, target) { 
    59                 if (! this._isSelected(target)) { 
    60                         this._selectItem(target); 
    61                         this._triggerSelectedLayerChange();                      
    62                 }                
     59                this._selectItem(target); 
    6360        }, 
    6461         
    6562        _onDragEnd: function(item){ 
    66                 if (! this._isSelected(item)) { 
    67                         this._selectItem(item); 
    68                         this._triggerSelectedLayerChange();                      
    69                 } 
     63                this._selectItem(item); 
    7064                this._triggerLayerOrderChange(); 
    7165        }, 
     
    8175        _selectItem: function(item) { 
    8276 
    83                 this._unselectAll(); 
    84  
    8577                if (! this._isSelected(item)) { 
     78                        this._unselectAll(); 
    8679                        item.className = this.SELECTED_CLASS + " " + item.className; 
     80                        this._triggerSelectedLayerChange();                              
    8781                } 
    8882 
     
    167161                 
    168162                var li = document.createElement('li'); 
    169                 this._dragList.appendChild(li); 
     163                 
     164                 
     165                var firstItem = this._dragList.firstChild; 
     166                this._dragList.insertBefore( li, firstItem); 
    170167                 
    171168                li.className = "list"; 
     
    174171 
    175172                this._addOnClickListeners(); 
    176                  
     173                return li; 
    177174        }, 
    178175 
     
    200197 
    201198        this._layers.push(layer); 
    202         this._addListItem(layer); 
     199        var item = this._addListItem(layer); 
    203200 
    204201        this._triggerLayerOrderChange(); 
     202        this._selectItem(item); 
    205203    }, 
    206204     
  • cowsclient/branches/qesdi/cowsclient/public/js/utils.js

    r5505 r5515  
    9090     
    9191    for (id in lookup) { 
     92        if (id == "") { 
     93                continue; 
     94        } 
    9295        element = document.getElementById(id); 
     96         
     97        if (element == "") { 
     98                console.log("Element not found for id=" + id); 
     99        } 
     100         
    93101        handler = lookup[id]; 
    94102         
     
    99107 
    100108} 
     109 
     110removeItems = function(array, item) { 
     111    var i = 0; 
     112    while (i < array.length) { 
     113        if (array[i] == item) { 
     114            array.splice(i, 1); 
     115        } else { 
     116            i++; 
     117        } 
     118    } 
     119    return array; 
     120} 
  • cowsclient/branches/qesdi/cowsclient/templates/wmsviz.html

    r5505 r5515  
    108108    legendContainer.addLayerParametersHandlers(layerParameters.events); 
    109109     
    110     <for py:for="i in session['viewItems']" class="dataset" py:strip="True"> 
    111         <span py:if="i.wmcURL" py:strip="True"> 
    112             layerControl.addWebMapContext("${i.wmcURL}"); 
    113         </span> 
    114     </for>  
    115      
    116110    app = new WMSC.VisApp('map', 10, 640, true); 
    117111 
     
    122116    if (document.getElementById('wcsdownload') == null) { 
    123117        //createDownloadButton(wcsdownloadDiv);     
    124         } 
     118    } 
     119 
     120    var initialSetupJSON = "${c.initialSetupJSON}"; 
     121 
     122    var initialEndpoints = JSON.parse(initialSetupJSON); 
     123 
     124    for (var i=0;i&lt;initialEndpoints.length;i++) { 
     125        var endpoint = initialEndpoints[i]; 
     126 
     127        layerControl.addLayersToSelect(endpoint.url, endpoint.layers); 
     128        layerControl.addWebMapContext(endpoint.url); 
     129         
     130    } 
     131 
     132    /* 
     133    if ( initialSetupObj.Layers != undefined) { 
     134        layerControl.addLayersToSelect(initialSetupObj.Layers); 
     135    } 
     136         
     137    if ( initialSetupObj.Endpoints != undefined) { 
     138            for (var i=0;i&lt;initialSetupObj.Endpoints.length;i++){ 
     139                var endpoint = initialSetupObj.Endpoints[i]; 
     140                layerControl.addWebMapContext(endpoint); 
     141            } 
     142    } 
     143    */ 
     144 
    125145     
    126146} 
Note: See TracChangeset for help on using the changeset viewer.