| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405 | //// Note that these are all defined as panel configs, rather than instantiated// as panel objects.  You could just as easily do this instead://// var absolute = Ext.create('Ext.Panel', { ... });//// However, by passing configs into the main container instead of objects, we can defer// layout AND object instantiation until absolutely needed.  Since most of these panels// won't be shown by default until requested, this will save us some processing// time up front when initially rendering the page.//// Since all of these configs are being added into a layout container, they are// automatically assumed to be panel configs, and so the xtype of 'panel' is// implicit.  To define a config of some other type of component to be added into// the layout, simply provide the appropriate xtype config explicitly.//function getBasicLayouts() {    // This is a fake CardLayout navigation function.  A real implementation would    // likely be more sophisticated, with logic to validate navigation flow.  It will    // be assigned next as the handling function for the buttons in the CardLayout example.    var cardNav = function(incr){        var l = Ext.getCmp('card-wizard-panel').getLayout();        var i = l.activeItem.id.split('card-')[1];        var next = parseInt(i, 10) + incr;        l.setActiveItem(next);        Ext.getCmp('card-prev').setDisabled(next===0);        Ext.getCmp('card-next').setDisabled(next===2);    };    return {        /*         * ================  Start page config  =======================         */        // The default start page, also a simple example of a FitLayout.        start: {            id: 'start-panel',            title: 'Start Page',            layout: 'fit',            bodyStyle: 'padding:25px',            contentEl: 'start-div'  // pull existing content from the page        },        /*         * ================  AbsoluteLayout config  =======================         */        absolute: {            id: 'absolute-panel',            title: 'Absolute Layout',            layout: 'absolute',            defaults: {                bodyStyle: 'padding:15px;',                width: 200,                height: 100,                frame: true            },            items:[{                title: 'Panel 1',                x: 50,                y: 50,                html: 'Positioned at x:50, y:50'            },{                title: 'Panel 2',                x: 125,                y: 125,                html: 'Positioned at x:125, y:125'            }]        },        /*         * ================  AccordionLayout config  =======================         */        accordion: {            id: 'accordion-panel',            title: 'Accordion Layout',            layout: 'accordion',            bodyStyle: 'background-color:#DFE8F6',  // if all accordion panels are collapsed, this looks better in this layout            defaults: {bodyStyle: 'padding:15px'},            items: [{                title: 'Introduction',                tools: [{type:'gear'},{type:'refresh'}],                html: '<p>Here is some accordion content.  Click on one of the other bars below for more.</p>'            },{                title: 'Basic Content',                html: '<br /><br /><p>More content.  Open the third panel for a customized look and feel example.</p>',                items: {                    xtype: 'button',                    text: 'Show Next Panel',                    handler: function(){                        Ext.getCmp('acc-custom').expand(true);                    }                }            },{                id: 'acc-custom',                title: 'Custom Panel Look and Feel',                cls: 'custom-accordion', // look in layout-browser.css to see the CSS rules for this class                html: '<p>Here is an example of how easy it is to completely customize the look and feel of an individual panel simply by adding a CSS class in the config.</p>'            }]        },        /*         * ================  AnchorLayout config  =======================         */        anchor: {            id:'anchor-panel',            title: 'Anchor Layout',            layout:'anchor',            defaults: {bodyStyle: 'padding:15px'},            items: [{                title: 'Panel 1',                height: 100,                anchor: '50%',                html: '<p>Width = 50% of the container</p>'            },{                title: 'Panel 2',                height: 100,                anchor: '-100',                html: '<p>Width = container width - 100 pixels</p>'            },{                title: 'Panel 3',                anchor: '-10, -262',                html: '<p>Width = container width - 10 pixels</p><p>Height = container height - 262 pixels</p>'            }]        },        /*         * ================  BorderLayout config  =======================         */        border: {            id:'border-panel',            title: 'Border Layout',            layout: 'border',            bodyBorder: false,            defaults: {                collapsible: true,                split: true,                animFloat: false,                autoHide: false,                useSplitTips: true,                bodyStyle: 'padding:15px'            },            items: [{                title: 'Footer',                region: 'south',                height: 150,                minSize: 75,                maxSize: 250,                cmargins: '5 0 0 0',                html: '<p>Footer content</p>'            },{                title: 'Navigation',                region:'west',                floatable: false,                margins: '5 0 0 0',                cmargins: '5 5 0 0',                width: 175,                minSize: 100,                maxSize: 250,                html: '<p>Secondary content like navigation links could go here</p>'            },{                title: 'Main Content',                collapsible: false,                region: 'center',                margins: '5 0 0 0',                html: '<h1>Main Page</h1><p>This is where the main content would go</p>'            }]        },        /*         * ================  CardLayout config (TabPanel)  =======================         */        // Note that the TabPanel component uses an internal CardLayout -- it is not        // something you have to explicitly configure.  However, it is still a perfect        // example of how this layout style can be used in a complex component.        cardTabs: {            xtype: 'tabpanel',            id: 'card-tabs-panel',            plain: true,  //remove the header border            activeTab: 0,            style: 'background-color:#dfe8f6; ',            defaults: {bodyStyle: 'padding:15px'},            items:[{                title: 'Tab 1',                html: 'This is tab 1 content.'            },{                title: 'Tab 2',                html: 'This is tab 2 content.'            },{                title: 'Tab 3',                html: 'This is tab 3 content.'            }]        },        /*         * ================  CardLayout config (Wizard)  =======================         */        cardWizard: {            id:'card-wizard-panel',            title: 'Card Layout (Wizard)',            layout:'card',            activeItem: 0,            bodyStyle: 'padding:15px',            defaults: {border:false},            bbar: ['->', {                id: 'card-prev',                text: '« Previous',                handler: Ext.Function.bind(cardNav, this, [-1]),                disabled: true            },{                id: 'card-next',                text: 'Next »',                handler: Ext.Function.bind(cardNav, this, [1])            }],            items: [{                id: 'card-0',                html: '<h1>Welcome to the Demo Wizard!</h1><p>Step 1 of 3</p><p>Please click the "Next" button to continue...</p>'            },{                id: 'card-1',                html: '<p>Step 2 of 3</p><p>Almost there.  Please click the "Next" button to continue...</p>'            },{                id: 'card-2',                html: '<h1>Congratulations!</h1><p>Step 3 of 3 - Complete</p>'            }]        },        /*         * ================  ColumnLayout config  =======================         */        column: {            id:'column-panel',            title: 'Column Layout',            layout: 'column',            bodyStyle: 'padding:5px',            defaults: {bodyStyle:'padding:15px'},            items: [{                title: 'Width = 0.25',                columnWidth: 0.25,                html: '<p>This is some short content.</p>'            },{                title: 'Width = 0.75',                columnWidth: 0.75,                html: '<p>This is some longer content.</p><p>This is some longer content.</p><p>This is some longer content.</p><p>This is some longer content.</p><p>This is some longer content.</p><p>This is some longer content.</p>'            },{                title: 'Width = 250px',                width: 250,                html: 'Not much here!'            }]        },        /*         * ================  FitLayout config  =======================         */        fit: {            id: 'fit-panel',            title: 'Fit Layout',            layout: 'fit',            items: {                title: 'Inner Panel',                html: '<p>This panel is fit within its container.</p>',                bodyStyle: 'padding:15px',                border: false            }        },        /*         * ================  FormLayout config  =======================         */        // NOTE: While you can create a basic Panel with layout:'form', practically        // you should usually use a FormPanel to also get its form-specific functionality.        // Note that the layout config is not required on FormPanels.        form: {            xtype: 'form', // since we are not using the default 'panel' xtype, we must specify it            id: 'form-panel',            labelWidth: 75,            title: 'Form Layout',            bodyStyle: 'padding:15px',            width: 350,            labelPad: 20,            defaults: {                width: 230,                labelSeparator: '',                msgTarget: 'side'            },            defaultType: 'textfield',            items: [{                    fieldLabel: 'First Name',                    name: 'first',                    allowBlank:false                },{                    fieldLabel: 'Last Name',                    name: 'last'                },{                    fieldLabel: 'Company',                    name: 'company'                },{                    fieldLabel: 'Email',                    name: 'email',                    vtype:'email'                }            ],            buttons: [{text: 'Save'},{text: 'Cancel'}]        },        /*         * ================  TableLayout config  =======================         */        table: {            id: 'table-panel',            title: 'Table Layout',            layout: {                type: 'table',                columns: 4            },            defaults: {                bodyStyle:'padding:15px 20px'            },            items: [{                title: 'Lots of Spanning',                html: '<p>Row spanning.</p><br /><p>Row spanning.</p><br /><p>Row spanning.</p><br /><p>Row spanning.</p><br /><p>Row spanning.</p><br /><p>Row spanning.</p>',                rowspan: 3            },{                title: 'Basic Table Cell',                html: '<p>Basic panel in a table cell.</p>',                cellId: 'basic-cell',                cellCls: 'custom-cls'            },{                html: '<p>Plain panel</p>'            },{                title: 'Another Cell',                html: '<p>Row spanning.</p><br /><p>Row spanning.</p><br /><p>Row spanning.</p><br /><p>Row spanning.</p>',                width: 300,                rowspan: 2            },{                html: 'Plain cell spanning two columns',                colspan: 2            },{                title: 'More Column Spanning',                html: '<p>Spanning three columns.</p>',                colspan: 3            },{                title: 'Spanning All Columns',                html: '<p>Spanning all columns.</p>',                colspan: 4            }]        },        /*         * ================  VBoxLayout config  =======================         */        vbox: {            id: 'vbox-panel',            title: 'vBox Layout',            layout: {                type: 'vbox',                pack: 'start',                align: 'stretch'            },            defaults: {                frame: true            },            items: [{                title: 'Panel 1',                flex: 1,                html: 'flex : 1'            }, {                title: 'Panel 2',                height: 100,                html: 'height: 100'            }, {                title: 'Panel 3',                flex: 2,                html: 'flex : 2'            }]        },        /*         * ================  HBoxLayout config  =======================         */        hbox: {            id: 'hbox-panel',            title: 'hBox Layout',            layout: {                type: 'hbox',                pack: 'start',                align: 'stretch'            },            defaults: {                frame: true            },            items: [{                title: 'Panel 1',                flex: 1,                html: 'flex : 1'            }, {                title: 'Panel 2',                width: 100,                html: 'width : 100'            }, {                title: 'Panel 3',                flex: 2,                html: 'flex : 2'            }]        }    };}
 |