Upgrade to ExtJS 3.0.3 - Released 10/11/2009
[extjs.git] / docs / source / RangeMenu.html
1 <html>
2 <head>
3   <title>The source code</title>
4     <link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />
5     <script type="text/javascript" src="../resources/prettify/prettify.js"></script>
6 </head>
7 <body  onload="prettyPrint();">
8     <pre class="prettyprint lang-js">Ext.ns('Ext.ux.menu');\r
9 \r
10 <div id="cls-Ext.ux.menu.RangeMenu"></div>/** \r
11  * @class Ext.ux.menu.RangeMenu\r
12  * @extends Ext.menu.Menu\r
13  * Custom implementation of Ext.menu.Menu that has preconfigured\r
14  * items for gt, lt, eq.\r
15  * <p><b><u>Example Usage:</u></b></p>\r
16  * <pre><code>    \r
17 \r
18  * </code></pre> \r
19  */\r
20 Ext.ux.menu.RangeMenu = Ext.extend(Ext.menu.Menu, {\r
21 \r
22     constructor : function (config) {\r
23 \r
24         Ext.ux.menu.RangeMenu.superclass.constructor.call(this, config);\r
25 \r
26         this.addEvents(\r
27             <div id="event-Ext.ux.menu.RangeMenu-update"></div>/**\r
28              * @event update\r
29              * Fires when a filter configuration has changed\r
30              * @param {Ext.ux.grid.filter.Filter} this The filter object.\r
31              */\r
32             'update'\r
33         );\r
34       \r
35         this.updateTask = new Ext.util.DelayedTask(this.fireUpdate, this);\r
36     \r
37         var i, len, item, cfg, Cls;\r
38 \r
39         for (i = 0, len = this.menuItems.length; i < len; i++) {\r
40             item = this.menuItems[i];\r
41             if (item !== '-') {\r
42                 // defaults\r
43                 cfg = {\r
44                     itemId: 'range-' + item,\r
45                     enableKeyEvents: true,\r
46                     iconCls: this.iconCls[item] || 'no-icon',\r
47                     listeners: {\r
48                         scope: this,\r
49                         keyup: this.onInputKeyUp\r
50                     }\r
51                 };\r
52                 Ext.apply(\r
53                     cfg,\r
54                     // custom configs\r
55                     Ext.applyIf(this.fields[item] || {}, this.fieldCfg[item]),\r
56                     // configurable defaults\r
57                     this.menuItemCfgs\r
58                 );\r
59                 Cls = cfg.fieldCls || this.fieldCls;\r
60                 item = this.fields[item] = new Cls(cfg);\r
61             }\r
62             this.add(item);\r
63         }\r
64     },\r
65 \r
66     /**\r
67      * @private\r
68      * called by this.updateTask\r
69      */\r
70     fireUpdate : function () {\r
71         this.fireEvent('update', this);\r
72     },\r
73     \r
74     <div id="method-Ext.ux.menu.RangeMenu-getValue"></div>/**\r
75      * Get and return the value of the filter.\r
76      * @return {String} The value of this filter\r
77      */\r
78     getValue : function () {\r
79         var result = {}, key, field;\r
80         for (key in this.fields) {\r
81             field = this.fields[key];\r
82             if (field.isValid() && String(field.getValue()).length > 0) {\r
83                 result[key] = field.getValue();\r
84             }\r
85         }\r
86         return result;\r
87     },\r
88   \r
89     <div id="method-Ext.ux.menu.RangeMenu-setValue"></div>/**\r
90      * Set the value of this menu and fires the 'update' event.\r
91      * @param {Object} data The data to assign to this menu\r
92      */ \r
93     setValue : function (data) {\r
94         var key;\r
95         for (key in this.fields) {\r
96             this.fields[key].setValue(data[key] !== undefined ? data[key] : '');\r
97         }\r
98         this.fireEvent('update', this);\r
99     },\r
100 \r
101     /**  \r
102      * @private\r
103      * Handler method called when there is a keyup event on an input\r
104      * item of this menu.\r
105      */\r
106     onInputKeyUp : function (field, e) {\r
107         var k = e.getKey();\r
108         if (k == e.RETURN && field.isValid()) {\r
109             e.stopEvent();\r
110             this.hide(true);\r
111             return;\r
112         }\r
113         \r
114         if (field == this.fields.eq) {\r
115             if (this.fields.gt) {\r
116                 this.fields.gt.setValue(null);\r
117             }\r
118             if (this.fields.lt) {\r
119                 this.fields.lt.setValue(null);\r
120             }\r
121         }\r
122         else {\r
123             this.fields.eq.setValue(null);\r
124         }\r
125         \r
126         // restart the timer\r
127         this.updateTask.delay(this.updateBuffer);\r
128     }\r
129 });\r
130 </pre>
131 </body>
132 </html>