]> git.proxmox.com Git - extjs.git/blame - extjs/classic/classic/src/grid/filters/filter/Number.js
add extjs 6.0.1 sources
[extjs.git] / extjs / classic / classic / src / grid / filters / filter / Number.js
CommitLineData
6527f429
DM
1/**\r
2 * Filter type for {@link Ext.grid.column.Number number columns}.\r
3 *\r
4 * @example\r
5 * var shows = Ext.create('Ext.data.Store', {\r
6 * fields: ['id','show'],\r
7 * data: [\r
8 * {id: 0, show: 'Battlestar Galactica'},\r
9 * {id: 1, show: 'Doctor Who'},\r
10 * {id: 2, show: 'Farscape'},\r
11 * {id: 3, show: 'Firefly'},\r
12 * {id: 4, show: 'Star Trek'},\r
13 * {id: 5, show: 'Star Wars: Christmas Special'}\r
14 * ]\r
15 * });\r
16 * \r
17 * Ext.create('Ext.grid.Panel', {\r
18 * renderTo: Ext.getBody(),\r
19 * title: 'Sci-Fi Television',\r
20 * height: 250,\r
21 * width: 250,\r
22 * store: shows,\r
23 * plugins: 'gridfilters',\r
24 * columns: [{\r
25 * dataIndex: 'id',\r
26 * text: 'ID',\r
27 * width: 50,\r
28 * filter: 'number' // May also be 'numeric'\r
29 * },{\r
30 * dataIndex: 'show',\r
31 * text: 'Show',\r
32 * flex: 1 \r
33 * }]\r
34 * });\r
35 * \r
36 */\r
37Ext.define('Ext.grid.filters.filter.Number', {\r
38 extend: 'Ext.grid.filters.filter.TriFilter',\r
39 alias: ['grid.filter.number', 'grid.filter.numeric'],\r
40\r
41 uses: ['Ext.form.field.Number'],\r
42\r
43 type: 'number',\r
44\r
45 config: {\r
46 /**\r
47 * @cfg {Object} [fields]\r
48 * Configures field items individually. These properties override those defined\r
49 * by `{@link #itemDefaults}`.\r
50 *\r
51 * Example usage:\r
52 *\r
53 * fields: {\r
54 * // Override itemDefaults for one field:\r
55 * gt: {\r
56 * width: 200\r
57 * }\r
58 *\r
59 * // "lt" and "eq" fields retain all itemDefaults\r
60 * },\r
61 */\r
62 fields: {\r
63 gt: {\r
64 iconCls: Ext.baseCSSPrefix + 'grid-filters-gt',\r
65 margin: '0 0 3px 0'\r
66 },\r
67 lt: {\r
68 iconCls: Ext.baseCSSPrefix + 'grid-filters-lt',\r
69 margin: '0 0 3px 0'\r
70 },\r
71 eq: {\r
72 iconCls: Ext.baseCSSPrefix + 'grid-filters-eq',\r
73 margin: 0\r
74 }\r
75 }\r
76 },\r
77\r
78 //<locale>\r
79 /**\r
80 * @cfg {String} emptyText\r
81 * The empty text to show for each field.\r
82 */\r
83 emptyText: 'Enter Number...',\r
84 //</locale>\r
85\r
86 itemDefaults: {\r
87 xtype: 'numberfield',\r
88 enableKeyEvents: true,\r
89 hideEmptyLabel: false,\r
90 labelSeparator: '',\r
91 labelWidth: 29,\r
92 selectOnFocus: false\r
93 },\r
94\r
95 menuDefaults: {\r
96 // A menu with only form fields needs some body padding. Normally this padding\r
97 // is managed by the items, but we have no normal menu items.\r
98 bodyPadding: 3,\r
99 showSeparator: false\r
100 },\r
101\r
102 createMenu: function () {\r
103 var me = this,\r
104 listeners = {\r
105 scope: me,\r
106 keyup: me.onValueChange,\r
107 spin: {\r
108 fn: me.onInputSpin,\r
109 buffer: 200\r
110 },\r
111 el: {\r
112 click: me.stopFn\r
113 }\r
114 },\r
115 itemDefaults = me.getItemDefaults(),\r
116 menuItems = me.menuItems,\r
117 fields = me.getFields(),\r
118 field, i, len, key, item, cfg;\r
119\r
120 me.callParent();\r
121\r
122 me.fields = {};\r
123\r
124 for (i = 0, len = menuItems.length; i < len; i++) {\r
125 key = menuItems[i];\r
126 if (key !== '-') {\r
127 field = fields[key];\r
128\r
129 cfg = {\r
130 labelClsExtra: Ext.baseCSSPrefix + 'grid-filters-icon ' + field.iconCls\r
131 };\r
132\r
133 if (itemDefaults) {\r
134 Ext.merge(cfg, itemDefaults);\r
135 }\r
136\r
137 Ext.merge(cfg, field);\r
138 cfg.emptyText = cfg.emptyText || me.emptyText;\r
139 delete cfg.iconCls;\r
140\r
141 me.fields[key] = item = me.menu.add(cfg);\r
142\r
143 item.filter = me.filter[key];\r
144 item.filterKey = key;\r
145 item.on(listeners);\r
146 } else {\r
147 me.menu.add(key);\r
148 }\r
149 }\r
150 },\r
151\r
152 getValue: function (field) {\r
153 var value = {};\r
154 value[field.filterKey] = field.getValue();\r
155 return value;\r
156 },\r
157\r
158 /**\r
159 * @private\r
160 * Handler method called when there is a spin event on a NumberField\r
161 * item of this menu.\r
162 */\r
163 onInputSpin: function (field, direction) {\r
164 var value = {};\r
165\r
166 value[field.filterKey] = field.getValue();\r
167\r
168 this.setValue(value);\r
169 },\r
170\r
171 stopFn: function(e) {\r
172 e.stopPropagation();\r
173 }\r
174});\r