provide installation instructions
[extjs.git] / examples / grid-filtering / menu / RangeMenu.js
1 /*\r
2  * Ext JS Library 2.2.1\r
3  * Copyright(c) 2006-2009, Ext JS, LLC.\r
4  * licensing@extjs.com\r
5  * \r
6  * http://extjs.com/license\r
7  */\r
8 \r
9 Ext.menu.RangeMenu = function(config){\r
10         Ext.menu.RangeMenu.superclass.constructor.call(this, config);\r
11   \r
12         this.updateTask = new Ext.util.DelayedTask(this.fireUpdate, this);\r
13 \r
14         var cfg = this.fieldCfg;\r
15         var cls = this.fieldCls;\r
16         var fields = this.fields = Ext.applyIf(this.fields || {}, {\r
17                 'gt': new Ext.menu.EditableItem({\r
18                         icon:  this.icons.gt,\r
19                         editor: new cls(typeof cfg == "object" ? cfg.gt || '' : cfg)\r
20     }),\r
21                 'lt': new Ext.menu.EditableItem({\r
22                         icon:  this.icons.lt,\r
23                         editor: new cls(typeof cfg == "object" ? cfg.lt || '' : cfg)\r
24     }),\r
25                 'eq': new Ext.menu.EditableItem({\r
26                         icon:   this.icons.eq, \r
27                         editor: new cls(typeof cfg == "object" ? cfg.gt || '' : cfg)\r
28     })\r
29         });\r
30         this.add(fields.gt, fields.lt, '-', fields.eq);\r
31         \r
32         for(var key in fields) {\r
33                 fields[key].on('keyup', this.onKeyUp.createDelegate(this, [fields[key]], true), this);\r
34   }\r
35   \r
36         this.addEvents('update');\r
37 };\r
38 \r
39 Ext.extend(Ext.menu.RangeMenu, Ext.menu.Menu, {\r
40         fieldCls:     Ext.form.NumberField,\r
41         fieldCfg:     '',\r
42         updateBuffer: 500,\r
43         icons: {\r
44                 gt: '/img/small_icons/greater_then.png', \r
45                 lt: '/img/small_icons/less_then.png',\r
46                 eq: '/img/small_icons/equals.png'\r
47   },\r
48                 \r
49         fireUpdate: function() {\r
50                 this.fireEvent("update", this);\r
51         },\r
52         \r
53         setValue: function(data) {\r
54                 for(var key in this.fields) {\r
55                         this.fields[key].setValue(data[key] !== undefined ? data[key] : '');\r
56     }\r
57                 this.fireEvent("update", this);\r
58         },\r
59         \r
60         getValue: function() {\r
61                 var result = {};\r
62                 for(var key in this.fields) {\r
63                         var field = this.fields[key];\r
64                         if(field.isValid() && String(field.getValue()).length > 0) { \r
65                                 result[key] = field.getValue();\r
66       }\r
67                 }\r
68                 \r
69                 return result;\r
70         },\r
71   \r
72   onKeyUp: function(event, input, notSure, field) {\r
73     if(event.getKey() == event.ENTER && field.isValid()) {\r
74             this.hide(true);\r
75             return;\r
76           }\r
77         \r
78           if(field == this.fields.eq) {\r
79             this.fields.gt.setValue(null);\r
80             this.fields.lt.setValue(null);\r
81           } else {\r
82             this.fields.eq.setValue(null);\r
83           }\r
84           \r
85           this.updateTask.delay(this.updateBuffer);\r
86   }\r
87 });