d9decbc48eba09de9625e72a281168b4da89264a
[roojs1] / docs / symbols / src / Roo_XComponent.js.html
1 <html><head><title>../roojs1/Roo/XComponent.js</title><link rel="stylesheet" type="text/css" href="../../../css/highlight-js.css"/></head><body class="highlightpage"><code class="jsdoc-pretty"><span class="jsdoc-comment">/*
2  * Original code for Roojs - LGPL
3  * &lt;script type=&quot;text/javascript&quot;&gt;
4  */
5  
6 /**
7  * @class Roo.XComponent
8  * A delayed Element creator...
9  * Or a way to group chunks of interface together.
10  * technically this is a wrapper around a tree of Roo elements (which defines a 'module'),
11  *  used in conjunction with XComponent.build() it will create an instance of each element,
12  *  then call addxtype() to build the User interface.
13  * 
14  * Mypart.xyx = new Roo.XComponent({
15
16     parent : 'Mypart.xyz', // empty == document.element.!!
17     order : '001',
18     name : 'xxxx'
19     region : 'xxxx'
20     disabled : function() {} 
21      
22     tree : function() { // return an tree of xtype declared components
23         var MODULE = this;
24         return 
25         {
26             xtype : 'NestedLayoutPanel',
27             // technicall
28         }
29      ]
30  *})
31  *
32  *
33  * It can be used to build a big heiracy, with parent etc.
34  * or you can just use this to render a single compoent to a dom element
35  * MYPART.render(Roo.Element | String(id) | dom_element )
36  *
37  *
38  * Usage patterns.
39  *
40  * Classic Roo
41  *
42  * Roo is designed primarily as a single page application, so the UI build for a standard interface will
43  * expect a single 'TOP' level module normally indicated by the 'parent' of the XComponent definition being defined as false.
44  *
45  * Each sub module is expected to have a parent pointing to the class name of it's parent module.
46  *
47  * When the top level is false, a 'Roo.BorderLayout' is created and the element is flagged as 'topModule'
48  * - if mulitple topModules exist, the last one is defined as the top module.
49  *
50  * Embeded Roo
51  * 
52  * When the top level or multiple modules are to embedded into a existing HTML page,
53  * the parent element can container '#id' of the element where the module will be drawn.
54  *
55  * Bootstrap Roo
56  *
57  * Unlike classic Roo, the bootstrap tends not to be used as a single page.
58  * it relies more on a include mechanism, where sub modules are included into an outer page.
59  * This is normally managed by the builder tools using Roo.apply( options, Included.Sub.Module )
60  * 
61  * Bootstrap Roo Included elements
62  *
63  * Our builder application needs the ability to preview these sub compoennts. They will normally have parent=false set,
64  * hence confusing the component builder as it thinks there are multiple top level elements. 
65  *
66  * 
67  * 
68  * @extends Roo.util.Observable
69  * @constructor
70  * @param cfg {Object} configuration of component
71  * 
72  */
73 </span><span class="jsdoc-var">Roo.XComponent </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">cfg</span><span class="jsdoc-syntax">) {
74     </span><span class="jsdoc-var">Roo.apply</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">cfg</span><span class="jsdoc-syntax">);
75     </span><span class="jsdoc-var">this.addEvents</span><span class="jsdoc-syntax">({ 
76         </span><span class="jsdoc-comment">/**
77              * @event built
78              * Fires when this the componnt is built
79              * @param {Roo.XComponent} c the component
80              */
81         </span><span class="jsdoc-string">'built' </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true
82         
83     </span><span class="jsdoc-syntax">});
84     </span><span class="jsdoc-var">this.region </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.region </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-string">'center'</span><span class="jsdoc-syntax">; </span><span class="jsdoc-comment">// default..
85     </span><span class="jsdoc-var">Roo.XComponent.register</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
86     </span><span class="jsdoc-var">this.modules </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">;
87     </span><span class="jsdoc-var">this.el </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">; </span><span class="jsdoc-comment">// where the layout goes..
88     
89     
90 </span><span class="jsdoc-syntax">}
91 </span><span class="jsdoc-var">Roo.extend</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">Roo.XComponent</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">Roo.util.Observable</span><span class="jsdoc-syntax">, {
92     </span><span class="jsdoc-comment">/**
93      * @property el
94      * The created element (with Roo.factory())
95      * @type {Roo.Layout}
96      */
97     </span><span class="jsdoc-var">el  </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
98     
99     </span><span class="jsdoc-comment">/**
100      * @property el
101      * for BC  - use el in new code
102      * @type {Roo.Layout}
103      */
104     </span><span class="jsdoc-var">panel </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
105     
106     </span><span class="jsdoc-comment">/**
107      * @property layout
108      * for BC  - use el in new code
109      * @type {Roo.Layout}
110      */
111     </span><span class="jsdoc-var">layout </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
112     
113      </span><span class="jsdoc-comment">/**
114      * @cfg {Function|boolean} disabled
115      * If this module is disabled by some rule, return true from the funtion
116      */
117     </span><span class="jsdoc-var">disabled </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
118     
119     </span><span class="jsdoc-comment">/**
120      * @cfg {String} parent 
121      * Name of parent element which it get xtype added to..
122      */
123     </span><span class="jsdoc-var">parent</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
124     
125     </span><span class="jsdoc-comment">/**
126      * @cfg {String} order
127      * Used to set the order in which elements are created (usefull for multiple tabs)
128      */
129     
130     </span><span class="jsdoc-var">order </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
131     </span><span class="jsdoc-comment">/**
132      * @cfg {String} name
133      * String to display while loading.
134      */
135     </span><span class="jsdoc-var">name </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
136     </span><span class="jsdoc-comment">/**
137      * @cfg {String} region
138      * Region to render component to (defaults to center)
139      */
140     </span><span class="jsdoc-var">region </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'center'</span><span class="jsdoc-syntax">,
141     
142     </span><span class="jsdoc-comment">/**
143      * @cfg {Array} items
144      * A single item array - the first element is the root of the tree..
145      * It's done this way to stay compatible with the Xtype system...
146      */
147     </span><span class="jsdoc-var">items </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
148     
149     </span><span class="jsdoc-comment">/**
150      * @property _tree
151      * The method that retuns the tree of parts that make up this compoennt 
152      * @type {function}
153      */
154     </span><span class="jsdoc-var">_tree  </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
155     
156      </span><span class="jsdoc-comment">/**
157      * render
158      * render element to dom or tree
159      * @param {Roo.Element|String|DomElement} optional render to if parent is not set.
160      */
161     
162     </span><span class="jsdoc-var">render </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">el</span><span class="jsdoc-syntax">)
163     {
164         
165         </span><span class="jsdoc-var">el </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">el </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">;
166         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">hp </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.parent </span><span class="jsdoc-syntax">? 1 : 0;
167         </span><span class="jsdoc-var">Roo.debug </span><span class="jsdoc-syntax">&amp;&amp;  </span><span class="jsdoc-var">Roo.log</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
168         
169         </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">el </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-keyword">typeof</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.parent</span><span class="jsdoc-syntax">) == </span><span class="jsdoc-string">'string' </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">this.parent.substring</span><span class="jsdoc-syntax">(0,1) == </span><span class="jsdoc-string">'#'</span><span class="jsdoc-syntax">) {
170             </span><span class="jsdoc-comment">// if parent is a '#.....' string, then let's use that..
171             </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">ename </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.parent.substr</span><span class="jsdoc-syntax">(1);
172             </span><span class="jsdoc-var">this.parent </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">;
173             </span><span class="jsdoc-var">Roo.debug </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">Roo.log</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">ename</span><span class="jsdoc-syntax">);
174             </span><span class="jsdoc-keyword">switch </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">ename</span><span class="jsdoc-syntax">) {
175                 </span><span class="jsdoc-keyword">case </span><span class="jsdoc-string">'bootstrap-body' </span><span class="jsdoc-syntax">:
176                     </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">typeof</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">Roo.bootstrap.Body</span><span class="jsdoc-syntax">) != </span><span class="jsdoc-string">'undefined'</span><span class="jsdoc-syntax">) {
177                         </span><span class="jsdoc-var">this.parent </span><span class="jsdoc-syntax">= { </span><span class="jsdoc-var">el </span><span class="jsdoc-syntax">:  </span><span class="jsdoc-keyword">new  </span><span class="jsdoc-var">Roo.bootstrap.Body</span><span class="jsdoc-syntax">() };
178                         </span><span class="jsdoc-var">Roo.debug </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">Roo.log</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;setting el to doc body&quot;</span><span class="jsdoc-syntax">);
179                          
180                     } </span><span class="jsdoc-keyword">else </span><span class="jsdoc-syntax">{
181                         </span><span class="jsdoc-keyword">throw </span><span class="jsdoc-string">&quot;Container is bootstrap body, but Roo.bootstrap.Body is not defined&quot;</span><span class="jsdoc-syntax">;
182                     }
183                     </span><span class="jsdoc-keyword">break</span><span class="jsdoc-syntax">;
184                 </span><span class="jsdoc-keyword">case </span><span class="jsdoc-string">'bootstrap'</span><span class="jsdoc-syntax">:
185                     </span><span class="jsdoc-var">this.parent </span><span class="jsdoc-syntax">= { </span><span class="jsdoc-var">el </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">};
186                     </span><span class="jsdoc-comment">// fall through
187                 </span><span class="jsdoc-keyword">default</span><span class="jsdoc-syntax">:
188                     </span><span class="jsdoc-var">el </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Roo.get</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">ename</span><span class="jsdoc-syntax">);
189                     </span><span class="jsdoc-keyword">break</span><span class="jsdoc-syntax">;
190             }
191                 
192             
193             </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">el </span><span class="jsdoc-syntax">&amp;&amp; !</span><span class="jsdoc-var">this.parent</span><span class="jsdoc-syntax">) {
194                 </span><span class="jsdoc-var">Roo.debug </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">Roo.log</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;Warning - element can not be found :#&quot; </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">ename </span><span class="jsdoc-syntax">);
195                 </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
196             }
197         }
198         </span><span class="jsdoc-var">Roo.debug </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">Roo.log</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;EL:&quot;</span><span class="jsdoc-syntax">);
199         </span><span class="jsdoc-var">Roo.debug </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">Roo.log</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">el</span><span class="jsdoc-syntax">);
200         </span><span class="jsdoc-var">Roo.debug </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">Roo.log</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;this.parent.el:&quot;</span><span class="jsdoc-syntax">);
201         </span><span class="jsdoc-var">Roo.debug </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">Roo.log</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.parent.el</span><span class="jsdoc-syntax">);
202         
203         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">tree </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this._tree </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">this._tree</span><span class="jsdoc-syntax">() : </span><span class="jsdoc-var">this.tree</span><span class="jsdoc-syntax">();
204
205         </span><span class="jsdoc-comment">// altertive root elements ??? - we need a better way to indicate these.
206         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">is_alt </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Roo.XComponent.is_alt </span><span class="jsdoc-syntax">|| (</span><span class="jsdoc-keyword">typeof</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">Roo.bootstrap</span><span class="jsdoc-syntax">) != </span><span class="jsdoc-string">'undefined' </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">tree.xns </span><span class="jsdoc-syntax">== </span><span class="jsdoc-var">Roo.bootstrap</span><span class="jsdoc-syntax">) ||
207                         (</span><span class="jsdoc-keyword">typeof</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">Roo.mailer</span><span class="jsdoc-syntax">) != </span><span class="jsdoc-string">'undefined' </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">tree.xns </span><span class="jsdoc-syntax">== </span><span class="jsdoc-var">Roo.mailer</span><span class="jsdoc-syntax">) ;
208         
209         </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">this.parent </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">is_alt</span><span class="jsdoc-syntax">) {
210             </span><span class="jsdoc-comment">//el = Roo.get(document.body);
211             </span><span class="jsdoc-var">this.parent </span><span class="jsdoc-syntax">= { </span><span class="jsdoc-var">el </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true </span><span class="jsdoc-syntax">};
212         }
213             
214             
215         
216         </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">this.parent</span><span class="jsdoc-syntax">) {
217             
218             </span><span class="jsdoc-var">Roo.debug </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">Roo.log</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;no parent - creating one&quot;</span><span class="jsdoc-syntax">);
219             
220             </span><span class="jsdoc-var">el </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">el </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">Roo.get</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">el</span><span class="jsdoc-syntax">) : </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">;     
221             
222             </span><span class="jsdoc-comment">// it's a top level one..
223             </span><span class="jsdoc-var">this.parent </span><span class="jsdoc-syntax">=  {
224                 </span><span class="jsdoc-var">el </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.BorderLayout</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">el </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">document.body</span><span class="jsdoc-syntax">, {
225                 
226                      </span><span class="jsdoc-var">center</span><span class="jsdoc-syntax">: {
227                          </span><span class="jsdoc-var">titlebar</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
228                          </span><span class="jsdoc-var">autoScroll</span><span class="jsdoc-syntax">:</span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
229                          </span><span class="jsdoc-var">closeOnTab</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
230                          </span><span class="jsdoc-var">tabPosition</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'top'</span><span class="jsdoc-syntax">,
231                           </span><span class="jsdoc-comment">//resizeTabs: true,
232                          </span><span class="jsdoc-var">alwaysShowTabs</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">el </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">hp</span><span class="jsdoc-syntax">? </span><span class="jsdoc-keyword">false </span><span class="jsdoc-syntax">:  </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
233                          </span><span class="jsdoc-var">hideTabs</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">el </span><span class="jsdoc-syntax">|| !</span><span class="jsdoc-var">hp </span><span class="jsdoc-syntax">? </span><span class="jsdoc-keyword">true </span><span class="jsdoc-syntax">:  </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
234                          </span><span class="jsdoc-var">minTabWidth</span><span class="jsdoc-syntax">: 140
235                      }
236                  })
237             };
238         }
239         
240         </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">this.parent.el</span><span class="jsdoc-syntax">) {
241                 </span><span class="jsdoc-comment">// probably an old style ctor, which has been disabled.
242                 </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
243
244         }
245                 </span><span class="jsdoc-comment">// The 'tree' method is  '_tree now' 
246             
247         </span><span class="jsdoc-var">tree.region </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">tree.region </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">this.region</span><span class="jsdoc-syntax">;
248         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">is_body </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">;
249         </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.parent.el </span><span class="jsdoc-syntax">=== </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">) {
250             </span><span class="jsdoc-comment">// bootstrap... - body..
251             </span><span class="jsdoc-var">this.parent.el </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Roo.factory</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">tree</span><span class="jsdoc-syntax">);
252             </span><span class="jsdoc-var">is_body </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">;
253         }
254         
255         </span><span class="jsdoc-var">this.el </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.parent.el.addxtype</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">tree</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">undefined</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">is_body</span><span class="jsdoc-syntax">);
256         </span><span class="jsdoc-var">this.fireEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'built'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
257         
258         </span><span class="jsdoc-var">this.panel </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.el</span><span class="jsdoc-syntax">;
259         </span><span class="jsdoc-var">this.layout </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.panel.layout</span><span class="jsdoc-syntax">;
260         </span><span class="jsdoc-var">this.parentLayout </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.parent.layout  </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">;  
261          
262     }
263     
264 });
265
266 </span><span class="jsdoc-var">Roo.apply</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">Roo.XComponent</span><span class="jsdoc-syntax">, {
267     </span><span class="jsdoc-comment">/**
268      * @property  hideProgress
269      * true to disable the building progress bar.. usefull on single page renders.
270      * @type Boolean
271      */
272     </span><span class="jsdoc-var">hideProgress </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
273     </span><span class="jsdoc-comment">/**
274      * @property  buildCompleted
275      * True when the builder has completed building the interface.
276      * @type Boolean
277      */
278     </span><span class="jsdoc-var">buildCompleted </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
279      
280     </span><span class="jsdoc-comment">/**
281      * @property  topModule
282      * the upper most module - uses document.element as it's constructor.
283      * @type Object
284      */
285      
286     </span><span class="jsdoc-var">topModule  </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
287       
288     </span><span class="jsdoc-comment">/**
289      * @property  modules
290      * array of modules to be created by registration system.
291      * @type {Array} of Roo.XComponent
292      */
293     
294     </span><span class="jsdoc-var">modules </span><span class="jsdoc-syntax">: [],
295     </span><span class="jsdoc-comment">/**
296      * @property  elmodules
297      * array of modules to be created by which use #ID 
298      * @type {Array} of Roo.XComponent
299      */
300      
301     </span><span class="jsdoc-var">elmodules </span><span class="jsdoc-syntax">: [],
302
303      </span><span class="jsdoc-comment">/**
304      * @property  is_alt
305      * Is an alternative Root - normally used by bootstrap or other systems,
306      *    where the top element in the tree can wrap 'body' 
307      * @type {boolean}  (default false)
308      */
309      
310     </span><span class="jsdoc-var">is_alt </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
311     </span><span class="jsdoc-comment">/**
312      * @property  build_from_html
313      * Build elements from html - used by bootstrap HTML stuff 
314      *    - this is cleared after build is completed
315      * @type {boolean}    (default false)
316      */
317      
318     </span><span class="jsdoc-var">build_from_html </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
319     </span><span class="jsdoc-comment">/**
320      * Register components to be built later.
321      *
322      * This solves the following issues
323      * - Building is not done on page load, but after an authentication process has occured.
324      * - Interface elements are registered on page load
325      * - Parent Interface elements may not be loaded before child, so this handles that..
326      * 
327      *
328      * example:
329      * 
330      * MyApp.register({
331           order : '000001',
332           module : 'Pman.Tab.projectMgr',
333           region : 'center',
334           parent : 'Pman.layout',
335           disabled : false,  // or use a function..
336         })
337      
338      * * @param {Object} details about module
339      */
340     </span><span class="jsdoc-var">register </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">obj</span><span class="jsdoc-syntax">) {
341                 
342         </span><span class="jsdoc-var">Roo.XComponent.event.fireEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'register'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">obj</span><span class="jsdoc-syntax">);
343         </span><span class="jsdoc-keyword">switch</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">typeof</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">obj.disabled</span><span class="jsdoc-syntax">) ) {
344                 
345             </span><span class="jsdoc-keyword">case </span><span class="jsdoc-string">'undefined'</span><span class="jsdoc-syntax">:
346                 </span><span class="jsdoc-keyword">break</span><span class="jsdoc-syntax">;
347             
348             </span><span class="jsdoc-keyword">case </span><span class="jsdoc-string">'function'</span><span class="jsdoc-syntax">:
349                 </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">( </span><span class="jsdoc-var">obj.disabled</span><span class="jsdoc-syntax">() ) {
350                         </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
351                 }
352                 </span><span class="jsdoc-keyword">break</span><span class="jsdoc-syntax">;
353             
354             </span><span class="jsdoc-keyword">default</span><span class="jsdoc-syntax">:
355                 </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">obj.disabled</span><span class="jsdoc-syntax">) {
356                         </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
357                 }
358                 </span><span class="jsdoc-keyword">break</span><span class="jsdoc-syntax">;
359         }
360                 
361         </span><span class="jsdoc-var">this.modules.push</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">obj</span><span class="jsdoc-syntax">);
362          
363     },
364     </span><span class="jsdoc-comment">/**
365      * convert a string to an object..
366      * eg. 'AAA.BBB' -&gt; finds AAA.BBB
367
368      */
369     
370     </span><span class="jsdoc-var">toObject </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">str</span><span class="jsdoc-syntax">)
371     {
372         </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">str </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-keyword">typeof</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">str</span><span class="jsdoc-syntax">) == </span><span class="jsdoc-string">'object'</span><span class="jsdoc-syntax">) {
373             </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">str</span><span class="jsdoc-syntax">;
374         }
375         </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">str.substring</span><span class="jsdoc-syntax">(0,1) == </span><span class="jsdoc-string">'#'</span><span class="jsdoc-syntax">) {
376             </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">str</span><span class="jsdoc-syntax">;
377         }
378
379         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">ar </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">str.split</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'.'</span><span class="jsdoc-syntax">);
380         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">rt</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">;
381         </span><span class="jsdoc-var">rt </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">ar.shift</span><span class="jsdoc-syntax">();
382             </span><span class="jsdoc-comment">/** eval:var:o */
383         </span><span class="jsdoc-keyword">try </span><span class="jsdoc-syntax">{
384             </span><span class="jsdoc-keyword">eval</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'if (typeof ' </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">rt </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">' == &quot;undefined&quot;){ o = false;} o = ' </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">rt </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">';'</span><span class="jsdoc-syntax">);
385         } </span><span class="jsdoc-keyword">catch </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">) {
386             </span><span class="jsdoc-keyword">throw </span><span class="jsdoc-string">&quot;Module not found : &quot; </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">str</span><span class="jsdoc-syntax">;
387         }
388         
389         </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">o </span><span class="jsdoc-syntax">=== </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">) {
390             </span><span class="jsdoc-keyword">throw </span><span class="jsdoc-string">&quot;Module not found : &quot; </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">str</span><span class="jsdoc-syntax">;
391         }
392         </span><span class="jsdoc-var">Roo.each</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">ar</span><span class="jsdoc-syntax">, </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">) {
393             </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">typeof</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">]) == </span><span class="jsdoc-string">'undefined'</span><span class="jsdoc-syntax">) {
394                 </span><span class="jsdoc-keyword">throw </span><span class="jsdoc-string">&quot;Module not found : &quot; </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">str</span><span class="jsdoc-syntax">;
395             }
396             </span><span class="jsdoc-var">o </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">];
397         });
398         
399         </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">;
400         
401     },
402     
403     
404     </span><span class="jsdoc-comment">/**
405      * move modules into their correct place in the tree..
406      * 
407      */
408     </span><span class="jsdoc-var">preBuild </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function </span><span class="jsdoc-syntax">()
409     {
410         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">_t </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">;
411         </span><span class="jsdoc-var">Roo.each</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.modules </span><span class="jsdoc-syntax">, </span><span class="jsdoc-keyword">function </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">obj</span><span class="jsdoc-syntax">)
412         {
413             </span><span class="jsdoc-var">Roo.XComponent.event.fireEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'beforebuild'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">obj</span><span class="jsdoc-syntax">);
414             
415             </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">opar </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">obj.parent</span><span class="jsdoc-syntax">;
416             </span><span class="jsdoc-keyword">try </span><span class="jsdoc-syntax">{ 
417                 </span><span class="jsdoc-var">obj.parent </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.toObject</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">opar</span><span class="jsdoc-syntax">);
418             } </span><span class="jsdoc-keyword">catch</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">) {
419                 </span><span class="jsdoc-var">Roo.debug </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">Roo.log</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;parent:toObject failed: &quot; </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">e.toString</span><span class="jsdoc-syntax">());
420                 </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
421             }
422             
423             </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">obj.parent</span><span class="jsdoc-syntax">) {
424                 </span><span class="jsdoc-var">Roo.debug </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">Roo.log</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;GOT top level module&quot;</span><span class="jsdoc-syntax">);
425                 </span><span class="jsdoc-var">Roo.debug </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">Roo.log</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">obj</span><span class="jsdoc-syntax">);
426                 </span><span class="jsdoc-var">obj.modules </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.util.MixedCollection</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">, 
427                     </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">) { </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">o.order </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">'' </span><span class="jsdoc-syntax">}
428                 );
429                 </span><span class="jsdoc-var">this.topModule </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">obj</span><span class="jsdoc-syntax">;
430                 </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
431             }
432                         </span><span class="jsdoc-comment">// parent is a string (usually a dom element name..)
433             </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">typeof</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">obj.parent</span><span class="jsdoc-syntax">) == </span><span class="jsdoc-string">'string'</span><span class="jsdoc-syntax">) {
434                 </span><span class="jsdoc-var">this.elmodules.push</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">obj</span><span class="jsdoc-syntax">);
435                 </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
436             }
437             </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">obj.parent.constructor </span><span class="jsdoc-syntax">!= </span><span class="jsdoc-var">Roo.XComponent</span><span class="jsdoc-syntax">) {
438                 </span><span class="jsdoc-var">Roo.debug </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">Roo.log</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;Warning : Object Parent is not instance of XComponent:&quot; </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">obj.name</span><span class="jsdoc-syntax">)
439             }
440             </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">obj.parent.modules</span><span class="jsdoc-syntax">) {
441                 </span><span class="jsdoc-var">obj.parent.modules </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.util.MixedCollection</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">, 
442                     </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">) { </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">o.order </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">'' </span><span class="jsdoc-syntax">}
443                 );
444             }
445             </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">obj.parent.disabled</span><span class="jsdoc-syntax">) {
446                 </span><span class="jsdoc-var">obj.disabled </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">;
447             }
448             </span><span class="jsdoc-var">obj.parent.modules.add</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">obj</span><span class="jsdoc-syntax">);
449         }, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
450     },
451     
452      </span><span class="jsdoc-comment">/**
453      * make a list of modules to build.
454      * @return {Array} list of modules. 
455      */ 
456     
457     </span><span class="jsdoc-var">buildOrder </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">()
458     {
459         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">_this </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">;
460         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">cmp </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">a</span><span class="jsdoc-syntax">,</span><span class="jsdoc-var">b</span><span class="jsdoc-syntax">) {   
461             </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">String</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">a</span><span class="jsdoc-syntax">)</span><span class="jsdoc-var">.toUpperCase</span><span class="jsdoc-syntax">() &gt; </span><span class="jsdoc-var">String</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">b</span><span class="jsdoc-syntax">)</span><span class="jsdoc-var">.toUpperCase</span><span class="jsdoc-syntax">() ? 1 : -1;
462         };
463         </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">((!</span><span class="jsdoc-var">this.topModule </span><span class="jsdoc-syntax">|| !</span><span class="jsdoc-var">this.topModule.modules</span><span class="jsdoc-syntax">) &amp;&amp; !</span><span class="jsdoc-var">this.elmodules.length</span><span class="jsdoc-syntax">) {
464             </span><span class="jsdoc-keyword">throw </span><span class="jsdoc-string">&quot;No top level modules to build&quot;</span><span class="jsdoc-syntax">;
465         }
466         
467         </span><span class="jsdoc-comment">// make a flat list in order of modules to build.
468         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">mods </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.topModule </span><span class="jsdoc-syntax">? [ </span><span class="jsdoc-var">this.topModule </span><span class="jsdoc-syntax">] : [];
469                 
470         
471         </span><span class="jsdoc-comment">// elmodules (is a list of DOM based modules )
472         </span><span class="jsdoc-var">Roo.each</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.elmodules</span><span class="jsdoc-syntax">, </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">) {
473             </span><span class="jsdoc-var">mods.push</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">);
474             </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">this.topModule </span><span class="jsdoc-syntax">&amp;&amp;
475                 </span><span class="jsdoc-keyword">typeof</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e.parent</span><span class="jsdoc-syntax">) == </span><span class="jsdoc-string">'string' </span><span class="jsdoc-syntax">&amp;&amp;
476                 </span><span class="jsdoc-var">e.parent.substring</span><span class="jsdoc-syntax">(0,1) == </span><span class="jsdoc-string">'#' </span><span class="jsdoc-syntax">&amp;&amp;
477                 </span><span class="jsdoc-var">Roo.get</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e.parent.substr</span><span class="jsdoc-syntax">(1))
478                ) {
479                 
480                 </span><span class="jsdoc-var">_this.topModule </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">;
481             }
482             
483         });
484
485         
486         </span><span class="jsdoc-comment">// add modules to their parents..
487         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">addMod </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">m</span><span class="jsdoc-syntax">) {
488             </span><span class="jsdoc-var">Roo.debug </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">Roo.log</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;build Order: add: &quot; </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">m.name</span><span class="jsdoc-syntax">);
489                 
490             </span><span class="jsdoc-var">mods.push</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">m</span><span class="jsdoc-syntax">);
491             </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">m.modules </span><span class="jsdoc-syntax">&amp;&amp; !</span><span class="jsdoc-var">m.disabled</span><span class="jsdoc-syntax">) {
492                 </span><span class="jsdoc-var">Roo.debug </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">Roo.log</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;build Order: &quot; </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">m.modules.length </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">&quot; child modules&quot;</span><span class="jsdoc-syntax">);
493                 </span><span class="jsdoc-var">m.modules.keySort</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'ASC'</span><span class="jsdoc-syntax">,  </span><span class="jsdoc-var">cmp </span><span class="jsdoc-syntax">);
494                 </span><span class="jsdoc-var">Roo.debug </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">Roo.log</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;build Order: &quot; </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">m.modules.length </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">&quot; child modules (after sort)&quot;</span><span class="jsdoc-syntax">);
495     
496                 </span><span class="jsdoc-var">m.modules.each</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">addMod</span><span class="jsdoc-syntax">);
497             } </span><span class="jsdoc-keyword">else </span><span class="jsdoc-syntax">{
498                 </span><span class="jsdoc-var">Roo.debug </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">Roo.log</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;build Order: no child modules&quot;</span><span class="jsdoc-syntax">);
499             }
500             </span><span class="jsdoc-comment">// not sure if this is used any more..
501             </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">m.finalize</span><span class="jsdoc-syntax">) {
502                 </span><span class="jsdoc-var">m.finalize.name </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">m.name </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">&quot; (clean up) &quot;</span><span class="jsdoc-syntax">;
503                 </span><span class="jsdoc-var">mods.push</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">m.finalize</span><span class="jsdoc-syntax">);
504             }
505             
506         }
507         </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.topModule </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">this.topModule.modules</span><span class="jsdoc-syntax">) { 
508             </span><span class="jsdoc-var">this.topModule.modules.keySort</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'ASC'</span><span class="jsdoc-syntax">,  </span><span class="jsdoc-var">cmp </span><span class="jsdoc-syntax">);
509             </span><span class="jsdoc-var">this.topModule.modules.each</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">addMod</span><span class="jsdoc-syntax">);
510         } 
511         </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">mods</span><span class="jsdoc-syntax">;
512     },
513     
514      </span><span class="jsdoc-comment">/**
515      * Build the registered modules.
516      * @param {Object} parent element.
517      * @param {Function} optional method to call after module has been added.
518      * 
519      */ 
520    
521     </span><span class="jsdoc-var">build </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">opts</span><span class="jsdoc-syntax">) 
522     {
523         
524         </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">typeof</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">opts</span><span class="jsdoc-syntax">) != </span><span class="jsdoc-string">'undefined'</span><span class="jsdoc-syntax">) {
525             </span><span class="jsdoc-var">Roo.apply</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">,</span><span class="jsdoc-var">opts</span><span class="jsdoc-syntax">);
526         }
527         
528         </span><span class="jsdoc-var">this.preBuild</span><span class="jsdoc-syntax">();
529         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">mods </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.buildOrder</span><span class="jsdoc-syntax">();
530       
531         </span><span class="jsdoc-comment">//this.allmods = mods;
532         //Roo.debug &amp;&amp; Roo.log(mods);
533         //return;
534         </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">mods.length</span><span class="jsdoc-syntax">) { </span><span class="jsdoc-comment">// should not happen
535             </span><span class="jsdoc-keyword">throw </span><span class="jsdoc-string">&quot;NO modules!!!&quot;</span><span class="jsdoc-syntax">;
536         }
537         
538         
539         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">msg </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">&quot;Building Interface...&quot;</span><span class="jsdoc-syntax">;
540         </span><span class="jsdoc-comment">// flash it up as modal - so we store the mask!?
541         </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">this.hideProgress </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">Roo.MessageBox</span><span class="jsdoc-syntax">) {
542             </span><span class="jsdoc-var">Roo.MessageBox.show</span><span class="jsdoc-syntax">({ </span><span class="jsdoc-var">title</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'loading' </span><span class="jsdoc-syntax">});
543             </span><span class="jsdoc-var">Roo.MessageBox.show</span><span class="jsdoc-syntax">({
544                </span><span class="jsdoc-var">title</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">&quot;Please wait...&quot;</span><span class="jsdoc-syntax">,
545                </span><span class="jsdoc-var">msg</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">msg</span><span class="jsdoc-syntax">,
546                </span><span class="jsdoc-var">width</span><span class="jsdoc-syntax">:450,
547                </span><span class="jsdoc-var">progress</span><span class="jsdoc-syntax">:</span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
548                </span><span class="jsdoc-var">closable</span><span class="jsdoc-syntax">:</span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
549                </span><span class="jsdoc-var">modal</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false
550               
551             </span><span class="jsdoc-syntax">});
552         }
553         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">total </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">mods.length</span><span class="jsdoc-syntax">;
554         
555         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">_this </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">;
556         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">progressRun </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">() {
557             </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">mods.length</span><span class="jsdoc-syntax">) {
558                 </span><span class="jsdoc-var">Roo.debug </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">Roo.log</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'hide?'</span><span class="jsdoc-syntax">);
559                 </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">this.hideProgress </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">Roo.MessageBox</span><span class="jsdoc-syntax">) {
560                     </span><span class="jsdoc-var">Roo.MessageBox.hide</span><span class="jsdoc-syntax">();
561                 }
562                 </span><span class="jsdoc-var">Roo.XComponent.build_from_html </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">; </span><span class="jsdoc-comment">// reset, so dialogs will be build from javascript
563                 
564                 </span><span class="jsdoc-var">Roo.XComponent.event.fireEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'buildcomplete'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">_this.topModule</span><span class="jsdoc-syntax">);
565                 
566                 </span><span class="jsdoc-comment">// THE END...
567                 </span><span class="jsdoc-keyword">return false</span><span class="jsdoc-syntax">;   
568             }
569             
570             </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">m </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">mods.shift</span><span class="jsdoc-syntax">();
571             
572             
573             </span><span class="jsdoc-var">Roo.debug </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">Roo.log</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">m</span><span class="jsdoc-syntax">);
574             </span><span class="jsdoc-comment">// not sure if this is supported any more.. - modules that are are just function
575             </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">typeof</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">m</span><span class="jsdoc-syntax">) == </span><span class="jsdoc-string">'function'</span><span class="jsdoc-syntax">) { 
576                 </span><span class="jsdoc-var">m.call</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
577                 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">progressRun.defer</span><span class="jsdoc-syntax">(10, </span><span class="jsdoc-var">_this</span><span class="jsdoc-syntax">);
578             } 
579             
580             
581             </span><span class="jsdoc-var">msg </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">&quot;Building Interface &quot; </span><span class="jsdoc-syntax">+ (</span><span class="jsdoc-var">total  </span><span class="jsdoc-syntax">- </span><span class="jsdoc-var">mods.length</span><span class="jsdoc-syntax">) + 
582                     </span><span class="jsdoc-string">&quot; of &quot; </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">total </span><span class="jsdoc-syntax">+ 
583                     (</span><span class="jsdoc-var">m.name </span><span class="jsdoc-syntax">? (</span><span class="jsdoc-string">' - ' </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">m.name</span><span class="jsdoc-syntax">) : </span><span class="jsdoc-string">''</span><span class="jsdoc-syntax">);
584                         </span><span class="jsdoc-var">Roo.debug </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">Roo.log</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">msg</span><span class="jsdoc-syntax">);
585             </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">this.hideProgress </span><span class="jsdoc-syntax">&amp;&amp;  </span><span class="jsdoc-var">Roo.MessageBox</span><span class="jsdoc-syntax">) { 
586                 </span><span class="jsdoc-var">Roo.MessageBox.updateProgress</span><span class="jsdoc-syntax">(  (</span><span class="jsdoc-var">total  </span><span class="jsdoc-syntax">- </span><span class="jsdoc-var">mods.length</span><span class="jsdoc-syntax">)/</span><span class="jsdoc-var">total</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">msg  </span><span class="jsdoc-syntax">);
587             }
588             
589          
590             </span><span class="jsdoc-comment">// is the module disabled?
591             </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">disabled </span><span class="jsdoc-syntax">= (</span><span class="jsdoc-keyword">typeof</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">m.disabled</span><span class="jsdoc-syntax">) == </span><span class="jsdoc-string">'function'</span><span class="jsdoc-syntax">) ?
592                 </span><span class="jsdoc-var">m.disabled.call</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">m.module.disabled</span><span class="jsdoc-syntax">) : </span><span class="jsdoc-var">m.disabled</span><span class="jsdoc-syntax">;    
593             
594             
595             </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">disabled</span><span class="jsdoc-syntax">) {
596                 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">progressRun</span><span class="jsdoc-syntax">(); </span><span class="jsdoc-comment">// we do not update the display!
597             </span><span class="jsdoc-syntax">}
598             
599             </span><span class="jsdoc-comment">// now build 
600             
601                         
602                         
603             </span><span class="jsdoc-var">m.render</span><span class="jsdoc-syntax">();
604             </span><span class="jsdoc-comment">// it's 10 on top level, and 1 on others??? why...
605             </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">progressRun.defer</span><span class="jsdoc-syntax">(10, </span><span class="jsdoc-var">_this</span><span class="jsdoc-syntax">);
606              
607         }
608         </span><span class="jsdoc-var">progressRun.defer</span><span class="jsdoc-syntax">(1, </span><span class="jsdoc-var">_this</span><span class="jsdoc-syntax">);
609      
610         
611         
612     },
613         
614         
615         </span><span class="jsdoc-comment">/**
616          * Event Object.
617          *
618          *
619          */
620         </span><span class="jsdoc-var">event</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">, 
621     </span><span class="jsdoc-comment">/**
622          * wrapper for event.on - aliased later..  
623          * Typically use to register a event handler for register:
624          *
625          * eg. Roo.XComponent.on('register', function(comp) { comp.disable = true } );
626          *
627          */
628     </span><span class="jsdoc-var">on </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false
629    
630     
631     
632 </span><span class="jsdoc-syntax">});
633
634 </span><span class="jsdoc-var">Roo.XComponent.event </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.util.Observable</span><span class="jsdoc-syntax">({
635                 </span><span class="jsdoc-var">events </span><span class="jsdoc-syntax">: { 
636                         </span><span class="jsdoc-comment">/**
637                          * @event register
638                          * Fires when an Component is registered,
639                          * set the disable property on the Component to stop registration.
640                          * @param {Roo.XComponent} c the component being registerd.
641                          * 
642                          */
643                         </span><span class="jsdoc-string">'register' </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
644             </span><span class="jsdoc-comment">/**
645                          * @event beforebuild
646                          * Fires before each Component is built
647                          * can be used to apply permissions.
648                          * @param {Roo.XComponent} c the component being registerd.
649                          * 
650                          */
651                         </span><span class="jsdoc-string">'beforebuild' </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
652                         </span><span class="jsdoc-comment">/**
653                          * @event buildcomplete
654                          * Fires on the top level element when all elements have been built
655                          * @param {Roo.XComponent} the top level component.
656                          */
657                         </span><span class="jsdoc-string">'buildcomplete' </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true
658                         
659                 </span><span class="jsdoc-syntax">}
660 });
661
662 </span><span class="jsdoc-var">Roo.XComponent.on </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Roo.XComponent.event.on.createDelegate</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">Roo.XComponent.event</span><span class="jsdoc-syntax">); 
663  </span></code></body></html>