# Container.js

    Ext.Container = function(config){
        Ext.Container.superclass.constructor.call(this, config);
        if(this.renderTo){
            this.render(this.renderTo);
            delete this.renderTo;
        }
    };

    Ext.extend(Ext.Container, Ext.BoxComponent, {
        autoDestroy: true,

        initComponent : function(){
            Ext.Container.superclass.initComponent.call(this);

            this.addEvents({
                'beforeadd':true,
                'beforeremove':true,
                'add':true,
                'remove':true
            });

            var items = this.items;
            if(items){
                delete this.items;
                if(items instanceof Array){
                    this.add.apply(this, items);
                }else{
                    this.add(items);
                }
            }
        },

        initItems : function(){
            if(!this.items){
                this.items = new Ext.util.MixedCollection(false, this.getComponentId);
                this.getLayout(); // initialize the layout
            }
        },

        setLayout : function(layout){
            if(this.layout && this.layout != layout){
                this.layout.setContainer(null);
            }
            this.layout = layout;
            layout.setContainer(this);
        },

        render : function(){
            Ext.Container.superclass.render.apply(this, arguments);
            if(this.layout){
                this.setLayout(this.layout);
            }
            this.doLayout();
        },

        getLayoutTarget : function(){
            return this.el;
        },

        getComponentId : function(comp){
            return comp.id;
        },

        add : function(comp){
            if(!this.items){
                this.initItems();
            }
            var a = arguments, len = a.length;
            if(len > 1){
                for(var i = 0; i < len; i++) {
                    this.add(a[i]);
                }
            }else{
                var c = this.lookupComponent(comp);
                var pos = this.items.length;
                if(this.fireEvent('beforeadd', this, c, pos) !== false){
                    this.items.add(c);
                    c.ownerCt = this;
                    this.fireEvent('add', this, c, pos);
                }
            }
            return this;
        },

        insert : function(index, comp){
            if(!this.items){
                this.initItems();
            }
            var a = arguments, len = a.length;
            if(len > 1){
                for(var i = len; i >= 0; --i) {
                    this.insert(index, a[i]);
                }
            }else{

                var c = this.lookupComponent(comp);
                if(this.fireEvent('beforeadd', this, c, index) !== false){
                    this.items.insert(index, c);
                    this.fireEvent('add', this, c, index);
                }
            }
            return this;
        },

        remove : function(comp){
            var c = this.getComponent(comp);
            if(this.fireEvent('beforeremove', this, c) !== false){
                this.items.remove(c);
                if(this.autoDestroy){
                    c.destroy();
                }
                this.fireEvent('remove', this, c);
            }
        },

        getComponent : function(comp){
            if(typeof comp == 'object'){
                return comp;
            }
            return this.items.get(comp);
        },

        // private
        lookupComponent : function(comp){
            if(typeof comp == 'string'){
                return Ext.ComponentMgr.get(comp);
            }else if(!comp.events){
                return this.createComponent(comp);
            }
            return comp;
        },

        createComponent : function(config){
            return new Ext.Panel(config);
        },

        doLayout : function(){
            if(this.layout){
                this.layout.layout();
            }
            if(this.items){
                var cs = this.items.items;
                for(var i = 0, len = cs.length; i < len; i++) {
                    var c  = cs[i];
                    if(c.doLayout){
                        c.doLayout();
                    }
                }
            }
        },

        getLayout : function(){
            if(!this.layout){
                var layout = new Ext.layout.AutoLayout();
                this.setLayout(layout);
            }
            return this.layout;
        }
    });

Ext - Copyright © 2006-2007 Ext JS, LLC
All rights reserved.