Upgrade to ExtJS 3.0.0 - Released 07/06/2009
[extjs.git] / docs / source / SplitButton.html
diff --git a/docs/source/SplitButton.html b/docs/source/SplitButton.html
new file mode 100644 (file)
index 0000000..6226262
--- /dev/null
@@ -0,0 +1,127 @@
+<html>\r
+<head>\r
+  <title>The source code</title>\r
+    <link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />\r
+    <script type="text/javascript" src="../resources/prettify/prettify.js"></script>\r
+</head>\r
+<body  onload="prettyPrint();">\r
+    <pre class="prettyprint lang-js"><div id="cls-Ext.SplitButton"></div>/**\r
+ * @class Ext.SplitButton\r
+ * @extends Ext.Button\r
+ * A split button that provides a built-in dropdown arrow that can fire an event separately from the default\r
+ * click event of the button.  Typically this would be used to display a dropdown menu that provides additional\r
+ * options to the primary button action, but any custom handler can provide the arrowclick implementation.  Example usage:\r
+ * <pre><code>\r
+// display a dropdown menu:\r
+new Ext.SplitButton({\r
+       renderTo: 'button-ct', // the container id\r
+       text: 'Options',\r
+       handler: optionsHandler, // handle a click on the button itself\r
+       menu: new Ext.menu.Menu({\r
+        items: [\r
+               // these items will render as dropdown menu items when the arrow is clicked:\r
+               {text: 'Item 1', handler: item1Handler},\r
+               {text: 'Item 2', handler: item2Handler}\r
+        ]\r
+       })\r
+});\r
+\r
+// Instead of showing a menu, you provide any type of custom\r
+// functionality you want when the dropdown arrow is clicked:\r
+new Ext.SplitButton({\r
+       renderTo: 'button-ct',\r
+       text: 'Options',\r
+       handler: optionsHandler,\r
+       arrowHandler: myCustomHandler\r
+});\r
+</code></pre>\r
+ * @cfg {Function} arrowHandler A function called when the arrow button is clicked (can be used instead of click event)\r
+ * @cfg {String} arrowTooltip The title attribute of the arrow\r
+ * @constructor\r
+ * Create a new menu button\r
+ * @param {Object} config The config object\r
+ * @xtype splitbutton\r
+ */\r
+Ext.SplitButton = Ext.extend(Ext.Button, {\r
+       // private\r
+    arrowSelector : 'em',\r
+    split: true,\r
+\r
+    // private\r
+    initComponent : function(){\r
+        Ext.SplitButton.superclass.initComponent.call(this);\r
+        /**\r
+         * @event arrowclick\r
+         * Fires when this button's arrow is clicked\r
+         * @param {MenuButton} this\r
+         * @param {EventObject} e The click event\r
+         */\r
+        this.addEvents("arrowclick");\r
+    },\r
+\r
+    // private\r
+    onRender : function(){\r
+        Ext.SplitButton.superclass.onRender.apply(this, arguments);\r
+        if(this.arrowTooltip){\r
+            this.el.child(this.arrowSelector).dom[this.tooltipType] = this.arrowTooltip;\r
+        }\r
+    },\r
+\r
+    /**\r
+     * Sets this button's arrow click handler.\r
+     * @param {Function} handler The function to call when the arrow is clicked\r
+     * @param {Object} scope (optional) Scope for the function passed above\r
+     */\r
+    setArrowHandler : function(handler, scope){\r
+        this.arrowHandler = handler;\r
+        this.scope = scope;\r
+    },\r
+\r
+    getMenuClass : function(){\r
+        return 'x-btn-split' + (this.arrowAlign == 'bottom' ? '-bottom' : '');\r
+    },\r
+\r
+    isClickOnArrow : function(e){\r
+        return this.arrowAlign != 'bottom' ?\r
+               e.getPageX() > this.el.child(this.buttonSelector).getRegion().right :\r
+               e.getPageY() > this.el.child(this.buttonSelector).getRegion().bottom;\r
+    },\r
+\r
+    // private\r
+    onClick : function(e, t){\r
+        e.preventDefault();\r
+        if(!this.disabled){\r
+            if(this.isClickOnArrow(e)){\r
+                if(this.menu && !this.menu.isVisible() && !this.ignoreNextClick){\r
+                    this.showMenu();\r
+                }\r
+                this.fireEvent("arrowclick", this, e);\r
+                if(this.arrowHandler){\r
+                    this.arrowHandler.call(this.scope || this, this, e);\r
+                }\r
+            }else{\r
+                if(this.enableToggle){\r
+                    this.toggle();\r
+                }\r
+                this.fireEvent("click", this, e);\r
+                if(this.handler){\r
+                    this.handler.call(this.scope || this, this, e);\r
+                }\r
+            }\r
+        }\r
+    },\r
+\r
+    // private\r
+    isMenuTriggerOver : function(e){\r
+        return this.menu && e.target.tagName == 'em';\r
+    },\r
+\r
+    // private\r
+    isMenuTriggerOut : function(e, internal){\r
+        return this.menu && e.target.tagName != 'em';\r
+    }\r
+});\r
+\r
+Ext.reg('splitbutton', Ext.SplitButton);</pre>    \r
+</body>\r
+</html>
\ No newline at end of file