123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287 |
- <!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-container-DockingContainer'>/**
- </span> *
- */
- Ext.define('Ext.container.DockingContainer', {
- /* Begin Definitions */
- requires: ['Ext.util.MixedCollection', 'Ext.Element' ],
- /* End Definitions */
- isDockingContainer: true,
- <span id='Ext-container-DockingContainer-cfg-defaultDockWeights'> /**
- </span> * @cfg {Object} defaultDockWeights
- * This object holds the default weights applied to dockedItems that have no weight. These start with a
- * weight of 1, to allow negative weights to insert before top items and are odd numbers
- * so that even weights can be used to get between different dock orders.
- *
- * To make default docking order match border layout, do this:
- *
- * Ext.panel.AbstractPanel.prototype.defaultDockWeights = { top: 1, bottom: 3, left: 5, right: 7 };
- *
- * Changing these defaults as above or individually on this object will effect all Panels.
- * To change the defaults on a single panel, you should replace the entire object:
- *
- * initComponent: function () {
- * // NOTE: Don't change members of defaultDockWeights since the object is shared.
- * this.defaultDockWeights = { top: 1, bottom: 3, left: 5, right: 7 };
- *
- * this.callParent();
- * }
- *
- * To change only one of the default values, you do this:
- *
- * initComponent: function () {
- * // NOTE: Don't change members of defaultDockWeights since the object is shared.
- * this.defaultDockWeights = Ext.applyIf({ top: 10 }, this.defaultDockWeights);
- *
- * this.callParent();
- * }
- */
- defaultDockWeights: {
- top: { render: 1, visual: 1 },
- left: { render: 3, visual: 5 },
- right: { render: 5, visual: 7 },
- bottom: { render: 7, visual: 3 }
- },
- // @private
- // Values to decide which side of the body element docked items must go
- // This overides any weight. A left/top will *always* sort before a right/bottom
- // regardless of any weight value. Weights sort at either side of the "body" dividing point.
- dockOrder: {
- top: -1,
- left: -1,
- right: 1,
- bottom: 1
- },
- <span id='Ext-container-DockingContainer-method-addDocked'> /**
- </span> * Adds docked item(s) to the container.
- *
- * @param {Object/Object[]} component The Component or array of components to add. The components
- * must include a 'dock' parameter on each component to indicate where it should be docked
- * ('top', 'right', 'bottom', 'left').
- * @param {Number} [pos] The index at which the Component will be added
- * @return {Ext.Component[]} The added components.
- */
- addDocked : function(items, pos) {
- var me = this,
- i = 0,
- item, length;
- items = me.prepareItems(items);
- length = items.length;
- for (; i < length; i++) {
- item = items[i];
- item.dock = item.dock || 'top';
- if (pos !== undefined) {
- me.dockedItems.insert(pos + i, item);
- } else {
- me.dockedItems.add(item);
- }
- if (item.onAdded !== Ext.emptyFn) {
- item.onAdded(me, i);
- }
- if (me.onDockedAdd !== Ext.emptyFn) {
- me.onDockedAdd(item);
- }
- }
- if (me.rendered && !me.suspendLayout) {
- me.updateLayout();
- }
- return items;
- },
- destroyDockedItems: function(){
- var dockedItems = this.dockedItems,
- c;
- if (dockedItems) {
- while ((c = dockedItems.first())) {
- this.removeDocked(c, true);
- }
- }
- },
- doRenderDockedItems: function (out, renderData, after) {
- // Careful! This method is bolted on to the frameTpl and renderTpl so all we get for
- // context is the renderData! The "this" pointer is either the frameTpl or the
- // renderTpl instance!
- // Due to framing, we will be called in two different ways: in the frameTpl or in
- // the renderTpl. The frameTpl version enters via doRenderFramingDockedItems which
- // sets "$skipDockedItems" on the renderTpl's renderData.
- //
- var me = renderData.$comp,
- layout = me.componentLayout,
- items,
- tree;
- if (layout.getDockedItems && !renderData.$skipDockedItems) {
- items = layout.getDockedItems('render', !after);
- tree = items && layout.getItemsRenderTree(items);
- if (tree) {
- Ext.DomHelper.generateMarkup(tree, out);
- }
- }
- },
- <span id='Ext-container-DockingContainer-method-getDockedComponent'> /**
- </span> * Finds a docked component by id, itemId or position. Also see {@link #getDockedItems}
- * @param {String/Number} comp The id, itemId or position of the docked component (see {@link Ext.panel.AbstractPanel#getComponent getComponent} for details)
- * @return {Ext.Component} The docked component (if found)
- */
- getDockedComponent: function(comp) {
- if (Ext.isObject(comp)) {
- comp = comp.getItemId();
- }
- return this.dockedItems.get(comp);
- },
- <span id='Ext-container-DockingContainer-method-getDockedItems'> /**
- </span> * Retrieves an array of all currently docked Components.
- *
- * For example to find a toolbar that has been docked at top:
- *
- * panel.getDockedItems('toolbar[dock="top"]');
- *
- * @param {String} selector A {@link Ext.ComponentQuery ComponentQuery} selector string to filter the returned items.
- * @param {Boolean} beforeBody An optional flag to limit the set of items to only those
- * before the body (true) or after the body (false). All components are returned by
- * default.
- * @return {Ext.Component[]} The array of docked components meeting the specified criteria.
- */
- getDockedItems : function(selector, beforeBody) {
- var dockedItems = this.getComponentLayout().getDockedItems('render', beforeBody);
- if (selector && dockedItems.length) {
- dockedItems = Ext.ComponentQuery.query(selector, dockedItems);
- }
- return dockedItems;
- },
- getDockingRefItems: function(deep, containerItems) {
- // deep fetches the docked items and their descendants using '*' and then '* *'
- var selector = deep && '*,* *',
- // start with only the top/left docked items (and maybe their children)
- dockedItems = this.getDockedItems(selector, true),
- items;
- // push container items (and maybe their children) after top/left docked items:
- dockedItems.push.apply(dockedItems, containerItems);
- // push right/bottom docked items (and maybe their children) after container items:
- items = this.getDockedItems(selector, false);
- dockedItems.push.apply(dockedItems, items);
- return dockedItems;
- },
- initDockingItems: function() {
- var me = this,
- items = me.dockedItems;
- me.dockedItems = new Ext.util.AbstractMixedCollection(false, me.getComponentId);
- if (items) {
- me.addDocked(items);
- }
- },
- <span id='Ext-container-DockingContainer-method-insertDocked'> /**
- </span> * Inserts docked item(s) to the panel at the indicated position.
- * @param {Number} pos The index at which the Component will be inserted
- * @param {Object/Object[]} component. The Component or array of components to add. The components
- * must include a 'dock' paramater on each component to indicate where it should be docked ('top', 'right',
- * 'bottom', 'left').
- */
- insertDocked : function(pos, items) {
- this.addDocked(items, pos);
- },
- // Placeholder empty functions
- <span id='Ext-container-DockingContainer-method-onDockedAdd'> /**
- </span> * Invoked after a docked item is added to the Panel.
- * @param {Ext.Component} component
- * @template
- * @protected
- */
- onDockedAdd : Ext.emptyFn,
- <span id='Ext-container-DockingContainer-method-onDockedRemove'> /**
- </span> * Invoked after a docked item is removed from the Panel.
- * @param {Ext.Component} component
- * @template
- * @protected
- */
- onDockedRemove : Ext.emptyFn,
- <span id='Ext-container-DockingContainer-method-removeDocked'> /**
- </span> * Removes the docked item from the panel.
- * @param {Ext.Component} item. The Component to remove.
- * @param {Boolean} autoDestroy (optional) Destroy the component after removal.
- */
- removeDocked : function(item, autoDestroy) {
- var me = this,
- layout,
- hasLayout;
- if (!me.dockedItems.contains(item)) {
- return item;
- }
- layout = me.componentLayout;
- hasLayout = layout && me.rendered;
- if (hasLayout) {
- layout.onRemove(item);
- }
- me.dockedItems.remove(item);
- item.onRemoved();
- me.onDockedRemove(item);
- if (autoDestroy === true || (autoDestroy !== false && me.autoDestroy)) {
- item.destroy();
- } else if (hasLayout) {
- // not destroying, make any layout related removals
- layout.afterRemove(item);
- }
- if (!me.destroying && !me.suspendLayout) {
- me.updateLayout();
- }
- return item;
- },
- setupDockingRenderTpl: function (renderTpl) {
- renderTpl.renderDockedItems = this.doRenderDockedItems;
- }
- });
- </pre>
- </body>
- </html>
|