| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459 | <!DOCTYPE html><html><head>  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  <title>The source code</title>  <link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />  <script type="text/javascript" src="../resources/prettify/prettify.js"></script>  <style type="text/css">    .highlight { display: block; background-color: #ddd; }  </style>  <script type="text/javascript">    function highlight() {      document.getElementById(location.hash.replace(/#/, "")).className = "highlight";    }  </script></head><body onload="prettyPrint(); highlight();">  <pre class="prettyprint lang-js"><span id='Ext-toolbar-Toolbar-method-constructor'><span id='Ext-toolbar-Toolbar'>/**</span></span> * Basic Toolbar class. Although the {@link Ext.container.Container#defaultType defaultType} for * Toolbar is {@link Ext.button.Button button}, Toolbar elements (child items for the Toolbar container) * may be virtually any type of Component. Toolbar elements can be created explicitly via their * constructors, or implicitly via their xtypes, and can be {@link #method-add}ed dynamically. * * ## Some items have shortcut strings for creation: * * | Shortcut | xtype         | Class                         | Description * |:---------|:--------------|:------------------------------|:--------------------------------------------------- * | `->`     | `tbfill`      | {@link Ext.toolbar.Fill}      | begin using the right-justified button container * | `-`      | `tbseparator` | {@link Ext.toolbar.Separator} | add a vertical separator bar between toolbar items * | ` `      | `tbspacer`    | {@link Ext.toolbar.Spacer}    | add horiztonal space between elements * *     @example *     Ext.create('Ext.toolbar.Toolbar', { *         renderTo: document.body, *         width   : 500, *         items: [ *             { *                 // xtype: 'button', // default for Toolbars *                 text: 'Button' *             }, *             { *                 xtype: 'splitbutton', *                 text : 'Split Button' *             }, *             // begin using the right-justified button container *             '->', // same as { xtype: 'tbfill' } *             { *                 xtype    : 'textfield', *                 name     : 'field1', *                 emptyText: 'enter search term' *             }, *             // add a vertical separator bar between toolbar items *             '-', // same as {xtype: 'tbseparator'} to create Ext.toolbar.Separator *             'text 1', // same as {xtype: 'tbtext', text: 'text1'} to create Ext.toolbar.TextItem *             { xtype: 'tbspacer' },// same as ' ' to create Ext.toolbar.Spacer *             'text 2', *             { xtype: 'tbspacer', width: 50 }, // add a 50px space *             'text 3' *         ] *     }); * * Toolbars have {@link #method-enable} and {@link #method-disable} methods which when called, will * enable/disable all items within your toolbar. * *     @example *     Ext.create('Ext.toolbar.Toolbar', { *         renderTo: document.body, *         width   : 400, *         items: [ *             { *                 text: 'Button' *             }, *             { *                 xtype: 'splitbutton', *                 text : 'Split Button' *             }, *             '->', *             { *                 xtype    : 'textfield', *                 name     : 'field1', *                 emptyText: 'enter search term' *             } *         ] *     }); * * Example * *     @example *     var enableBtn = Ext.create('Ext.button.Button', { *         text    : 'Enable All Items', *         disabled: true, *         scope   : this, *         handler : function() { *             //disable the enable button and enable the disable button *             enableBtn.disable(); *             disableBtn.enable(); * *             //enable the toolbar *             toolbar.enable(); *         } *     }); * *     var disableBtn = Ext.create('Ext.button.Button', { *         text    : 'Disable All Items', *         scope   : this, *         handler : function() { *             //enable the enable button and disable button *             disableBtn.disable(); *             enableBtn.enable(); * *             //disable the toolbar *             toolbar.disable(); *         } *     }); * *     var toolbar = Ext.create('Ext.toolbar.Toolbar', { *         renderTo: document.body, *         width   : 400, *         margin  : '5 0 0 0', *         items   : [enableBtn, disableBtn] *     }); * * Adding items to and removing items from a toolbar is as simple as calling the {@link #method-add} * and {@link #method-remove} methods. There is also a {@link #removeAll} method * which remove all items within the toolbar. * *     @example *     var toolbar = Ext.create('Ext.toolbar.Toolbar', { *         renderTo: document.body, *         width   : 700, *         items: [ *             { *                 text: 'Example Button' *             } *         ] *     }); * *     var addedItems = []; * *     Ext.create('Ext.toolbar.Toolbar', { *         renderTo: document.body, *         width   : 700, *         margin  : '5 0 0 0', *         items   : [ *             { *                 text   : 'Add a button', *                 scope  : this, *                 handler: function() { *                     var text = prompt('Please enter the text for your button:'); *                     addedItems.push(toolbar.add({ *                         text: text *                     })); *                 } *             }, *             { *                 text   : 'Add a text item', *                 scope  : this, *                 handler: function() { *                     var text = prompt('Please enter the text for your item:'); *                     addedItems.push(toolbar.add(text)); *                 } *             }, *             { *                 text   : 'Add a toolbar separator', *                 scope  : this, *                 handler: function() { *                     addedItems.push(toolbar.add('-')); *                 } *             }, *             { *                 text   : 'Add a toolbar spacer', *                 scope  : this, *                 handler: function() { *                     addedItems.push(toolbar.add('->')); *                 } *             }, *             '->', *             { *                 text   : 'Remove last inserted item', *                 scope  : this, *                 handler: function() { *                     if (addedItems.length) { *                         toolbar.remove(addedItems.pop()); *                     } else if (toolbar.items.length) { *                         toolbar.remove(toolbar.items.last()); *                     } else { *                         alert('No items in the toolbar'); *                     } *                 } *             }, *             { *                 text   : 'Remove all items', *                 scope  : this, *                 handler: function() { *                     toolbar.removeAll(); *                 } *             } *         ] *     }); * * @constructor * Creates a new Toolbar * @param {Object/Object[]} config A config object or an array of buttons to {@link #method-add} * @docauthor Robert Dougan <rob@sencha.com> */Ext.define('Ext.toolbar.Toolbar', {    extend: 'Ext.container.Container',    requires: [        'Ext.toolbar.Fill',        'Ext.layout.container.HBox',        'Ext.layout.container.VBox'    ],    uses: [        'Ext.toolbar.Separator'    ],    alias: 'widget.toolbar',    alternateClassName: 'Ext.Toolbar',<span id='Ext-toolbar-Toolbar-property-isToolbar'>    /**</span>     * @property {Boolean} isToolbar     * `true` in this class to identify an object as an instantiated Toolbar, or subclass thereof.     */    isToolbar: true,    baseCls  : Ext.baseCSSPrefix + 'toolbar',    ariaRole : 'toolbar',    defaultType: 'button',<span id='Ext-toolbar-Toolbar-cfg-vertical'>    /**</span>     * @cfg {Boolean} vertical     * Set to `true` to make the toolbar vertical. The layout will become a `vbox`.     */    vertical: false,<span id='Ext-toolbar-Toolbar-cfg-layout'>    /**</span>     * @cfg {String/Object} layout     * This class assigns a default layout (`layout: 'hbox'`).     * Developers _may_ override this configuration option if another layout     * is required (the constructor must be passed a configuration object in this     * case instead of an array).     * See {@link Ext.container.Container#layout} for additional information.     */<span id='Ext-toolbar-Toolbar-cfg-enableOverflow'>    /**</span>     * @cfg {Boolean} enableOverflow     * Configure true to make the toolbar provide a button which activates a dropdown Menu to show     * items which overflow the Toolbar's width.     */    enableOverflow: false,<span id='Ext-toolbar-Toolbar-cfg-menuTriggerCls'>    /**</span>     * @cfg {String} menuTriggerCls     * Configure the icon class of the overflow button.     */    menuTriggerCls: Ext.baseCSSPrefix + 'toolbar-more-icon',        // private    trackMenus: true,    itemCls: Ext.baseCSSPrefix + 'toolbar-item',    statics: {        shortcuts: {            '-' : 'tbseparator',            ' ' : 'tbspacer'        },        shortcutsHV: {            // horizontal            0: {                '->': { xtype: 'tbfill', height: 0 }            },            // vertical            1: {                '->': { xtype: 'tbfill', width: 0 }            }        }    },    initComponent: function() {        var me = this,            keys;        // check for simplified (old-style) overflow config:        if (!me.layout && me.enableOverflow) {            me.layout = { overflowHandler: 'Menu' };        }        if (me.dock === 'right' || me.dock === 'left') {            me.vertical = true;        }        me.layout = Ext.applyIf(Ext.isString(me.layout) ? {            type: me.layout        } : me.layout || {}, {            type: me.vertical ? 'vbox' : 'hbox',            align: me.vertical ? 'stretchmax' : 'middle'        });        if (me.vertical) {            me.addClsWithUI('vertical');        }        // @TODO: remove this hack and implement a more general solution        if (me.ui === 'footer') {            me.ignoreBorderManagement = true;        }        me.callParent();<span id='Ext-toolbar-Toolbar-event-overflowchange'>        /**</span>         * @event overflowchange         * Fires after the overflow state has changed.         * @param {Object} c The Container         * @param {Boolean} lastOverflow overflow state         */        me.addEvents('overflowchange');    },    getRefItems: function(deep) {        var me = this,            items = me.callParent(arguments),            layout = me.layout,            handler;        if (deep && me.enableOverflow) {            handler = layout.overflowHandler;            if (handler && handler.menu) {                items = items.concat(handler.menu.getRefItems(deep));            }        }        return items;    },<span id='Ext-toolbar-Toolbar-method-add'>    /**</span>     * Adds element(s) to the toolbar -- this function takes a variable number of     * arguments of mixed type and adds them to the toolbar.     *     * **Note**: See the notes within {@link Ext.container.Container#method-add}.     *     * @param {Object...} args The following types of arguments are all valid:     *     *  - `{@link Ext.button.Button config}`: A valid button config object     *  - `HtmlElement`: Any standard HTML element     *  - `Field`: Any form field     *  - `Item`: Any subclass of {@link Ext.toolbar.Item}     *  - `String`: Any generic string (gets wrapped in a {@link Ext.toolbar.TextItem}).     *     *    Note that there are a few special strings that are treated differently as explained next:     *     *      - `'-'`: Creates a separator element     *      - `' '`: Creates a spacer element     *      - `'->'`: Creates a fill element     *     * @method add     */    // private    lookupComponent: function(c) {        if (typeof c == 'string') {            var T = Ext.toolbar.Toolbar,                shortcut = T.shortcutsHV[this.vertical ? 1 : 0][c] || T.shortcuts[c];            if (typeof shortcut == 'string') {                c = {                    xtype: shortcut                };            } else if (shortcut) {                c = Ext.apply({}, shortcut);            } else {                c = {                    xtype: 'tbtext',                    text: c                };            }            this.applyDefaults(c);        }        return this.callParent(arguments);    },    // private    applyDefaults: function(c) {        if (!Ext.isString(c)) {            c = this.callParent(arguments);        }        return c;    },    // private    trackMenu: function(item, remove) {        if (this.trackMenus && item.menu) {            var method = remove ? 'mun' : 'mon',                me = this;            me[method](item, 'mouseover', me.onButtonOver, me);            me[method](item, 'menushow', me.onButtonMenuShow, me);            me[method](item, 'menuhide', me.onButtonMenuHide, me);        }    },    // private    constructButton: function(item) {        return item.events ? item                : Ext.widget(item.split ? 'splitbutton' : this.defaultType, item);    },    // private    onBeforeAdd: function(component) {        if (component.is('field') || (component.is('button') && this.ui != 'footer')) {            component.ui = component.ui + '-toolbar';        }        // Any separators needs to know if is vertical or not        if (component instanceof Ext.toolbar.Separator) {            component.setUI((this.vertical) ? 'vertical' : 'horizontal');        }        this.callParent(arguments);    },    // private    onAdd: function(component) {        this.callParent(arguments);        this.trackMenu(component);    },        // private    onRemove: function(c) {        this.callParent(arguments);        this.trackMenu(c, true);    },        getChildItemsToDisable: function() {        return this.items.getRange();       },    // private    onButtonOver: function(btn){        if (this.activeMenuBtn && this.activeMenuBtn != btn) {            this.activeMenuBtn.hideMenu();            btn.showMenu();            this.activeMenuBtn = btn;        }    },    // private    onButtonMenuShow: function(btn) {        this.activeMenuBtn = btn;    },    // private    onButtonMenuHide: function(btn) {        delete this.activeMenuBtn;    }});</pre></body></html>
 |