| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232 | 
							- <!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-grid-ColumnLayout'>/**
 
- </span> * @private
 
-  *
 
-  * This class is used only by the grid's HeaderContainer docked child.
 
-  *
 
-  * It adds the ability to shrink the vertical size of the inner container element back if a grouped
 
-  * column header has all its child columns dragged out, and the whole HeaderContainer needs to shrink back down.
 
-  *
 
-  * Also, after every layout, after all headers have attained their 'stretchmax' height, it goes through and calls
 
-  * `setPadding` on the columns so that they lay out correctly.
 
-  */
 
- Ext.define('Ext.grid.ColumnLayout', {
 
-     extend: 'Ext.layout.container.HBox',
 
-     alias: 'layout.gridcolumn',
 
-     type : 'gridcolumn',
 
-     reserveOffset: false,
 
-     firstHeaderCls: Ext.baseCSSPrefix + 'column-header-first',
 
-     lastHeaderCls: Ext.baseCSSPrefix + 'column-header-last',
 
-     initLayout: function() {
 
-         this.grid = this.owner.up('[scrollerOwner]');
 
-         this.callParent();
 
-     },
 
-     // Collect the height of the table of data upon layout begin
 
-     beginLayout: function (ownerContext) {
 
-         var me = this,
 
-             grid = me.grid,
 
-             view = grid.view,
 
-             i = 0,
 
-             items = me.getVisibleItems(),
 
-             len = items.length,
 
-             item;
 
-         ownerContext.gridContext = ownerContext.context.getCmp(me.grid);
 
-         // If we are one side of a locking grid, then if we are on the "normal" side, we have to grab the normal view
 
-         // for use in determining whether to subtract scrollbar width from available width.
 
-         // The locked side does not have scrollbars, so it should not look at the view.
 
-         if (grid.lockable) {
 
-             if (me.owner.up('tablepanel') === view.normalGrid) {
 
-                 view = view.normalGrid.getView();
 
-             } else {
 
-                 view = null;
 
-             }
 
-         }
 
-         me.callParent(arguments);
 
-         // Unstretch child items before the layout which stretches them.
 
-         for (; i < len; i++) {
 
-             item = items[i];
 
-             item.removeCls([me.firstHeaderCls, me.lastHeaderCls]);
 
-             item.el.setStyle({
 
-                 height: 'auto'
 
-             });
 
-             item.titleEl.setStyle({
 
-                 height: 'auto',
 
-                 paddingTop: ''  // reset back to default padding of the style
 
-             });
 
-         }
 
-         // Add special first/last classes
 
-         if (len > 0) {
 
-             items[0].addCls(me.firstHeaderCls);
 
-             items[len - 1].addCls(me.lastHeaderCls);
 
-         }
 
-         // If the owner is the grid's HeaderContainer, and the UI displays old fashioned scrollbars and there is a rendered View with data in it,
 
-         // AND we are scrolling vertically:
 
-         // collect the View context to interrogate it for overflow, and possibly invalidate it if there is overflow
 
-         if (!me.owner.isHeader && Ext.getScrollbarSize().width && !grid.collapsed && view &&
 
-                 view.table.dom && (view.autoScroll || view.overflowY)) {
 
-             ownerContext.viewContext = ownerContext.context.getCmp(view);
 
-         }
 
-     },
 
-     roundFlex: function(width) {
 
-         return Math.floor(width);
 
-     },
 
-     calculate: function(ownerContext) {
 
-         var me = this,
 
-             viewContext = ownerContext.viewContext,
 
-             tableHeight,
 
-             viewHeight;
 
-         me.callParent(arguments);
 
-         if (ownerContext.state.parallelDone) {
 
-             ownerContext.setProp('columnWidthsDone', true);
 
-         }
 
-         // If we have a viewContext (Only created if there is an existing <table> within the view, AND we are scolling vertically AND scrollbars take up space)
 
-         //     we are not already in the second pass, and we are not shrinkWrapping...
 
-         //     Then we have to see if we know enough to determine whether there is vertical opverflow so that we can
 
-         //     invalidate and loop back for the second pass with a narrower target width.
 
-         if (viewContext && !ownerContext.state.overflowAdjust.width && !ownerContext.gridContext.heightModel.shrinkWrap) {
 
-             tableHeight = viewContext.tableContext.getProp('height');
 
-             viewHeight = viewContext.getProp('height');
 
-             // Heights of both view and its table content have not both been published; we cannot complete
 
-             if (isNaN(tableHeight + viewHeight)) {
 
-                 me.done = false;
 
-             }
 
-             // Heights have been published, and there is vertical overflow; invalidate with a width adjustment to allow for the scrollbar
 
-             else if (tableHeight >= viewHeight) {
 
-                 ownerContext.gridContext.invalidate({
 
-                     after: function() {
 
-                         ownerContext.state.overflowAdjust = {
 
-                             width: Ext.getScrollbarSize().width,
 
-                             height: 0
 
-                         };
 
-                     }
 
-                 });
 
-             }
 
-         }
 
-     },
 
-  
 
-     completeLayout: function(ownerContext) {
 
-         var me = this,
 
-             owner = me.owner,
 
-             state = ownerContext.state,
 
-             needsInvalidate = false,
 
-             calculated = me.sizeModels.calculated,
 
-             childItems, len, i, childContext, item;
 
-         me.callParent(arguments);
 
-         // If we have not been through this already, and the owning Container is configured
 
-         // forceFit, is not a group column and and there is a valid width, then convert
 
-         // widths to flexes, and loop back.
 
-         if (!state.flexesCalculated && owner.forceFit && !owner.isHeader) {
 
-             childItems = ownerContext.childItems;
 
-             len = childItems.length;
 
-             for (i = 0; i < len; i++) {
 
-                 childContext = childItems[i];
 
-                 item = childContext.target;
 
-                 // For forceFit, just use allocated width as the flex value, and the proportions
 
-                 // will end up the same whatever HeaderContainer width they are being forced into.
 
-                 if (item.width) {
 
-                     item.flex = ownerContext.childItems[i].flex = item.width;
 
-                     delete item.width;
 
-                     childContext.widthModel = calculated;
 
-                     needsInvalidate = true;
 
-                 }
 
-             }
 
-             // Recalculate based upon all columns now being flexed instead of sized.
 
-             // Set flag, so that we do not do this infinitely
 
-             if (needsInvalidate) {
 
-                 me.cacheFlexes(ownerContext);
 
-                 ownerContext.invalidate({
 
-                     state: {
 
-                         flexesCalculated: true
 
-                     }
 
-                 });
 
-             }
 
-         }
 
-     },
 
-     finalizeLayout: function() {
 
-         var me = this,
 
-             i = 0,
 
-             items,
 
-             len,
 
-             itemsHeight,
 
-             owner = me.owner,
 
-             titleEl = owner.titleEl;
 
-         // Set up padding in items
 
-         items = me.getVisibleItems();
 
-         len = items.length;
 
-         // header container's items take up the whole height
 
-         itemsHeight = owner.el.getViewSize().height;
 
-         if (titleEl) {
 
-         // if owner is a grouped column with children, we need to subtract the titleEl's height
 
-         // to determine the remaining available height for the child items
 
-             itemsHeight -= titleEl.getHeight();
 
-         }
 
-         for (; i < len; i++) {
 
-             items[i].setPadding(itemsHeight);
 
-         }
 
-     },
 
-     // FIX: when flexing we actually don't have enough space as we would
 
-     // typically because of the scrollOffset on the GridView, must reserve this
 
-     publishInnerCtSize: function(ownerContext) {
 
-         var me = this,
 
-             size = ownerContext.state.boxPlan.targetSize,
 
-             cw = ownerContext.peek('contentWidth'),
 
-             view;
 
-         // InnerCt MUST stretch to accommodate all columns so that left/right scrolling is enabled in the header container.
 
-         if ((cw != null) && !me.owner.isHeader) {
 
-             size.width = cw;
 
-             // innerCt must also encompass any vertical scrollbar width if there may be one
 
-             view = me.owner.ownerCt.view;
 
-             if (view.autoScroll || view.overflowY) {
 
-                 size.width += Ext.getScrollbarSize().width;
 
-             }
 
-         }
 
-         return me.callParent(arguments);
 
-     }
 
- });
 
- </pre>
 
- </body>
 
- </html>
 
 
  |