X-Git-Url: http://git.ithinksw.org/extjs.git/blobdiff_plain/0494b8d9b9bb03ab6c22b34dae81261e3cd7e3e6..7a654f8d43fdb43d78b63d90528bed6e86b608cc:/src/container/ButtonGroup.js?ds=sidebyside diff --git a/src/container/ButtonGroup.js b/src/container/ButtonGroup.js new file mode 100644 index 00000000..d1d5736b --- /dev/null +++ b/src/container/ButtonGroup.js @@ -0,0 +1,165 @@ +/** + * @class Ext.container.ButtonGroup + * @extends Ext.panel.Panel + *

Provides a container for arranging a group of related Buttons in a tabular manner.

+ * Example usage: + * {@img Ext.container.ButtonGroup/Ext.container.ButtonGroup.png Ext.container.ButtonGroup component} + *

+    Ext.create('Ext.panel.Panel', {
+        title: 'Panel with ButtonGroup',
+        width: 300,
+        height:200,
+        renderTo: document.body,
+        html: 'HTML Panel Content',
+        tbar: [{
+            xtype: 'buttongroup',
+            columns: 3,
+            title: 'Clipboard',
+            items: [{
+                text: 'Paste',
+                scale: 'large',
+                rowspan: 3,
+                iconCls: 'add',
+                iconAlign: 'top',
+                cls: 'x-btn-as-arrow'
+            },{
+                xtype:'splitbutton',
+                text: 'Menu Button',
+                scale: 'large',
+                rowspan: 3,
+                iconCls: 'add',
+                iconAlign: 'top',
+                arrowAlign:'bottom',
+                menu: [{text: 'Menu Item 1'}]
+            },{
+                xtype:'splitbutton', text: 'Cut', iconCls: 'add16', menu: [{text: 'Cut Menu Item'}]
+            },{
+                text: 'Copy', iconCls: 'add16'
+            },{
+                text: 'Format', iconCls: 'add16'
+            }]
+        }]
+    });
+ * 
+ * @constructor + * Create a new ButtonGroup. + * @param {Object} config The config object + * @xtype buttongroup + */ +Ext.define('Ext.container.ButtonGroup', { + extend: 'Ext.panel.Panel', + alias: 'widget.buttongroup', + alternateClassName: 'Ext.ButtonGroup', + + /** + * @cfg {Number} columns The columns configuration property passed to the + * {@link #layout configured layout manager}. See {@link Ext.layout.container.Table#columns}. + */ + + /** + * @cfg {String} baseCls Defaults to 'x-btn-group'. See {@link Ext.panel.Panel#baseCls}. + */ + baseCls: Ext.baseCSSPrefix + 'btn-group', + + /** + * @cfg {Object} layout Defaults to 'table'. See {@link Ext.container.Container#layout}. + */ + layout: { + type: 'table' + }, + + defaultType: 'button', + + /** + * @cfg {Boolean} frame Defaults to true. See {@link Ext.panel.Panel#frame}. + */ + frame: true, + + frameHeader: false, + + internalDefaults: {removeMode: 'container', hideParent: true}, + + initComponent : function(){ + // Copy the component's columns config to the layout if specified + var me = this, + cols = me.columns; + + me.noTitleCls = me.baseCls + '-notitle'; + if (cols) { + me.layout = Ext.apply({}, {columns: cols}, me.layout); + } + + if (!me.title) { + me.addCls(me.noTitleCls); + } + me.callParent(arguments); + }, + + afterLayout: function() { + var me = this; + + me.callParent(arguments); + + // Pugly hack for a pugly browser: + // If not an explicitly set width, then size the width to match the inner table + if (me.layout.table && (Ext.isIEQuirks || Ext.isIE6) && !me.width) { + var t = me.getTargetEl(); + t.setWidth(me.layout.table.offsetWidth + t.getPadding('lr')); + } + }, + + afterRender: function() { + var me = this; + + //we need to add an addition item in here so the ButtonGroup title is centered + if (me.header) { + me.header.insert(0, { + xtype: 'component', + ui : me.ui, + html : ' ', + flex : 1 + }); + } + + me.callParent(arguments); + }, + + // private + onBeforeAdd: function(component) { + if (component.is('button')) { + component.ui = component.ui + '-toolbar'; + } + this.callParent(arguments); + }, + + //private + applyDefaults: function(c) { + if (!Ext.isString(c)) { + c = this.callParent(arguments); + var d = this.internalDefaults; + if (c.events) { + Ext.applyIf(c.initialConfig, d); + Ext.apply(c, d); + } else { + Ext.applyIf(c, d); + } + } + return c; + } + + /** + * @cfg {Array} tools @hide + */ + /** + * @cfg {Boolean} collapsible @hide + */ + /** + * @cfg {Boolean} collapseMode @hide + */ + /** + * @cfg {Boolean} animCollapse @hide + */ + /** + * @cfg {Boolean} closable @hide + */ +});