Upgrade to ExtJS 4.0.0 - Released 04/26/2011
[extjs.git] / docs / source / CheckboxGroup2.html
diff --git a/docs/source/CheckboxGroup2.html b/docs/source/CheckboxGroup2.html
new file mode 100644 (file)
index 0000000..6cc76f8
--- /dev/null
@@ -0,0 +1,140 @@
+<!DOCTYPE html><html><head><title>Sencha Documentation Project</title><link rel="stylesheet" href="../reset.css" type="text/css"><link rel="stylesheet" href="../prettify.css" type="text/css"><link rel="stylesheet" href="../prettify_sa.css" type="text/css"><script type="text/javascript" src="../prettify.js"></script></head><body onload="prettyPrint()"><pre class="prettyprint"><pre><span id='Ext-layout.container.CheckboxGroup'>/**
+</span> * @class Ext.layout.container.CheckboxGroup
+ * @extends Ext.layout.container.Container
+ * &lt;p&gt;This layout implements the column arrangement for {@link Ext.form.CheckboxGroup} and {@link Ext.form.RadioGroup}.
+ * It groups the component's sub-items into columns based on the component's
+ * {@link Ext.form.CheckboxGroup#columns columns} and {@link Ext.form.CheckboxGroup#vertical} config properties.&lt;/p&gt;
+ *
+ */
+Ext.define('Ext.layout.container.CheckboxGroup', {
+    extend: 'Ext.layout.container.Container',
+    alias: ['layout.checkboxgroup'],
+
+
+    onLayout: function() {
+        var numCols = this.getColCount(),
+            shadowCt = this.getShadowCt(),
+            owner = this.owner,
+            items = owner.items,
+            shadowItems = shadowCt.items,
+            numItems = items.length,
+            colIndex = 0,
+            i, numRows;
+
+        // Distribute the items into the appropriate column containers. We add directly to the
+        // containers' items collection rather than calling container.add(), because we need the
+        // checkboxes to maintain their original ownerCt. The distribution is done on each layout
+        // in case items have been added, removed, or reordered.
+
+        shadowItems.each(function(col) {
+            col.items.clear();
+        });
+
+        // If columns=&quot;auto&quot;, then the number of required columns may change as checkboxes are added/removed
+        // from the CheckboxGroup; adjust to match.
+        while (shadowItems.length &gt; numCols) {
+            shadowCt.remove(shadowItems.last());
+        }
+        while (shadowItems.length &lt; numCols) {
+            shadowCt.add({
+                xtype: 'container',
+                cls: owner.groupCls,
+                flex: 1
+            });
+        }
+
+        if (owner.vertical) {
+            numRows = Math.ceil(numItems / numCols);
+            for (i = 0; i &lt; numItems; i++) {
+                if (i &gt; 0 &amp;&amp; i % numRows === 0) {
+                    colIndex++;
+                }
+                shadowItems.getAt(colIndex).items.add(items.getAt(i));
+            }
+        } else {
+            for (i = 0; i &lt; numItems; i++) {
+                colIndex = i % numCols;
+                shadowItems.getAt(colIndex).items.add(items.getAt(i));
+            }
+        }
+
+        if (!shadowCt.rendered) {
+            shadowCt.render(this.getRenderTarget());
+        } else {
+            // Ensure all items are rendered in the correct place in the correct column - this won't
+            // get done by the column containers themselves if their dimensions are not changing.
+            shadowItems.each(function(col) {
+                var layout = col.getLayout();
+                layout.renderItems(layout.getLayoutItems(), layout.getRenderTarget());
+            });
+        }
+
+        shadowCt.doComponentLayout();
+    },
+
+
+    // We don't want to render any items to the owner directly, that gets handled by each column's own layout
+    renderItems: Ext.emptyFn,
+
+
+<span id='Ext-layout.container.CheckboxGroup-method-getShadowCt'>    /**
+</span>     * @private
+     * Creates and returns the shadow hbox container that will be used to arrange the owner's items
+     * into columns.
+     */
+    getShadowCt: function() {
+        var me = this,
+            shadowCt = me.shadowCt,
+            owner, items, item, columns, columnsIsArray, numCols, i;
+
+        if (!shadowCt) {
+            // Create the column containers based on the owner's 'columns' config
+            owner = me.owner;
+            columns = owner.columns;
+            columnsIsArray = Ext.isArray(columns);
+            numCols = me.getColCount();
+            items = [];
+            for(i = 0; i &lt; numCols; i++) {
+                item = {
+                    xtype: 'container',
+                    cls: owner.groupCls
+                };
+                if (columnsIsArray) {
+                    // Array can contain mixture of whole numbers, used as fixed pixel widths, and fractional
+                    // numbers, used as relative flex values.
+                    if (columns[i] &lt; 1) {
+                        item.flex = columns[i];
+                    } else {
+                        item.width = columns[i];
+                    }
+                }
+                else {
+                    // All columns the same width
+                    item.flex = 1;
+                }
+                items.push(item);
+            }
+
+            // Create the shadow container; delay rendering until after items are added to the columns
+            shadowCt = me.shadowCt = Ext.createWidget('container', {
+                layout: 'hbox',
+                items: items,
+                ownerCt: owner
+            });
+        }
+        
+        return shadowCt;
+    },
+
+
+<span id='Ext-layout.container.CheckboxGroup-method-getColCount'>    /**
+</span>     * @private Get the number of columns in the checkbox group
+     */
+    getColCount: function() {
+        var owner = this.owner,
+            colsCfg = owner.columns;
+        return Ext.isArray(colsCfg) ? colsCfg.length : (Ext.isNumber(colsCfg) ? colsCfg : owner.items.length);
+    }
+
+});
+</pre></pre></body></html>
\ No newline at end of file