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