Upgrade to ExtJS 3.0.3 - Released 10/11/2009
[extjs.git] / docs / source / RangeMenu.html
diff --git a/docs/source/RangeMenu.html b/docs/source/RangeMenu.html
new file mode 100644 (file)
index 0000000..b856fdd
--- /dev/null
@@ -0,0 +1,132 @@
+<html>
+<head>
+  <title>The source code</title>
+    <link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />
+    <script type="text/javascript" src="../resources/prettify/prettify.js"></script>
+</head>
+<body  onload="prettyPrint();">
+    <pre class="prettyprint lang-js">Ext.ns('Ext.ux.menu');\r
+\r
+<div id="cls-Ext.ux.menu.RangeMenu"></div>/** \r
+ * @class Ext.ux.menu.RangeMenu\r
+ * @extends Ext.menu.Menu\r
+ * Custom implementation of Ext.menu.Menu that has preconfigured\r
+ * items for gt, lt, eq.\r
+ * <p><b><u>Example Usage:</u></b></p>\r
+ * <pre><code>    \r
+\r
+ * </code></pre> \r
+ */\r
+Ext.ux.menu.RangeMenu = Ext.extend(Ext.menu.Menu, {\r
+\r
+    constructor : function (config) {\r
+\r
+        Ext.ux.menu.RangeMenu.superclass.constructor.call(this, config);\r
+\r
+        this.addEvents(\r
+            <div id="event-Ext.ux.menu.RangeMenu-update"></div>/**\r
+             * @event update\r
+             * Fires when a filter configuration has changed\r
+             * @param {Ext.ux.grid.filter.Filter} this The filter object.\r
+             */\r
+            'update'\r
+        );\r
+      \r
+        this.updateTask = new Ext.util.DelayedTask(this.fireUpdate, this);\r
+    \r
+        var i, len, item, cfg, Cls;\r
+\r
+        for (i = 0, len = this.menuItems.length; i < len; i++) {\r
+            item = this.menuItems[i];\r
+            if (item !== '-') {\r
+                // defaults\r
+                cfg = {\r
+                    itemId: 'range-' + item,\r
+                    enableKeyEvents: true,\r
+                    iconCls: this.iconCls[item] || 'no-icon',\r
+                    listeners: {\r
+                        scope: this,\r
+                        keyup: this.onInputKeyUp\r
+                    }\r
+                };\r
+                Ext.apply(\r
+                    cfg,\r
+                    // custom configs\r
+                    Ext.applyIf(this.fields[item] || {}, this.fieldCfg[item]),\r
+                    // configurable defaults\r
+                    this.menuItemCfgs\r
+                );\r
+                Cls = cfg.fieldCls || this.fieldCls;\r
+                item = this.fields[item] = new Cls(cfg);\r
+            }\r
+            this.add(item);\r
+        }\r
+    },\r
+\r
+    /**\r
+     * @private\r
+     * called by this.updateTask\r
+     */\r
+    fireUpdate : function () {\r
+        this.fireEvent('update', this);\r
+    },\r
+    \r
+    <div id="method-Ext.ux.menu.RangeMenu-getValue"></div>/**\r
+     * Get and return the value of the filter.\r
+     * @return {String} The value of this filter\r
+     */\r
+    getValue : function () {\r
+        var result = {}, key, field;\r
+        for (key in this.fields) {\r
+            field = this.fields[key];\r
+            if (field.isValid() && String(field.getValue()).length > 0) {\r
+                result[key] = field.getValue();\r
+            }\r
+        }\r
+        return result;\r
+    },\r
+  \r
+    <div id="method-Ext.ux.menu.RangeMenu-setValue"></div>/**\r
+     * Set the value of this menu and fires the 'update' event.\r
+     * @param {Object} data The data to assign to this menu\r
+     */        \r
+    setValue : function (data) {\r
+        var key;\r
+        for (key in this.fields) {\r
+            this.fields[key].setValue(data[key] !== undefined ? data[key] : '');\r
+        }\r
+        this.fireEvent('update', this);\r
+    },\r
+\r
+    /**  \r
+     * @private\r
+     * Handler method called when there is a keyup event on an input\r
+     * item of this menu.\r
+     */\r
+    onInputKeyUp : function (field, e) {\r
+        var k = e.getKey();\r
+        if (k == e.RETURN && field.isValid()) {\r
+            e.stopEvent();\r
+            this.hide(true);\r
+            return;\r
+        }\r
+        \r
+        if (field == this.fields.eq) {\r
+            if (this.fields.gt) {\r
+                this.fields.gt.setValue(null);\r
+            }\r
+            if (this.fields.lt) {\r
+                this.fields.lt.setValue(null);\r
+            }\r
+        }\r
+        else {\r
+            this.fields.eq.setValue(null);\r
+        }\r
+        \r
+        // restart the timer\r
+        this.updateTask.delay(this.updateBuffer);\r
+    }\r
+});\r
+</pre>
+</body>
+</html>
\ No newline at end of file