3 <title>The source code</title>
\r
4 <link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />
\r
5 <script type="text/javascript" src="../resources/prettify/prettify.js"></script>
\r
7 <body onload="prettyPrint();">
\r
8 <pre class="prettyprint lang-js"><div id="cls-Ext.layout.TableLayout"></div>/**
\r
9 * @class Ext.layout.TableLayout
\r
10 * @extends Ext.layout.ContainerLayout
\r
11 * <p>This layout allows you to easily render content into an HTML table. The total number of columns can be
\r
12 * specified, and rowspan and colspan can be used to create complex layouts within the table.
\r
13 * This class is intended to be extended or created via the layout:'table' {@link Ext.Container#layout} config,
\r
14 * and should generally not need to be created directly via the new keyword.</p>
\r
15 * <p>Note that when creating a layout via config, the layout-specific config properties must be passed in via
\r
16 * the {@link Ext.Container#layoutConfig} object which will then be applied internally to the layout. In the
\r
17 * case of TableLayout, the only valid layout config property is {@link #columns}. However, the items added to a
\r
18 * TableLayout can supply the following table-specific config properties:</p>
\r
20 * <li><b>rowspan</b> Applied to the table cell containing the item.</li>
\r
21 * <li><b>colspan</b> Applied to the table cell containing the item.</li>
\r
22 * <li><b>cellId</b> An id applied to the table cell containing the item.</li>
\r
23 * <li><b>cellCls</b> A CSS class name added to the table cell containing the item.</li>
\r
25 * <p>The basic concept of building up a TableLayout is conceptually very similar to building up a standard
\r
26 * HTML table. You simply add each panel (or "cell") that you want to include along with any span attributes
\r
27 * specified as the special config properties of rowspan and colspan which work exactly like their HTML counterparts.
\r
28 * Rather than explicitly creating and nesting rows and columns as you would in HTML, you simply specify the
\r
29 * total column count in the layoutConfig and start adding panels in their natural order from left to right,
\r
30 * top to bottom. The layout will automatically figure out, based on the column count, rowspans and colspans,
\r
31 * how to position each panel within the table. Just like with HTML tables, your rowspans and colspans must add
\r
32 * up correctly in your overall layout or you'll end up with missing and/or extra cells! Example usage:</p>
\r
34 // This code will generate a layout table that is 3 columns by 2 rows
\r
35 // with some spanning included. The basic layout will be:
\r
36 // +--------+-----------------+
\r
38 // | |--------+--------|
\r
40 // +--------+--------+--------+
\r
41 var table = new Ext.Panel({
\r
42 title: 'Table Layout',
\r
45 // applied to each contained panel
\r
46 bodyStyle:'padding:20px'
\r
49 // The total column count must be specified here
\r
53 html: '<p>Cell A content</p>',
\r
56 html: '<p>Cell B content</p>',
\r
59 html: '<p>Cell C content</p>',
\r
60 cellCls: 'highlight'
\r
62 html: '<p>Cell D content</p>'
\r
67 Ext.layout.TableLayout = Ext.extend(Ext.layout.ContainerLayout, {
\r
68 <div id="cfg-Ext.layout.TableLayout-columns"></div>/**
\r
69 * @cfg {Number} columns
\r
70 * The total number of columns to create in the table for this layout. If not specified, all Components added to
\r
71 * this layout will be rendered into a single row using one column per Component.
\r
75 monitorResize:false,
\r
77 <div id="cfg-Ext.layout.TableLayout-tableAttrs"></div>/**
\r
78 * @cfg {Object} tableAttrs
\r
79 * <p>An object containing properties which are added to the {@link Ext.DomHelper DomHelper} specification
\r
80 * used to create the layout's <tt><table></tt> element. Example:</p><pre><code>
\r
97 setContainer : function(ct){
\r
98 Ext.layout.TableLayout.superclass.setContainer.call(this, ct);
\r
100 this.currentRow = 0;
\r
101 this.currentColumn = 0;
\r
106 onLayout : function(ct, target){
\r
107 var cs = ct.items.items, len = cs.length, c, i;
\r
110 target.addClass('x-table-layout-ct');
\r
112 this.table = target.createChild(
\r
113 Ext.apply({tag:'table', cls:'x-table-layout', cellspacing: 0, cn: {tag: 'tbody'}}, this.tableAttrs), null, true);
\r
115 this.renderAll(ct, target);
\r
119 getRow : function(index){
\r
120 var row = this.table.tBodies[0].childNodes[index];
\r
122 row = document.createElement('tr');
\r
123 this.table.tBodies[0].appendChild(row);
\r
129 getNextCell : function(c){
\r
130 var cell = this.getNextNonSpan(this.currentColumn, this.currentRow);
\r
131 var curCol = this.currentColumn = cell[0], curRow = this.currentRow = cell[1];
\r
132 for(var rowIndex = curRow; rowIndex < curRow + (c.rowspan || 1); rowIndex++){
\r
133 if(!this.cells[rowIndex]){
\r
134 this.cells[rowIndex] = [];
\r
136 for(var colIndex = curCol; colIndex < curCol + (c.colspan || 1); colIndex++){
\r
137 this.cells[rowIndex][colIndex] = true;
\r
140 var td = document.createElement('td');
\r
144 var cls = 'x-table-layout-cell';
\r
146 cls += ' ' + c.cellCls;
\r
148 td.className = cls;
\r
150 td.colSpan = c.colspan;
\r
153 td.rowSpan = c.rowspan;
\r
155 this.getRow(curRow).appendChild(td);
\r
160 getNextNonSpan: function(colIndex, rowIndex){
\r
161 var cols = this.columns;
\r
162 while((cols && colIndex >= cols) || (this.cells[rowIndex] && this.cells[rowIndex][colIndex])) {
\r
163 if(cols && colIndex >= cols){
\r
170 return [colIndex, rowIndex];
\r
174 renderItem : function(c, position, target){
\r
175 if(c && !c.rendered){
\r
176 c.render(this.getNextCell(c));
\r
178 var t = c.getPositionEl ? c.getPositionEl() : c;
\r
179 t.addClass(this.extraCls);
\r
185 isValidParent : function(c, target){
\r
189 <div id="prop-Ext.layout.TableLayout-activeItem"></div>/**
\r
190 * @property activeItem
\r
195 Ext.Container.LAYOUTS['table'] = Ext.layout.TableLayout;</pre>
\r