Pman.Tab.BuilderProps.js
[Pman.Builder] / Pman.Tab.BuilderProps.js
1 //<script type="text/javascript">
2
3 // Auto generated file - created by app.Builder.js- do not edit directly (at present!)
4
5
6
7 // register the module first
8 Pman.on('beforeload', function()
9 {
10     Pman.register({
11         modKey : '001-Pman.Tab.BuilderProps',
12         module : Pman.Tab.BuilderProps,
13         region : 'center',
14         parent : Pman.Tab.BuilderTree,
15         name : "Pman.Tab.BuilderProps",
16         disabled : false, 
17         permname: '' 
18     });
19 });
20
21 Pman.Tab.BuilderProps = new Roo.util.Observable({
22
23     panel : false,
24     disabled : false,
25     parentLayout:  false,
26
27     add : function(parentLayout, region)
28     {
29
30         var _this = this;
31         this.parentLayout = parentLayout;
32
33         this.panel = parentLayout.addxtype({
34             xtype: 'GridPanel',
35             xns: Roo,
36             region : 'south',
37             grid : {
38                 xtype: 'PropertyGrid',
39                 xns: Roo.grid,
40                 listeners : {
41                     render : function (grid)
42                     {
43                         _this.grid = grid;
44                     },
45                     afteredit : function (e)
46                     {
47                        // change this..
48                        //this.currentNode.elConfig
49                        
50                        
51                     },
52                     cellclick : function (_self, rowIndex, ci, e)
53                     {
54                          if (ci != 0) {
55                             return;
56                         }
57                         //console.log(e);
58                         // click on left col..
59                         // show menu..
60                         // make sure it's initialized..
61                         _this.panel.menu = Roo.factory(_this.panel.menu);
62                         
63                         _this.panel.menu.show(e.getTarget(), 'tr');
64                     },
65                     beforeedit : function (e)
66                     {
67                        Roo.log('beforeedit');
68                        Roo.log(e.record.data);
69                        var key = e.record.data.name;
70                        var val = e.record.data.value;
71                        // source code edit..
72                        if (key.match(/^\|/) || key.match(/^\!/)) {
73                             Pman.Dialog.BuilderSourceEdit.show( { value :  val }, function(d) {
74                                 // perhaps we should eval it..
75                             
76                                 _this.grid.currentNode.elConfig[key] = d.value;
77                                 _this.grid.setSourceFromNode(_this.grid.currentNode.elConfig);
78                                 _this.grid.fireEvent('propertychange', 
79                                     Pman.Tab.BuilderProps.grid, key, d.value, false
80                                 );
81                             });
82                             e.cancel = true;
83                             return;
84                        }
85                     },
86                     propertychange : function (grid, id, v, oldval)
87                     {
88                         if (v == 'false') {
89                             v = false;
90                         }
91                         if (v == 'true') {
92                             v = true;
93                         }
94                         _this.grid.currentNode.elConfig[id] = v;
95                         _this.grid.setSourceFromNode(_this.grid.currentNode.elConfig);
96                         
97                         var bp = Pman.Tab.BuilderView.panel;
98                         bp.redraw.defer(100,bp, [true]);
99                         _this.grid.currentNode.setText(
100                             Pman.Tab.BuilderTree.tree.configToText(_this.grid.currentNode.elConfig)
101                         );
102                     }
103                 },
104                 setCurrrentNode : function(node) {
105                    
106                     
107                     this.view.el.unmask();
108                     
109                     if (!node || !node.elConfig) {
110                         this.currentNode = false;
111                         this.setSourceFromNode({});
112                         this.view.el.mask('select a node');
113                     } else {
114                         this.currentNode = node;
115                         this.setSourceFromNode(this.currentNode.elConfig);
116                         
117                     }
118                     
119                 },
120                 setSourceFromNode : function(config) {
121                    
122                         
123                     var cfg = {};
124                     for (var k in config) {
125                         //if (k.charAt(0) == '*') {
126                         //    continue; // dont show props..
127                         //}
128                         
129                         if (k  == 'listeners') {
130                             for (var kk in config[k]) {
131                                 cfg['!' + kk ] = config[k][kk];
132                             }
133                             
134                             continue;
135                         }
136                         if (k  == 'items') {
137                             continue;
138                         }
139                         
140                         if (typeof config[k] == 'object') {
141                             
142                             try {
143                                 var ec = Roo.encode(config[k]);
144                                 cfg[k] = ec;
145                             } catch(e) {}
146                             continue;
147                         }
148                         cfg[k] = config[k];
149                     }
150                     
151                     if (!cfg.xtype) {
152                         return;
153                     }
154                 
155                     this.setSource(cfg);
156                 
157                     
158                       
159                 }
160             },
161             menu : {
162                 xtype: 'Menu',
163                 xns: Roo.menu,
164                 items : [
165                     {
166                         xtype: 'Item',
167                         xns: Roo.menu,
168                         listeners : {
169                             click : function (_self, e)
170                             {
171                              
172                                  var rc = _this.grid.getSelectionModel().getSelectedCell();
173                                  var n = _this.grid.getDataSource().getAt(rc[0]).data.name;
174                                  if (n == 'xtype') {
175                                     return;
176                                 }
177                                 if (n[0] == '!') {
178                                     delete _this.grid.currentNode.elConfig.listeners[n.substring(1)];
179                                 } else {
180                                     delete _this.grid.currentNode.elConfig[n];
181                                 }
182                                 // reloads      
183                                 _this.grid.setCurrrentNode(_this.grid.currentNode);
184                                 var bp = Pman.Tab.BuilderView.panel;
185                                 bp.redraw.defer(100,bp, [true]);
186                                 // update the tree's  text
187                                 _this.grid.currentNode.setText(
188                                     Pman.Tab.BuilderTree.tree.configToText(_this.grid.currentNode.elConfig)
189                                 );
190                             }
191                         },
192                         text : "Delete Property / Event"
193                     }
194                 ]
195             },
196             'menu2' : {
197                 xtype: 'Menu',
198                 xns: Roo.menu,
199                 items : [
200                     {
201                         xtype: 'Item',
202                         xns: Roo.menu,
203                         listeners : {
204                             click : function (_self, e)
205                             {
206                              
207                                 // show a dialog to select property??
208                                 // or should we add a line and get clever with pulldowns..
209                             }
210                         },
211                         text : "Add Property"
212                     }
213                 ]
214             }
215         });
216         this.layout = this.panel.layout;
217
218     }
219 });