Upgrade to ExtJS 3.1.1 - Released 02/08/2010
[extjs.git] / src / widgets / ButtonGroup.js
1 /*!
2  * Ext JS Library 3.1.1
3  * Copyright(c) 2006-2010 Ext JS, LLC
4  * licensing@extjs.com
5  * http://www.extjs.com/license
6  */
7 /**\r
8  * @class Ext.ButtonGroup\r
9  * @extends Ext.Panel\r
10  * Container for a group of buttons. Example usage:\r
11  * <pre><code>\r
12 var p = new Ext.Panel({\r
13     title: 'Panel with Button Group',\r
14     width: 300,\r
15     height:200,\r
16     renderTo: document.body,\r
17     html: 'whatever',\r
18     tbar: [{\r
19         xtype: 'buttongroup',\r
20         {@link #columns}: 3,\r
21         title: 'Clipboard',\r
22         items: [{\r
23             text: 'Paste',\r
24             scale: 'large',\r
25             rowspan: 3, iconCls: 'add',\r
26             iconAlign: 'top',\r
27             cls: 'x-btn-as-arrow'\r
28         },{\r
29             xtype:'splitbutton',\r
30             text: 'Menu Button',\r
31             scale: 'large',\r
32             rowspan: 3,\r
33             iconCls: 'add',\r
34             iconAlign: 'top',\r
35             arrowAlign:'bottom',\r
36             menu: [{text: 'Menu Item 1'}]\r
37         },{\r
38             xtype:'splitbutton', text: 'Cut', iconCls: 'add16', menu: [{text: 'Cut Menu Item'}]\r
39         },{\r
40             text: 'Copy', iconCls: 'add16'\r
41         },{\r
42             text: 'Format', iconCls: 'add16'\r
43         }]\r
44     }]\r
45 });\r
46  * </code></pre>\r
47  * @constructor\r
48  * Create a new ButtonGroup.\r
49  * @param {Object} config The config object\r
50  * @xtype buttongroup\r
51  */\r
52 Ext.ButtonGroup = Ext.extend(Ext.Panel, {\r
53     /**\r
54      * @cfg {Number} columns The <tt>columns</tt> configuration property passed to the\r
55      * {@link #layout configured layout manager}. See {@link Ext.layout.TableLayout#columns}.\r
56      */\r
57     /**\r
58      * @cfg {String} baseCls  Defaults to <tt>'x-btn-group'</tt>.  See {@link Ext.Panel#baseCls}.\r
59      */\r
60     baseCls: 'x-btn-group',\r
61     /**\r
62      * @cfg {String} layout  Defaults to <tt>'table'</tt>.  See {@link Ext.Container#layout}.\r
63      */\r
64     layout:'table',\r
65     defaultType: 'button',\r
66     /**\r
67      * @cfg {Boolean} frame  Defaults to <tt>true</tt>.  See {@link Ext.Panel#frame}.\r
68      */\r
69     frame: true,\r
70     internalDefaults: {removeMode: 'container', hideParent: true},\r
71 \r
72     initComponent : function(){\r
73         this.layoutConfig = this.layoutConfig || {};\r
74         Ext.applyIf(this.layoutConfig, {\r
75             columns : this.columns\r
76         });\r
77         if(!this.title){\r
78             this.addClass('x-btn-group-notitle');\r
79         }\r
80         this.on('afterlayout', this.onAfterLayout, this);\r
81         Ext.ButtonGroup.superclass.initComponent.call(this);\r
82     },\r
83 \r
84     applyDefaults : function(c){\r
85         c = Ext.ButtonGroup.superclass.applyDefaults.call(this, c);\r
86         var d = this.internalDefaults;\r
87         if(c.events){\r
88             Ext.applyIf(c.initialConfig, d);\r
89             Ext.apply(c, d);\r
90         }else{\r
91             Ext.applyIf(c, d);\r
92         }\r
93         return c;\r
94     },\r
95 \r
96     onAfterLayout : function(){\r
97         var bodyWidth = this.body.getFrameWidth('lr') + this.body.dom.firstChild.offsetWidth;\r
98         this.body.setWidth(bodyWidth);\r
99         this.el.setWidth(bodyWidth + this.getFrameWidth());\r
100     }\r
101     /**\r
102      * @cfg {Array} tools  @hide\r
103      */\r
104 });\r
105 \r
106 Ext.reg('buttongroup', Ext.ButtonGroup);\r