1 //<script type="text/javascript">
3 // Auto generated file - created by app.Builder.js- do not edit directly (at present!)
7 // register the module first
8 Pman.on('beforeload', function()
11 modKey : '001-Pman.Tab.BuilderTree',
12 module : Pman.Tab.BuilderTree,
14 parent : Pman.Tab.BuilderTab,
15 name : "Pman.Tab.BuilderTree",
21 Pman.Tab.BuilderTree = new Roo.util.Observable({
27 add : function(parentLayout, region)
31 this.parentLayout = parentLayout;
33 this.panel = parentLayout.addxtype({
34 xtype: 'NestedLayoutPanel',
38 xtype: 'BorderLayout',
45 activate : function (_self)
48 _this.tree = _self.tree;
49 if (_this.hasMouseEvent) {
53 _this.hasMouseEvent = true;
54 this.el.on('mouseover', function() { _this.isMouseOver= true; });
55 this.el.on('mouseout', function() { _this.isMouseOver = false; });
64 beforenodedrop : function (e)
66 // nodedragover handles the allow/disallow..
70 target - The node being targeted for the drop
71 data - The drag data from the drag source
72 point - The point of the drop - append, above or below
73 source - The drag source
74 rawEvent - Raw mouse event
75 dropNode - Drop node(s) provided by the source OR you can supply node(s) to be inserted by setting them on this object.
76 cancel - Set this to true to cancel the drop.
78 var np = e.point == 'append' ? e.target : e.target.parentNode ; // new parent
80 if (!e.tree || !e.dropNode) {
83 var data = e.source.dragData.selections[0].data;
84 var nar = data.name.split(':')
85 var xar = nar[0].split('.');
89 'xtype' : xar.join('.')
92 cfg['*prop'] = nar[1];
94 // at this point it should of a set of options...
95 this.appendNode(np, cfg);
97 return; // fixme drop of elements from palete..
100 // always drop onto own parent
101 if (np == e.dropNode.parentNode) {
102 if (e.rawEvent.ctrlKey) {
103 e.dropNode = this.dupeNode(e.dropNode);
107 // can append has to use palete...
108 // this code should be in nodedragover.
110 Roo.log("move checks need moving");
113 if (_this.canAppend(np, e.dropNode.elConfig)) {
114 if (e.rawEvent.ctrlKey) {
115 e.dropNode = _this.dupeNode(e.dropNode);
117 if (np.elConfig.xtype == 'GridEditor') {
118 e.dropNode.elConfig['*prop'] = 'field';
124 Roo.log('can not drop ' + e.dropNode.elConfig.xtype + ' ontop of ' + np.elConfig.xtype);
132 nodedrop : function (e)
135 Roo.log("Node Drop");
138 _this.configToText(e.dropNode.elConfig)
140 var bp = Pman.Tab.BuilderPanel;
141 bp.redraw.defer(1000, bp, [true]);
144 click : function (node, e)
147 // console.log(e.button);
148 this.setCurrentNode(node);
151 contextmenu : function (node, e)
155 this.getSelectionModel().select(node);
156 _this.setCurrentNode(node);
157 var xt = node.elConfig.xtype;
159 if (typeof(node.elConfig['*prop']) != 'undefined') {
160 altx = node.parentNode.elConfig.xtype +'.' + node.elConfig['*prop'];
162 var mn = Pman.Tab.BuilderPalete.getMenu(xt,altx);
166 mn.show(e.getTarget());
172 nodedragover : function (e)
174 Roo.log('nodedragover');
177 // if we have within the same tree:
178 // dropNode (the node being dragged !!important!!)
179 // point: below, append
183 // grid = the grid...
184 // source.dragData.selections[..]
187 // we can only check parents... (we in theory can check dupe properties.. but let's ignore that for the time being.)
192 // drag from palete..
193 if (!e.source.dragData.selections.length) {
197 var drop_rec = e.source.dragData.selections[0];
198 var drop_xtype = drop_rec.data.name;
199 var ok_parents = drop_rec.json.parents;
200 Roo.log("TEST PARENTS: " + ok_parents.join(', '));
201 var new_parent = this.nodeXtype((e.point == 'append') ? e.target : e.target.parentNode);
202 Roo.log("NEW PARENT: " + e.point + " = " + new_parent);
204 // see if the new_parent is actually in the list of ok_parents
206 Roo.each(ok_parents,function(n) {
207 if (n == new_parent || n.split(':').shift() == new_parent) {
212 // done all the checks...
221 containerScroll : true,
222 ddGroup : 'component',
225 appendNode : function(parent, inConfig, point) {
230 if (inConfig.items) { // loading!
231 items = inConfig.items;
232 delete inConfig.items;
234 var config = this.cloneConfig(inConfig);
240 var newNode = new Roo.tree.TreeNode({
241 text: this.configToText(config)
245 newNode.elConfig = config;
246 //if (markUndo === true) {
247 //Pman.Tab.Builder.markUndo("Add " + newNode.text);
249 // appends to our tree...
253 parent.parentNode.insertBefore(newNode, parent);
256 // if it's the last node.. then we append..
257 var ix = parent.parentNode.indexOf(parent);
258 if (parent.parentNode.childNodes.length == (ix + 1)) {
259 parent.appendChild(newNode);
267 parent.appendChild(newNode);
272 Roo.each(items, function(i) {
273 this.appendNode(newNode, i);
280 -- panels with panes...
281 if (items && items.length) {
282 for (var i = 0; i < items.length; i++) {
283 this.appendConfig(items[i], newNode, false);
286 if (opts.doUpdate !== false) {
287 this.updateForm(false, newNode);
294 clearAll : function() {
296 if (rt.childNodes.length) {
297 rt.removeChild(rt.childNodes[0]);
300 this.root.elConfig = Roo.apply({ }, this.defaultElConfig());
301 //var btop = Pman.Tab.BuilderTop;
302 //if (btop.modsel && btop.modsel.lastData) {
303 // this.tree.root.elConfig.app = btop.modsel.lastData.app;
306 this.setCurrentNode(this.root,true);
309 cloneConfig : function(config) {
310 if (!config) { return null; }
313 for (var i in config) {
314 if (typeof config[i] == 'object') {
315 newConfig[i] = this.cloneConfig(config[i]);
316 } else if (typeof config[i] != 'function') { // should this happen?
317 newConfig[i] = config[i];
322 configToText : function(c) {
326 var sr = (typeof(c['+buildershow']) != 'undefined') && !c['+buildershow'] ? true : false;
327 if (sr) txt.push('<s>');
328 if (typeof(c['*prop']) != 'undefined') { txt.push(c['*prop']+ ':'); }
329 if (c.xtype) { txt.push(c.xtype); }
330 if (c.fieldLabel) { txt.push('[' + c.fieldLabel + ']'); }
331 if (c.boxLabel) { txt.push('[' + c.boxLabel + ']'); }
334 if (c.layout) { txt.push('<i>' + c.layout + '</i>'); }
335 if (c.title) { txt.push('<b>' + c.title + '</b>'); }
336 if (c.header) { txt.push('<b>' + c.header + '</b>'); }
337 if (c.legend) { txt.push('<b>' + c.legend + '</b>'); }
338 if (c.text) { txt.push('<b>' + c.text + '</b>'); }
339 if (c.name) { txt.push('<b>' + c.name+ '</b>'); }
340 if (c.region) { txt.push('<i>(' + c.region + ')</i>'); }
341 if (c.dataIndex) { txt.push('[' + c.dataIndex+ ']'); }
342 if (sr) txt.push('</s>');
343 return (txt.length == 0 ? "Element" : txt.join(" "));
347 currentNodeType : function() {
348 return this.nodeXtype(this.currentNode);
351 defaultElConfig : function() {
360 name : 'Module Name',
364 dupeNode : function(node)
366 var cfg = this.cloneConfig(node.elConfig);
368 var newNode = new Roo.tree.TreeNode(
371 text: this.configToText(cfg)
374 newNode.elConfig = cfg;
375 node.eachChild(function(n) {
376 newNode.appendChild(this.dupeNode(n));
382 loadBJS : function(module, part) {
385 url : baseURL + '/Roo/Builder_part.php',
390 success : function(res)
394 _t.loadTree(JSON.parse(res.data.json));
404 loadTree : function(o) {
406 this.root.elConfig = o;
407 this.root.setText(this.configToText(this.root.elConfig));
408 this.appendNode(this.root, o.items[0]);
409 this.root.expand(true);
410 Pman.Tab.BuilderView.panel.redraw();
411 this.setCurrentNode(this.root,true);
413 nodeXtype : function(n) {
414 if (!n) {return ''; }
415 var xt = n.elConfig.xtype || '';
416 var xns= n.elConfig['|xns'] || '';
417 xns += xns.length ? '.' : '';
420 renderer : function(n) { return n.text; },
421 setCurrentNode : function(node,select) {
422 this.currentNode = node || this.root;
424 //Pman.Tab.BuilderView.highlightElement(this.currentNode);
426 var p = Pman.Tab.BuilderProps.grid;
427 if (p) { //may not be ready yet..
428 p.setCurrrentNode(this.currentNode);
432 this.currentNode.setText(this.configToText(this.currentNode.elConfig));
434 if (select) { //&& node !== this.tree.root) {
435 if (this.currentNode !== this.root) {
436 this.currentNode.ensureVisible();
438 this.currentNode.expand(false,false);
439 this.currentNode.select();
442 Pman.Tab.BuilderPalette.grid.getSelectionModel().clearSelections();
443 Pman.Tab.BuilderPalette.grid.view.refresh();
447 xtype: 'DefaultSelectionModel',
454 elConfig : function() {
465 name : "Module Name",
476 xtype: 'LayoutRegion',
480 xtype: 'LayoutRegion',
487 this.layout = this.panel.layout;