1 /**
  2  * @fileOverview  
  3  * Copyright (c) 2013 Regione Autonoma della Sardegna
  4  * Published under the GPL license.<br>
  5  * See <a href="https://sardegnageoportale.it/webgis/license.txt">https://sardegnageoportale.it/webgis/license.txt</a>
  6  * for the full text of the license.
  7  * @version 0.1
  8  */
  9 
 10 /**
 11  * @namespace framework.plugins
 12  */
 13 Ext.namespace("framework.plugins");
 14 
 15 /** 
 16  *  Plugin for removing a selected node from the TOC.
 17  *  @name_ RemoveNode
 18  *  @class Plugin for removing a selected node from the TOC.
 19  *  @constructor
 20  *  @extends <a target="_blank" href="http://gxp.opengeo.org/master/doc/lib/plugins/Tool.html">gxp.plugins.Tool</a>
 21  */
 22 framework.plugins.RemoveNode = Ext.extend(gxp.plugins.Tool,
 23 /** 
 24  * @lends framework.plugins.RemoveNode.prototype 
 25  */
 26  {
 27     
 28     /**
 29     * framework_rasaddgroup plugin type.
 30     * @public
 31     * @type String
 32     */
 33     ptype: "framework_removenode",
 34     
 35     /**
 36     * Text for remove menu item (i18n).
 37     * @public
 38     * @type String
 39     */
 40     removeMenuText: "Remove",
 41 
 42     /**
 43     * Text for remove action tooltip (i18n).
 44     * @public
 45     * @type String
 46     */
 47     removeActionTip: "Remove",
 48     
 49      /**
 50     * Array of (node.text) for undeletable node.
 51     * @public
 52     * @type Array of String
 53     */
 54     undeletableNodes: null,
 55     
 56     /**
 57     * Create and append remove-node action
 58     * @public
 59     * @returns {framework.plugins.RemoveNode} Object with remove node controls inside
 60     */ 
 61     addActions: function() {
 62         var selectedNode;
 63         var selectedLayer;
 64         var root;
 65         var actions = gxp.plugins.RemoveLayer.superclass.addActions.apply(this, [{
 66             menuText: this.removeMenuText,
 67             iconCls: "gxp-icon-removelayers",
 68             disabled: true,
 69             tooltip: this.removeActionTip,
 70             handler: function() {
 71                 if(!this.isUndeletable(selectedNode.text)){
 72                     if(selectedNode.layer){
 73                         this.target.mapPanel.layers.remove(selectedLayer);
 74                         removeNodeAction.setDisabled(true);
 75                     }
 76                     else
 77                         if(selectedNode.childNodes.length === 0){                    
 78                                 removeNodeAction.setDisabled(true);
 79                                 for(var group in this.target.layer_group){
 80                                     var groupConfig = typeof this.target.layer_group[group] == "string" ?
 81                                         {title: this.target.layer_group[group]} : this.target.layer_group[group];
 82                                     if(groupConfig.title === selectedNode.text)
 83                                         delete this.target.layer_group[group];
 84                                 }
 85                             root.removeChild( selectedNode );
 86                         }else alert('Solo gruppi vuoti possono essere eliminati');
 87                 }
 88             },
 89             scope: this
 90         }]);
 91         var removeNodeAction = actions[0];
 92 
 93         this.target.on(
 94             "nodeselectionchange", function(root_, node, last) {
 95                     selectedNode = node;
 96                     root = root_;
 97                     removeNodeAction.setDisabled(!node || this.isUndeletable(node.text) || (!node.layer && node.childNodes.length > 0));
 98                 },this);
 99                 
100         this.target.on(
101           "layerselectionchange", function(record) {
102                   selectedLayer = record;
103               },this);
104         
105         return actions;
106     },
107     
108     /**
109     * Controler for deletable node name
110     * @private
111     * @returns {boolean}
112     */ 
113     isUndeletable: function(text){
114         if(this.undeletableNodes.indexOf(text) > -1)
115             return true;
116         return false;
117     }
118         
119 });
120 
121 Ext.preg(framework.plugins.RemoveNode.prototype.ptype, framework.plugins.RemoveNode);
122